Zero Copy
Zero Copy
Zero Copy
Linux IO方式
- 轮询
- IO中断
- DMA方式
- 传统IO使用read()和write()系统调用
- 后续以上传文件为例, 从用户态使用read从磁盘读取数据, 使用write将数据写入网卡
IO中断 read
DMA方式
Zero Copy
- 尽可能减少数据拷贝和上下文切换次数(不是真的0次)
- 常见策略
- 用户态直接IO
- 数据库系统使用
- 减少拷贝次数(重要方式)
- mmap + write
- sendfile
- sendfile + DMA gather copy
- splice
- 写时复制
- 读取时无需拷贝, 写时才将数据拷贝到自己的进程空间
- 用户态直接IO
mmap + write
sendfile
sendfile + DMA gather copy
- 不需要在内核态进行copy, 而是通过fd和文件长度等信息, 在内核空间进行映射
- 无法修改文件, 需要硬件支持, 只能copy到socket buf中
- 2次DMA copy + 0次CPU copy + 2次上下文切换

splice
This post is licensed under CC BY 4.0 by the author.




