Day 6:基準測試與剖析(Benchmarking)

學習目標

  • 用 #[bench] 或 criterion 做基準測試
  • 用 release 模式測效
  • 了解如何找到瓶頸

今日重點

用 Criterion 基準測試(較新且強大)

[dev-dependencies]
criterion = "0.5"

[[bench]]
name = "bench"
harness = false
// benches/bench.rs
use criterion::{criterion_group, criterion_main, Criterion};

fn sum_of_squares(n: u32) -> u32 {
    (1..=n).map(|x| x * x).sum()
}

fn bench_sum(c: &mut Criterion) {
    c.bench_function("sum_of_squares 1000", |b| {
        b.iter(|| sum_of_squares(1000))
    });
}

criterion_group!(benches, bench_sum);
criterion_main!(benches);
cargo bench --release

注意:只測 release 模式

debug build 關閉最佳化,基準測試結果沒意義。永遠用 --release 測效。

找出瓶頸的工具

  • cargo flamegraph:視覺化 CPU 熱點
  • perf / samply:剖析
  • criterion:給大量資料的啟動基準與效能比較

練習

  1. sum_of_squares 寫 criterion benchmark 並跑 cargo bench --release
  2. 比較 release vs debug 的執行時間。
  3. 想一個你想優化的函式並測效。

自我檢查

  • 會用 criterion 寫 benchmark
  • - 知道要用 --release 測效
  • 知道 flamegraph / perf 的存在
  • 理解實測才是優化的根據

深入連結

  • criterion crate(bencher)+ The Rust Performance Book