#benchmark #timing #performance #measure-time

bin+lib gbenchmark

受 Go 性能测试启发的 Rust 性能测试库。

1 个不稳定版本

0.1.0 2023年7月17日

#1180 in 开发工具

Apache-2.0

17KB
330

gbenchmark

受 Go 性能测试启发的 Rust 性能测试库。

概念

gbenchmark 中的基准测试消耗一个 参数(可能是迭代次数、线程数等)并产生一个 度量(可能是时间、分配的内存等)。度量 可以根据参数和最后的度量来决定是否结束基准测试或向 参数 请求更多的迭代。

创建基准测试

要创建基准测试,首先声明您想使用的参数和度量,然后使用 Benchmark::benchmark 对您的函数进行基准测试。

use std::time::Duration;
use gbenchmark::{
    measure::{TimeMeasure},
    Benchmark, RepetitionParams,
};

let bench = Benchmark::new(
    || RepetitionParams::default(),
    || TimeMeasure::with_min_time(Duration::from_millis(100)),
);
fn expensive_setup() {
    std::thread::sleep(Duration::from_millis(100));
}
fn do_something() {
    std::thread::sleep(Duration::from_millis(10));
}
let result = bench.benchmark(&mut |params, reset| {
    expensive_setup();
    reset();
    for _ in 0..params.nreps {
        do_something();
    }
});
assert!(result.measure.time - Duration::from_millis(9) < Duration::from_millis(2)); 

示例

请参阅 src/bin/gbenchmark_demo/main.rs 以获取一个快速演示,了解如何运行基本的基准测试。

> cargo run --bin gbenchmark_demo --release
   Compiling gbenchmark v0.1.0 (/home/yume/source/gbenchmark)
    Finished release [optimized] target(s) in 0.29s
     Running `target/release/gbenchmark_demo`
preallocated: 67108864 reps: 1.000 ns/op
push: 67108864 reps: 2.000 ns/op
preallocated: 1 reps: 0 allocs/op, 0 bytes alloc'ed/op
push: 1 reps: 6 allocs/op, 2016 bytes alloc'ed/op

无运行时依赖