零拷贝
在业务场景中,我们的数据会存放在多种空间中,也需要在多种空间中传输来实现系统的功能以及保证系统的安全性.
数据存放的空间有:内核缓冲区,用户空间,磁盘,网络缓冲区.
其中网络缓冲区,磁盘的数据是有设备驱动来实现的.其中设备和内核缓冲区的访问可以使用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发送原语就好.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· DeepSeek在M芯片Mac上本地化部署
· 葡萄城 AI 搜索升级:DeepSeek 加持,客户体验更智能