跳转至

零拷贝

零拷贝(Zero-copy)是一种计算机输入/输出(I/O)处理技术,它允许数据在不经过用户空间缓冲区的情况下直接在内核空间和网络或其他I/O设备之间传输,减少数据在内存中的拷贝次数,从而提高数据处理效率。

一、传统的数据传输方式(2次DMA拷贝+2次CPU拷贝+4次上下文切换)

在传统的数据传输中,当数据从一个缓冲区(如磁盘或网络)传输到另一个缓冲区(如应用程序的内存),通常需要经过以下步骤:

  1. 从源缓冲区读取数据;
  2. 将数据复制到中间缓冲区;
  3. 从中间缓冲区将数据复制到目标缓冲区。

这种复制操作涉及到多次内存访问和数据复制,对于大量数据的传输会产生额外的开销和延迟。

传统的数据传输方式

第1步:用户进程通过read方法向操作系统发起调用,上下文从用户态转向内核态;

第2步:DMA控制器把数据从硬件中拷贝到读缓冲区;

第3步:CPU把读缓冲区数据拷贝到应用缓冲区,上下文从内核态转为用户态,read返回;

第4步:用户进程通过write方法发起调用,上下文从用户态切换为内核态;

第5步:

第6步:

二、如何实现零拷贝

1. mmap+write(2次DMA拷贝+1次CPU拷贝+4次上下文切换)

2. sendfile(2次DMA拷贝+1次CPU拷贝+2次上下文切换)

参考资料

https://www.bilibili.com/video/BV1WD4y1k7kT