"你的代码很快——如果你走运":为什么你的微基准测试在说谎

制作仅限订阅用户 Jul 11, 2026 at 17:146加入收藏

"你的代码很快——如果你走运":为什么你的微基准测试在说谎
Illustration : Léa Fontaine

一篇病毒式文章质疑微基准测试的可靠性:相同的代码根据符号的顺序、内存位置或用户名的不同,可能会有30%的差异。这对编程有什么影响?

简单来说

开发人员展示了同一段代码在与算法无关的参数下,可能快30%或慢30%:链接时符号的顺序、环境变量的大小、内存对齐。换句话说,我们测量到的微秒级差异很大程度上取决于运气。

故事

作者在 tiki.li/blog/lucky_code 上重新审视了编译器中已知的一个话题(Emery Berger, Stabilizer, ASPLOS 2013),并将其更新:他执行同一个二进制文件,不修改它,但改变周边参数(构建目录的名称、对象文件的链接顺序、$PATH 的大小)。运行时间显著变化,在微基准测试中达到30%以上。原因在于指令在L1i/uop缓存中的对齐、x86解码器和分支预测,这些都对代码的虚拟地址敏感。

让所有人都感到不安的一点是:在现实生活中,我们比较PR的前后版本,注意到有8%的提升,然后合并。这些提升中有多少是真实的信号?有多少是对齐的噪声?

深入探讨

  • Stabilizer(Berger 2013)在每次运行时随机分配堆栈、堆和代码 - 测量结果变成分布,而不是点。
  • Hyperfine + -warmup + -runs 50 无法解决问题:它进行平均,但每次运行同一个二进制时对齐仍然相同。
  • 正确的做法:使用随机偏移量重新编译(Stabilizer 或手动填充)或者使用 -randomize-address 执行,并报告95%置信区间,而不是平均值。

结论

对工艺有三个影响。:在单一微基准测试中低于10%的性能提升可能是噪声。拒绝它,或者在随机化下重新测试。:CI中的性能回归(如Codspeed)必须采用随机化,否则我们会忽略真实的回归并对噪声感到恐慌。:编译器和运行时的营销基准测试(如Bun vs Node, Zig vs C…)需要用这个过滤器来阅读。在这样的水平上,性能与构建工程的关系与算法的关系一样大。

内容仅限会员访问

免费创建账户,即可访问我们的全部内容和每周评论。

本文由人工智能撰写,并经人工编辑审核。

我们的编辑部
Your Linux servers, as a desktop.
TermalOSSponsored
Ops, reimagined

Your Linux servers, as a desktop.

Agentless SSH monitoring, a full remote desktop and an AI ops copilot — no agents to install. Everything stays on your machine.

SSHMonitoringAI Ops
Get early access
这篇文章对您有帮助吗?

9 人赞了这篇文章

M
Mateo Rossi软件架构师
🇨🇳 架构师,拥有两个十年的生产系统经验。
分享:
评论 (6)

登录后即可参与讨论。

Alex 11 Jul 2026 · 17:55

Ces variations sont impressionnantes. On se demande combien d'optimisations reposent sur du hasard plutôt que sur des données fiables.

1
Alex_London 11 Jul 2026 · 17:35

Est-ce que ces variations affectent vraiment les applications du quotidien, ou c'est juste une question de labo ?

ArtLover88 11 Jul 2026 · 16:50

Les micro-benchmarks sont vraiment peu fiables. Il faut en tenir compte quand on évalue les performances.

SkepticSam 11 Jul 2026 · 16:07

Est-ce qu'il existe des outils pour fiabiliser les micro-benchmarks ?

HistoryBuff 11 Jul 2026 · 15:55

On a bien fait de le rappeler : les micro-benchmarks sont trompeurs. Il faut les prendre avec des pincettes.

TechSavvy 11 Jul 2026 · 18:32

Et les différences matérielles qui faussent encore plus les résultats !

Dr. J. 11 Jul 2026 · 15:20

Je croyais aux benchmarks, mais là c'est inquiétant. Comment croire en ces mesures maintenant ?

Your Linux servers, as a desktop.
TermalOSSponsored
Ops, reimagined

Your Linux servers, as a desktop.

Agentless SSH monitoring, a full remote desktop and an AI ops copilot — no agents to install. Everything stays on your machine.

Get early access
主题
浏览
信息