☰
PFC原理与排障实战:从暂停帧到Buffer规划,保障无损网络稳定
2026/10/3 9:23:18 网站建设 项目流程

前几天帮我维护的一个存储集群做性能交接,客户反馈说某几个节点的 IOPS 波动特别大,应用侧偶尔还报超时。登录交换机一看,端口上的计数器跳得我心头发紧:priority pause frames 那一列的数字在大幅增长。说白了就是 PFC(Priority-based Flow Control,基于优先级的流量控制)在疯狂工作。PFC 这个东西在数据中心网络里是绕不开的角色,它让以太网能承载 RoCE、FCoE 这类对丢包极度敏感的流量,没有它,无损网络基本无从谈起。但你千万别以为“开了 PFC 就万事大吉”,配置不对、Buffer 规划不合理、链路有隐患,它随时能把问题放大成故障。这篇文章我结合自己的运维和排障经验,把 PFC 的工作原理、配置要点、Buffer 规划和踩坑记录一次讲清楚,适合正在接触存储网络、RoCE 网络、或者准备做无损数据中心改造的工程师。

先说明一个容易混淆的点:网络领域的 PFC(Priority-based Flow Control)和电源领域的 PFC(Power Factor Correction,功率因数校正)是两个完全不同的东西。本文只聊网络方向的 PFC,而且内容围绕数据中心以太网环境展开。

1. 传统以太网拥塞控制的短板:丢包重传遇上性能敏感流量

1.1 从“丢了就重传”到“不能丢”:存储与 AI 网络的无损需求

传统以太网从设计之初就没打算做得太“精致”。它假设上层协议能容忍丢包,比如 TCP 有确认和重传机制,丢了包大不了 RTO 超时重传,对网页浏览、文件传输这类业务没什么致命影响。可到了数据中心内部,情况完全不同了。

以 RoCE(RDMA over Converged Ethernet)为例,它的设计目标是让网卡绕过 CPU、绕过内核协议栈,直接用 RDMA 读写远端内存。问题是 RDMA 的传输层没有像 TCP 那样的“丢失重传”机制,数据包一旦在网络上被丢弃,发送端不一定能感知,要么等很长的超时,要么直接导致应用异常。同样的道理也适用于 FCoE(Fibre Channel over Ethernet)这类承载存储流量的协议。存储网络对可靠性的要求几乎是“宁死不丢”,一个包都不能丢,丢了就是业务抖动。

所以数据中心网络必须做到一件事——即使出现瞬时拥塞,也尽量不让报文被丢弃。怎么做到?一个朴素的想法是:拥塞的时候让上游设备先停一停。这正是 PFC 要做的事。

1.2 链路级 Pause 为什么会被 PFC 淘汰

在 PFC 之前,IEEE 802.3x 定义了链路级流控(Link-level Flow Control),机制非常简单:接收端的 Buffer 快满时,向对端发一个 Pause 帧,对端收到后暂停整个端口上的所有流量一段时间;接收端 Buffer 缓和了,再发一个带零计时器的 Pause 帧解除暂停。

听起来思路没问题,但这个机制有个致命缺陷:它是“一刀切”的。暂停帧作用的是整个物理端口,而端口上通常同时承载多种流量,包括普通 TCP、管理流量、VoIP、存储流量等。一旦某一种流量突发把 Buffer 占满,端口就会把整条链路上的所有流量全部暂停。结果就是:存储流量还没解决,普通业务先被打断,TCP 超时重传、VoIP 抖动、管理通道中断一起爆发。

更麻烦的是,802.3x Pause 的暂停行为可以被“累加”。多台设备串在一条链路上,每一跳都可能在极端情况下向上游发 Pause,形成链式依赖。一旦某个中间节点的 Buffer 分配不公平,某个方向的数据堆积,所有经过这条路径的流量都得跟着遭殃。

所以业界需要一种更精细的流控机制——不再以整个端口为单位暂停,而是按流量的优先级来区分处理。这就是 PFC 的出发点。

1.3 “先分类、再暂停”才是 PFC 的破局思路

PFC 的核心思想可以概括为八个字:先分类,再暂停。数据在以太网帧的 VLAN TAG 里带着 802.1p 优先级字段(Priority Code Point,PCP,一共 3 bit,可以表达 0 到 7 共 8 个优先级)。交换机和网卡可以把不同 PCP 值的流量映射到不同的内部队列里。每个队列独立运行“接收端检测水位、发送端暂停队列”的逻辑。

这样一来,收到暂停帧时,设备只暂停对应优先级的队列,其他队列照常转发。比如你把存储流量放在优先级 3 队列里,拥塞时这个队列被暂停,而优先级 0 的普通 TCP 流量不受影响。这比全局 Pause 精细得多,也是它能被广泛应用在无损网络中的原因。

另外还需要注意到,PFC 是逐跳生效的链路层机制。交换机出口队列发生拥塞时,它会向“上一跳”设备发暂停帧,让上游也停下来;如果中间隔了多台交换机,每一跳都会向上游反馈,最终压力一级一级传递到发送端网卡。理解这一点对后面排查问题非常重要。

2. PFC 通话原理拆解:暂停帧、优先级队列和 Buffer 水位

2.1 一个暂停请求的完整旅程

我一直觉得,要掌握 PFC,最有效的办法是跟一个数据帧走一遍它被暂停的完整过程。假设发送端 A 往接收端 B 高速传输存储数据,中间经过交换机 S。

第一步,数据到达 S 的入端口。交换机根据报文携带的 VLAN 优先级,把它分配到优先级 3 的队列里,等待转发到出端口。第二步,出端口的发送队列开始积压。如果某个瞬间从多个入端口涌进来的流量大于出端口带宽,队列长度会快速增长。第三步,队列长度达到预先设置的高水位阈值(Xoff 阈值),交换机内部逻辑认为“要扛不住了”,于是从出端口向发送端 A 发一个 PFC 暂停帧。第四步,发送端 A 收到这个暂停帧后,检查它的“优先级位图”,确认是在暂停自己的优先级 3 队列,于是把该队列的发送动作挂起一段时间。第五步,队列长度因为暂停而逐步下降,降到**低水位阈值(Xon 阈值)**以下后,接收端再发一个 PFC 暂停帧,这次位图中该优先级的暂停计时器为 0,表示恢复发送。

这个过程中有一个关键点:暂停帧不是把链路物理断开,而是让对应优先级的队列“等待”,队列里的数据仍然留在 Buffer 里,只是不再往线上发。

2.2 暂停帧的报文结构:优先级位图与计时器

PFC 的暂停帧是基于 MAC 控制帧格式定义的,标准是 IEEE 802.1Qbb(2011 年左右随数据中心桥接 DCB 系列标准一起发布)。它的目的 MAC 地址是 01-80-C2-00-00-01,属于 MAC Control 帧,不会被交换机当作普通数据帧转发。关键字段有两个:

字段作用说明
优先级位图标志本暂停帧作用于哪些优先级8 bit 一一对应 8 个优先级,1 表示暂停生效
暂停计时器数组每个优先级独立的暂停时长单位是 pause_quanta,1 个 quanta = 512 bit 时间

相比 802.3x 的 Pause 帧只有一个公开的暂停计时器,PFC 的暂停帧里同时携带 8 个优先级的暂停时长。发送方收到后,提取对应优先级的计时器值,如果大于 0,就把该优先级的发送暂停这么长时间。如果多个暂停帧连续到达,计时器会被刷新——以最新收到的值为准。这样可以防止老旧的暂停帧把队列卡住太长时间。

有个细节值得注意:PFC 也靠“计时器归零”来隐式恢复,不需要显式的解除帧。这样设计的好处是避免“恢复帧丢失导致永久暂停”的极端情况。但很多厂商实现里,仍然会在水位降至 Xon 阈值时主动发一个计时器为 0 的恢复帧,让对端尽快恢复。

2.3 优先级怎么进入队列:802.1p 标记与队列映射

PFC 说“暂停优先级 3 队列”,这里的“优先级 3”是怎么来的?其实就是在以太网帧的 VLAN Tag 里,有 3 bit 的 PCP 字段,数值 0 到 7。数据进入交换机后,设备会根据映射表决定它进入哪个硬件队列。

不同厂商的默认映射并不完全一致,但思路相同。下面是一个典型的 8 队列映射示例:

802.1p 优先级典型用途队列行为
0尽力而为流量(默认)普通队列,允许丢包
1低优先级批量流量普通队列
2普通业务流量普通队列
3RoCE/存储无损流量无损队列,启用 PFC
4FCoE 等存储流量(如有)无损队列,启用 PFC
5语音/视频/控制面优先队列
6网络控制流量优先队列
7网络控制流量优先队列

很多场景下 RoCE 会默认映射到优先级 3,一方面是因为 QoS 默认习惯,另一方面也是厂商之间的兼容性考虑。但这不是绝对的,不同厂家、不同虚拟化平台有自己的约定。真正重要的不是“固定用 3”,而是全网所有设备、所有虚拟机接口、所有网卡的映射必须完全一致。你发端的网卡把 RoCE 标成 PCP 3,中间交换机却把 PCP 3 映射到了普通队列且没开 PFC,那 PFC 就形同虚设,拥塞时照样丢包。

2.4 逐跳反馈的本质:PFC 是链路层机制,不是端到端控制

这里必须澄清一个很容易被误解的概念。很多人以为“开了 PFC,拥塞直接从源头开始降速”,其实不对。PFC 的暂停帧只在“相邻的两个以太网接口”之间传递,它是逐跳(per-hop)的。

举个例子,服务器 A -> 接入交换机 S1 -> 汇聚交换机 S2 -> 存储节点 B。如果 S2 的出口拥塞,S2 会向 S1 发 PFC 暂停帧,让 S1 的对应队列暂停。如果 S1 的队列因此也开始堆积,S1 又会向服务器 A 发暂停帧,最终让网卡暂停。这个过程是压力逐级回溯的,每一级都需要足够的 Buffer 来“吸收”上游继续发来的数据。如果中间某一级 Buffer 太小,还没来得及发暂停帧就已经把数据丢了,那 PFC 就没完成它的任务。

所以说,PFC 本质上是在“每个链路上做刹车的动作”,而不是像 TCP 那样的端到端拥塞控制。它无法感知真正的业务流,也不会去调整发送窗口。一旦链路数量和层级很多,逐跳反馈的延迟、Buffer 需求和排队复杂度都会上升。

3. 让 PFC 真正落地的配置实践:交换机、网卡与 Buffer 规划

3.1 部署前先回答三个问题

我见过不少团队直接照搬厂商文档“开启 PFC”,然后就把问题甩给网络。实际上 PFC 不是开关,它是一套需要统筹设计的机制。动手配置之前,建议先回答三个问题:

第一个问题:这条链路上真的有无损流量吗?如果链路只承载普通 TCP 或可容忍丢包的业务,PFC 不但没用,反而可能引入暂停风暴,影响整条链路。只有 RoCE、FCoE 这类“不能丢包”的流量才需要 PFC。第二个问题:无损流量走哪些 VLAN、哪些 802.1p 优先级?这决定了交换机要启用哪个队列的 PFC,以及网卡要打什么标记。第三个问题:Buffer 够不够?PFC 的前提是“拥塞时不丢包”,不丢包就需要把数据暂时存放在 Buffer 里。如果不给无损队列预留足够的 Buffer,PFC 就是一个空转的假把式——暂停帧发了,但队列还是爆了,包还是丢了。

这些问题想清楚之后,再进入具体配置。

3.2 交换机端配置示例

不同厂商的命令有差异,但核心概念差不多。以常见的数据中心交换机为例,配置通常包含三部分:全局开启 PFC、指定某个优先级为 no-drop、设置该队列的暂停阈值和恢复阈值。

一段典型的配置形态如下(具体可参考你的设备手册,这里给出通用形态):

interface Ethernet1/1 priority-flow-control mode on priority-flow-control priority 3 no-drop priority-flow-control priority 3 pause-threshold 30000 priority-flow-control priority 3 resume-threshold 100

含义解释一下:mode on表示使能 PFC;priority 3 no-drop表示把优先级 3 的队列设置为“不丢弃”队列;pause-threshold是触发暂停的高水位(一般用 buffer cell 为单位),队列占用超过这个值就发暂停帧;resume-threshold是恢复发送的低水位,队列下降到这个值以下,允许对端恢复发送。

如果你用的是华为、H3C 等设备,命令风格会不一样,但要素是相同的:

interface 10GE1/0/1 priority-flow-control enable priority-flow-control priority 3 no-drop

华为设备的思路是先把接口使能 PFC,再声明哪个优先级是 no-drop。有些平台需要把 no-drop 队列同时配置为调度优先级和带宽保证,否则虽然不丢包,但可能出现“停着不走”的调度问题。

3.3 主机网卡与驱动侧的对应配置

光配交换机远远不够。RoCE 流量是从网卡里发出来的,如果网卡不配合,PFC 永远无法真正生效。服务器端的配置主要有三个层面:

第一,网卡驱动要开启 DCB(Data Center Bridging)相关功能。多数 RoCE 网卡(比如 Mellanox/ConnectX 系列)默认支持 PFC,但需要把对应的流量类型绑定到指定的 802.1p 优先级。第二,操作系统的 QoS 映射要正确。Linux 下可以用tc或网卡厂商工具配置 priority map,Windows 下则通常在网卡高级属性里设置。第三,如果主机走的是虚拟化平台(比如 ESXi 或 KVM),还需要在虚拟交换机的端口组上设置 VLAN 优先级标记,否则虚拟机发出的帧可能不携带 PCP 字段。

我曾经遇到过一个案例:交换机上已经开好了 PFC,但虚拟化平台发出来的 RoCE 报文 PCP 全为 0,全部落进了普通队列。结果存储流量一拥塞就丢包,客户还以为是网络设备的问题。后来通过在分布式交换机上配置 QoS 标记,把对应 VLAN 的流量重新标为 PCP 3,问题才彻底解决。这个坑非常典型,排查时需要第一时间确认“报文的实际 PCP 值到底是什么”,不能只看配置界面。

3.4 Buffer 规划:无损队列的容量怎么算

Buffer 规划是 PFC 配置里最容易被忽略、也最影响成败的一步。PFC 能保证不丢包的前提是:从“队列开始拥塞”到“对端完全停发”的这段时间里,所有继续到达的数据都有地方放。这个量在工程上通常用 BDP(带宽时延积)来估算:

无损队列 Buffer ≈ 链路带宽 × 端到端时延 ÷ 8

举个例子:100Gbps 链路,端到端时延如果是 1 微秒,那么需要的 Buffer 大约是 100 × 10^9 × 10^-6 ÷ 8 = 12.5 KB。这看起来很小,但实际上这里的“端到端时延”不是物理链路时延,而是要考虑暂停帧传递时间、对端处理时间、报文序列化时间等多方面因素。如果跨机柜、跨机房,RTT 变成毫秒级,需要的 Buffer 就是百 MB 甚至 GB 级,这在交换机硬件上根本不现实。

所以你在真实网络里看到的无损队列,通常只开在同一机房、低时延路径上。跨广域网、跨数据中心的场景,单纯靠 PFC 是无法做到严格无损的。这也是为什么无损网络方案通常要配合 ECMP 的负载均衡策略、控制路径长度,并想尽办法降低 RTT。

在具体设备上配置 Buffer 时,有几个实操经验可以分享:

  • 无损队列的 Xoff 阈值不宜设置得过小。建议先配一个合理默认值,然后通过观察交换机上的 buffer watermark 统计来持续调整,而不是一步到位压极限。
  • 不要让 no-drop 队列吃掉所有共享 Buffer。有些交换机共用一个 Buffer 池,某个队列占满后,其他普通队列会没有空间可用,导致 TCP 等其他流量被“殃及池鱼”。合理做法是给每个队列设置 buffer limit 或共享池权重,防止单个队列独占。
  • 如果设备支持 PFC Watchdog,一定要在实验环境充分验证后再决定是否全局启用。Watchdog 能检测长时间暂停并自动恢复,但触发策略不合理时,可能主动丢包,反而破坏无损语义。

3.5 配置里最容易踩的几个坑

前面提到了几个配置常见的坑,这里集中列一下,方便对照检查。

第一个坑:全局开 PFC,而不是按需在路径上开。正确的做法是只在承载无损流量的物理链路上开启 PFC,未承载无损流量的端口保持关闭状态。否则 qos 队列的暂停逻辑会把普通流量也卷进去。

第二个坑:PCP 映射不一致。交换机上改优先级,网卡没改;或者虚拟机端口组设置的 PCP 和物理交换机不一致。这种问题很难一眼看出来,建议配置前后抓包确认,或者对比接口的 PFC 计数。

第三个坑:只配置了 no-drop,没有配置对应的调度带宽。无损队列带宽得不到保证,PFC 暂停会让存储流量吞吐变得忽高忽低,应用侧表现为“间歇性卡顿”。

4. PFC 引发的事故复盘:死锁、拥塞扩散与监控预警

4.1 事故一:PFC 暂停帧暴增,存储 IOPS 大幅下降

回到文章开头说的那起故障。现象是存储节点的 IOPS 突然从 30 万掉到 8 万,应用侧偶发超时。我登到接入交换机上一看,连接存储服务器的端口上,priority pause frames received 和 sent 都在快速上涨,伴随队列 buffer watermark 居高不下。

第一反应是检查是不是有广播风暴或者链路 CRC 错误。查了一圈,物理层干净,没有错包,端口速率也正常。再顺着流量的来源查,发现同一台接入交换机上,有几个虚拟机节点正在做大数据分析,产生了大量突发流量。这些流量和存储流量走了同一条上行链路,而且它们的 802.1p 优先级都被设成了 3,和 RoCE 挤在了同一个队列里。

结果就是:普通计算流量突发,把无损队列的水位顶到了 Xoff 阈值,PFC 开始暂停存储节点的发送。存储流量本身并没有拥塞,纯粹是被“同队列的其他流量”连坐了。这个事故的教训很直接:PFC 是按优先级隔离的,不是按应用隔离的。如果你把多个互不相关的业务放进同一个 no-drop 队列,任何一个业务的突发都会堵住所有同队列的业务。

后来我们做的改动是:把所有非存储流量全部改标为 PCP 0/1,存储流量单独用 PCP 3;同时在出向调度上给 no-drop 队列设置独立的带宽保障,避免被尽力而为流量挤压。调整后,同样的业务模型下,PFC 暂停计数回归正常水平,IOPS 也稳定了。

4.2 事故二:成环拓扑下的 PFC 死锁

另一次事故比第一次严重,是半夜被值班电话叫起来处理的。现象是存储网络整体性能归零,交换机上大量端口出现长时间暂停,PFC 暂停计数疯狂跳动,业务完全不可用。

当时网络拓扑是叶脊结构,叶交换机之间通过 MLAG 做了双活互联。某个存储设备出现异常,持续向网络里发送大量数据,数据在叶脊之间的多个路径上形成了循环传播的趋势。由于 PFC 是逐跳的,A 交换机因为出站拥塞,向 B 交换机发暂停;而 B 交换机也因为另一个方向的拥塞,向 A 发暂停。这样一来,两个方向互相暂停,形成一个循环等待的状态,谁也没法继续发送。这就是所谓的 PFC 死锁。

PFC 死锁的排查难点在于:问题不在“某一条链路”,而在“链路之间的依赖关系”。从交换机的视角看,每个端口都在正常收暂停帧、发暂停帧,仿佛一切正常,但整个网络的数据流却是静止的。排查了很长时间,最后是通过关闭相关端口的 PFC 功能,人为打破暂停循环,网络才恢复。

这个事故给我的启发是:PFC 并不自带“死锁恢复”机制。如果真的需要高强度可靠性,要么在硬件层面启用 PFC Watchdog 并配置合理的自动恢复策略,要么在架构层面避免多路径环路与 PFC 的无损语义叠加。比如在 MLAG 或 ECMP 场景下,要仔细评估多路径是否会在特定故障态下形成反向暂停依赖。

4.3 应该盯紧的 PFC 监控指标

经历过这两次事故之后,我把 PFC 相关的监控项整理成了一个清单,运维团队日常盯这五项足够:

指标含义预警建议
Priority pause frames sent / received每个优先级下发的暂停帧数量持续增长说明对端 Buffer 不足或拥塞未缓解
No-drop queue buffer watermark无损队列 Buffer 占用最高水位频繁接近 Xoff 阈值,说明容量规划偏紧
No-drop queue dropped packets无损队列丢包计数正常应为 0,一旦出现即为重大异常
Link CRC / error counters物理层错误计数有错包先查光模块、线缆和端口协商
ECN marked packets(如果启用)拥塞标记报文数量配合 PFC 判断拥塞扩散范围

在告警阈值方面,不建议只看“是否不为 0”,因为正常业务波动也会产生暂停帧。更合理的做法是建立基线:先观察一周的正常运行数据,记录 PFC 暂停帧的“正常波动范围”,再设置告警线。比如基线是每秒不超过 1000 个暂停帧,超过 5 倍就告警。

4.4 什么时候应该关掉 PFC

PFC 不是所有场景都适用。如果你排查到以下情况,可以考虑在该链路上关闭 PFC,改用其他手段解决:

  • 链路上已经没有 RoCE/FCoE 等无损协议,只剩下 TCP/UDP 流量。
  • 应用能够通过自身重传机制容忍偶发丢包,不需要严格无损。
  • 拥塞现象频繁触发,但根源是物理链路负载超限,这时候 PFC 只能掩盖问题,不能解决问题。
  • 网络中存在环路或未收敛的状态,PFC 会助长暂停风暴。

相反,只要链路还在承载 RoCE 等无损业务,就不要轻易关闭 PFC。正确的思路是围绕 PFC 做“配套治理”:尽可能减少同队列业务混跑、优化 Buffer 阈值、监控暂停计数、推动应用侧对拥塞做出反馈。这正好引到本文最后一个话题。

5. PFC 之外:从无损链路到端到端无损数据中心

5.1 ECN 与 PFC 如何分工

PFC 本质是链路层的“刹车”,但它有一个天然盲区:它不知道拥塞的根源在哪里,也不知道该让哪个发送端减速。如果不同时做端到端的拥塞控制,PFC 就只是把丢包变成排队,把所有拥塞压力堆积在交换机 Buffer 里。就好比高速公路上出了事故,你只在每个入口处拦住车辆,但不知道哪辆车该绕行,最终只会让整条路越来越堵。

ECN(Explicit Congestion Notification,显式拥塞通知)补上了这个短板。交换机检测到队列拥塞时,不再直接丢包,而是在 IP 报文头上打一个 ECN 标记(CE),接收端收到标记后,通过拥塞通知报文反馈给发送端,发送端据此主动降速。ECN 解决的是“源端感知拥塞并调节发送速率”,PFC 解决的是“在调节生效之前,不让缓冲队列彻底爆掉”。两者是配合关系:ECN 负责端到端的速率调整,PFC 为这个调整过程兜底。

打个比方:ECN 是前车的刹车灯,告诉后车“该减速了”;PFC 是安全带,防止刹车不及时的时候人飞出去。你不能只靠安全带不踩刹车,也不能只踩刹车不系安全带。

5.2 DCQCN:把拥塞信息送回源端

在 RoCEv2 无损网络里,最有代表性的端到端拥塞控制算法是 DCQCN。它的工作流程大致是这样:交换机在队列超过阈值但对还未超过丢包阈值时,对报文做 ECN 标记;接收端 NIC 发现带 ECN 标记的报文后,生成 CNP(Congestion Notification Packet)报文,反馈给发送端;发送端收到 CNP 后,按概率降低发送速率,并进入慢启动恢复阶段。这套机制的巧妙之处在于:它把拥塞检测放在交换机,把速率调节放在服务器网卡,两者各司其职。

有了 DCQCN 这类机制,PFC 在正常情况下的触发频率可以被压得很低。很多人理想中的无损网络状态是:ECN 负责 99% 的拥塞控制,PFC 只作为极端突发情况下的最后一道防线。如果你发现某条链路的 PFC 暂停帧计数非常高,通常说明 ECN 阈值配置不合理,或者端到端算法没有正常工作,而不是单纯怪 PFC 本身。

5.3 我的一点个人体会

做了这么多年网络运维,我对 PFC 的态度经历了三个阶段:最开始觉得它就是个高级流控开关,打开就行;后来踩了坑,觉得它是个惹祸精,动不动就把业务搞挂;再后来理解了它的底层逻辑和配套机制,才意识到——PFC 是一把工具,好不好用取决于你会不会用。

现在我做无损网络方案时,一定会先问清楚几个问题:流量从哪里来,要到哪里去,哪些业务绝对不能丢包,哪些业务可以容忍丢包,网络 RTT 大概是多少,设备 Buffer 容量到底够不够。这些问题想清楚之后,PFC 的配置反而是顺水推舟的事。

如果你现在正准备在网络上开启 PFC,我的建议是:先小范围试点,把监控打牢,对着基线数据调参,再逐步扩大范围。不要指望一次配置一劳永逸,因为业务模型一变,Buffer 水位、暂停频率、ECN 阈值这些参数都得重新评估。PFC 本身不复杂,复杂的是它所在的那张网络。希望这篇文章能让你少走一些弯路。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询