CMIS 详解:状态机、VDM 遥测与固件管理

CMIS 出现之前,400G 模块是个焊了个温度传感器的黑箱;之后,模块变成一台有规范文档的状态机,可以按通道逐一读取。

向三家厂商要一份 800G 模块的「寄存器映射表」,你会拿到三份文档,没有一份是完整的。这不是厂商故意遮掩;而是一个模块里塞进了八条通道、两幅固件镜像、可编程数据通路和一套功率协商协议,而当初的管理接口却是为固定寄存器的世界设计的,必然出现这种局面。CMIS 是行业的应对方案——一份与 IEEE 802.3 PMD 修正案 同步维护的规范——读懂它,会改变你运维这些模块的方式:最实际的一点,它把「这个模块是否正常?」从一个工单变成了一段脚本。

CMIS 要解决什么问题

上一代管理接口把模块功能映射到固定的内存地址。这在模块还是「一进一出一条激光通路、一种功率状态、最多四条通道」的时候是够用的。400G 或 800G 模块把这每一条假设都打破了:

CMIS 用一个模型回应这四点:模块是一台带规范状态机的小型计算机,主机据此与它对话。

状态机就是契约

CMIS 中最能解释现场行为的部分,是模块与数据通路的状态模型。模块在明确的各个状态间移动,主机被期望去编排这些转换——而不是想当然地认为模块只是「起来了」。

StateWhat the module is doingWhat the host should do
ModuleLowPwr插入后断电或低功耗待机读取身份信息,协商功率等级
ModulePwrUp消耗已分配的全部功率等待;暂不下发数据通路指令
ModuleReady准备就绪,可配置数据通路配置通道,然后触发初始化
数据通路状态(按组)DPInit → Deinit → Initialized → TxTurnOn → TxTurnedOff → Ready仅在 Ready 后拉起;初始化失败最先在此暴露
ModulePwrDn主机请求的关断在支持的情况下,移除前先拆除

有两个运维层面的推论值得内化。

初始化失败是一种特性

当一组通道无法到达 Ready 状态时,CMIS 会告诉你它卡在了哪个状态。「卡在 DPInit」远比「无链路」更有价值的症候,因为它通常意味着配置不匹配——不支持的通道映射、不支持的速率——而不是芯片坏了。

breakout 分拆是协商出来的,不是魔法

把一个 800G 模块拆成 2x400G 是一次数据通路配置动作。如果你的交换软件与模块在通道分配上意见不一致,这种不一致就会体现在这些状态里——这也解释了为什么同一对器件在某台机箱里能工作,换一台软件更旧的机箱就拒绝。

功率等级:是协商,不是标签

CMIS 定义了功率等级,让主机能在启用模块前按插槽做预算。与当前部署相关的等级如下:

ClassMaximum powerRole in 2026 deployments
Class 57 W400G 级别器件,老旧笼子
Class 610 W低功耗 400G/800G 设计
Class 715 W主流 800G DR8/FR4
Class 820 W高功耗器件;需逐插槽核实风冷条件

机制比数字更重要:模块宣告自己的等级,主机授予功率,而若授权从未发生,数据通路状态就无法完成。一个在测试台上能正常上电、却在某个机箱插槽里一直停在 ModuleLowPwr 的模块,通常在告诉你:主机拒绝或无法授予该等级——这是插槽预算或认证决策,而非硬件故障。同样的遥测也是 热关断诊断 的支柱,在那里功率等级与实测温度是一起读的。

VDM:能抓住激光器老化的遥测

Vendor Defined Mechanism 是 CMIS 中名字最不起眼、却最具运维价值的部分。它提供一种标准化的方式,用于暴露固定必选集之外的测量值,按描述符寻址,并带有明确的单位与缩放。

VDM exampleWhat it measuresWhy you care
每通道 Tx 功率每通道的实际发射功率在链路掉线前抓住老化的驱动
每通道输入功率每通道的接收功率区分「光弱」与「连接器脏」
FEC 前误码 / 已纠正比特纠错前的信道质量通道上最早的量化磨损信号
信噪比裕量接收端质量估计预测在附加损耗下哪条链路先失效

FEC 前误码计数值得强调。

已纠正误码是无声的

已纠正误码对链路本身不可见(这正是 FEC 的用途),这意味着一条通道可以在端口显示健康的同时,悄悄劣化好几个月。一个每晚采样各通道「已纠正比特增量」的脚本,会把这种无声劣化变成一条趋势线,而趋势线让你能按自己的计划更换模块,而不是按链路的计划。

VDM 是否可用取决于具体器件

并非每个模块都实现全部 VDM——标准定义的是容器与上报契约,而非一份必选测量清单。模块认证的一部分工作,就是把某个具体 SKU 暴露哪些 VDM 写下来,这样你的监控才不会去假设根本不存在的遥测。

固件:两幅镜像与一个提交位

CMIS 固件管理遵循一套运行/提交模型,这对用过交换机软件的人并不陌生:

避免麻烦的纪律:

动手之前先盘点

采集整批设备的运行版本与提交版本;版本混杂比任何人愿意承认的都要常见,也是「某一机架行为不同」最常见的原因。

金丝雀、浸泡、再提交

先在金丝雀小组上升级,激活并浸泡,只有在包含至少一次插拔和一次机箱断电循环的浸泡期之后才提交。在激活当天就提交,正是潜在的镜像版本不符变成全批意外的方式。

同一机柜内保持镜像家族统一

切勿在同一机柜内混用镜像家族——和混用模块厂商是同一个规则,原因也一样:报警阈值和遥测行为会随版本漂移。

CMIS 解决不了什么

有三条边界值得说清,免得有人过度吹捧:

参考来源

实现细节随 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 分拆让旧的固定寄存器模型彻底失效。