Zero Copy 的肮脏真相:它什么时候反而更慢
sendfile/splice/io_uring 的 zero-copy 路径深度解析与实测。揭示小数据包场景下传统 copy 因 cache locality 反而更快的反直觉真相。
Linux 内核、存储与网络、可观测性、系统架构与大模型基础设施的工程笔记:机制拆解、踩坑复盘与可核对证据,少空谈。
共 4 篇文章 · 返回首页
sendfile/splice/io_uring 的 zero-copy 路径深度解析与实测。揭示小数据包场景下传统 copy 因 cache locality 反而更快的反直觉真相。
数据从磁盘到网卡的传统路径涉及 4 次拷贝和多次上下文切换。本文系统剖析 sendfile、splice、vmsplice、MSG_ZEROCOPY 四种零拷贝技术的内核实现、适用场景与性能差异,并以 Kafka 和 Nginx 为案例分析零拷贝在生产系统中的工程实践。
从 Topic、Partition 到 Log Segment 的 .log/.index/.timeindex 文件布局,讲清 offset 单调性、分区内有序、顺序写与 sendfile 读路径,以及 Kafka 3.x KRaft 模式下元数据与日志目录的分工,为副本与 consumer 语义打底。
一次普通的文件传输在 Linux 内核中要经历 4 次数据拷贝和 4 次上下文切换。sendfile、splice、mmap、io_uring、DPDK 各自用不同的方式缩减这条路径,但每种方案都有自己的使用条件和工程限制。本文从 Linux 内核的数据搬运路径出发,拆解五种零拷贝(Zero-Copy)技术的机制与取舍,结合 Kafka、Nginx、DPDK 的工程实践,讨论什么场景该用、什么场景不该用。