服务器专题 | 第21期:查协商速率与AER:出厂体检表
一台服务器到货,点亮了,系统里网卡、硬盘都认出来了,跑起来也不报错。这算验过货了吗?不算。点亮只证明链路通了,没证明链路跑在应有的速度上,也没证明链路跑得干净。真正要查的,是两行平时没人翻的数字:一行是 PCIe 链路谈出来的速度和宽度,一行是高级错误报告(AER)计数器里的错误账。这篇只讲这两行怎么查、查出什么算有问题。
先看谈出来的那一行
PCIe 链路的速度不是铭牌定的,是两端设备开机时谈出来的。链路训练与状态机(LTSSM)在上电后走 Detect、Polling、Configuration 几个状态,两边交换训练序列,把通道极性、通道编号、均衡参数和速率一一谈妥,最后落在 L0 才开始传数据2。谈不拢的地方,链路不会死撑,它会降速、降宽,找一个能站得住的档位先跑起来。能跑,和跑满,是两回事。
查的办法很具体:Linux 下用 lspci -vvv 看 Express 能力段。LnkCap 一行写的是这条链路宣称的能力,LnkSta 一行写的是谈出来的实际速度和宽度1。两行一对照,落差立刻现形。Gen1 到 Gen5 每通道速率分别是 2.5、5、8、16、32 GT/s,x16 单向带宽对应约 4、8、15.8、31.5、63.0 GB/s3。一张标称 x16 Gen4 的卡,谈成 x8 Gen3,单向带宽就从约 31.5 GB/s 跌到约 7.9 GB/s,只剩四分之一。卡没坏,槽没坏,系统也没报错,性能却先打了对折。
同一张卡:标称 x16 Gen4 约 31.5 GB/s,谈成 x8 Gen3 只剩约 7.9 GB/s(示意图为程序绘制,长度按带宽比例)
这种落差不是纸上谈兵。英特尔一份技术通告写明:部分服务器主板在冷复位训练时,可能把第三方 x8 卡的链路宽度降到 x4 甚至 x2,发生率约 1%4。1% 听着小,落到某一台机器上就是 100%:一台机器的网卡如果长期跑在 x2 上,瓶颈不在网卡本身,在那条没谈好的链路上。而且降速降宽之后,链路自己不会再涨回去——除非重训。验收时不看 LnkSta,等于把一次性的谈判结果当成了永久的出厂状态。
所以第一条体检项只有一句话:每张关键卡的 LnkSta,速度与宽度都要对上 LnkCap,对不上的,记下来、重训一次、再看一次。重训后仍谈不上去的,再去查槽位、转接卡、固件版本。顺序不能反:先确认谈判结果,再怀疑硬件。
再看错误计数那一行
速度谈妥了,还要看链路跑得干不干净。PCIe 的错误分三档,档位按影响分5。可纠正错误由硬件自己消化,不用软件插手,也不丢数据,代价是重传与重训——性能税,不致命。不可纠正的非致命错误,坏的是某一次传输,链路本身还能用。不可纠正的致命错误,坏的是链路本身的可靠性。
查的办法同样具体:lspci -vvv 里 AER 一段,UESta 与 CESta 两行分别列着不可纠与可纠错误的名目;Linux 内核还会把 AER 计数暴露成 sysfs 属性5。验收时的做法是抄两遍:到货先抄一遍当基线,跑完压力测试再抄一遍。两次一减,新增的数才是这台机器自己的。只抄一遍没用——计数器不会自己清零,到货时的读数里可能混着出厂测试留下的旧账。
AER 三档:可纠正错误硬件自己消化,不可纠正分非致命与致命两档(示意图为程序绘制)
三档的处置各不相同。可纠正错误计数在涨,机器照常跑,但要问一句:涨得快不快。内核文档里有个细节值得留意:可纠正与非致命错误的日志是限流的,默认 5 秒内同类事件只报 10 条,致命错误与下游端口遏制(DPC)事件不限流5。限流不是为了好看,是因为可纠正错误在真实链路上并不罕见——罕见的是它突然加速。一次验收里可纠正计数纹丝不动,和压测一夜涨了几千条,是两种完全不同的体检结果,前者可以放行,后者要留下来查信号完整性。
不可纠正错误计数不为零,不管非致命还是致命,都不能直接放行。非致命错误意味着已经有传输不可靠过;致命错误意味着链路本身出过问题。戴尔的事件手册里有一条对应的记录:下游端口遏制事件发生时,系统会通知操作系统尝试恢复6。这类事件在出厂体检里出现,正确动作不是重启了事,而是把当时的错误名目、头日志、发生时间留下来,换槽、换卡、升级固件逐项排除。有过先例:某 Linux 发行版在遏制事件后恢复设备失败,最终只能靠重启恢复7。能恢复不等于没病根,体检的意义正在于把病根留在纸面上。
一张出厂体检表
落到一张表上,体检项其实只有五条。速度:LnkSta 速率对上 LnkCap。宽度:LnkSta 宽度对上 LnkCap。第三条:到货基线的可纠正错误计数。第四条:压测前后的不可纠正错误计数,必须为零。第五条:重训或复位后复查一遍 LnkSta,确认谈判结果稳定,不是时好时坏。五条全过,机器才算验过货;任何一条不过,备注里写清楚落差数字和复查结果,不要只写“正常”两个字。
以小见大的一层判断:服务器验收里最常见的错觉,是把“能跑”当成“跑对了”。铭牌写的是能力上限,谈判桌上谈出来的是实际档位,计数器里记的是跑过之后的真实代价。三样东西不在一个层面上,验收就得三样分开查。往深里看,这也是整机生意里反复出现的形状:单点参数都对,组合起来才现形——第 20 期内存降频是这个形状,链路谈判也是这个形状。看一台机器,不能只看它由什么零件组成,要看这些零件第一次握手时谈成了什么,以及握手之后留下了多少痕迹。
没完全想通、留下一个问题:可纠正错误的“正常值”到底是多少,至今没见过哪家厂商公开写出一条验收红线。计数为零当然好,可真实链路上偶发的可纠正错误并不罕见;涨多少算异常,缺一个公开的、可复现的口径。在没有这条线之前,体检表上的合格线只能先写成工作规则:交付基线清楚、压测后零增长、不可纠正为零。这条线是作者的工作建议,不是厂商规范——等有人把红线写出来,这张表再改。
觉 然 小 注
铭牌写的是能跑多快,谈判桌上谈出来的是实际跑多快。验收不是信铭牌,是看谈判结果。
· · ·
九羲科技|服务器 · 私有 AI · 存力方案
系列目录
第1期 | 73% 的整机钱,都给了 GPU 板组
第2期 | 4500 颗芯片撑起 95% 的机架价值
第3期 | 拆一台 2U 双路:通用服务器的钱花在哪
第4期 | 大铁盒子,值钱的不是铁
第5期 | 冻结点:L5 之后结构不许再改
第6期 | 能点亮不等于能交付:十二层验什么
第7期 | 内存离 CPU 有多远:NUMA 的延迟税
第8期 | 带宽不是买速度,是买并行度
第9期 | 一颗坏芯片,怎样不拖垮整机
第10期 | 数据上台三步,每步都在花时间
第11期 | CXL 内存慢一档,为什么还值得买
第12期 | 存力只在关键路径上才算数
第13期 | 链路是谈出来的:开机几秒谈什么
第14期 | 四电平挤带宽:SerDes在替谁赎买
第15期 | 端口数好看,带宽要看上行
第16期 | 把故障关进一个端口
第17期 | 设备能缓存主机内存,变了什么
第18期 | 数据直进 GPU,省掉了什么
第19期 | 先画归属图,再谈配置
第20期 | 报价单上看不见的内存降频账
引用与出处
[1] Intel. Using lspci Utility to Read Negotiated Link Speed. intel.com.
https://www.intel.com/content/www/us/en/docs/programmable/683501/23-2-10-0-0/using-lspci-utility-to-read-negotiated.html
[2] Teledyne LeCroy. An Under-the-Hood View of PCIe 3.0 Link Training (Part I). blog.teledynelecroy.com.
https://blog.teledynelecroy.com/2014/11/an-under-hood-view-of-pcie-30-link.html?m=1
[3] PCI Express. 维基百科汇总表(速率与带宽值转引自 PCI-SIG 各代规范,二手转引,成色如注). en.wikipedia.org.
https://en.wikipedia.org/wiki/Pci-e
[4] Intel. PCIe Link Width May Downgrade to x4 or x2 with Third Party PCIe Add-in Card Technical Advisory. intel.com.
http://intel.com/content/www/us/en/content-details/840196/pcie-link-width-may-downgrade-to-x4-or-x2-with-third-party-pcie-add-in-card-technical-advisory.html
[5] Linux Kernel. The PCI Express Advanced Error Reporting Driver Guide HOWTO. kernel.org.
https://www.kernel.org/doc/html/v5.3/PCI/pcieaer-howto.html
[6] Dell. PowerEdge Servers Error and Event Messages Reference Guide, PCI3025. dell.com.
https://www.dell.com/support/manuals/fr-fr/poweredge-xr4000r/error_event_message_guide_b/pcipci-device-event-messages?guid=guid-8805d2e5-599e-4eec-a92c-cda43f42d29f&lang=en-us
[7] Dell. PowerEdge Systems Running SUSE Linux Enterprise Server 15 Release Notes, SLES15 SP3 DPC recovery issue. dell.com.
https://www.dell.com/support/manuals/en-pk/suse-linux-enterprise-server-v15/sles15_rn_pub/sles15-sp3-fails-to-recover-the-device-from-downstream-port-containment?guid=guid-ddea5087-e096-46c3-8fb8-c20a839552fd&lang=en-us
下一篇|第22期:RAID 1/5/10 不是信仰题:按故障域和 IO 形状选。