`
huoyanxueren
  • 浏览: 38524 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论
阅读更多

[译] http://en.wikipedia.org/wiki/Zero-copy

 

"Zero-copy" 用来描述主机的CPU不执行将数据从一个存储区复制到另一个的任务。这经常是在网络分发文件的时候用来节省电力和内存。[1]

 

Principle

各种操作系统上的Zero-copy方式例如设备驱动程序,文件系统,网络协议栈,大大提高了某些应用程序的性能和系统资源利用率。在数据拷贝过到另外一个机器的过程中,允许CPU并行去处理另外的一个任务,性能可以有效地提高。此外, zero-copy 操作减少了用户空间和内核空间的切换时间。让一个cpu去处理大量的数据拷贝,数据拷贝本身是一个简单任务,这是一种极大浪费,如果有其他更简单的系统组件能够代为处理,将能够有效地提高资源利用率。

 

举个例子,读取一个文件,然后通过网络发送。如果文件足够小,并适合放在文件缓存中,传统的方式需要4个数据副本和4个cpu的上下文切换。两个数据拷贝需要用到CPU。如果通过“zero-copy”来发送,cpu上下文切换能减少到2次,CPU的数据拷贝能够减少一半,甚至不用。[1]

 

Zero-copy 对于网络链路的容量接近或者已经超过了CPU的处理能力的高速网络尤其重要。在这种情况下,CPU几乎全花费在了拷贝要传输的数据上,这是个瓶颈,限制了通信的速率只能低于链路容量。行业内的经验,大约一个CPU时钟周期,需要处理一个传入的数据位。

 

附磁盘I/O示例:



 

 

Implementation

zero-copy 技术需要使用基于DMA的复制和通过MMU的内存映射。这些功能需要特定的硬件支持,通常对于内存也有特定的要求。

 

Programmatic access

一些操作系统是通过特定的API来支持zero-copy的。

Linux 通过系统调用,比如sys/socket.h 中的sendfile,sendfile64来支持zero-copy。

Windows 通过TransmitFile API来支持zero-copy。

Java input streams 通过 java.nio.channels.FileChannel's transferTo() 方法来支持zero-copy,但是必须是底层操作系统能够支持zero-copy的前提下。[1]

RDMA (Remote Direct Memory Access) 协议强依赖于zero-copy技术。

 

See also

References

1、^ a b c Efficient data transfer through zero copy by Sathish K. Palaniappan and Pramod B. Nagaraja. September 2008

  • 大小: 9.3 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics