零拷贝(Zero Copy)

一、零拷贝简介

零拷贝指的是,从一个存储区域到另一个存储区域的copy任务没有CPU参与。零拷贝通常用于网络文件传输,以减少CPU消耗和内存带宽占用,减少用户空间(用户可以操作的内存缓存区域)与CPU内核空间(CPU可以操作的内存缓存区域及寄存器)的拷贝过程,减少用户上下文(用户状态环境)与CPU内核上下文(CPU内核状态环境)间的切换,提高系统效率

二、传统拷贝方式

DMA控制器Direct Memory Access,直接内存存取。
ALU算术逻辑运算器

发生4次空间切换(1、4、5、7),发生4次copy(3、4、5、6),其中有2次CPU(4、5)参与。

三、零拷贝方式

Linux系统(CentOS6及其以上版本)对于零拷贝是通过sendfile系统调用实现的

发生2次空间切换(1、6),发生3次copy(3、4、5),其中有0次CPU参与

四、Gather Copy DMA零拷贝方式

由于该拷贝方式是由DMA完成,与系统无关,所以只要保证系统支持sendfile系统调用功能即可。
该方式中没有数据拷贝到socket buffer。取而代之的是只是将kernel buffer中的数据描述信息写到了socket buffer中。数据描述信息包含了两方面的信息:kernel buffer中数据的地址及偏移量

发生2次空间切换(1、6),发生2次copy(3、5),其中有0次CPU参与

五、mmap零拷贝

mmap零拷贝是对零拷贝的改进。当然,若当前主机的DMA支持Gather Copy,mmap同样可以实现Gather Copy DMA的零拷贝。
该方式与零拷贝的唯一区别是,应用程序与内核共享了Kernel buffer。由于是共享,所以应用程序也就可以操作该buffer了。当然,应用程序对于Kernel buffer的操作,就会引发用户空间与内核空间的相互切换

发生4次空间切换(1、6、以及User与Kener共享Kenel buffer这里2次),发生2次copy(3、5),其中有0次CPU参与

  • 11
    点赞
  • 77
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值