零拷贝问题

零拷贝:

定义:避免cpu将数据从一块存储空间拷贝到另一个存储空间的技术。通常用于网络文件传输 以减少cpu消耗和内存带宽的占用 ,减少用户空间(用户可操作的内存缓存区域)和cpu内核空间(cpu内核可操作的内存缓存和寄存器缓存)的拷贝过程,减少用户上下文和cpu内核上下文的切换,让cpu解脱出来可以做别的是事情,提高系统效率;通过DMA的方式(直接访问内存)

1.传统的拷贝过程(以从硬盘读取数据并发送为例)首先在用户空间切换到内核空间 内核调用read方法 然后内核会发起读取数据的请求 然后硬盘在DMA的控制下将数据拷贝到内核空间的内核缓存 然后内核空间要切换到用户空间 在cpu的控制下将数据拷贝到用户空间的用户缓存 用户空间在切换到内核空间 内核调用send方法 在cpu的控制下将数据copy内核空间的socket缓存 然后DMA的控制下拷贝到协议引擎 最后 需要内核切换到用空间 send方法执行成功响应。这里一共经历了四次切换 四次拷贝 两次cpu参与的拷贝

2.对于零拷贝技术 他没有cpu的拷贝 他直接将内核空间的内核缓存中的数据在DMA的控制下将数剧拷贝到了socket缓存 这里一共经历了两次上下文切换 还有两次拷贝 没有cpu参与

3因为都在内核空间考虑到没有必要要进行拷贝 所以没有将数据拷贝到socket缓存 而是将数据描述信息写入到缓冲中 那么拷贝数据时只需要同个数据描述信息到内核缓存里面取就可以了两次上下文切换 一次拷贝。(Gather copy)

3.上一种方法只是用于没有对数据进行任何操作 如果需要对数据进行一些操作还是需要到用户空间 于是采用mmap这种方法使用户和内核共享一块内核缓存 这样不需要拷贝 也可以对数据进行操作 但是这种方法增加了两次上下文切换 copy仍为1次。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值