CMIS 详解:状态机、VDM 遥测与固件管理
CMIS 出现之前,400G 模块是个焊了个温度传感器的黑箱;之后,模块变成一台有规范文档的状态机,可以按通道逐一读取。
向三家厂商要一份 800G 模块的「寄存器映射表」,你会拿到三份文档,没有一份是完整的。这不是厂商故意遮掩;而是一个模块里塞进了八条通道、两幅固件镜像、可编程数据通路和一套功率协商协议,而当初的管理接口却是为固定寄存器的世界设计的,必然出现这种局面。CMIS 是行业的应对方案——一份与 IEEE 802.3 PMD 修正案 同步维护的规范——读懂它,会改变你运维这些模块的方式:最实际的一点,它把「这个模块是否正常?」从一个工单变成了一段脚本。
CMIS 要解决什么问题
上一代管理接口把模块功能映射到固定的内存地址。这在模块还是「一进一出一条激光通路、一种功率状态、最多四条通道」的时候是够用的。400G 或 800G 模块把这每一条假设都打破了:
- 通道数量倍增。 八条电通道可以按软件选择,组合成一个 800G 端口、两个 400G 端口,或其他分拆方式。
- 功率改为协商。 主机必须在每个插槽启用模块前,先知道它会消耗多少功率,因为一台插满的机箱本身就是一道热学计算题(800G 选型指南 讲了这会在哪里咬人)。
- 诊断信息超出了固定寄存器的承载。 每通道误码计数和信号测量无法干净地塞进一张静态映射表。
- 固件变得可升级。 在可插拔、还可能在机箱间搬动的模块上,有了运行镜像和提交镜像两幅镜像。
CMIS 用一个模型回应这四点:模块是一台带规范状态机的小型计算机,主机据此与它对话。
状态机就是契约
CMIS 中最能解释现场行为的部分,是模块与数据通路的状态模型。模块在明确的各个状态间移动,主机被期望去编排这些转换——而不是想当然地认为模块只是「起来了」。
| State | What the module is doing | What the host should do |
|---|---|---|
| ModuleLowPwr | 插入后断电或低功耗待机 | 读取身份信息,协商功率等级 |
| ModulePwrUp | 消耗已分配的全部功率 | 等待;暂不下发数据通路指令 |
| ModuleReady | 准备就绪,可配置数据通路 | 配置通道,然后触发初始化 |
| 数据通路状态(按组) | DPInit → Deinit → Initialized → TxTurnOn → TxTurnedOff → Ready | 仅在 Ready 后拉起;初始化失败最先在此暴露 |
| ModulePwrDn | 主机请求的关断 | 在支持的情况下,移除前先拆除 |
有两个运维层面的推论值得内化。
初始化失败是一种特性
当一组通道无法到达 Ready 状态时,CMIS 会告诉你它卡在了哪个状态。「卡在 DPInit」远比「无链路」更有价值的症候,因为它通常意味着配置不匹配——不支持的通道映射、不支持的速率——而不是芯片坏了。
breakout 分拆是协商出来的,不是魔法
把一个 800G 模块拆成 2x400G 是一次数据通路配置动作。如果你的交换软件与模块在通道分配上意见不一致,这种不一致就会体现在这些状态里——这也解释了为什么同一对器件在某台机箱里能工作,换一台软件更旧的机箱就拒绝。
功率等级:是协商,不是标签
CMIS 定义了功率等级,让主机能在启用模块前按插槽做预算。与当前部署相关的等级如下:
| Class | Maximum power | Role in 2026 deployments |
|---|---|---|
| Class 5 | 7 W | 400G 级别器件,老旧笼子 |
| Class 6 | 10 W | 低功耗 400G/800G 设计 |
| Class 7 | 15 W | 主流 800G DR8/FR4 |
| Class 8 | 20 W | 高功耗器件;需逐插槽核实风冷条件 |
机制比数字更重要:模块宣告自己的等级,主机授予功率,而若授权从未发生,数据通路状态就无法完成。一个在测试台上能正常上电、却在某个机箱插槽里一直停在 ModuleLowPwr 的模块,通常在告诉你:主机拒绝或无法授予该等级——这是插槽预算或认证决策,而非硬件故障。同样的遥测也是 热关断诊断 的支柱,在那里功率等级与实测温度是一起读的。
VDM:能抓住激光器老化的遥测
Vendor Defined Mechanism 是 CMIS 中名字最不起眼、却最具运维价值的部分。它提供一种标准化的方式,用于暴露固定必选集之外的测量值,按描述符寻址,并带有明确的单位与缩放。
| VDM example | What it measures | Why you care |
|---|---|---|
| 每通道 Tx 功率 | 每通道的实际发射功率 | 在链路掉线前抓住老化的驱动 |
| 每通道输入功率 | 每通道的接收功率 | 区分「光弱」与「连接器脏」 |
| FEC 前误码 / 已纠正比特 | 纠错前的信道质量 | 通道上最早的量化磨损信号 |
| 信噪比裕量 | 接收端质量估计 | 预测在附加损耗下哪条链路先失效 |
FEC 前误码计数值得强调。
已纠正误码是无声的
已纠正误码对链路本身不可见(这正是 FEC 的用途),这意味着一条通道可以在端口显示健康的同时,悄悄劣化好几个月。一个每晚采样各通道「已纠正比特增量」的脚本,会把这种无声劣化变成一条趋势线,而趋势线让你能按自己的计划更换模块,而不是按链路的计划。
VDM 是否可用取决于具体器件
并非每个模块都实现全部 VDM——标准定义的是容器与上报契约,而非一份必选测量清单。模块认证的一部分工作,就是把某个具体 SKU 暴露哪些 VDM 写下来,这样你的监控才不会去假设根本不存在的遥测。
固件:两幅镜像与一个提交位
CMIS 固件管理遵循一套运行/提交模型,这对用过交换机软件的人并不陌生:
- 模块有两幅镜像槽位。升级写入的是非活动那幅,所以一次被中断的升级不会动到正在运行的镜像。
- 激活让新镜像变为运行中;提交让它在断电重启后仍然存在。
- 接口按槽位上报版本号,这正是批量盘点可以脚本化的原因。
避免麻烦的纪律:
动手之前先盘点
采集整批设备的运行版本与提交版本;版本混杂比任何人愿意承认的都要常见,也是「某一机架行为不同」最常见的原因。
金丝雀、浸泡、再提交
先在金丝雀小组上升级,激活并浸泡,只有在包含至少一次插拔和一次机箱断电循环的浸泡期之后才提交。在激活当天就提交,正是潜在的镜像版本不符变成全批意外的方式。
同一机柜内保持镜像家族统一
切勿在同一机柜内混用镜像家族——和混用模块厂商是同一个规则,原因也一样:报警阈值和遥测行为会随版本漂移。
CMIS 解决不了什么
有三条边界值得说清,免得有人过度吹捧:
- 互操作性。 CMIS 定义的是对话,不是结果。两个合规模块仍可能在细微之处与主机意见不合;这正是认证模块清单存在的理由。
- 物理质量。 没有任何接口能让一个脏的 MPO 连接器变干净。光路问题依然出在光纤链路里。
- 厂商扩展。 一切专有内容仍躲在厂商专属页背后。CMIS 标准化的是地板,不是天花板。
参考来源
- QSFP-DD MSA - CMIS documentation - the Common Management Interface Specification (revision history, state machine and VDM framework).
- OSFP MSA - management and mechanical context for OSFP-family modules using CMIS.
- OIF - CMIS-LT project - link training extensions building on CMIS for 800G and beyond.
- IEEE 802.3df Task Force - the 800G PMD amendments whose modules CMIS manages; useful for seeing where the standard ends and the management interface begins.
实现细节随 CMIS 版本与厂商而不同。请对照你的模块实际实现的规范版本,核实状态名、VDM 可用性与固件行为。
FAQ
- CMIS 和 QSFP-DD 或 OSFP MSA 是同一个东西吗?
- 不是。MSA 规定的是机械与电气外形规格;CMIS 是通过同一行业组织发布、并被 QSFP-DD、OSFP 等各类每通道 100G 模块所采用的管理接口规范。一个模块有它的外形规格,同时运行着 CMIS——两者回答的是不同的问题。
- 采购时最低要看哪个 CMIS 版本?
- 对 800G 来说,CMIS 4.0 是实际底线:它成熟化了数据通路的状态控制和通道级诊断,这两点是 breakout 分拆与可脚本化诊断所依赖的。5.x 版本在遥测与固件管理上做了增强。停留在 3.x 时代的老 400G 器件,跨厂商行为可能不一致。
- 用一句话解释什么是 VDM?
- Vendor Defined Mechanism(厂商自定义机制):一个标准化的测量数据容器,标准事先并不固定内容——比如每通道的 FEC 前误码计数——这样厂商就能在不破坏接口的前提下暴露真实的诊断信息。
- CMIS 固件升级会失败并把模块刷成砖吗?
- 规范好的实现会写入一个非活动固件镜像,并在提交时切换,所以一次中断的升级不会损坏正在运行的镜像。真正的风险不是把单个模块刷成砖,而是把未提交或版本不符的镜像推到一整批模块上,直到下次插拔才发现问题。
- CMIS 也适用于 100G 和 400G 模块吗?
- 适用。CMIS 与速率无关,出现在多种外形规格的每通道 100G 模块上。它在 400G 及以上最为关键,因为正是在这个层级,多通道数据通路、功率分级和 breakout 分拆让旧的固定寄存器模型彻底失效。