传统的拷贝过程
流程步骤:
(1)操作系统将数据从磁盘文件中读取到内核空间的页面缓存;
(2)应用程序将数据从内核空间读入用户空间缓冲区;
(3)应用程序将读到数据写回内核空间并放入socket缓冲区;
(4)操作系统将数据从socket缓冲区复制到网卡接口,此时数据才能通过网络发送。
此过程涉及到4次上下文切换以及4次数据的复制并且有2和3复制步骤都是由cpu完成的,但是这些过程中cpu数据完全没有进行变化,仅仅是磁盘数据复制到了网卡的缓冲区,在这种情况下,如果去掉流程2和3,减少用户空间和内核空间之间的切换,虽然减少了数据交换的次数,但是仍然存在数据多次复制的情况。
零拷贝技术
在DMA技术的基础上,可以实现绝对的零拷贝,DMA技术为(Direct Memory Access,直接存储器访问),不需要依赖cpu的大量中断负载,数据文件可以直接绕过CPU在各个层之间传输,外围设备可以直接通过DMA控制器访问内存。通过零拷贝技术,可以减去没有必要的数据复制操作,同时也减少了上下文切换的次数。
可以看出,零拷贝技术只需要将数据从硬盘中将磁盘文件数据复制到页面缓存一次,然后直接将数据才从页面缓存直接发送到网络中,避免了重复复制的操作