摘要

  • Eric Dumazet 目前是 Linux 常规网络、TCP 和 socket 的维护者,并且是 Netdev Foundation 技术委员会成员。这些职责与其他维护者和审核者共同承担:意味着重大的集成责任,而不是对网络栈的个人控制。
  • 他署名最清晰的贡献是 TCP Small Queues,于 2012 年引入,目的是防止单个 TCP 流在传输层以下的队列中积压过多数据。通过将 socket 的本地信用与数据包完成相关联,TSQ 降低了发送方的延迟和内存压力,但并未消除路径上的所有队列。
  • 他后来在sch_fq和内部 pacing 上的工作将发送时机变成了明确控制。公平队列分离流,pacing 将数据包按时间分布。这些组件服务于多种拥塞算法,包括使用 BBR 的环境,但 BBR 有自己的作者和历史。
  • 他最近的工作将结构设计、缓存行流量和每 socket 状态与大规模服务器集群的效率联系起来。结论是,Linux 网络也是 CPU、内存、队列深度和时间的核算。经济影响可能是实质性的,但公开证据不允许给出具体金额或承诺所有系统都获得相同结果。

一个快速的服务器仍可能在自己的数据包后面浪费时间

故事始于发送队列内部。应用程序已写入数据,TCP 认为可以发送更多,内核已将其交给较低层。从上层看数据似乎已经发出,但它们可能仍在同一台机器上等待。链路保持忙碌,问题被隐藏。交互式请求在大量传输后面等待,缓冲区占用内存,“在途数据”的概念与实际本地积压不再一致。TCP Small Queues 通过限制每个 socket 在 TCP 之下可以放置的数据量,并在硬件完成实际工作时返还发送许可,改变了这种关系。

公开记录解释工程,避免编造传记

最佳证据来自内核本身:MAINTAINERS、补丁讨论、文档、会议和公开评审。这些记录支撑他在网络、TCP 和 socket 方面的持续工作,他通过维护者邮箱可见的 Google 关联,以及他在 Netdev Foundation 的职位。这些记录并未提供完整传记、当前经过验证的公司头衔、补丁总数或时间分配。用看似合理的细节填补这些空白是不够严谨的。因此,本档案聚焦于可观察的机制和决策。Dumazet 是一位承担技术责任的工程师,其工作只有在其他人评审、修改、测试和部署后才成为基础设施。

维护者身份使他接近决策,而非凌驾于社区之上

截至 2026 年 8 月 4 日,Linux 记录将他列入常规网络、TCP 和 socket 维护者。维护者可以要求重新设计接口、拒绝不合理的维护负担、应用已接受的更改,并在主线中代表子系统。同一来源显示权力共享。David S. Miller、Jakub Kicinski 和 Paolo Abeni 出现在常规网络维护中;Neal Cardwell 共享 TCP 维护,其他审核者按主题参与。补丁还要经过架构、驱动、安全、测试、稳定分支和最终内核流程。Dumazet 的影响力之所以显著,是因为他在这一控制网络中运作。

连接增长后,Linux 成为经济基础设施

在一台小机器上,每个 socket 多几个字节或一次缓存未命中几乎察觉不到。在拥有数十万连接的服务器上,成本成倍增长,足以与应用、内存和能源竞争。“服务器经济学”并不意味着存在公开的节省金额。它描述的是服务器集群的后果:能容纳多少连接、还剩下多少 CPU 用于服务、网络占用多少内存、本地队列多少次突破延迟目标。发行版和运营商选择内核版本、qdisc、拥塞控制和网卡。Dumazet 不控制这些决策;他改变的是共同起点。

熟悉的 TCP 工作隐藏着非常复杂的核算系统

TCP 提供可靠流,但必须决定有多少字节可以保持未确认、何时重传、如何计费内存、如何排序数据包,以及如何在数千个 socket 之间共享 CPU 和队列。一种实现可以正确但性能很差:本地积压过多、突发、共享锁或浪费缓存的结构。Dumazet 作品中的共同主线是核算。字节计入 socket,完成事件返还信用,发送时间被计算,热字段与冷字段分离。目标是使用必要的资源,而不在主机内部构建第二个隐藏网络。

在 TCP Small Queues 之前,发送方可能建立起自己不再控制的积压

在 TSQ 之前,TCP 可以将大量流量交给 qdisc 和驱动。拥塞窗口可能是合理的,但传输层之下仍可能有一条很长的本地队列。当出现紧急流时,应用已无法撤回这些数据。这种积压削弱了反馈:TCP 看到来自路径的确认,但部分数据甚至尚未离开主机。它还消耗内存,尤其是许多流重复这一模式时。需要在保持吞吐量的同时,不允许每个 socket 将较低层当作无限存储。

2012 年的 TSQ 补丁系列将本地队列预算还给了 socket

2012 年的补丁按 socket 限制了 TCP 之下排队的数据量。当本地信用用完时,socket 停止发送;数据包完成后,它重新获得发送能力。思路很简单:统计本地字节,并把完成视为进展证明。控制权回到了了解该流的传输层。不再需要预先投入大批数据来保持链路忙碌。TSQ 的重要性恰恰在于,不了解该机制的应用无需修改代码就获得了更自律的行为。

数据包完成成为主机内部的有用信号

完成可能看起来只是清理。TSQ 将其转化为信息:较低路径的一部分前进了一步,socket 可以发送更多。这种本地反馈补充了远端确认。一个描述网络中的进展;另一个描述 TCP 之下的进展。qdisc、驱动和网卡的统计提供其他部分。任何单一信号都不够。TSQ 使用其中一种来控制本地过量,而不取代端到端拥塞控制。

TSQ 减少了 bufferbloat 的一个来源,而不是路径上的所有队列

TSQ 没有消除 bufferbloat。它作用于 TCP 之下的发送方积压。qdisc、驱动、网卡、接入、路由器、交换机和接收方中的队列仍然存在。更有用的说法更精确:TSQ 降低了一个 socket 制造过大隐藏队列的能力。它可以降低延迟和内存占用,并使 TCP 状态更接近设备进展。它不能替代主动队列管理、合理配置或端到端拥塞控制。

阈值、卸载和负载决定 TSQ 的帮助程度

结果取决于限制、数据包大小、qdisc、硬件队列、TSO 和流量组合。交互式服务和大量复制对 TSQ 的反应不同。实现也在 2012 年后发生变化。其他开发人员调整了限制并修复了交互问题。TSQ 的概念作者可以归于 Dumazet,但不能把当前机制描述为冻结的、完全属于他的作品。

sch_fq分离流并将时间引入调度器

2013 年,Dumazet 发布了sch_fq调度器。它按流维护状态,并维护按时间排序的结构,以便按目标时间释放数据包。新流可以很快得到服务,而被 pacing 的流则等待自己轮次。它解决了两个问题:防止大量传输垄断本地队列,并为内核提供尊重发送时间的位置。它并不保证应用之间平等;它提供了更自律的策略和对 pacing 的实际支持。

公平队列是一种策略,不是平等结果的承诺

“公平”听起来可能比实际更绝对。在队列中分离流并不能使应用性能相等。数据包大小、路径、接收方、拥塞控制、卸载和连接数仍然重要。甚至流的身份本身就是一个决定:一个应用可以打开许多连接,另一个只打开一个。sch_fq限制了本地支配,但它并不解决用户或公司之间的公平。对运营商来说,它是一种仲裁工具,而非普遍保证。

Pacing 将速率估计转换为发送时刻序列

算法可以决定正确的速率,却仍以突发形式释放数据。平均值保持不变,但队列遭受峰值冲击。Pacing 将数据包按时间分布。它可以稳定队列、改善共存,并更好地表达拥塞模型。实现需要一致的 timestamps、timers、qdisc、分段和网卡。软件速率只有在转化为链路上的真实时间时才有效。

Pacing 与拥塞控制解决不同部分

拥塞控制决定使用路径的多少;pacing 决定允许的数据何时发出。好的模型可能被突发毁掉,而完美的 pacing 可能执行错误的速率。Dumazet 的基础设施允许多种算法在时间上表达速率。每个模型的作者属于其设计者,即使依赖该基础设施。

BBR 使用 pacing,但有自己的作者和演进

BBR 常因依赖 pacing 和 Google 环境而与 Dumazet 关联。这并不能使他成为唯一发明者。BBR 有自己的作者、模型和版本。Dumazet 的贡献是基础性的:队列、pacing、测量和 socket 使后续算法得以部署。这种描述承认他的重要性,并将荣誉保留给 Neal Cardwell 和其他拥塞控制作者。

TSO 节省 CPU,也可能重建 pacing 试图避免的突发

TCP 分段卸载允许将大段交给网卡,由网卡稍后拆分。它大幅降低了每个数据包的成本,但把硬件插在了时间决策和实际发送之间。如果分段作为整体发出,网卡可能产生突发。TSQ、qdisc、TSO、驱动和硬件必须作为一个系统对待。如果 CPU 节省不与流量整形协调,可能恶化延迟。

Quantum、timestamps 和网卡行为必须描述同一现实

内核使用 quantum、timer 分辨率、timestamps、卸载单元和物理队列。较大的 quantum 产生突发;较小的 quantum 消耗 CPU;以不同粒度解释的网卡会改变输出。因此 qdisc 是容量规划的一部分。开发人员必须测量整个路径,只提拥塞控制或链路速度的基准测试会遗漏系统的大部分。

TCP 内部 pacing 减少了对特定 qdisc 的依赖

2017 年,Dumazet 发布了 TCP 内部 pacing。传输层获得了更多按自身速率和 timers 控制流量的能力,而无需完全依赖特定队列规则。qdisc 对于排序和策略仍然重要。逻辑更接近拥有意图的子系统,但最终输出仍分布在 TCP、调度器、驱动和网卡之间。这是分层演进,而不是干净替代。

队列规则仍是一项具有实际后果的运营决策

Linux 为不同目标提供 qdisc。sch_fq有利于 pacing;FQ-CoDel 结合流分离与主动队列管理。它们并不相同。默认值因发行版和环境而异。云镜像、设备和容器主机可能选择不同配置,硬件也可能改变执行方式。上游提供机制;运营商决定它们是否成为实际服务行为。

每个 socket 多占几个字节就会成为服务器集群的限制

每个连接维护序列号、timers、拥塞状态、队列和计数器。在大规模下,每个字节成倍增加,每个高频字段占用缓存。降低每 socket 内存可以提高密度;改进布局可以减少缓存未命中和 CPU 之间的缓存一致性流量。这是通往服务器经济学最坚实的桥梁,但不能据此计算通用节省金额或对个人工作的估值。

当每个数据包都触及一条缓存行时,缓存行就成为基础设施

处理器移动整条缓存行,而不是单个字段。热数据与冷字段相邻,导致无用的字节被搬移;两个 CPU 修改同一行会产生一致性流量,即使它们操作不同值。Dumazet 最近的工作采用了这种物理视角。分离热字段和冷字段可以减少随数据包和 socket 增长的内存流量。收益取决于处理器和负载,因此某个服务器集群的画像不能直接变成普遍规律。

2024 年关于结构的工作展示了成熟的性能工程阶段

2024 年的演讲从剖析开始:哪些字段是热的、哪些行被移动、哪些结构主导内存。工具可以建议重新组织,但不能替代对对齐、锁、兼容性和维护性的审查。在成熟的基础设施中,大收益可能来自避免一次未命中或移动一个字段,而不是新算法。这不如拥塞标记显眼,却决定实际性能。

超大规模画像是有力证据,也是不完整的公开科学

大型运营商看到的群体和硬件难以复现。他们可以发现实验室中不出现的成本。Dumazet 与 Google 的关联使他处于这一环境中。部分负载和数据仍是私有的。一场演讲可以展示方法和结果,而不提供所有输入。解决办法不是抛弃证据,而是限制其适用范围,并将更多真实案例转化为公开测试和 CI。

锁和接收队列属于同一个资源故事

虽然本档案的主轴是发送,但 Dumazet 的轨迹还包括 socket 和接收。入站数据包需要轮询、内存、分类、队列和跨 CPU 交付。在高速度下,锁和共享状态成为成本。Linux 通过移动工作、批量操作和减少争用来降低这一成本。原则相同:使用保证正确性所必需的协调,而不让核算吞掉服务。

批处理提高吞吐量,同时改变延迟和公平共享

将数据包或完成事件分组可以摊销锁、调用和缓存。NAPI、驱动和卸载都依赖这一点。但批次会等待,并可能以突发形式到达。大批次改善摊销但也增加等待或支配。TSQ、公平队列和 pacing 并不拒绝批处理;它们限制批处理,以保留反馈和延迟。

TCP 性能来自可能相互抵消的层次

算法定义意图;TCP 创建数据包;TSQ 限制积压;qdisc 排序;TSO 聚合;驱动映射;网卡发送;网络添加队列和丢失。精确的 pacing 可能被粗粒度分段抵消;低延迟 qdisc 可能被过多的入队抵消;紧凑布局可能被新锁抵消。Dumazet 的重要性在于处理这些接缝,改善已安装的路径,而不是与之分离。

公开评审将本地优化转化为共享基础设施

改进始于一个声明:更低的延迟、内存或 CPU。要进入 Linux,它必须经受 netdev 的考验:方法论、通用接口、罕见架构、测试和未来成本。维护者可以拆分批、拒绝供应商抽象或推迟更改。这比私有补丁慢,也更持久。Dumazet 的权威包括判断某方案不仅今天是否有效,还包括 Linux 能否在未来多年维持它。

net与net-next区分紧急修复与未来开发

修复通常进入net;新功能进入net-next。这种分离避免将紧急维护与未来版本的重构混在一起。分类需要判断。修复可能改变行为,功能可能揭示旧缺陷。维护者拆分系列,使风险明确,并防止商业日期取代技术准备。

评审、拒绝和重新设计不出现在 commit 计数器中

commit 衡量可见作者身份,但不衡量迫使接口重新设计的那句话,也不衡量避免多年负担的那次拒绝。应用补丁意味着承担集成,而不是发明其思想。本档案将已归属的机制与管理职责结合起来。TSQ、sch_fq、pacing 和布局都很清晰,但并未穷尽数十年的评审,也不把所有集成变更变成个人作品。

测试降低风险,但无法覆盖 Linux 将运行的所有机器

构建、selftests、KUnit、syzbot、驱动实验室和下游部署会发现缺陷,但无法覆盖所有 CPU、网卡、qdisc 和负载。有利于超大规模的更改可能损害罕见设备。维护者仍然需要经验、兼容性和回滚能力。测试强化治理,但不能消除判断。

稳定分支的移植需要主干合并后的又一次决策

主线补丁不会自动进入所有分支。稳定分支要求真实、范围明确且风险低的修复。发行版还会再做一次决策。性能更改可能依赖旧分支中缺失的周边代码。影响分阶段到来:上游、稳定分支、发行版、云和配置。没有人控制整条链。

当前 TCP 和 socket 的职责被有意分散

MAINTAINERS将负担分配给 Dumazet、Neal Cardwell 以及其他维护者和审核者。这减少了对单个人的依赖,并组合了拥塞、socket、驱动和测试方面的知识。多元化要求明确的所有权。重叠可能导致所有人都等别人时出现空缺。健康的继任分散权威,并保留决策背后的原因,而不仅仅是文件中的名字。

Netdev Foundation 可以提供资金而不成为合并权威

该基金会隶属于 Linux Foundation,支持 CI、工具、差旅和研究。Dumazet 是其 TSC 成员。资助不保证补丁被接受。这种区分是健康的:维护网络需要金钱和时间,但上游合法性仍来自公开证据。资金应增强决策能力,而不是购买例外。

与 Google 的关联带来能力,但不拥有 Linux 的 TCP

Google 邮箱证明关联,而非完整头衔。超大规模公司可以资助人才、硬件和评审,然后惠及整个 Linux。不对称之处在于其负载和数据并不完全公开。开放评审弥补了这一点:补丁必须通用,并且能在 Google 之外被接受。公司提供时间和证据,但不拥有网络栈。

下游运营商决定改进是否改变其服务

发行版选择内核;云选择 qdisc 和拥塞控制;设备选择版本;网卡厂商选择能力;应用创造流量。没有 TSQ 或sch_fq使用情况的完整普查。机制可能已编译但未激活,或默认激活但用户无感知。Dumazet 的影响广泛但间接:他改变常见选项;每个运营商将其转化为体验。

用户态网络栈竞争专门负载,而非 Linux 的全部功能

DPDK、VPP 和专有栈可以绕过内核部分实现高速率,代价是专用核心、大页和另一种运营模式。Linux 集成 socket、安全、命名空间、可观测性和驱动。Dumazet 的工作降低了通用路径的成本,并不声称它对一切都完美。绕过留给特定用途;Linux 仍是大多数场景的基础。

Linux 仍是默认选择,因为集成比原始速度更有价值

网络栈必须快速、兼容、安全、可观测且可维护。隔离路径可能提供更高的每秒数据包数,却带来运营和支持成本。Linux 应用通过普通 socket 继承 TSQ、pacing 和核算。这种不可见性是优势之一:即使用户不知道作者名字,收益仍然存在。

更快的主机不能证明网络路径更好

改善本地队列不能解决拥塞接入、慢接收方或丢包路由器。TSQ 和 pacing 治理发送方,而非整条路径。它们可以减少一个延迟来源,使流量更规律。它们不保证应用结果。端到端性能仍取决于应用、接收方、路径和配置。

一个基准测试不能代表每台服务器、每块网卡和每种负载

数据包大小、连接数、CPU、缓存、网卡、卸载、qdisc、timers、内核和负载都会改变结果。Google 的画像可以发现真实成本,却不能预测其他服务器集群中的百分比。好信息保留条件。Dumazet 的演讲是可归属的运营证据;公开测试和独立测量是推广所必需的。

继任是技术问题,因为大部分设计存在于记忆中

奇怪的限制可能源于旧网卡、仍被使用的 API 或被遗忘的回归。代码并不总能解释原因。资深维护者承载着这些背景。文档、测试、档案和新审核者将私人记忆转化为机构知识。继任必须保留原则,并允许为未来硬件重新审视它们。

硬件 pacing 和设备内存可能再次移动边界

现代网卡编程数据包、管理更多队列并暴露遥测或本地内存。它们减少 CPU 并将行为转移到固件。Linux 必须表达意图、观察实际发生的情况,并在硬件与软件不一致时恢复。驱动 API、timestamps 和错误将与速率同样重要。原则不变:反馈、隐藏队列限制和可观测性。

缓存经济学可能比新传输公式带来更多收益

拥塞算法还会继续出现,但下一个实质性改进可能是更好的布局、锁或批处理。它没有吸引人的品牌,却惠及多种算法。2024 年的工作展示了一个按物理成本评估的成熟网络栈。问题从“哪个协议胜出”变成“每个连接消耗多少机器资源”。

Dumazet 持久的贡献是资源自律,而非英雄传说

夸张版本会把他变成现代 TCP 和 BBR 的发明者;另一种版本会在社区中抹去个人。证据支持一种准确的定位。

他引入了 TSQ,签署了sch_fq的基础工作,推动了内部 pacing,并展示了布局的重要性。他还在共享系统内维护关键领域。他的贡献在于将数据包和 socket 视为对时间、内存、队列和 CPU 本地性的需求。

最终影响分散在设计、评审、集成和运营之间。一个 commit 可以归因;更密集的服务器集群或避免的一次崩溃则不能。这种困难既不允许夸大也不允许抹除:它表明基础设施价值源于一条集体链条,其中包含可识别的个人决策。