fbpx
维基百科

零复制

零复制(英語:Zero-copy;也译零拷贝)技术是指计算机执行操作时,CPU不需要先将数据从某处内存复制到另一个特定区域。这种技术通常用于通过网络传输文件时节省CPU周期和内存带宽[1]

原理

操作系统某些组件(例如驱动程序文件系统网络协议栈)若采用零复制技术,则能极大地增强了特定应用程序的性能,并更有效地利用系统资源。通过使CPU得以完成其他而非将机器中的数据复制到另一处的任务,性能也得到了增强。另外,零复制操作减少了在用户空间与内核空间之间切换模式的次数。

举例来说,如果要读取一个文件并通过网络发送它,传统方式下每个读/写周期都需要复制两次数据和切换两次上下文,而数据的复制都需要依靠CPU。通过零复制技术完成相同的操作,上下文切换减少到两次,并且不需要CPU复制数据。

零复制协议对于网络链路容量接近或超过CPU处理能力的高速网络尤为重要。在这种网络下,CPU几乎将所有时间都花在复制要传送的数据上,因此将成为使通信速率低于链路容量的瓶颈。

硬件实现

最早的实现为IBM OS/360英语OS/360,其中一个程序可以指示通道子系统英语Channel I/O从一个文件或设备复制数据块到另一处,无需先转移数据。

实现零复制的软件通常依靠基于直接記憶體存取(DMA)的复制,以及通过内存管理单元(MMU)的内存映射。这些功能需要特定硬件的支持,并通常涉及到特定存储器的对齐。

一种较新的方式为使用异构系统架构英语Heterogeneous System Architecture(HSA),便于CPUGPU以及其他处理器传递指针。这需要CPU和GPU使用统一地址空间[2][3]

程序访问

数种操作系统都通过特定API支持文件的零复制。

Linux内核通过各个系统调用支持零复制,例如sys/socket.h的sendfile、sendfile64以及splice英语Splice (system call)。它们部分在POSIX中指定,因此也存在于BSD内核或IBM AIX中,部分则是Linux内核API英语Linux kernel API中独有。

Microsoft Windows通过TransmitFile API支持零复制。

Java输入流可以通过java.nio.channels支持零复制。FileChannel的transferTo()方法也可以支持零复制(如果底层操作系统支持)。[4]

远程直接内存访问(RDMA)协议深度依赖零复制技术。

参见

参考资料

  1. ^ Zero Copy I: User-Mode Perspective in Linux Journal - January 1, 2003. [2017-01-10]. (原始内容于2021-02-25). 
  2. ^ The programmer's guide to the APU galaxy (PDF). [2017-01-10]. (原始内容存档 (PDF)于2013-07-22). 
  3. ^ AMD Outlines HSA Roadmap: Unified Memory for CPU/GPU. 2012-02-02 [2017-01-10]. (原始内容存档于2013-07-22). 
  4. ^ Efficient data transfer through zero copy by Sathish K. Palaniappan and Pramod B. Nagaraja.. [2017-01-10]. (原始内容于2018-08-23). 

零复制, 英語, zero, copy, 也译零拷贝, 技术是指计算机执行操作时, cpu不需要先将数据从某处内存复制到另一个特定区域, 这种技术通常用于通过网络传输文件时节省cpu周期和内存带宽, 目录, 原理, 硬件实现, 程序访问, 参见, 参考资料原理, 编辑操作系统某些组件, 例如驱动程序, 文件系统和网络协议栈, 若采用技术, 则能极大地增强了特定应用程序的性能, 并更有效地利用系统资源, 通过使cpu得以完成其他而非将机器中的数据复制到另一处的任务, 性能也得到了增强, 另外, 操作减少了在用户空间与. 零复制 英語 Zero copy 也译零拷贝 技术是指计算机执行操作时 CPU不需要先将数据从某处内存复制到另一个特定区域 这种技术通常用于通过网络传输文件时节省CPU周期和内存带宽 1 目录 1 原理 2 硬件实现 3 程序访问 4 参见 5 参考资料原理 编辑操作系统某些组件 例如驱动程序 文件系统和网络协议栈 若采用零复制技术 则能极大地增强了特定应用程序的性能 并更有效地利用系统资源 通过使CPU得以完成其他而非将机器中的数据复制到另一处的任务 性能也得到了增强 另外 零复制操作减少了在用户空间与内核空间之间切换模式的次数 举例来说 如果要读取一个文件并通过网络发送它 传统方式下每个读 写周期都需要复制两次数据和切换两次上下文 而数据的复制都需要依靠CPU 通过零复制技术完成相同的操作 上下文切换减少到两次 并且不需要CPU复制数据 零复制协议对于网络链路容量接近或超过CPU处理能力的高速网络尤为重要 在这种网络下 CPU几乎将所有时间都花在复制要传送的数据上 因此将成为使通信速率低于链路容量的瓶颈 硬件实现 编辑最早的实现为IBM OS 360 英语 OS 360 其中一个程序可以指示通道子系统 英语 Channel I O 从一个文件或设备复制数据块到另一处 无需先转移数据 实现零复制的软件通常依靠基于直接記憶體存取 DMA 的复制 以及通过内存管理单元 MMU 的内存映射 这些功能需要特定硬件的支持 并通常涉及到特定存储器的对齐 一种较新的方式为使用异构系统架构 英语 Heterogeneous System Architecture HSA 便于CPU和GPU以及其他处理器传递指针 这需要CPU和GPU使用统一地址空间 2 3 程序访问 编辑数种操作系统都通过特定API支持文件的零复制 Linux内核通过各个系统调用支持零复制 例如sys socket h的sendfile sendfile64以及splice 英语 Splice system call 它们部分在POSIX中指定 因此也存在于BSD内核或IBM AIX中 部分则是Linux内核API 英语 Linux kernel API 中独有 Microsoft Windows通过TransmitFile API支持零复制 Java输入流可以通过java nio channels支持零复制 FileChannel的transferTo 方法也可以支持零复制 如果底层操作系统支持 4 远程直接内存访问 RDMA 协议深度依赖零复制技术 参见 编辑驱动程序 嵌入式系统 InfiniBand 可编程输入输出 Sockets Direct Protocol netsniff ng参考资料 编辑 Zero Copy I User Mode Perspective in Linux Journal January 1 2003 2017 01 10 原始内容存档于2021 02 25 The programmer s guide to the APU galaxy PDF 2017 01 10 原始内容存档 PDF 于2013 07 22 AMD Outlines HSA Roadmap Unified Memory for CPU GPU 2012 02 02 2017 01 10 原始内容存档于2013 07 22 Efficient data transfer through zero copy by Sathish K Palaniappan and Pramod B Nagaraja 2017 01 10 原始内容存档于2018 08 23 取自 https zh wikipedia org w index php title 零复制 amp oldid 71046113, 维基百科,wiki,书籍,书籍,图书馆,

文章

,阅读,下载,免费,免费下载,mp3,视频,mp4,3gp, jpg,jpeg,gif,png,图片,音乐,歌曲,电影,书籍,游戏,游戏。