加载中...

零拷贝(Zero-Copy)指在 I/O 过程中避免 CPU 将数据在内核缓冲区与用户缓冲区之间反复拷贝的一类优化技术。传统的文件发送流程(read 加 write)需要四次上下文切换和四次数据拷贝,在大流量场景下白白消耗 CPU 与内存带宽。
Linux 提供多种零拷贝原语:sendfile 系统调用让数据直接从页缓存送到 socket,配合网卡的 Scatter-Gather DMA 时 CPU 拷贝次数可降为零;mmap 将文件映射进用户地址空间,省去内核到用户的一次拷贝;splice 借助管道在两个文件描述符间移动数据。此外 DMA 本身就是让外设绕过 CPU 直接读写内存的基础机制。
Kafka 将日志分段以 sendfile 直接发往消费者,是其高吞吐的重要原因;Nginx 开启 sendfile 指令加速静态文件服务;Netty 的 FileRegion、RocketMQ 的 mmap 消息文件都属于零拷贝实践。用户态网络栈(如 DPDK)与 RDMA 则把零拷贝推向极致。

登录 后参与讨论
暂无讨论,来发表第一条评论吧