跳到主要内容
重试到绿,就是造假的胚胎

重试到绿,就是造假的胚胎

嘴替
嘴替

· 阅读约 5 分钟

速评:那篇 SSE 代理测量工具的文章,最值钱的一行不是任何一个代理的数字。

是作者自己交出来的一件事——早期跑测试,节奏守卫反复失败,第六次才过,于是他拿到了一张看起来很干净的表,表里没有任何记录显示它试了六次。

重试到绿,就是造假的胚胎。

后来他把重试删了,只做一次诚实测量。六个 cell,只剩一个通过认证,其余五个在这台机器上属于不可测量。换句话说,之前那些漂亮数字里,有相当一部分是从"再跑一次总会好"的那堆里挑出来的。

我想在这儿停一下。专挑机器恰好空闲的那一瞬,这不是粗心,这是选择性偏差,而且它是自动的、沉默的、不需要任何人动手指就能发生的。你没有作弊的动机,你只是写了个重试循环。

十四处错误,数量不是重点,分布才是。request id 那处我印象最深:runner 对十次运行复用同一个 id,emitter 按 id 为键存发送日志、每次流式传输覆盖一遍,于是守卫只审了最后一次,剩下九次连审计都没进就并进了中位数。

这处不是作者自己找出来的,是评审者。他后来把这事写出来了——整张清单里有一半来自别人。自己的工具,一半的洞是别人戳的,这份承认比那些洞本身更值钱。

那他自己查出来的东西长什么样?计划审查通过了,因为那次检查只核实了代码和测试都在、看着都合理,没验证代码能不能通过它自带的测试。形状对,跑不过。

这类"看着对"在测量代码里到处都是。他有句话说得很准:测量工具大概是唯一一类产出没人能独立复核的软件,所以它犯的错往往是结构性的,不是一时粗心。

还有一处缺陷的方向性让我头皮发麻。守卫是在向客户端写完字节之后才记时间戳的,而写操作会阻塞——缓冲型代理一施压,emitter 自己的阻塞就被记成了 emitter 漂移,这个 cell 于是因为"仪器误差"作废。

关键在于方向:最可能藏着目标发现的那类 cell,恰恰最容易被当成仪器噪声丢掉。你什么都没做错,你的工具替你自动清理了不合意的证据。

还有一个更让人无话可说的。emitter 的 Docker healthcheck 每秒在容器里起一个新的 CPython 解释器,去打扰被测的毫秒级节奏循环。这事写出来谁都觉得明显,可它躲在 compose 文件里,平时根本看不见。症状也很有意思——因此作废的那五个 cell,漂移尖峰全落在 10.44 到 10.75 毫秒之间,容差是 10.00。擦着线过,最容易被人当成"机器就是有点抖"放过去。换成开销低的探测之后,同一台主机测出来 0.22 毫秒。

然后是那 42 毫秒。

macOS 上他测到 Caddy 和 Traefik 首 token 差不多 42 毫秒,nginx 只有 2 毫秒。他给出了机制——池化上游连接上的 delayed-ACK 停滞——还搭了个 2×2 实验。其中一个 cell 是热连接池加 Nagle 开启,实测 42.39 毫秒,正好压在预测值上,而且只有这一个 cell 压中。

这吻合度,够拿去开一场分享会了。

结果这个机制被三样东西拆得干干净净。他的 nginx 配置里既没有 upstream 块也没有 keepalive,从头到尾不池化上游连接——他实际比的是池化和非池化,读出来却当成了代理之间的属性差。接着他单独跑 emitter,没有代理、没有 Docker、路径上什么都没有,四十次运行本身就甩出 30 到 45 毫秒的尖峰。再往后迁到 Linux,九个 cell、池化与非池化、Nagle 开与关,全条件下这个效应直接消失。

Docker Desktop 的产物。

他自己总结的那句话我记下来了:一个观测无论多契合已有的叙事,都不构成发现。

这里立个 flag:一年之内,AI 圈会冒出不止一篇被作者自己回去拆台的当红 benchmark,而其中大部分会选择悄悄把帖子删了,而不是补上一段"我错了"。

话说回来,这批人做的事已经比绝大多数人讲究。每处修复都把 bug 重新种回去,看测试到底红不红;排除规则事先写死、机械执行、每次排除在发布表格里计数。有评论者嫌他们排除率从 1.7% 到 11.7% 跨度近七倍太散,作者就承认自己只回答了聚合层面那个钝问题,还没确认被排除的数值是不是被保住了,得回查日志。

还有个细节我挺喜欢。有人问为什么用中位数——原来测试里的间隔序列要么均匀要么全零,把中位数换成平均数,七个测试照过不误。他们后来专门造了一条 10、10、10、200 的序列:中位数 10,平均数 57.5,最大值 200,三个统计量分别能被证伪。这才是给指标上锁的写法——不是写个测试说"应该是 10",是造一个能让错误答案暴露出来的输入。

现在这套东西是九个 cell 通过认证、守卫失败即关闭、核心指标被一个"一改错就必红"的测试钉在 git 里。

有个评论者说,这个 harness 本身就是结果,代理的数值只是它碰巧先捕捉到的东西。前半句我同意,后半句太客气。那些数字当然也是结果,只不过它们现在值多少信,全看这群人愿不愿意把自己的工具拆开给人看。

一个从头到尾没被人挑出过错的 benchmark,只有两种可能:真的干净,或者从来没人去看。目前市面上流传的那些图,我押后者。