零拷贝
在业务场景中,我们的数据会存放在多种空间中,也需要在多种空间中传输来实现系统的功能以及保证系统的安全性.
数据存放的空间有:内核缓冲区,用户空间,磁盘,网络缓冲区.
其中网络缓冲区,磁盘的数据是有设备驱动来实现的.其中设备和内核缓冲区的访问可以使用cpu来发送指令也可以适用DMA技术帮助实现数据的传输.
1.最开始的传输方式
1.磁盘 --cpu--> 内核缓冲区
2.内核缓冲区 --cpu --> 用户空间
3.用户空间 --cpu--> socket缓冲区
4.socket缓冲区 --cpu --> 网络缓冲区
2.引入DMA的方式
在第一种方式中,其中将内核态的数据外设进行交互的时候,为了节省cpu的时间开发了DMA管理设备,来负责数据的传输.
这样能有效减少数据的传输.
3.内存映射(mmp原语)
在第一步中,因为数据并不需要在用户态进行处理,这个时候可以让用户态和内核态共享空间.这样能够节省一步将数据从内核态拷贝到用户态这一步.
4. 零拷贝(send原语)
零拷贝技术需要网卡的支持.一种扩展的DMA技术.
可以节省方案三种的从内核缓冲区拷贝到socket缓冲区中.
这样数据的搬运的过程只使用了DMA的原语,cpu只负责给DMA发送原语就好.