1 无损以太网要回答什么
把 2 台服务器用 100 Gb/s 以太网接到交换机上,并不意味着每个时刻都能把数据送入对端内存。服务器可能同时拥有 32 核 CPU、256 GB DDR5 内存、4 块 NVMe SSD 和 1 张双端口网卡。CPU 发起传输,网卡通过 PCIe 读取主机内存,交换机转发帧,对端网卡再把数据写入内存。路径中任何环节暂时变慢,都可能使数据在某个缓冲区排队。链路标称速率描述搬运能力,不能保证接收者永远及时腾出空间。
设 4 台服务器同时以 100 Gb/s 向同 1 个 100 Gb/s 出口发送,短时间的总输入可达 400 Gb/s,输出却只有 100 Gb/s。多出的数据只能先存进交换芯片的缓冲。缓冲由真实的存储资源提供,容量有限,也可能被多个端口共享。队列填满后,传统以太网通常丢弃后来的帧;可靠传输协议随后发现缺失并重传。无损以太网要回答的是:能否在缓冲耗尽前让发送侧减速,使指定业务尽量不因拥塞丢帧?
这里的“无损”有明确边界。它通常指在受控织物内,对选定优先级,在既定负载、配置和硬件能力条件下避免拥塞丢包。光模块故障、线缆误码、交换机重启、错误路由和超出设计范围的突发,仍可能造成丢包或中断。无损也不等于时延低:把帧留在缓冲中,可能让它等待更久。评价方案时,需要同时看交付成功率、吞吐和尾延迟,不能只看丢包计数是否为 0。
这类需求经常出现在基于以太网的远程直接内存访问,也就是 RoCE 场景。RDMA 让网卡承担部分数据搬运工作,减少 CPU 参与数据路径的开销;它并不让 PCIe、内存控制器或网络拥有无限带宽。不同实现对丢包的恢复能力不同,不能把“采用 RDMA”直接等同于“必须全网无损”。本课把重点放在常见的 RoCEv2 织物:用拥塞反馈控制发送速率,用局部暂停作为保护,并明确其代价。

读图时要分清 3 个位置:服务器内存中的待发送数据、交换机内的排队数据、接收服务器尚未处理的数据。交换机看到出口堵塞,不一定知道根因是接收应用变慢、多个入口同时汇聚,还是下游暂停。无损机制首先保护本地缓冲,系统设计则需要追到真正限制吞吐的环节。后面所有讨论都围绕这个区别展开。
2 PFC、ECN 与拥塞通知
PFC 是基于优先级的流量控制,相关标准为 IEEE 802.1Qbb。它允许接收侧针对链路上的某个优先级发送暂停请求,让直接相邻的发送侧暂时停止该优先级的传输。以太网优先级通常用 3 位值表达,共有 8 个取值;设备如何把它们映射到内部队列和缓冲,需要查具体配置。PFC 作用于优先级,不识别某个应用请求,也不天然区分共享该优先级的多条业务流。
暂停不是隔空瞬停。交换机发现缓冲占用越过暂停阈值时,链路上已有帧正在传输,上游也需要时间接收和执行暂停。为容纳这些继续到达的数据,需要预留余量,常称为 headroom。100 Gb/s 链路在 1 μs 内约传输 12.5 KB,若从触发到停止的有效时间按 2 μs 估算,仅这部分在途数据就约有 25 KB。实际还要考虑线缆传播、帧边界、芯片流水线和厂商给出的计算规则,不能直接把这个例数当作所有端口的配置值。
ECN 是显式拥塞通知。对支持 ECN 的 IP 报文,交换机可在队列达到配置条件时设置拥塞标记,让报文继续转发。标记表达“这里正在排队”,并不直接暂停上游端口。在典型 RoCEv2 拥塞控制中,接收端看到标记后产生 CNP,也就是拥塞通知报文,反馈给发送端;发送网卡依据自身算法降低发送速率,之后再逐步恢复。标记、反馈和降速是不同动作,配置和观察时也应分别确认。
两套机制的时间尺度和范围不同。ECN 配合端点控制,目标是让长期输入接近可用输出,尽量在严重堆积前收敛。PFC 处理链路局部的紧迫缓冲压力,为指定优先级争取停止来流的时间。常见设计希望先发生拥塞标记并触发降速,持续恶化时才进入暂停保护。不过 ECN 阈值与 PFC 阈值可能对应不同的队列、入口优先级组和计量方式,不能只比较界面上的 2 个数,就断言反馈一定先于暂停。

还要区分“能够发送通知”与“闭环真的工作”。交换机 ECN 标记增加,只能证明出现过标记;接收网卡产生 CNP,证明端点识别到反馈条件;发送速率下降,才说明发送侧执行了控制。若 CNP 被放入长期受阻的队列,反馈可能迟迟到不了。若网卡没有启用匹配的拥塞控制,标记也未必带来预期效果。观察完整链条,比看到某个开关处于开启状态更有意义。
3 与传统丢弃网络的边界
传统丢弃网络允许拥塞时丢帧,由 TCP 等协议通过重传和速率控制维持可靠交付。这不代表网络设计失败,而是把丢包作为容量不足时的处理方式。无损优先级把部分压力转换成等待和反向传播:下游接不动,上游先暂停,上游缓冲继续积累后,又可能要求更上游暂停。前者需要承担恢复开销,后者需要承担缓冲占用、阻塞范围扩张和长时间停顿的风险。选择取决于业务对这些代价的承受能力。
例如,同 1 台 2U 服务器既运行普通管理连接,也通过 RoCEv2 访问远端存储。管理连接通常应保持独立的可用通道,存储数据则可映射到专门规划的无损优先级。备份、日志上传和普通 TCP 流量不应因为共享网卡,就自动获得同样的暂停策略。若把所有业务放进同 1 个受 PFC 控制的队列,存储拥塞可能让用于排障的连接也一起停顿,故障发生时反而更难取得证据。
数据中心边界同样重要。机架内叶交换机、机架间脊交换机以及服务器网卡,需要对业务分类和优先级形成一致理解。经过隧道、网关或不同管理域时,外层与内层的标记可能变化,不能假定某个优先级含义会自然延续到任意远端。把无损域限制在可测量、可配置、可回退的范围内,比追求跨越所有网络的无损承诺更可执行。跨域链路仍需依赖传输协议和应用自身的恢复能力。
硬件路径还会改变瓶颈位置。PCIe 4.0 x8 的理论单向有效编码带宽约为 15.75 GB/s,而 100 Gb/s 对应约 12.5 GB/s 的链路比特率,实际业务还受协议和实现开销影响。双端口都跑满时,不能只凭单端口的数字判断主机总线足够;还应确认插槽实际协商宽度、CPU 所属 NUMA 节点和内存带宽。假如网卡插在电气连接只有 x4 的槽位,网络侧无损也无法补足主机接口的吞吐缺口。
因此验收边界应同时写明业务和故障条件:哪些流量接受局部暂停,哪些流量允许丢包后恢复,哪些硬件故障必须由上层重试处理。对于以短小请求为主、极度关注尾延迟的业务,积压几毫秒可能比快速失败更难接受。对于大块内存搬运,避免频繁恢复又可能明显改善完成时间。不要把“丢包为 0”单独设为全体业务的成功标准。
4 动手:解释一次头阻现象
准备 3 台服务器 A、B、C 和 1 台支持相应计数器的交换机。A 同时向 B、C 发送数据,2 条流映射到同 1 个启用 PFC 的优先级。每台使用 100 Gb/s 网卡,测试总发送量应受控,避免一开始就把 A 的出口打满。先记录 A 到 B 与 A 到 C 的稳定吞吐、延迟分布和各端口暂停计数。动手前应确认测试流量与管理连接分离,并在独立测试环境执行,保证能随时停止负载。
接着限制通向 B 的下游服务能力,例如将交换机面向 B 的出口整形到 10 Gb/s,同时让 A 到 B 的负载高于这个速率。限制交换机出口可以直接制造可定位的排队;仅让 B 的应用睡眠,未必立刻形成同样的网络拥塞,因为网卡和内存仍可能继续接收。保持 A 到 C 的负载较低,使 C 的出口有充足余量。此时的问题是:通往 C 的路径明明空闲,A 到 C 为什么也可能变慢?
若 B 方向积压触发了交换机面向 A 的 PFC 暂停,A 就会暂停该链路上指定优先级的发送。A 到 B 与 A 到 C 共享这个优先级,因而都可能停住。受阻业务占住了共同的发送机会,让本可前进的业务也等待,这就是这里要观察的头阻现象。某些芯片具有更细粒度队列或隔离机制,表现可能不同;实验目标是解释共享暂停域导致的连带阻塞,不能预先宣称所有硬件都必然产生相同曲线。

采集时以 100 ms 或设备支持的合适时间窗,对齐 A 的每优先级 PFC 接收计数或暂停时长、交换机相应方向的 PFC 发送计数、B 方向队列占用,以及 2 条流的吞吐。端口总吞吐可能仍在变化,却掩盖 C 流的明显停顿。累计暂停帧数也不能直接代表阻塞时间:重复刷新暂停会增加帧数,却不一定对应等长停顿。若设备支持暂停持续时间和队列水位,优先把它们与业务曲线关联。
然后降低 A 到 B 的发送速率,或者解除 B 出口整形,观察积压消退、暂停解除和 C 流恢复是否具有时间上的对应关系。再做对照:在硬件和配置允许时,把 C 流放入独立且可继续发送的类别,保持其他负载不变。若 C 的停顿显著减轻,说明共享分类是重要因素。不要为了得到好看结果同时修改 ECN、调度权重和缓冲阈值;每次只改变能解释当前假设的因素。
若没有出现预期现象,先检查分类命中、真实出口速率以及 PFC 方向,保留“未复现”的结论。不能把吞吐下降单独叫作头阻:CPU 满载、网卡所在 NUMA 节点访问远端内存、PCIe 带宽不足,都可能同时拖慢多条流。完整解释必须指出谁先受阻、哪段共享资源传递了影响,以及解除原因后哪些指标恢复。这种证据组织方式可以迁移到其他硬件排队问题。
5 无损与死锁风险取舍
暂停能保护缓冲,也能建立等待关系。设设备 A 等待 B 接收,B 等待 C 接收,而 C 又等待 A 腾出空间;若这些等待涉及不能前进的资源,就可能形成循环依赖。此时即使链路没有断开、端口都显示在线,也可能长时间没有有效数据进展。无损网络中的死锁分析关注缓冲、优先级和路径之间的依赖,不能仅凭拓扑图里画了环,就认定发生死锁;也不能因为路由看似正常,就排除资源等待形成的环。
入门阶段先掌握 3 种状态。短暂停顿随突发结束而消退,属于正常保护;持续过载让暂停反复出现,说明平均输入仍高于服务能力;循环等待则可能在原始突发已经过去后仍无法自行恢复。它们都可能表现为 PFC 增加,但处理方法不同。把所有长暂停都归为死锁,会忽略接收端持续限速;把所有长暂停都当成正常繁忙,又可能错过织物失去前进能力的故障。
阈值调整体现这种取舍。较早触发 PFC 可给在途数据留出更多安全空间,但更容易让短时突发影响上游;较晚触发可容忍更大的本地排队,却减少响应余量,极端时仍可能溢出。增加缓冲可以吸收突发,也可能让等待时间增长。ECN 提前反馈有助于减小持续积压,但反馈往返需要时间,不能替代足够的物理余量。滑块展示的是因果关系,不提供可以直接复制到设备的最佳百分比。
工程上需要限制依赖范围,检查不同优先级的映射,规划路径与故障切换,并用端点拥塞控制减少进入暂停状态的频率。部分设备提供 PFC 看门狗,检测异常长的暂停后执行恢复动作。恢复可能涉及丢弃、暂时改变流控或其他设备特定行为,因此它保护的是网络继续前进的能力,并不承诺恢复过程中仍然无丢包。启用前必须理解触发条件、动作范围以及业务的超时和重试表现。
对于承载远端存储的机架,恢复策略要与主机侧联动评估。暂停持续到秒级时,应用可能先触发超时,再发起重试;旧传输尚未结束,新负载又进入网络,恢复期间反而出现更大峰值。可用方案需要给暂停异常设置可观测的界限,说明何时降载、隔离端口或切换路径。详细死锁避免算法和特定芯片的缓冲依赖模型留待后续专题,本课先要求能识别风险并说明保护动作的代价。
6 常见坑:全网开 PFC 无规划
最常见的错误是把 PFC 视为普通可靠性开关:服务器、交换机、所有优先级全部开启,随后用“已启用”作为验收结论。这样做并没有指定谁需要无损,也没有说明缓冲是否足够,更没有划出暂停传播的边界。共享缓冲仍可能被多个端口竞争,多个同时拥塞的入口也会一起消耗余量。单端口压测通过,并不能证明多端口汇聚时仍然安全。
另一个坑是相信优先级数字天然代表端到端服务等级。主机可能按 DSCP 分类,交换机入口按 PCP 或内部信任策略重分类,出口又映射到另一组队列。编号相同不代表处理相同,编号不同也可能落到同 1 个内部缓冲组。规划时应把“应用标记→网卡流量类别→交换机入口优先级组→出口队列→对端识别”逐段列出,并用计数器证实命中。对未带标签、标记异常和隧道封装的报文,也要说明默认处理方式。
还有人把调高 PFC 阈值当作通用修复。暂停少了,可能只是保护更晚发生,拥塞丢包反而增加;把阈值调低,丢包暂时消失,也可能让阻塞扩散得更早。先记录拥塞标记、暂停时长、丢弃原因和业务完成时间,再判断调参是否改善整体表现。某些设备的“缓冲占用”反映共享池,另一些反映特定队列,单位也可能是字节或内部单元,跨设备照抄数值尤其危险。

排查可从现象分叉。若存在 CRC 等物理错误,先处理线缆、模块和端口质量;若出现拥塞丢弃,检查分类、余量和控制响应;若没有丢包但长时间低吞吐,检查暂停与服务能力。若 ECN 标记持续增加而发送速率没有改变,则沿接收标记、产生 CNP、传回发送端、执行降速逐段检查。不要把“无损网络很复杂”作为跳过基本链路检查的理由,错误帧不会靠更多 PFC 修好。
上线过程也应避免所有机架同时改变。先选有限端口验证,在相同负载下比较新旧策略,保留配置版本和回退入口。管理与监控路径要能在数据优先级受阻时继续工作。回退的目标可以是恢复到可接受的丢弃网络行为,但必须事先确认业务能容忍相应恢复成本。所谓无规划,通常不是少了某个高级功能,而是缺少业务范围、分类映射、资源预算和失败后的操作顺序。
7 案例:优先级反转引发拥塞蔓延
某机架有 8 台 2U 服务器,每台配置 1 张 100 Gb/s 网卡,运行远端存储访问和后台批量同步。设计要求存储数据使用受控的无损类别,后台同步走允许丢弃的类别。一次配置变更后,后台同步的标记被入口规则映射到了存储使用的缓冲组;同时,该组的出口调度份额低于另一类持续繁忙的流量。这里的“优先级反转”指实际资源待遇与业务意图相反,并不表示优先级编号本身保证了调度顺序。
故障开始于备份窗口。多台服务器同时向某个存储出口发送,使该出口排队增加。后台数据也占据原本预留给存储的资源,而出口调度又未给予足够服务。交换机开始向上游发送相应优先级的 PFC。上游暂停后仍接收其他方向来流,局部积压进一步触发更上游暂停。原本只应影响特定目的端的压力,沿共享优先级扩散到其他服务器,远端存储访问的尾延迟出现明显尖峰。
值班人员首先看到物理链路都在线,错误帧计数没有明显增长,部分端口甚至利用率下降。如果只看平均带宽,很容易误判为业务负载不足。把时间窗对齐后可以看到:目标出口队列先上升,PFC 发送随后增加,上游 PFC 接收与存储吞吐下降相伴发生。ECN 标记也在增加,但受影响类别的服务份额太低,加上错误分类持续引入背景流量,端点降速未能及时消除积压。
处置先限制后台同步的注入速率,缩小正在积压的流量来源,再核对主机和交换机的分类规则。修正错误映射后,恢复事先规划的调度份额,检查存储队列是否重新获得服务,并观察暂停是否随队列下降而消退。没有直接关闭所有 PFC,因为在尚未降载时撤掉保护,可能把同一批积压转变成大量丢包。若设备出现异常长暂停,则依照预定恢复流程处理,同时跟踪主机超时和重试。
复盘需要区分已证实的原因与合理猜测。此例的证据应包括变更前后的映射、后台流量命中无损类别的计数、出口服务不足的记录,以及限制背景流量后的恢复结果。不能仅凭“改完优先级就好了”认定问题彻底解决,还要在相同汇聚负载下复测。后续验收加入背景流量竞争和单出口限速场景,目的是验证业务优先关系在拥塞时仍然成立,而非只在空闲网络上成立。
8 把无损策略写进织物方案
织物方案应从工作负载写起。列出哪些服务器发起远端内存或存储访问、典型消息大小、并发连接范围,以及是否出现多对单汇聚。训练服务器可能短时间同步交换大块数据,存储节点可能因 SSD 回收或后台任务改变服务能力,普通计算节点则可能受到 CPU 和内存竞争影响。平均流量相同的业务,突发形态也可能完全不同。用业务峰值和可解释的突发场景定义测试输入,避免只写总容量。
接着把主机能力和网络能力接起来。记录网卡端口速率、PCIe 代际与实际宽度、插槽所属 CPU、驱动和固件版本,以及交换机端口速率和缓冲分配方式。这里不要求读者深入芯片内部实现,但要知道配置依赖哪些实际资源。机箱面板上有 2 个 100 Gb/s 端口,不能证明主机能持续完成 200 Gb/s 的内存搬运;交换机有足够端口,也不能证明任意汇聚比例都不拥塞。
策略部分至少要解释分类、拥塞控制、暂停保护和异常恢复之间的关系。指定哪些类别使用 ECN、哪些优先级允许 PFC、CNP 等控制流量如何获得及时服务,并说明为何预留足够 headroom。阈值应依据设备能力和链路条件形成可复核的预算,不能把“推荐默认值”当成推导过程。若多个类别共享物理缓冲,还要写出资源竞争时的限制条件,避免逻辑隔离被误认为物理独占。
验收需要覆盖稳定负载、短时突发、持续过载和恢复过程。多对单汇聚用于检查缓冲与反馈,降低目的端出口服务能力用于检查头阻,持续背景竞争用于检查调度和分类,链路故障后的流量重分布用于检查剩余路径是否仍在设计范围内。每项都同时记录业务完成时间、吞吐、尾延迟、拥塞丢弃、ECN 与 CNP、PFC 时长及队列水位。具体目标值应来自业务要求和基线测量,不能脱离环境给出统一数字。
最终交付物还需要明确责任:应用团队给出超时与重试行为,主机团队维护网卡和总线配置,网络团队维护分类、队列和路由,运维团队执行告警与回退。出现问题时,各方使用同 1 个时间基准关联证据。可维护的无损织物依靠这条协作链条,让每次暂停都能定位到业务和资源条件;单独保存交换机命令清单,无法说明为何这些参数在当前系统中成立。
9 从无损以太网走向DPU 与卸载(H44)
本课一直把网卡看作连接主机与织物的端点。它从内存取数据、处理反馈、执行发送速率控制,再把收到的数据交给主机。随着功能增加,部分网卡具备更丰富的可编程处理能力,DPU 则进一步整合专用处理单元、内存和网络接口,可承担特定网络、存储或隔离任务。下一课会讨论这些任务为何适合卸载,以及把工作从 CPU 移出去之后,资源与运维边界如何变化。
无损以太网提供了判断卸载效果的前提:先确认瓶颈位置。若 CPU 忙于处理大量报文,合适的卸载可能释放主机算力;若瓶颈在 100 Gb/s 出口或接收侧服务能力,增加端点计算资源不会自动扩宽链路。若受限于 PCIe 或跨 NUMA 内存访问,把更多数据搬运路径交给设备,也仍然需要检查总线和内存流量。性能改善必须落实到少了哪些处理、减少了哪些搬运、引入了哪些新排队。
DPU 也不会取消网络反馈。它可能成为新的拥塞控制执行点,或者在内部形成额外队列,使原本可见于主机的等待转移到设备上。网络侧仍要知道哪些流量共享优先级,设备侧仍要暴露吞吐、丢弃和处理延迟。若只看到主机 CPU 使用率下降,却忽略业务尾延迟上升,就无法证明卸载成功。因此,下一课将沿用“资源在哪里、等待在哪里、证据在哪里”的观察方法。
进入 H44 前,读者应能用自己的话解释:ECN 为什么需要端点响应,PFC 为什么会连带影响共享优先级的业务,为什么增加缓冲不能解决持续过载,以及恢复网络前进能力时为什么可能接受有限丢包。掌握这些问题,就能把 DPU 放回完整服务器和织物路径中理解,避免仅凭某块板卡拥有更多处理核心,便推断系统吞吐和可靠性都会提高。
放进方案里
在机架织物方案中,可写入这样的设计说明:本期采用 100 Gb/s 服务器接入,远端存储业务使用专门规划的无损优先级,管理、日志和后台同步按各自服务要求分类。无损承诺限定为受管织物内的拥塞保护,不覆盖物理误码、设备重启及超出验证范围的负载。普通可靠传输仍承担端到端恢复责任。所有分类规则需在主机网卡、交换机入口和出口逐段核对,并保存可追溯的版本。
拥塞控制优先依靠 ECN 标记、接收端 CNP 反馈和发送端降速,PFC 用于保护指定优先级的缓冲。根据端口速率、链路长度、设备响应时间及缓冲结构预留余量,记录阈值来源和适用条件。控制报文的分类与调度需保证反馈及时传递。配置变更不得只修改优先级编号,还应检查内部缓冲组和出口队列的实际映射。
上线前验证多对单汇聚、目的端限速、背景流量竞争及故障后的流量重分布。同步记录业务吞吐、尾延迟、队列水位、拥塞丢弃、ECN、CNP 和 PFC 暂停时长,并检查 PCIe 实际宽度及网卡所属 NUMA 节点。验收目标由业务基线确定,不能用暂停帧数少或丢包计数为 0 代替整体结果。
运行阶段按端口和优先级建立告警,关联异常长暂停与主机超时。先降低问题来源的注入速率,再执行经过验证的隔离或恢复动作;若使用 PFC 看门狗,明确其触发条件、可能丢弃的范围和业务重试要求。保留独立管理通道及配置回退版本,由网络、主机和应用负责人共同复盘,保证恢复动作与下一次容量调整都有证据依据。
10 小结:下一步DPU 与卸载(H44)
无损以太网把指定范围内的拥塞丢包风险,转化为反馈、排队和暂停的协同问题。ECN 提供拥塞信号,端点依据反馈调速,PFC 为相邻链路提供按优先级的暂停保护。它们需要匹配真实的网卡、总线、缓冲和业务负载,才能形成可用方案。
自测时试着解释 3 个现象:链路没有错误却吞吐骤降;去往空闲目的端的流也被暂停;丢包减少后业务尾延迟反而升高。若能沿共享队列、反馈路径和主机服务能力逐段说明原因,就具备了分析基础。下一课 H44 将讨论 DPU 与卸载,继续追问任务移动后,瓶颈和可观测性随之移到了哪里。