[译] 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
相关推荐
LyraNET的创新之处在于它实现了零拷贝(Zero-Copy)技术,旨在优化这一过程,提高嵌入式设备的网络性能。 零拷贝技术的核心思想是减少数据在内存中的复制次数,尤其是在内核空间与用户空间之间的拷贝。在LyraNET中...
【Zero-Copy技术详解】 Zero-Copy是一种计算机编程技术,主要应用于网络传输和I/O操作,目的是提高数据处理效率,减少CPU的负载和上下文切换次数。在传统的数据传输过程中,数据需要经过多次复制,从硬盘到用户空间...
Linux I/O 原理和 Zero-copy 技术全面揭秘 在现代的计算机系统中,尤其是在网络服务器领域,I/O(输入/输出)已经成为决定系统性能的关键因素。由于大多数网络应用基于客户端-服务端模型,大量的数据交换使得I/O...
零拷贝(Zero-Copy)是一种提升系统性能的技术,它能够减少甚至避免数据在操作系统内核地址空间和用户地址空间之间的复制。在传统的I/O操作中,数据需要从文件系统读入缓冲区,再从缓冲区写入用户空间,最后通过网络...
在ROS2中,零拷贝(Zero-Copy)技术是一种优化数据传输的方法,尤其是在处理大量传感器数据时,可以显著提高系统性能。本文将深入探讨ROS2中的零拷贝通信以及相关的技术。 首先,我们需要理解什么是零拷贝数据传输...
4. 零拷贝(Zero-copy)技术: - 零拷贝技术是指数据在传输过程中避免重复拷贝,从而减少CPU资源消耗和提高数据处理速度。 - 通过零拷贝技术可以避免从网络设备拷贝数据到用户空间的内存中,再从用户空间拷贝到...
总结起来,"j-zerocopy"项目主要探讨了如何在Java环境中利用NIO和内存映射文件等技术实现零拷贝,以提高Socket通信的效率。通过对比传统Socket编程与零拷贝Socket编程,我们可以更好地理解这项技术的优势,并在实际...
**零拷贝(Zero-Copy)**技术是指在数据传输过程中,数据在用户空间和内核空间之间的移动无需经过CPU的拷贝操作。传统的文件传输过程中,数据往往需要经历多次拷贝操作,包括但不限于从磁盘读取数据到内核缓冲区、再...
"理解Netty中的零拷贝(Zero-Copy)机制1"这篇文章除了讲解Netty的核心特性——零拷贝之外,还涉及到Linux和Java的相关知识。 零拷贝技术是一种优化数据传输的方法,它减少了CPU在数据传输过程中的参与,提高了系统...
Netty ByteBuf 的零拷贝(Zero-Copy)理解 Netty 中的零拷贝(Zero-Copy)是指在操作数据时,不需要将数据 buffer 从一个内存区域拷贝到另一个内存区域,这样可以减少 CPU 的负载和内存带宽的占用。 Zero-Copy 通常...
在我的 4 核 8 线程 3.5Ghz i7-3770K 上测试 ASIO 最大化 UDP 发送和接收的能力。 首先,iperf 是这样运行的: A: iperf -s -u -l 65507 B: iperf -c 127.0.0.1 -u -l 65507 -b 1000G Linux 报告最大 UDP 环回吞吐...
标题中的"zero_copy_stream_impl.rar_Zero"暗示了一个关于零拷贝技术在Linux API驱动中的实现。零拷贝(Zero-Copy)是一种优化I/O操作的技术,它的主要目标是减少CPU在处理数据时的内存拷贝操作,从而提高系统效率,...
使用pom.xml中指定的spring boot maven插件,创建Spring Boot可执行jar很简单./mvnw清洁包它会在目标文件夹(target / zerocopy-0.0.1-SNAPSHOT.jar)下生成一个重新打包的jar(可执行jar)。建立docker映像在构建...
protobuf 零拷贝网络流样本 这是使用预分配缓冲区处理流式套接字的 ZeroCopyInputStream 和 ZeroCopyOutputStream 的示例。 如果您有缓冲池或希望使用堆栈缓冲区,这将很有用。 笔记 记录代码被注释掉。...
在Linux API驱动开发中,"zero_copy_stream_unittest.rar_Zero"这个标题暗示了一个与零拷贝(Zero-Copy)技术相关的单元测试。零拷贝是一种优化数据传输的技术,旨在减少CPU在内存到I/O设备之间复制数据时的负担,...
本人用的平台是xilinx, zynqMP,提供的资源是参考的源码,可以实现在一块板子上面自动播放视频。 HDMI v4l2进, HDMI DRM出 刚好在做音视频相关的工作,其他资源会在这段时间上传吧。赚点资源分去下载其他人资源。...
The Need for Aynchronous, ZeroCopy Network I/OUlrich DrepperRed Hat, Inc.The ProblemNetwork hardware changed but the socket API stayed the same Transfer rates bigger (esp ...
### Fast Buffers与Zero-Copy技术在Gigabit/s网络中的应用 #### 一、MPICH架构概述 根据所提供的信息,“Fast Buffers”这一主题主要围绕高性能计算领域中消息传递接口(Message Passing Interface, MPI)的一种...
通过修改Linux设备驱动3rd版本snul1.e并改进Copy-On-Write技术,实现了Linux内核2.6.11版本中的Zero-Copy技术。实验结果证明,对网络设备驱动的深入分析是许多应用的基础,也为实际应用,甚至是军事应用开发提供了...
零拷贝 零拷贝可让您避免中间缓冲区之间的冗余数据拷贝,并减少用户空间和内核空间之间的上下文切换次数。 当您的硬件(磁盘驱动器、网卡、显卡、声卡)支持DMA (直接内存访问)时,理想的零拷贝(零 CPU 拷贝)是...