零拷贝技术

文章探讨了非零拷贝与零拷贝技术的区别,前者涉及三次数据拷贝,后者仅两次,通过DMA减少CPU干预。DMA技术通过直接存储器访问优化数据传输,尤其在大容量文件传输中显著提高效率。零拷贝技术在sendfile系统调用中实现,只进行两次数据拷贝,显著降低上下文切换和CPU负载。

以读取磁盘并发送数据为例

非零拷贝技术

读取磁盘并发送数据,非零拷贝技术需要发生三次数据拷贝(磁盘 -> 应用程序内存 -> 内核缓冲区 -> 网络协议栈缓冲区),CPU参与了所有数据的搬运过程。

零拷贝技术

读取磁盘并发送数据,零拷贝技术只进行了两次数据拷贝(磁盘——>内核缓冲区——>网卡),全程没有通过 CPU 来搬运数据,所有的数据都是通过DMA来进行传输的。这样就减少了上下文切换以及CPU的拷贝时间,从而提高了文件传输的性能。

零拷贝,指整个过程 CPU 零参与。

核心技术

传统的CPU存取数据的方式是:当需要从外设获取数据时,CPU首先将外设数据加载到内存中(因为内存的速度最接近CPU的处理速度),然后检查 cache 是否命中,如果命中则直接返回数据;如果没有命中,则需要继续从内存中获取数据。这个过程会占用大量的 CPU 时间,尤其是在大量数据传输的情况下。

DMA,全称 Direct Memory Access,即直接存储器访问。它是一种高速数据传输操作,能在 DMA 控制器的控制下实现存储器与外设、外设与外设之间的直接数据交换(如磁盘与网卡),整个过程中不需要通过 CPU。

DMA技术的诞生是为了解决 CPU 在数据传输过程中的瓶颈问题。传统的 IO 工作方式中,从硬盘读取数据,然后再通过网卡向外发送,需要进行多次上下文切换和数据拷贝,其中至少两次是由 CPU 完成的。这种方式大大降低了数据传输的效率。为了解决这个问题,DMA 技术应运而生,它让实际的数据传输工作由 DMA 控制器来完成,从而释放了 CPU 的资源。

具体来说,DMA 控制器是一种硬件电路,它可以在 CPU 的主程序执行过程中,接受外设发出的中断请求,暂时停止主程序的执行,转而去执行与数据传输相关的处理程序,从而实现数据的快速传输。例如,在零拷贝技术中,就利用了 DMA 技术来提高文件传输的性能。在这个过程中,只有一个 sendfile 系统调用导致的2次用户态与内核态的上下文切换,只进行了2次数据拷贝(磁盘——>内核缓冲区——>网卡),全程没有通过 CPU 来搬运数据,所有的数据都是通过 DMA 来进行传输的。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值