← [ BACK_TO_NOTES ]

Rust 基准测试

用基准而非一次计时做性能判断;criterion 等工具的角色与方法论要点。

#concept #growing #dev #rust

[!info] related notes

Rust 基准测试

这个概念为什么出现

一次 Instant::now 测不准噪声。
基准测试重复运行、统计处理,才能比较优化是否真有效。

[!abstract] 一句话理解 基准在统计意义上测量热点;Rust 常用 criterion 等工具(nightly 也有内置 bench 历史路径);没有测量就没有优化。

最小可运行示例

场景:测量一次 u64 字符串解析

# 业务意图:为热点函数准备 bench 入口。
# 教学点:benches 目录与自定义 benchmark harness。

mkdir -p benches

在已有 Cargo 项目的清单中追加配置(不要重复已有 dev-dependencies 表)。此示例固定 Criterion 0.5 系列以便复现,不表示它是最新版:

[dev-dependencies]
criterion = "0.5"

[[bench]]
name = "parse_bench"
harness = false

benches/parse_bench.rs:

use criterion::{criterion_group, criterion_main, Criterion};
use std::hint::black_box;

fn parse_benchmark(c: &mut Criterion) {
    c.bench_function("parse_u64", |b| {
        b.iter(|| black_box(black_box("123456789").parse::<u64>().unwrap()))
    });
}

criterion_group!(benches, parse_benchmark);
criterion_main!(benches);

执行 cargo bench —bench parse_bench,应出现 parse_u64 的预热、采样和时间区间;cargo bench —bench parse_bench — —test 仅验证入口能运行,不给性能结论。单个输入只验证这一条路径,比较策略时还需代表性长度、无效输入和相同输出语义。

结合场景再看三个关注点

  1. 用 std::hint::black_box 降低输入常量折叠和结果删除风险;它是尽力而为的优化屏障,不是正确性或密码学保证
  2. 固定输入集
  3. 发布模式测量

核心概念与准确模型

  • 预热、样本、置信
  • 比较前后 commit
  • 微基准 vs 端到端
  • 性能回归 CI(谨慎抖动)

设计动机

  • 用数据代替口号
  • 与零成本抽象主张对齐验证

边界与误区

  • 在 debug 构建上比性能
  • 基准与真实负载脱节
  • 过早微优化

[!warning] 常见误区:一次运行定胜负 必须重复与统计。

工程实践

  1. 先 profile 找热点
  2. 再写微基准验证
  3. 记录机器与版本
  4. 结合 方法论

本节总结

  • 统计基准
  • criterion 常用
  • 测量驱动优化

自测题

  1. 为什么不要在 debug 比性能?
  2. black_box 目的?
参考答案
  1. 优化关闭,结论偏差。
  2. 降低常量折叠与无用结果删除导致虚假测量的风险;仍应检查基准是否测到了目标工作。

延伸阅读与资料来源

资料类型支撑内容
Criterion.rs生态基准框架
Cargo bench官方命令
创建于 2026/7/15 更新于 2026/10/7
Digital Biome
Access

键盘导航

j / k / ↑ / ↓
选择对象
Enter / o
打开选择
/ 或 Ctrl+K
全站搜索
i / f / 1–4
筛选当前列表
g → h / l / p / t / a
首页 / 笔记 / 项目 / 工具 / About
r → 1–9
打开所选对象的关联
u
返回上一页
Esc
关闭浮层 / 取消命令;输入框内清空文本