摘要

  • Eric Dumazet 目前被记录为 Linux general networking、TCP 和 sockets 的维护者,并参与 Netdev Foundation 的技术指导委员会。这些职责与其他维护者和评审者分担,并不是对 Linux 网络技术的单独控制权。
  • 最容易明确辨认的贡献是 2012 年补丁集引入的 TCP Small Queues。TSQ 防止一个 TCP 流向底层设备队列放入过多数据,并将套接字的本地可发送额度与数据包完成事件挂钩。它降低了发送端时延和内存压力,但不会消除路径上的所有队列。
  • Dumazet 的sch_fq和 TCP 内部步调工作,不仅把“发送多少”而且把“何时发送”变成显式控制的对象。公平队列将流分开,步调把数据包分散到时间轴上。包括使用 BBR 的环境在内的许多拥塞控制都利用这一基础,但 BBR 的设计和作者是独立存在的。
  • 近年公开的研究把结构体布局、缓存行移动和每个套接字的状态与大规模机群的效率联系起来。Linux 网络技术也是 CPU、内存、队列深度与时间的核算。经济影响可能很大,但无法从公开资料中算出具体金额或普遍性能提升率。

再快的服务器,也可能等在自己的数据包后面

故事的起点不是头衔,而是 Linux 主机的发送队列。应用写入数据,TCP 判断还能继续发送,内核将其交给更底层。从应用看数据似乎已经发出,但实际可能仍留存在同一台机器内。

链路利用率很高,因此问题容易隐藏。交互式请求排在大容量传输之后,缓冲区占用内存,TCP 认为的“网络中正在飞行的数据”与单纯在主机内部等待的数据发生偏差。TCP Small Queues 限制了一个套接字可以放到 TCP 之下的数据量,并只在设备真正处理完成后才允许再次发送。

公开记录详细讲述了工程,但不填补传记空白

关于 Dumazet 最有力的资料存在于 Linux 本身。MAINTAINERS、补丁讨论、官方文档、技术演讲和多年的公开评审,显示了他目前对 general networking、TCP、sockets 的职责、在 Netdev Foundation 中的角色,以及维护者邮箱中所体现的与 Google 的关系。

另一方面,完整的个人履历、当前正式的公司内部头衔、所有补丁与评审的总数以及时间分配并未得到确认。与其补充看似合理的信息,不如专注于可验证的工作才更准确。这里描绘的不是品牌化的人物形象,而是一位工程师:他的设计经过他人评审、修正、测试和部署,逐渐成为共享基础设施,他承担着相应的责任。

维护者身份让他接近决策,但不会凌驾于社区之上

截至 2026 年 8 月 4 日,Linux 记录将 Dumazet 列为 general networking、TCP 和 sockets 的维护者。维护者负责要求接口重新设计、拒绝维护负担过大的变更、合入已获批准的补丁,并把子系统送向 mainline。

同一记录也显示了权力的共享。general networking 上与 David S. Miller、Jakub Kicinski、Paolo Abeni 并列,TCP 也与 Neal Cardwell 共同负责。架构、驱动、安全、测试、stable 和最终 mainline 均有独立判断。Dumazet 的影响力是在这些分散约束中积累起来的。

当连接数增加时,Linux 的细节成为服务器经济问题

小主机上,套接字结构多几字节或增加一次缓存未命中很难察觉。在需要处理数十万连接的服务器上,这种差异会被反复放大,与应用争夺 CPU、内存容量和电力。

“服务器经济”并不意味着公开的金额。它指一台机器能承载多少连接、网络处理消耗多少 CPU、套接字状态占用多少内存、本地队列多久突破时延目标等运行结果。发行版和运营商选择内核、qdisc、拥塞控制和 NIC。Dumazet 改变的是这些选择背后的公共基础。

在 TCP 熟悉的角色背后,是复杂的资源核算

TCP 被解释为可靠的字节流。实现同时必须决定未确认数据量、重传、内存计费、数据包顺序以及 CPU 与队列的共享。

即使协议行为正确,本地积压、突发、锁竞争以及浪费缓存的结构也会拖累性能。Dumazet 的工作有一个共同点,就是核算视角:把字节记账到套接字,完成时返还额度,计算发送时间,分离流,把热字段与冷字段分开。目标是在利用带宽的同时,不在主机内部制造失控的第二网络。

TSQ 之前,发送端可以制造自己无法控制的积压

TSQ 之前的 TCP 可以把大量数据交给 qdisc 或驱动。即使拥塞窗口对整个路径合理,本地队列仍会留下许多数据包,即使紧急流量到来,应用也无法取回。

这种积压削弱反馈。TCP 通过远端 ACK 判断路径,但一部分数据尚未离开主机。大量流都这样做时还会消耗内存。需要在保持高吞吐的同时,防止每个套接字把底层当作无限仓库。

2012 年的 TSQ 把本地队列预算交还给套接字

2012 年的 TCP Small Queues 补丁限制了每个套接字可以放到 TCP 之下的数据量。额度用尽后停止发送,并随数据包完成而恢复。

想法很简单:统计本地积压的字节,把完成事件当作底层进展。但真正重要的是把控制点移回理解流量的传输层。为了保持链路忙碌,不必先大规模成批放入数据;应用无需修改就能获得更有纪律的行为。

数据包完成成为主机内部的实用反馈

完成(completion)看似只是收尾工作。TSQ 把它变成一种信号:底层已经前进,可以发放新的发送额度。

本地完成与远端 ACK 提供不同信息。ACK 表示整条路径的进展,completion 表示 TCP 之下的进展,qdisc 和 NIC 统计表示另一种拥塞。仅靠一个信号无法了解全部。TSQ 使用其中之一来抑制本地过量队列。

TSQ 减少的只是 bufferbloat 的一部分,而不是路径上的全部队列

TSQ 并没有消除 bufferbloat。它的对象是发送端 TCP 以下的积压。qdisc、驱动、NIC、接入网、路由器、交换机以及接收端仍有队列。

更准确的说法是,它削弱了单个套接字在主机内制造大量隐藏队列的能力。它降低时延和内存压力,使 TCP 状态更接近设备进展,但不能取代主动队列管理或端外拥塞控制。

阈值、卸载和负载决定 TSQ 的效果

TSQ 的效果取决于本地上限、数据包大小、qdisc、设备队列、分段和流量构成。短交互流量与长时间大容量复制的结果不同。

实现也不是 2012 年的原样。后续开发者修改了周边代码、阈值和相互作用。应当把起点归于 Dumazet,同时写明当前机制是共同维护的成果。

sch_fq分离流量,并把时间引入调度

Dumazet 在 2013 年公开了sch_fq的基础工作。它带有每个流的状态和按时间排序的结构,按照目标发送时间释放数据包。新流可以更快得到处理,已步调的流等待预定时刻。

这样能抑制大流量独占本地队列,并使 TCP 计算出的发送时间得以执行。它不会让所有应用获得相同结果,而是一种让本地服务更有纪律的策略。

公平队列是一项策略,不保证相同结果

“公平”这个词听起来很强。即使把流分开,数据包大小、路径、接收端、拥塞控制、卸载和连接数的差异仍会导致性能不同。

流的定义本身也是策略。一个应用如果打开许多连接,就不会与另一个应用的单一连接获得相同待遇。sch_fq降低了单个流对本地资源的独占,但不会自动裁决用户之间或企业之间的公平。

步调把速率估算转换成一串发送时间

即使拥塞控制选对了平均速率,如果一次性放出被允许的数据,也会形成突发。平均值正确,短时间队列仍会膨胀。

步调把数据包分散到时间上。它稳定队列、改善流之间的共存,并更准确地体现拥塞模型的意图。实现需要时间戳、定时器、qdisc、分段和 NIC 共享同一时间感。

步调与拥塞控制解决问题的不同部分

拥塞控制决定可以使用多少路径资源,步调决定何时把被允许的数据发送出去。好的模型也可能被突发破坏,完美的步调也可能忠实执行错误的速率。

Dumazet 的工作是让多种算法能把速率转换为时间的基础。特定拥塞控制模型的作者,是设计该模型的那群人。

BBR 使用步调基础,但其作者和设计史另有其人

BBR 高度依赖步调,并诞生于 Google 的 TCP 环境,因此容易被与 Dumazet 联系起来。但它不是他一个人的发明。BBR 有独立的作者、模型和版本历史。

正确的评价是:队列、步调、套接字核算和测量为后续算法创造了实用条件。在承认 Dumazet 基础性贡献的同时,也应保留 Neal Cardwell 等人各自的工作。

TSO 节省 CPU,却可能重新制造步调所要避免的突发

TCP Segmentation Offload 把大段数据交给 NIC,稍后在线路上拆成数据包。它降低了每个数据包的 CPU 成本,但也在软件发送时间与实际发送之间插入硬件层。

如果大单位一次性释放,NIC 就会制造突发。必须把 TSQ、qdisc、TSO、驱动和硬件当作一个系统看待。如果 CPU 优化与流量形状不匹配,时延就会恶化。

步调量子、时间戳和 NIC 必须体现同一现实

内核基于量子、定时器精度、时间戳、卸载单位和物理队列运行。量子太大会产生突发,太小会增加 CPU 负担;NIC 粒度不同,线路行为就会偏移。

qdisc 不只是默认值,而是容量设计的一部分。开发者需要测量整条发送路径,基准测试不应只写拥塞控制名称或链路速度,还要给出这些条件。

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

2017 年,Dumazet 公开了 TCP 内部步调。TCP 依据自己的速率状态和定时器,即使特定的 qdisc 没有按预期存在,也更容易延迟发送。

qdisc 仍然负责顺序和策略。只是把部分控制移到更接近意图所有者 TCP 的位置,最终时间仍是 TCP、qdisc、驱动和 NIC 共同作用的结果。

qdisc 的选择至今仍由运营商决定,并影响服务

Linux 有多个目的不同的 qdisc。sch_fq面向步调,FQ-CoDel 结合流分离与主动队列管理。两者并不相同。

发行版、云镜像、设备和容器主机的默认值各不相同,硬件卸载也会改变执行位置。上游提供功能,运营商把它变成实际的服务行为。

每个套接字多出的几字节,会成为整个机群的约束

每个连接都有序列号、定时器、拥塞状态、队列和核算字段。连接数增加后,几字节会堆积,频繁访问的字段会占据缓存。

减少每个套接字的内存可以提高密度,良好的布局能够减少缓存未命中和跨 CPU 的一致性流量。这是与服务器经济最明确的联系,但无法算出普遍缩减率或个人的金钱价值。

如果每个数据包都要触及,缓存行就是基础设施

CPU 搬移的不是单个字段,而是缓存行。如果热数据和冷字段位于同一行,无用字节也会被移动;不同 CPU 更新同一行的不同字段也会产生一致性竞争。

Dumazet 近年的工作采用这种物理视角:分离热与冷,减少与数据包数和套接字数成正比的内存流量。效果取决于 CPU 和负载,某一生产环境画像不是普遍规律。

2024 年的数据结构研究显示了性能工程的成熟阶段

2024 年的演讲不是从新算法开始,而是从画像开始:研究哪些字段是热的,哪些缓存行会被移动,哪些结构主导内存,然后重新考虑布局。

工具可以给出候选方案,但关于对齐、锁、兼容性和可维护性的判断仍由人完成。在成熟的基础设施中,减少一次缓存未命中或移动一个字段都可能成为重要成果。

超大规模画像是有力证据,但不是完全的公共科学

大型运营商能观察到普通实验室无法复现的连接数、流量和 NIC。与 Google 的关系提供了让微小成本在大规模机群中显现的环境。

另一方面,内部负载、工具和全部数据有时不能公开。演讲可以展示方法和方向,却不能给出完整的复现输入。正确的做法不是抛弃结论,而是限定范围,并尽可能把真实负载转化为公开测试和持续集成。

接收端的锁和队列也属于同一资源叙事

中心主题是发送,但 Dumazet 更广泛的工作也涉及套接字和接收路径。接收数据包需要轮询、内存分配、分类、排队和跨 CPU 分发,高速率下共享状态会成为成本。

Linux 通过批处理、工作迁移和减少锁来扩展。仍然进行正确性所需的协调,但原则不变:核算不能吞噬应用能力。

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

把多个数据包或完成事件合并,可以摊薄锁、函数调用和缓存移动。NAPI、驱动和卸载都依赖这一点。

但成批也有等待,并以突发形式到达下一层。批越大效率越高,队首元素的等待和单个流抢占也越多。TSQ、公平队列和步调不是否定成批,而是把它放在可控范围。

Linux TCP 的性能是可能相互抵消的各层组合

拥塞控制确定意图,TCP 生成数据包和时间,TSQ 限制本地积压,qdisc 确定顺序,TSO 进行合并,驱动管理缓冲,NIC 发出数据。之后又叠加网络自身的队列和丢失。

一层的改进可能在下一层消失。精确的步调会因粗糙的卸载而破坏,低时延 qdisc 会被过量入队淹没,紧凑的结构会因新锁而变慢。Dumazet 的意义就在于处理这些接缝。

公开补丁评审把本地优化变成共享基础设施

性能变更通常从“更快”“省内存”“低时延”的主张开始。要进入 Linux,必须在 netdev 回答测量、通用性、冷门架构、测试以及未来维护负担等问题。

维护者可以要求拆分补丁系列、拒绝厂商特有的抽象、推迟准备不足的变更。这比内部补丁慢,但能把个别需求翻译成公共能力。Dumazet 的权限在于判断变更是否不仅今天能运行,而且未来能够支撑。

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

修复通常进入net,新特性和较大重构进入net-next,以免未来版本的变化破坏当前维护路径。

边界需要判断。“修复”也可能改变行为,新特性也可能暴露旧缺陷。需要分开补丁系列,把可回移的修复与未来设计分别处理。产品发布日期本身不能成为合并理由。

评审、拒绝和重新设计不会体现在提交数中

提交数只统计看得见的作者,无法统计那些强制重做接口的评审或避免未来负担的拒绝。合入补丁意味着承担集成责任,而不是成为想法的发明者。

Dumazet 的形象由两部分组成:TSQ、sch_fq、内部步调和结构研究等明确工作,以及难以量化的维护工作。不应把所有合入的补丁都改写成他个人的发明。

测试可以降低风险,但无法代表 Linux 遇到的所有机器

构建、selftests、KUnit、syzbot、驱动实验室和下游部署能发现许多回归,但无法覆盖所有 CPU、NIC、qdisc、协议和负载。

对超大规模有利的变更,也可能破坏罕见的嵌入式设备。兼容性、回滚以及对未观测路径的判断仍然存在。测试加强公共治理,但不能取代经验。

回移到 stable 是 mainline 采用后的第二次判断

进入 mainline 的补丁不会自动进入所有 stable 分支。需要重新评估它是否修复真实问题、范围是否足够窄、是否带入新特性或不必要风险。发行版也会作出自己的判断。

性能补丁容易依赖周边代码,单独移植到旧分支可能产生新的回归。影响会逐步传递到 upstream、stable、发行版、云和运行配置,没有人单独控制整个流程。

TCP 与 socket 当前的维护被有意共享

MAINTAINERS把职责分给 Dumazet、Neal Cardwell 以及其他维护者和评审者。这降低了因一人缺席而停摆的风险,并汇集拥塞、socket、驱动和测试等知识。

共享也需要明确的负责人归属。如果重叠领域中所有人都以为别人负责,就会出现空白。健康的传承不是否定 Dumazet 的知识,而是让其他人能够解释设计原因并安全修改。

Netdev Foundation 可以提供资金,但不会成为合并权限

在 Linux Foundation 监督下的 Netdev Foundation 支持测试、工具、差旅和研究,Dumazet 参与 TSC。资金分配会影响社区能力,但不会保证补丁被接受。

深度维护需要工资、硬件和持续集成。否认资金的存在不现实。同时,upstream 的正当性来自公开技术评审。资金提高判断能力,但不能买下判断本身。

与 Google 的关系提供工程资源,但不是 Linux TCP 的所有权

Google 域名的维护者邮箱显示关系,但不会显示完整职位。大型运营商可以提供生产画像、硬件和长期评审时间,上游化的变更也会惠及公司外部。

问题在于证据不对称。大规模需求更容易被看见,部分数据却不公开。公开评审是对抗手段。变更必须对 Google 以外的环境也适用,并由独立维护者理解、接受。公司提供资源,但不拥有技术栈。

下游运营商把上游改进转化为实际服务

发行版选择内核和回移,云选择 qdisc 和拥塞控制,设备锁定旧版本,NIC 厂商决定功能,应用制造流量。没有权威统计显示 TSQ 设置或sch_fq在全球的使用率。

机制存在于内核,但可能被关闭;也可能默认运行而用户从不知道它的名字。Dumazet 的影响广泛而间接:改变上游选项,由各运营商转化为体验。

用户空间协议栈在专用场景竞争,但不会取代 Linux 的全部角色

DPDK、VPP 和专用协议栈绕过部分内核路径,以获得高数据包速率和更精细控制。代价通常包括专用 CPU、大页、设备绑定和额外运维。

Linux TCP 提供更广泛的标准套接字、安全、命名空间、可观测性、驱动和应用集成。Dumazet 的工作降低了通用路径的成本,但并不声称在所有场景中最快。专用方案选择性地绕过,Linux 仍是公共基础。

Linux 保持标准地位的原因,在于集成广度而非数据包速度

网络协议栈不仅要快,还必须支持兼容性、安全更新、路由、命名空间、可观测性和海量驱动。孤立的高速路径有其额外运维成本。

Linux 应用只要使用标准套接字,就会继承 TSQ、步调和内存核算。这种不可见性正是基础设施的优势,即使用户不知道作者姓名,效果仍然存在。

主机变快,也未必意味着整条网络路径变好

改善本地队列,并不能修复拥塞的接入、过载的目的地或中间丢包。TSQ 和步调让发送主机更有纪律,但不能控制整条路径。

即使减少一个时延因素、让数据包更平滑,应用体验仍是发送、接收、路径和配置共同作用的结果。不能把内核改进直接等同于端到端保证。

单个基准测试不能代表所有服务器、NIC 和负载

数据包大小、连接数、CPU、缓存、NIC、卸载、qdisc、定时器、内核版本和负载都会改变结果。Google 规模的画像显示真实成本,但不会预测另一环境的准确比例。

好的技术报道会保留条件。Dumazet 的演讲是有价值的第一手运营证据,但泛化需要公开测试和独立测量。

传承是技术问题,许多设计理由存在于人的记忆中

奇怪的限制可能因为旧 NIC、仍在使用的 API 或过去的回归而存在。只看当前代码无法理解原因。

长期维护者保有这些记忆,同时创造价值和关键人物风险。文档、测试、邮件归档和共同维护者把个人记忆变成制度知识。好的传承留下原则,并允许实现随新硬件改变。

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

新型 NIC 可以调度数据包、管理大量队列,并提供丰富的遥测或设备本地内存。它降低 CPU 负担,但也把行为转移到固件。

下一个问题是协作。Linux 必须传达发送意图,了解硬件实际做了什么,并在两者不一致时恢复。驱动 API、时间戳和错误报告会变得与速率计算同样重要。在意图附近核算、保持反馈、限制隐藏队列、让边界可观测,这些原则仍然保留。

下一项重大改进可能来自缓存经济学,而非新的传输方式

新的拥塞控制还会继续出现。但在大规模主机上,结构拆分、减少锁、调整批处理、抑制缓存行移动,有时会带来更大的实际收益。

这些变更名称不显眼,却能同时惠及多种算法和应用。2024 年的工作表明,成熟协议栈会在物理资源成本层面被继续打磨。问题从“哪个新协议会赢”转向“一个连接会在不被注意的情况下消耗多少机器资源”。

Dumazet 的持续贡献是资源纪律,而不是英雄式的单打独斗发明

一种错误叙事把 Dumazet 说成现代 Linux TCP 或 BBR 的唯一发明者。另一种则让个人判断消失在庞大社区中。证据支持的是中间且更准确的评价。

他引入了 TSQ,奠定了sch_fq的基础,推进了内部步调,并展示了缓存感知的结构优化。同时,他至今仍在共享的维护者制度中承担职责。共同贡献是把数据包和套接字视为对有限时间、内存、队列与 CPU 局部性的请求。

最终影响分散在设计、评审、集成和运营中。提交可以署名,但无法把机群密度或避免的故障精确归于一个人。这种困难不是夸大或抹去个人的理由,而是说明基础设施价值来自可识别的技术判断与集体执行。