如果只是看规格表,好像并不复杂:
64 GT/s、PAM4、x4、E1.S/E3.S,把盘插上去,跑个 FIO,看看能不能达到二十几个 GB/s,不就完了吗?
但真正进入研发验证现场以后,会发现问题远没有这么简单。
有时候最麻烦的甚至不是:
“Gen6 Link起不来。”
而是:
Link明明已经稳定工作在Gen6 x4,系统也能正常识别SSD,可一旦中间增加PCIe Switch,性能就掉了10%、20%,甚至更多。
这时候到底是谁的问题?
是 Switch?
是 Cable?
是转接板?
是 Gen6 Signal Integrity?
还是 SSD Controller 本身与 Switch 之间的 Flow Control 出现了问题?
最近,我们围绕一套 PCIe Gen6 SSD 测试环境和成都一个PCIe 6.0 E3.S SSD研发客户做了一次四十多分钟的技术交流。
讨论从最开始的:
PCIe Gen6 Switch;
E1.S/E3.S Adapter;
CXL x8/x16;
Flow Control Credit;
协议分析仪抓包;
FIO 性能对比;
Gen6 8-Bay JBOF;
Power Cycle;
PAM;
Fault Injection;
以及 Gen6 环境下为什么不建议反复人工插拔 SSD。
看起来问题很多,但整场交流其实围绕着一条非常清晰的主线:
一套真正可用于Gen6 SSD研发的测试环境,绝不能只验证“能不能Link Up”,还必须验证设备进入真实Switch拓扑以后,协议、流控、性能和可靠性是不是仍然正常。
我们目前也在看能否找到一块 PCIe Gen6 x4 E1.S SSD,主要是配合现有 Gen6 测试工具做实验、拍摄高清视频和搭建演示环境,包括:
PCIe Gen6 Protocol Analyzer;
Protocol Tester;
SSD Validation System;
Power / Fault Injection;
Gen6 Switch及各种Adapter。
目前市场上Gen6 SSD仍旧买不到,当然准确的理解应该是:
特定型号、特定Form Factor、能够自由用于研发测试的样品获取仍然困难,并不是市场上完全没有量产Gen6 SSD。
截至目前,Micron 官方的 9650 已经是一款 PCIe Gen6 x4 数据中心 SSD,提供 E1.S 和 E3.S,官方最高顺序读取达到 28 GB/s、随机读取达到 5.5 MIOPS;Micron 也已经明确表示 9650 正在量产出货。
Samsung 也在 2026年7月8日正式宣布开始量产 PCIe 6.0 企业级 SSD PM1763。
所以现在行业已经从:
“有没有Gen6 SSD”
逐步进入:
“我能不能方便地拿到我要的Gen6 SSD,并放进自己的验证环境里反复折腾”
这个阶段。
这两件事完全不是一回事。
大约三分钟后,话题开始进入环境搭建。
客户已经在考虑使用 我们Saniffer公司销售的Gen6 PCIe Switch Card。
当前 Serial Cables 基于 Broadcom Atlas 3 的 Gen6 Host Card,正式产品版本提供:
4个Gen6 x8 MCIO下行接口;
以及:
1个Gen6 x16 Straddle Mount接口;
整张卡可以向 Switch 下游提供 64 Lane 的 Gen6 Connectivity。更重要的是,这类架构甚至允许上游先使用现有 Gen5 Host,而在 Switch 下游先建立 Gen6 Endpoint 验证环境。
于是问题来了:
如果我现在只是测一块:
PCIe Gen6 x4 E1.S SSD,
到底买 x8 Adapter 就够了,还是干脆买 x16?
现场的判断非常直接。
普通 PCIe Gen6 NVMe SSD,无论是 E1.S 还是很多 E3.S 产品,常见数据接口还是:
PCIe Gen6 x4。
所以仅从 SSD 来看,使用能够承载 x4 Device 的转接方案已经足够。
但客户的实验室未来还有一个可能性:
CXL。
一旦开始测试 CXL Memory Device,尤其是更高带宽的 Type 3 Memory Device,x8甚至x16就会变得很常见。
因此现场建议是:
如果x8和x16方案投资差异可以接受,而未来明确可能做CXL,那么尽量不要把实验环境一开始就锁死在x4。
交流中因此专门讨论了:
Gen6 x4 SSD;
CXL x8;
CXL x16
三种设备如何尽量通过一套基础测试环境覆盖。
客户最后也更倾向于给未来留出 x16 的扩展能力。
这其实是搭实验室时非常值得注意的一件事:
不要只按照今天桌子上的DUT买设备。
尤其是 PCIe Gen6/CXL 环境,一块 Switch、一套 Cable、一批 Adapter 很可能会用很多年。
今天测的是:
Gen6 x4 SSD;
明年可能就变成:
CXL x8 Memory Device;
后面甚至可能出现:
CXL x16 AIC。
如果底层拓扑提前留好余量,后面会轻松很多。
接下来讨论进一步落到了 EDSFF 的机械结构,这主要涉及到 E1.S / E3.S 等不同EDSFF转接卡及对应的Holder/Bracket。
同一张高速电气 Adapter,很多时候 PCB 主体设计可能非常接近。
但:
E1.S的长度、宽度、固定方式;
E3.S的机械尺寸;
不同厚度的Device
并不相同。
因此产品往往会通过不同的:
SSD Drive Holder / Bracket
把 DUT 正确固定。
现场甚至讨论了一种实验室临时省成本的方法:
如果偶尔才测试另一种尺寸,可以拆掉原本的固定支架,再用临时机械方式固定。
不过如果是正式研发环境,我并不建议把这种临时办法当作长期方案。
到了 PCIe Gen6,机械固定本身已经不仅仅是“盘别掉下来”。
Connector mating;
PCB受力;
接触稳定性;
线缆弯曲状态
都可能进一步影响高速链路的重复性。
所以如果某一种 Form Factor 会被高频使用,最好还是配置真正匹配的 Holder。
会议进行到7分钟左右,大家讨论:
同一套 Adapter 能不能既接 NVMe SSD,又接 CXL Memory Device?
现场为了方便理解,用了一个比较口语化的说法:
“CXL也是PCIe上层,就像NVMe一样。”
当然,CXL并不能简单等同于“像NVMe那样的PCIe上层协议”。
CXL本身定义了不同的协议路径,其中包括:
CXL.io
以及:
CXL.cache / CXL.mem。
CXL.io承载和PCIe相关的设备发现、配置等语义,而CXL.cache/CXL.mem则负责缓存一致性和内存语义。
CXL 3.0把链路速率提升到 64 GT/s,可以基于PCIe 6.0级别的高速物理基础设施运行,并扩展到最多x16 Lane。
所以为什么一块好的 EDSFF Adapter 可以同时宣称支持:
PCIe;
NVMe;
CXL?
原因并不是:
“NVMe和CXL是一回事。”
而是:
对于纯物理转接设备来说,只要它满足对应的Connector、Lane数量、Sideband以及Gen6 Signal Integrity要求,本身并不需要理解上层跑的是NVMe还是CXL.mem。
它做的主要工作仍然是把物理链路完整送过去。
这个概念一定要分清。
前面的讨论还属于“怎么买设备”。
到了大约9分半,客户突然提出了一个真正值得分析的现场问题。
他们之前已经做过一套类似环境:
SSD连接PCIe Switch;
系统能够正常枚举;
链路训练也没有明显问题。
换句话说:
Link是起来的。
但一跑性能:
就是跑不上去。
这其实是高速PCIe验证中一个非常典型、也非常容易误判的问题。
很多工程师看到:
Gen6 x4;
Link Up;
系统识别正常;
lspci也正常,
第一反应会觉得:
“PCIe已经没问题了。”
其实远远不够。
Link Up只能说明双方建立了链路。
它不能证明:
协议效率正常;
Flow Control正常;
Buffer没有堵塞;
大量数据传输时没有Replay;
SSD Controller和Switch之间没有互操作问题;
更不能证明最终FIO一定能跑满。
所以:
“能建链”和“能跑满性能”是两个完全不同的验证阶段。
为了说明这一点,现场回顾了一个 Gen5 时代碰到过的案例。
这里我把具体客户和主控型号隐去,只保留技术现象。
当时某企业级 Gen5 SSD:
直接通过 Adapter 接到 CPU Root Complex;
跑 FIO 或性能软件时,
读写性能都正常。
但把拓扑改成:
CPU → PCIe Switch → SSD
以后,
其中一个方向的性能明显下降,大约损失一个不容忽视的比例,~8%。
更奇怪的是:
另一个方向却没有同样幅度的下降,反而单纯从数字来看还高了一丁点(可以忽略)。
于是第一反应当然是:
Switch有问题?
但后来拿其他已经比较成熟的 SSD 方案,在同一套 Switch 环境里做对比测试,却没有出现相同现象。
最终排查方向落到了:
特定SSD Controller与Switch之间的交互。
这个案例特别值得记住。
因为它告诉我们:
“我的SSD直连CPU性能没问题”,并不能证明这块SSD进入真实服务器和存储系统以后也一定没问题。
原因其实很简单。
真正的数据中心系统不一定永远是:
CPU → SSD。
大量实际拓扑可能是:
CPU
↓
PCIe Switch
↓
Backplane / JBOF
↓
SSD
甚至可能继续加入:
Retimer;
Redriver;
Cable;
多级Switch。
所以一块企业级 SSD 最终面对的“对端”,很可能并不是 CPU Root Port。
而是:
PCIe Switch Downstream Port。
会议中也特别强调:
如果某SSD Controller直连CPU完全正常,但进入一个主流PCIe Switch拓扑以后长期存在性能异常,那么对企业级产品来说,这依然是必须解决的互操作问题。
因为最终客户不会接受:
“我们和CPU直连的时候没问题。”
客户只会问:
“为什么别人家的盘插在我的服务器里正常,你家的不正常?”
这就是工程问题。
现场随后讨论到:
增加 PCIe Switch 当然不可能完全没有代价。
数据包从 CPU 出来以后进入 Switch:
需要接收;
解析;
查找转发目标;
经过内部 Buffer/Fabric;
再从对应 Downstream Port 发出去。
所以:
Latency必然会增加。
交流里现场还提到了一个大致延迟数字,但讲话人自己也明确表示记忆并不确定,所以这里不引用具体数值。
真正要区分的是:
和
不是一回事。
对连续大流量传输来说,如果:
Switch带宽足够;
上行没有成为瓶颈;
链路没有大量错误;
Flow Control正常;
SSD能够及时处理数据,
那么仅仅多经过一级 Switch,不应该简单推导出“带宽必然下降10%~20%”。
如果真掉了这么多,
就值得继续往下查。
大约15分钟时,整个交流进入了最核心的一段。
如果:
Link Speed正常;
Link Width正常;
没有明显掉速、掉Lane;
但经过Switch性能下降,
应该怎么办?
现场给出的方向是:
抓PCIe协议。
而且不能只随便看几个 TLP。
重点看:
Flow Control。
SerialTek 当前 Kodiak PCIe 6.0/CXL Protocol Analyzer 的 Protocol Reports 里,官方直接把:
Flow Control Update Delay;
Exhausted Flow Control Credits;
Unexpected Flow Control State Transition
列为可以自动识别的异常/警告项目。
为什么 Flow Control 会影响 SSD 性能?
SerialTek PCIe 5.0和6.0 协议分析仪提供的针对Flow control分析的专家分析功能是业内独有的分析PCIe链路双方沟通性能不稳定创新功能。
这件事其实可以用一个很形象的例子来解释。
PCIe不是发送端想发多少Packet就随便发多少。
接收端内部有 Buffer。
所以它要通过 Credit 告诉发送端:
“我现在还能接多少数据。”
可以把接收端想象成一个仓库。
Credit就像:
空货位数量。
如果仓库告诉货车:
“我还有100个空位。”
发送端就可以继续发。
但如果 Credit 用完:
发送端即使有一堆数据准备发送,
也必须等。
这里要把交流中的一个口语化说法稍微修正解释一下。
现场为了方便理解,说:
“SSD告诉Host,你慢点发。”
从协议机制来说,更准确的表达应该是:
Receiver通过Flow Control机制维护、更新可用接收Buffer Credit;Transmitter只有在拥有足够Credit时才能继续发送对应类型的数据。
如果:
Credit长时间耗尽;
Credit Update不及时;
或者某一方向的Buffer管理效率不好,
那么发送端自然会出现等待。
于是你从 FIO 上看到的结果就是:
吞吐量掉下来了。
这也是这一类故障最容易让人困惑的地方。
你去看:
Gen6 x4——正常;
LTSSM——正常;
没有掉到Gen5;
没有掉成x2;
操作系统——正常;
NVMe Drive——正常识别。
甚至:
没有明显 CRC Error。
但:
FIO就是比直连CPU低20%。
为什么?
因为问题可能根本不是:
“Packet传错了。”
而是:
“Packet在等。”
例如写方向:
Host/Switch不停往SSD发数据;
但SSD Controller内部:
Buffer;
NAND调度;
Firmware;
Data Path
处理不够快。
Receiver可用Credit越来越少。
于是前端发送被迫等待。
读方向也是一样。
如果 NAND → Controller → PCIe Packet这一整条数据路径不能及时把数据准备出来,那么Host端看到的就是:
我要数据,但你总让我等。
交流里正是通过这样的方式解释:
为什么 Controller Buffer Architecture 和 Flow Control 最终可以直接表现成 SSD Benchmark 的带宽下降。
这里必须再往下分一层。
性能下降至少有两条完全不同的故障路径。
比如:
Connector;
Cable;
Adapter;
PCB;
SSD本身的PHY;
Switch Port
某一段 Margin 太差。
结果出现:
CRC;
FEC相关错误;
Replay;
Retrain;
甚至Recovery。
这些东西当然会吃掉有效带宽。
交流中也明确提出:
如果 SSD PCB 或信号路径不好,可以从 Analyzer 或 Switch Port 的 Error/Telemetry 中进一步寻找证据。
也就是:
Link很稳定;
没有明显链路错误;
但是:
Credit长期不足;
Flow Control Update异常;
某个方向经常等待。
这种情况才应该重点往:
Controller;
Firmware;
Buffer Architecture;
Switch互操作
方向调查。
所以正确顺序不是:
“性能低→Flow Control有Bug。”
而是:
先把Signal问题排除,再研究协议效率和Flow Control。
PCIe 6.0达到 64 GT/s,采用 PAM4,并引入了固定大小的 FLIT、低延迟 FEC 和更强的 CRC 保护。
其中一个很重要的机制是:
接收端先做 FEC Decode。
如果是 FEC 可以纠正的错误,可以直接恢复。
然后再做 CRC 检查。
如果 CRC 仍然失败,则可以通过 NAK 触发 Replay,让对应 FLIT 重新传输。
所以 Gen6 调试时必须建立一个新的意识:
Link Up不代表Bit Error为零。
而:
系统还能正常工作,也不代表链路没有在花代价纠错。
如果错误率已经高到频繁触发Replay,
性能当然可能受到影响。
因此在“Switch后性能下降”这类问题上,
必须先回答:
到底是因为链路正在不断修错、重传,还是链路非常干净,只是两端在频繁等待Credit?
这两种问题的解决方向完全不同。
如果问题出现在:
CPU → Switch → SSD
这个拓扑,
Analyzer应该放在哪里?
现场建议很明确:
放在:
Switch Downstream Port
和
SSD
之间。
例如:
CPU
↓
Gen6 Switch
↓
PCIe Protocol Analyzer + E1.S Interposer
↓
E1.S SSD
为什么放这里?
因为我们真正想知道的是:
Switch和SSD Controller两个人之间到底在说什么。
谁在等谁?
Credit什么时候耗尽?
哪个方向被Hold?
有没有Error?
有没有Replay?
这样问题才能直接定位。
这一点特别重要。
很多工程师测试性能问题时,会这样做:
系统启动;
Linux起来;
SSD识别;
准备FIO;
打开Analyzer;
开始抓包;
跑FIO。
对于单纯看数据阶段也许够。
但如果你要研究 Flow Control,就不够。
现场特别强调:
Analyzer要在系统开机之前就开始Capture。
因为 PCIe Link 初始化期间双方就会建立 Flow Control 相关状态和 Credit。
这一段必须保留下来。
一个更完整的抓包流程应该是:
Analyzer开始Capture;
↓
Host Power On;
↓
PCIe Link Training;
↓
Device Enumeration;
↓
进入Linux;
↓
确认NVMe Device;
↓
运行与故障完全相同的FIO;
↓
性能下降复现;
↓
Capture停止;
↓
分析Error + Flow Control + Performance Timeline。
这样得到的Trace才真正有价值。
这又是一个很实际的问题。
PCIe Gen6 x4数据量非常大。
如果无脑:
“从开机一直Full Capture”,
Trace Buffer可能很快就被高速FIO数据灌满。
现场因此给出了一个很实际的做法。
当前 Kodiak Enterprise Edition 官方规格是 256 GB Trace Buffer。
现场测试经验里,可以按双向分别分配足够的 Buffer;针对这类问题,并不一定非要把所有 Buffer 全部用完。
交流中建议的例子是:
每个方向约20 GB;
合计约40 GB;
并设置:
任一方向Buffer抓满就自动Stop。
为什么?
因为系统从Boot到Linux、再到执行FIO之前,真正高速的数据量通常并没有压力测试阶段那么夸张。
真正要保护的是:
FIO开始以后那一小段最有价值的数据。
如果还靠人眼看到性能掉了再去按停止:
往往已经来不及了。
这是整个故障复现里另外一个非常容易被忽略的地方。
两个团队都说:
“我们跑FIO。”
完全不代表测试条件一样。
至少应该固定:
Read / Write / Randread / Randwrite;
Block Size;
Queue Depth;
Numjobs;
IO Engine;
Direct IO;
Runtime;
File/Namespace范围;
CPU Affinity;
NUMA;
测试前盘状态;
是否预处理;
甚至散热条件。
交流最后双方也专门达成一个共识:
如果后面要做 A/B 复现测试,
尽量拿到完全相同的测试命令。
否则一边说:
“Switch后只有22GB/s。”
另一边说:
“我们这里27GB/s。”
可能最后只是两边的:
QD;
Block Size;
IO Pattern
根本不一样。
这种比较没有意义。
除了Analyzer,
现场还反复强调了一种非常朴素但有效的方法:
换盘。
拓扑完全不变:
同一台Host;
同一张Switch;
同一根Cable;
同一个Adapter;
同样的FIO命令;
同样的Slot;
只换SSD。
例如:
Switch后:
性能明显下降。
Switch后:
性能基本正常。
那么调查范围立刻缩小。
这不能100%证明:
“DUT Controller一定有Bug。”
但是至少可以非常有力地告诉你:
Switch本身并不是在所有SSD上都造成同样的性能损失。
这时候就应该重点去看:
DUT Firmware;
Controller;
Flow Control;
Buffer;
PHY;
PCIe Transaction行为
之间的差异。
交流中正是用以前的 Gen5 实际案例来说明这种方法。
现场有一句话说得很有意思:
不能简单叫:
“兼容性问题。”
因为:
链路是通的;
Gen6 x4也起来了;
系统也没有掉盘。
那这种问题究竟叫什么?
更准确地说,它属于:
Interoperability / Performance Interaction。
或者:
Controller与Switch拓扑下的协议/性能互操作问题。
这比一句:
“Broadcom Switch不兼容”
或者:
“SSD不兼容Switch”
更加准确。
因为最终到底要改哪一边,
需要抓完Trace才知道。
可能:
SSD Firmware可以解决;
Controller Buffer策略可以调整;
某些Credit相关参数或实现需要分析;
也可能最后发现其实还是Signal问题。
在没有证据之前,
不能先给任何一方“定罪”。
解决单盘以后,
自然会走向多盘。
客户提到,下一轮可能考虑一套“盘柜”。
这里所谓的盘柜,对应现在更准确的产品概念是:
Gen6 JBOF——Just a Bunch Of Flash。
Serial Cables 当前的 Hydra 就是一套 8-Bay Passive Gen6 x8 EDSFF JBOF,支持 PCIe/NVMe/CXL,当前官方列出的Device Form Factor包括 E3.S 2T、E3.L 和 E3.L 2T。
这个设计有一个很有意思的特点:
每个Bay的物理链路可以到x8。
所以今天你可以插:
Gen6 x4 NVMe SSD;
未来也可以用于:
更宽链路的CXL Device。
这正好和前面“实验室别只为今天的x4 SSD设计”呼应起来。
现场随后花了不少时间讲这个拓扑。
Gen6 Switch Card有多个 x8 MCIO接口。
如果接普通单盘,可以:
MCIO x8
↓
拆成两个Gen6 x4
↓
分别连接两个SSD。
而如果接8-Bay JBOF,
则通过相应的高速Cable把Switch的多组Lane送到JBOF Backplane/Paddle Card,再分别进入各个Bay。
因此整个环境可以逐渐变成:
Host
↓
Gen6 Switch
↓
多路MCIO
↓
Gen6 JBOF
↓
8× E3 Device
这已经不再是一张桌子上插一块SSD的环境。
而是越来越接近真正服务器和存储系统中的拓扑。
这对于企业级 SSD 验证尤其重要。
如果只是为了:
“把8块SSD放得整齐一点”,
其实没必要花钱买专业JBOF。
它真正的价值在于:
软件可控。
Hydra当前官方支持:
Per-Slot Power Sequencing;
Hot-Plug Simulation;
Presence Detection;
Temperature Monitoring;
Fan Control;
Power Telemetry;
Python UI;
CLI;
API。
也就是说,测试程序可以做这样的事情:
Slot 1上电;
等待Enumeration;
跑FIO;
记录结果;
Slot 1掉电;
等待5秒;
重新上电;
循环100次;
然后自动切换Slot 2。
这跟工程师站在机器前:
拔盘;
插盘;
拔电源;
插电源
完全不是一回事。
会议当天讨论时,某些扩展模块的价格和交付状态还需要继续向原厂确认,所以现场没有把它们写死。
不过截至目前,Serial Cables Hydra 官方产品页已经明确列出了与 Quarch 的集成能力:
可选:
Quarch PAM - 功耗和sideband边带信号记录、回溯和分析;
以及:
Quarch Breaker - hotplug热插拔 + fault injection底层故障注入。
PAM侧重于:
Voltage;
Current;
Power;
以及相应信号的观测。
Breaker则可以进一步做:
更精细的Power / Signal Switching和Fault Injection。
这样整套系统就可以逐渐从:
“8块盘一起跑FIO”
升级成:
“8块盘自动化跑Power Cycle、Fault Injection、功耗和协议验证”。
这才是研发型 JBOF 的真正意义。
这部分交流里还有一个很好的讨论。
如果JBOF通过MCU控制某个Slot掉电,
它可以很好地完成:
Power Cycle;
Power Sequencing;
自动化上下电测试。
但这和:
真正把Connector上的Power、Sideband甚至Data Lane按指定时序物理断开
仍然不是完全一回事。
所以:
普通JBOF Slot Control
和
Quarch Breaker这种Fault Injection工具
应该理解成两个层次。
前者解决:
自动化。
后者解决:
可控地制造异常。
实际做 PLP、Surprise Removal、Signal Glitch 或非常精细的Hot-Swap Fault测试时,这个区别非常重要。
会议30分钟以后,又聊到了一个非常“实验室”的问题:
能不能直接:
拔出来;
插进去;
拔出来;
再插进去?
偶尔当然可以。
但如果要做:
几十次;
上百次;
甚至大量Regression,
就不应该主要依靠人工反复插拔。
现场给出的理由有两个。
第一:
Connector本身存在机械磨损。
第二:
到了Gen6以后,一点点接触状态变化都有可能进一步影响Signal Integrity。
这里交流中出现了一些具体插拔次数、镀金厚度数字,但没有足够资料证明它们适用于所有Connector,所以不把这些数字作为通用规范引用。
真正需要记住的是:
高速测试环境本身也会老化。
有时候你测着测着发现:
昨天Gen6稳定;
今天突然Error变多。
问题未必是DUT变坏。
也可能是:
Adapter;
Connector;
Cable;
Interposer
经过长期插拔以后,环境本身发生了变化。
这就是为什么好的Validation Lab会尽量提高测试环境的Repeatability。
交流后面还谈到一个非常重要的调试思路。
如果 Analyzer 能够把:
Link Error;
FEC相关状态;
CRC;
Replay;
Training状态
和协议Trace结合起来,
你就可以在调节Channel、EQ或测试Fixture时看到:
链路到底是在变好,还是仅仅“还没掉”。
当前 SerialTek Kodiak 官方资料明确支持 PCIe 6.0 64 GT/s PAM4、FLIT解码,并可识别 FEC 和 Link Training 相关问题;其 Protocol Reports 也可以标记 DLLP CRC、Link CRC、Flow Control Credit等异常。
这比只看:
LnkSta:Speed64GT/s,Width x4
有价值得多。
因为:
64GT/s x4只是状态。
真正的工程问题是:
它以多大的Margin工作在这个状态?
现场为了方便讲解,把 Gen6 Error 简化成:
Correctable Error;
Uncorrectable Error。
这种说法适合理解趋势,但如果严格按照 PCIe 6.0 的机制,应该结合:
FEC;
CRC;
Replay
来看。
PCI-SIG 官方说明:
每个 FLIT 都有 CRC 和 FEC保护;
FEC首先纠正能力范围内的错误;
随后检查CRC;
如果CRC仍然失败,可以发送NAK并触发Replay。
所以真正调试时,并不存在一个放之四海而皆准的:
“低于1000个就合格”
或者:
“低于10000个就可以”
这样的阈值。
正式验证时应该依据:
PCI-SIG规范;
PHY/Controller Vendor要求;
产品自身Validation Criteria
确定Pass/Fail。
而不是凭一个经验数字判断。
讨论到这里,客户也很实际地表示:
Protocol Analyzer价格较高,
短期可能无法购买该设备做问题定位。
这是完全合理的。
因为如果现在的问题只是:
“Switch后为什么性能掉?”
那么先用 Analyzer 把问题性质搞清楚,
比马上采购更重要。
一旦确认团队以后长期要做:
Gen6 SSD Controller;
Firmware;
Switch互操作;
CXL;
Protocol Compliance;
各种偶现问题Debug,
再考虑建立自己的Analyzer环境,逻辑就完全不同。
会议最后几分钟,大家又绕回物理连接。
现场转述了一个来自原厂FAE的观点:
在相同延伸距离下,他更倾向使用高质量高速Cable,而不是让信号全部在较长PCB Trace上走,理由是某些场景下Cable的损耗可能更容易控制。
但这句话绝对不能扩展成:
“Gen6永远是Cable比PCB好。”
真正比较时必须看完整Channel:
PCB材料;
Trace Length;
Via;
Connector;
Cable;
Adapter;
Insertion Loss;
Return Loss;
Crosstalk;
Tx/Rx Equalization
全部加起来。
一张只有几厘米的优质Adapter,
当然可能比一根很长的Cable更容易。
反过来,
一段经过精心设计的低损耗Cable,
也可能比很长的PCB走线更有优势。
所以最靠谱的判断方式不是:
“板还是线?”
而是:
整个Channel Budget到底是多少?
会议最后形成了一个很工程化的结论。
我们这边后续如果拿到那块 Gen6 x4 E1.S SSD,
就搭建测试环境。
客户那边尽量提供:
他们原来的测试命令和条件。
我们用尽量相同的:
DUT类型;
FIO参数;
Host;
Switch;
Adapter/Cable
做一轮对比。
如果:
Switch + Adapter性能正常;
Switch + Cable也正常,
说明整个生态基本没问题。
如果:
某一种连接明显下降,
继续查SI。
如果:
Golden Drive正常;
客户自己的DUT明显下降,
重点抓:
Controller / Flow Control。
如果:
所有盘全部经过Switch都下降,
再回过头研究:
Switch配置;
Host带宽;
上行链路;
拓扑;
测试方法。
这比所有人在会议室里猜:
“是不是Switch有问题?”
有效得多。
以后再遇到:
“SSD直连CPU很快,一过Switch就慢。”
可以按照这个顺序来。
第一步,看Link。
确认:
Gen6还是Gen5?
x4还是x2?
有没有Retrain?
有没有频繁Recovery?
第二步,看Error。
重点判断:
FEC;
CRC;
Replay;
Link Error
是不是在Switch拓扑下明显增加。
如果是:
先查Signal Integrity。
第三步,做Golden Drive A/B。
同一环境换一块成熟参考盘。
如果参考盘正常:
DUT调查优先级明显提高。
第四步,抓完整Boot Trace。
不要FIO开始以后才抓。
要把:
Link Training;
Enumeration;
Flow Control初始化;
进入OS;
FIO
整段留下来。
第五步,重点看Flow Control Credit。
如果没有明显链路错误,
却出现:
Credit Exhaustion;
Update Delay;
长期等待,
就继续分析:
谁在等谁。
第六步,固定FIO条件。
没有完全一致的Workload,
所有性能数字都没有比较价值。
第七步,再判断到底改哪里。
可能是:
SSD Firmware;
Controller Architecture;
PHY;
PCB;
Switch Configuration;
Cable;
Adapter;
System Topology。
不要第一步就认定某一家有问题。
PCIe Gen4、Gen5时代,我们已经越来越习惯问:
“Link起来了吗?”
到了Gen6,这个问题远远不够了。
PCIe 6.0已经进入:
64 GT/s;
PAM4;
FLIT;
FEC;
CRC + Replay
的新体系。
同时,真实服务器拓扑也越来越复杂:
CPU;
Switch;
Retimer;
Cable;
Backplane;
JBOF;
SSD;
CXL Memory Device。
一块设备如果只在:
CPU直连
环境里通过测试,
并不能代表它已经真正准备好进入数据中心。
真正成熟的Gen6验证应该继续问:
经过Switch以后,性能有没有变化?
Credit有没有被耗尽?
有没有异常Replay?
换成不同Host和Switch还能不能稳定工作?
进入8盘JBOF以后还能不能跑?
连续Power Cycle以后会不会掉盘?
CXL x8/x16以后,这套环境还能不能继续复用?
这也是这次技术交流最值得留下来的一个结论:
PCIe Gen6测试的目标,不是证明“链路通了”,而是证明设备进入真实系统拓扑以后,链路、协议、流控、性能和异常恢复依然全部正常。
真正把这些问题一个个找出来,
才叫:
Validation。
希望获得更多关于PCIe5&6.0, CXL, NVMe SSD, SAS/SATA, NVMe over Fabric (NVMoF), NAND,新型存储技术NVM(RRAM/ReRAM, FRAM/FeRAM, MRAM, PCM, 3D-NOR, SRAM/DRAM等) DDR5/LPDDR5以及UFS测试技术和产品,可以查看Saniffer公司2026.2.24最新更新的测试工具白皮书15.1版本,我们已经整理收录在Saniffer公众号的【白皮书】菜单中。
欢迎关注Saniffer公众号,点击底部菜单栏即可免费获取。如有任何技术问题,也可直接在公众号内留言交流。