零拷贝
零复制(英语:Zero-copy;也译零拷贝)技术是指计算机执行操作时,CPU不需要先将数据从某处内存复制到另一个特定区域。这种技术通常用于通过网络传输文件时节省CPU周期和内存带宽。
传统方式下每个读/写周期都需要复制两次数据和切换两次上下文,而数据的复制都需要依靠CPU。
通过零复制技术完成相同的操作,上下文切换减少到两次,并且不需要CPU复制数据
DMA Direct Memory Access 直接内存访问
传统方式发送文件
read和send()调用
4次上下文切换,4次copy(2次cpu, 2次DMA)
零拷贝发送文件
sendfile()调用
2次上下文切换,3次copy(0次cpu, 3次DMA)
socket Buffer要求是连续的,需要收集整理
当升级硬件,使用Gather Copy DMA
Gather Copy DMA零拷贝
2次上下文切换,2次copy(0次cpu, 2次DMA)
缺点:用户不能对数据进行操作
于是,mmap被引入
mmap拷贝
user与Kernel共享Kernel buffer
中间对数据进行操作
4次上下文切换,2次copy(0次由cpu参与)*