Kafka的高效传输-----零拷贝(Zero Copy)
2019-06-16 本文已影响0人
谁说咖啡不苦
kafka使用的零拷贝底层是使用了一个叫DMA(Direct Memory Access)的技术来实现的。传统上,我们的一个一般是有如下几个步骤:
- 读取内容,将内容加载到内核的状态下的Buffer中
- CPU控制将内核模式数据复制到用户模式下
- 将用户模式的数据,复制到内核模式的Socket Buffer中
- 将内核模式下的Socket Buffer的数据复制到网卡设备中传输
而使用了零拷贝之后,省去了和用户态的复制数据交互,省去了两个过程。
Zero Copy
关于DMA技术
DMA是指外部设备不通过CPU而直接与系统内存交换数据的接口技术。要把外设的数据读入内存或把内存的数据传送到外设,一般都要通过CPU控制完成,如CPU程序查询或中断方式。利用中断进行数据传送,可以大大提高CPU的利用率。 但是采用中断传送有它的缺点,对于一个高速I/O设备,以及批量交换数据的情况,只能采用DMA方式,才能解决效率和速度问题。DMA在外设与内存间直接进行数据交换,而不通过CPU,这样数据传送的速度就取决于存储器和外设的工作速度。