第 8 章 · 高吞吐底层原理可视化 Demo

4 次拷贝 vs 2 次拷贝 · 顺序写 vs 随机写 · PageCache 命中率 · 三参数实时计算

1. read+write (4 次拷贝)vs sendfile(2 次拷贝)

开始 看动画。每条「箭头」高亮表示一次数据流动;红色拷贝吃 CPU,蓝色 DMA 不吃 CPU。

传统 read + write(4 次拷贝 + 2 次切换)

用户空间:app buffer
[CPU 拷贝 3] user buffer → socket buffer
[CPU 拷贝 2] PageCache → user buffer
内核空间:PageCache & socket buffer
[DMA 拷贝 1] disk → PageCache
[DMA 拷贝 4] socket buffer → NIC
硬件:磁盘 + 网卡
CPU 拷贝 ×2 DMA 拷贝 ×2 上下文切换 ×2

sendfile(2 次 DMA 拷贝 + 1 次切换)

用户空间:仅触发 sendfile() 调用
(数据不进用户态)
内核空间:PageCache
[DMA 拷贝 1] disk → PageCache
[DMA 拷贝 2] PageCache → NIC(gather)
硬件:磁盘 + 网卡
CPU 拷贝 ×0 DMA 拷贝 ×2 上下文切换 ×1

控制

就绪

对比表

方式DMA 拷贝CPU 拷贝总拷贝上下文切换系统调用
read + write22422
sendfile (pre 2.4)21311
sendfile + DMA gather (2.4+)20211