#2楼2026-10-23 01:14
这个问题量产里其实不用太担心,关键是把 DDM 的实时性要求拆开看。温度、电压、偏置电流这些量本身变化很慢,SFF-8472/8636 对 DDM 刷新周期的要求是秒级,告警上报容忍几十到上百毫秒。用户态通过 i2c-dev 轮询读 ADC,单次事务通常几毫秒以内,一个完整轮询周期下来几十毫秒,完全在要求内。
真正要注意的是抖动而不是平均延迟:普通 SCHED_OTHER 线程在系统负载高时可能被延迟几百毫秒。我们的做法是:DDM 轮询线程设成 SCHED_FIFO 高优先级并绑定核心,采集周期固定(比如 100ms),告警判据用滑动窗口去抖,避免单次抖动误报。更关键的告警(如 TX Fault、LOS)不要走 DDM 轮询,直接用 GPIO 中断或硬件比较器触发。
如果要求更稳,可以把 DDM 采集做成内核驱动 + sysfs/hwmon,用户态只读文件,延迟能压到毫秒级且更稳定。我们量产项目实测:用户态轮询方案告警上报延迟 95% 分位在 50ms 以内,完全满足要求。