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:給大量資料的啟動基準與效能比較
練習
- 為
sum_of_squares寫 criterion benchmark 並跑cargo bench --release。 - 比較 release vs debug 的執行時間。
- 想一個你想優化的函式並測效。
自我檢查
- 會用 criterion 寫 benchmark
- - 知道要用 --release 測效
- 知道 flamegraph / perf 的存在
- 理解實測才是優化的根據
深入連結
- criterion crate(bencher)+ The Rust Performance Book