测量完整性


🌐 Measurement integrity

一个统计上一致的结果并不能证明基准测试测量了预期的工作。优化的运行时可能会去掉结果未被使用的工作,或者将其专门化得比被建模的工作负载更窄。框架和循环开销也可能在操作过短时占据主导地位。为了减少这些风险:

🌐 A statistically consistent result does not prove that a benchmark measured the intended work. An optimizing runtime can remove work whose result is unused or specialize it more narrowly than the workload being modeled. Framework and loop overhead can also dominate operations that are too short. To reduce these risks:

  • 让通过测量工作产生的值在测量区间外也可观察,例如通过验证从每个结果得出的汇总。仅通过未使用的本地计算传递它们是不够的。
  • 在每个样本中执行足够的操作,以分摊固定定时器读取和对 context.start() 与 context.end() 的调用。如果循环记录相对于一次操作而言影响显著,那么每次迭代批量处理多个操作,并报告总操作次数。
  • 检查原始 samples 数据,看看是否有显示预热不足或优化分级的趋势,是否存在与垃圾回收一致的停顿,以及是否有多峰分布。
  • 用一个独立的基准形状来验证令人惊讶的结果,这个形状以不同的方式完成相同的工作。

node:bench 不会强制特定的优化状态,也不会推断引擎是否消除了某些工作。这类控制和诊断是特定于运行时的,并且带有启发性,不能替代对基准工作负载的验证。