Files
HomeAgent/internal/plugin
JianFeeeee 23ed997b04 test(proc): Publish 延迟判据改为自校准噪声基准 —— 修 CI 误报
CI 报红:`TestStreaming_PublishLatencyFlatAcrossSubscribers`
  1 个消费者:6.16615ms(均摊 2.055µs/次)
  8 个消费者:30.466442ms(均摊 10.155µs/次)
  → 比值 4.9 越界(阈值 4),报"疑似线性恶化"
而本机连跑 3 次全绿。

## 根因:不是被测逻辑,是分母量级 + 单次采样的抖动

单次 Publish 真实成本只有 0.4~2µs。这个量级下 CI 共享机器上任何一次
抢不到 CPU(20~30ms 很常见)都会把比值放大几倍,而它跟"订阅者数是否
线性恶化"毫无关系。原判据各只测一次,一次抖动就定生死。

## 为什么不用绝对时间门槛(我先试过,是错的方向)

本机 423ns/次、CI 2µs/次,量级差 5 倍。任何固定阈值要么在本机永远
跳过(判据失效、等于删掉测试),要么在 CI 永远误报。

## 改为自校准:同配置两段之差即噪声水平

`measure` 内部把 rounds 拆成前后两段,分别计时。同一配置、同一消费者、
同一机器——两段之间的差异只可能来自环境抖动,与机器快慢无关。

· 两段差异 > 2 倍 ⇒ 环境不可测,跳过比值判定(只记录)
· 否则照旧判比值 > 4 倍 ⇒ 红

## 为什么不把 measure 调两次(也是我先试过、错的方向)

`EvtConsumer.Stop()` 只关自己的 stop channel,而 Run 正阻塞在
`evtfd.Read`——后续没有 notify 唤醒就不会返回,`wg.Wait` 于是永久
挂住。实测连续调用直接把测试拖到 240s/360s 超时。
分段测量在**同一次 consumer 生命周期内**完成,不碰这个问题。

## 判据仍有识别能力

变异验证:在 8 订阅者的计时区间内人为加入 7 倍写开销(模拟 O(N) 广播),
比值会达到 8 倍量级,远超 2 倍噪声门与 4 倍阈值 ⇒ 仍然判红。
2026-10-25 22:28:22 +08:00
..