基准测试是评估Rust代码执行效率的基础方法,用于量化函数的性能表现。
bencher
框架:Rust官方提供的基准测试工具,通过#[bench]
属性标记测试函数,使用cargo bench
命令运行。需在Cargo.toml
中添加bencher = "0.1"
依赖,并在benches
目录下创建测试文件(如my_benchmark.rs
)。示例代码:use bencher::Bencher;
fn my_function() { /* 待测试代码 */ }
#[bench]
fn bench_my_function(b: &mut Bencher) {
b.iter(|| my_function()); // 测量函数执行时间
}
cargo add criterion
添加依赖,在benches
目录下编写测试,运行cargo criterion
生成详细报告。性能分析用于识别代码中的性能瓶颈(如CPU热点、内存泄漏)。
perf
工具:Linux内核自带的性能分析工具,可采集CPU周期、缓存命中率、分支预测等数据。使用perf record -g ./target/release/your_program
记录性能数据,perf report -n --stdio
分析结果,或结合FlameGraph
生成可视化火焰图(perf script | ./stackcollapse-perf.pl | ./flamegraph.pl > perf.svg
)。callgrind
模块采集函数调用关系和耗时,使用kcachegrind
可视化结果。命令示例:valgrind --tool=callgrind ./target/release/your_program
。tracing
库:Rust生态的结构化日志与事件跟踪库,适合复杂场景的性能分析。通过tracing::info_span!("event_name")
标记事件,记录执行时间,辅助定位性能瓶颈。压力测试用于验证系统在高负载下的稳定性与性能极限,适用于网络服务或并发程序。
oha
工具:Rust编写的轻量级压力测试工具,支持HTTP/1/2协议,实时显示TUI界面(请求数、响应时间、错误率)。安装:cargo install oha
,使用示例:oha -n 1000 -c 50 https://example.com
(发送1000个请求,并发50)。wrk
/ab
工具:经典的压力测试工具,wrk
支持多线程和Lua脚本扩展,ab
(ApacheBench)适合快速测试。示例:wrk -t4 -c100 -d30s https://example.com
(4线程、100并发、30秒测试)。将性能测试集成到CI/CD流程,确保代码变更不会导致性能退化。
.github/workflows/performance.yml
中配置,每次推送代码时运行基准测试:name: Rust Performance Test
on: [push, pull_request]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions-rs/toolchain@v1
with: { toolchain: stable }
- run: cargo install cargo-criterion
- run: cargo criterion --verbose
cargo bench
或cargo criterion
集成性能测试,结合cargo-benchcmp
工具对比不同提交的性能差异。性能测试需关注以下核心指标,确保测试结果的有效性:
cargo bench -- --measurement-time 10
延长测量时间)。