零拷贝初探

零拷贝技术旨在减少数据在内核与用户空间之间的拷贝,提高系统性能。文章介绍了传统拷贝的四次拷贝和多次上下文切换,接着详细讲解了MMAP方式和SendFile方式的零拷贝机制,以及它们各自的优势和限制。SendFile在不需数据修改的情况下,尤其适用于提升服务器如Nginx处理静态资源的效率。
摘要由CSDN通过智能技术生成

零拷贝

什么是零拷贝?

零拷贝技术,就是避免将数据从一块存储拷贝到另外一块存储的技术,从而节省拷贝带来的CPU开销,零拷贝并不是将拷贝操作完全消除掉。

  • 传统拷贝:这个没什么说的,就是平时我们一般都会用到的拷贝方式;
  • MMAP方式的拷贝:当应用程序不需要对数据进行访问时,则可以避免将数据从内核空间拷贝到用户空间;
  • SendFile方式的拷贝:写时拷贝技术,数据不需要提前拷贝,而是当需要修改的时候再进行部分拷贝。
传统拷贝

传统的Linux系统中,标准的I/O接口(例如read,write)都是基于数据拷贝操作的,即是I/O操作会导致数据在内核地址空间的缓冲区和用户地址空间的缓冲区之间进行拷贝,所以标准I/O也被称作缓存I/O。这样做的好处是,如果所请求的数据已经存放在内核的高速缓冲存储器中,那么就可以减少实际的I/O操作,但坏处就是数据拷贝的过程,会导致CPU开销。

DMA(Direct Memory Access):直接存储器访问。DMA是一种无需CPU的参与,让外设和系统内存之间进行双向数据传输的硬件机制。当DMA完成数据的传送之后,使用系统中断提醒CPU,然后CPU就可以高效的处理数据。使用DMA可以使系统CPU从实际的I/O数据传输过程中摆脱出来,从而大大提高系统的吞吐率。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值