零拷贝

1 · · March 31, 2023, 9:22 a.m.
什么是零拷贝?计算机操作时,CPU不需要先将数据从某处内存复制到另一个特定的区域,这种技术通常用于通过网络传输文件时节省CPU周期和内存带宽。零拷贝技术可以减少数据拷贝和共享总线操作的次数,从而提高数据传输的效率;零拷贝技术减少了用户进程地址空间和内核地址空间之间因为上下文切换而带来的开销。并不是不需要拷贝,而是减少不必要的拷贝。应用:Kafka、Netty、RocketMQ等。Linux的I/O机制与DMA操作系统内存空间分为用户态和内核态,用户的应用程序无法直接操作硬件,需要通过内核空间进行操作转换,才能真正操作硬件。因此,应用程序需要与网卡、磁盘等硬件进行数据交互时,就需要在用户态和内核态之间来回复制数据。早期,这些操作由CPU负责,压力很大。DMA(直接内存存取)控制器,接管了数据读写请求,减少CPU的负担。此时,IO读取,涉及两个过程:DMA等待数据准备好,把磁盘数据读取到操作系统内核缓冲区;用户进程,将内核缓冲区的数据copy到用户空间。传统数据传送机制如:读取文件,再用socket发送出去,共2次DMA copy,2次CPU copy,4次上下文切换。用户进程调用read...