0%

Linux zero copy-零拷贝

目录#

零拷贝#

零拷贝#

就是一种避免 CPU 将数据从一块存储拷贝到另外一块存储的技术

零拷贝类型#

  • mmap()
    <<深入理解计算机系统>>mmap定义为:Linux通过将一个虚拟内存区域与一个磁盘上的对象(object)关联起来,以初始化这个虚拟内存区域的内容,这个过程称为内存映射(memory mapping)。
  • sendfile() -> Java transferTo();

mmap#

  • mmap 内存映射 [4]

  • mmap 内存映射 [5]

  • 利用 mmap 代替 read == mmap + write [1][3]

sendfile [1][3]#

read + write(传统传输方式) [1][3]#

总结 [7]#

系统调用 上下文切换 CPU拷贝 DMA拷贝 硬件依赖 支持任意类型输入/输出描述符
传统方法 read + write 4 2 2
内存映射 mmap + write 4 1 2
sendfile sendfile 2 1 2
sendfile(scatter/gather copy) sendfile 2 0 2
splice splice 2 0 2

参考#

原理

  1. 零拷贝-zero copy ***
  2. Efficient data transfer through zero copy
    sendfile减少了上下文切换次数,transferTo() ***
  3. Zero Copy I: User-Mode Perspective ***
  4. 理解mmap
  5. [原创] 深入剖析mmap-从三个关键问题说起
  6. Linux内存管理 self
  7. 【万字长文】从Linux零拷贝深入了解Linux I/O 腾讯 ***

已失效
100. Linux 中的零拷贝技术,第 1 部分 已失效
101. Linux 中的零拷贝技术,第 2 部分 已失效
102. Linux 中直接 I/O 机制的介绍 已失效 ***