news 2026/7/20 21:46:58

Linux 零拷贝的代价:sendfile/splice/MSG_ZEROCOPY 在小包场景的性能拐点与决策

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Linux 零拷贝的代价:sendfile/splice/MSG_ZEROCOPY 在小包场景的性能拐点与决策

10KB 以下的包开 MSG_ZEROCOPY,页固定和 completion notification 的开销会把你省掉的那次 memcpy 全部吃回去,甚至倒亏。splice 在小包场景同样如此——pipe buffer 的分配与引用计数操作,在 payload 不够大时就是净负担。这篇文章拆三种零拷贝机制各自绕过了哪次拷贝、代价结构长什么样,然后用实验数据画出收益曲线的拐点,并给出一张「包大小 × 发送频率 → 是否开零拷贝」的决策矩阵。


传统发送路径:四次拷贝,两次上下文切换

在讨论「零拷贝」之前,必须先弄清楚它省的是哪一次拷贝。传统路径用read()+write()把文件数据发到网络,数据在内存里走了四趟:

┌──────────────┐ │ 用户进程 │ │ user buffer │ └──────┬───────┘ │ ② CPU copy (page cache → user buffer) │ ③ CPU copy (user buffer → socket buffer) ┌──────┴───────┐ │ 内核空间 │ │ page cache │──① DMA read (disk → page cache) │ socket buf │──④ DMA write (socket buf → NIC) └──────────────┘

四次数据搬运里,① 和 ④ 是 DMA,CPU 不参与;真正烧 CPU 的是 ②

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/20 21:45:36

深入AM275x GPIO中断与I2C协议:寄存器级配置与实战调试指南

1. 项目概述与核心价值在嵌入式系统开发中,通用输入输出(GPIO)和I2C总线是两种最基础、最核心的硬件接口技术。前者是微控制器感知和控制物理世界的“手脚”,后者则是连接各类外设芯片的“神经网络”。很多开发者,尤其…

作者头像 李华
网站建设 2026/7/20 21:40:02

从“药学人窒息13天”解析学习状态Vlog的创作逻辑与情绪共鸣

1. 先搞清楚“药学人的窒息13天”到底在说什么如果你在社交媒体上刷到“药学人的窒息13天”或者“美咖脑袋中字”这类标题,第一反应可能是某个药学专业的搞笑视频或学习Vlog。但点进去看,内容往往是一段快节奏、高密度的剪辑,配上“干饭→背书…

作者头像 李华
网站建设 2026/7/20 21:36:12

飞书机器人替代短信验证码的完整实现方案

1. 为什么需要替代短信认证?短信验证码作为身份验证手段已经存在多年,但它的缺点越来越明显。首先是成本问题,每条短信验证码的发送成本在0.03-0.1元不等,对于日活用户量大的应用来说,这笔支出相当可观。其次是到达率问…

作者头像 李华
网站建设 2026/7/20 21:34:03

龙芯LoongArch架构解析与开发实践

1. 龙芯与LoongArch架构概述 龙芯中科作为国内自主CPU研发的代表企业,其最新推出的LoongArch指令集架构标志着中国在处理器架构领域的重大突破。这套完全自主设计的RISC架构,既不同于传统的MIPS,也与主流的ARM、x86架构有着本质区别。我在实际…

作者头像 李华