10个版本
0.2.2 | 2023年4月4日 |
---|---|
0.2.1 | 2023年2月11日 |
0.2.0 | 2022年2月26日 |
0.1.6 | 2022年2月14日 |
0.1.0 | 2021年11月28日 |
#1316 in 进程宏
在 3 个库中使用(通过 shumai)
15KB
246 代码行
Shumai
Shumai 是一个多线程基准测试框架,可以产生准确且可重复的结果。
Shumai 是作为 Alchemy 项目的部分开发的,以满足其关于准确和可重复基准测试的学术要求。Shumai 通过自动收集系统信息、基准测试配置和基准测试结果,将可重复性作为首要任务。所有这些数据都将存储在一个 json 文件中。基准测试配置也存储在一个 toml 文件中,该文件应保留在源代码控制之下。
示例
# benchmark.toml
[[Foo]]
name = "foo"
threads = [1, 2, 3]
time = 1
parameter = [1, 2]
// bench_config.rs
#[config(path = "benchmark.toml")]
pub struct Foo {
pub name: String,
pub threads: Vec<usize>,
pub time: usize,
#[matrix]
pub parameter: usize,
}
impl ShumaiBench for TestBench {
type Result = usize;
type Config = Foo;
fn load(&self) -> Option<Value> {
None
}
fn run(&self, context: BenchContext<Foo>) -> Self::Result {
// Barrier to ensure all threads start at the same time
context.wait_for_start();
// start benchmark
todo!()
}
fn cleanup(&self) -> Option<Value> {
None
}
}
fn main() {
let config = Foo::load()
.expect("Failed to parse config!");
let repeat = 3;
for c in config.iter() {
let benchmark = TestBench::default();
let result = shumai::run(&benchmark, c, repeat);
result.to_json() // save results to a json file
}
}
使用上述设置,Shumai 将基准测试结果写入 json 文件
{
"config": {
"name": "foo-foo-1",
"threads": [
1,
2,
3
],
"time": 1,
"a": 1
},
"load_results": null,
"env": {
"os_release": "5.10.60.1-microsoft-standard-WSL2",
"rustc_version": "1.59.0",
"hostname": "DESKTOP-DPOIAG6",
"cpu_num": 16,
"cpu_speed": 2894
},
"bench_results": [
{
"thread_cnt": 1,
"bench_results": [
110484492
],
"pcm": [],
"perf": null
},
{
"thread_cnt": 2,
"bench_results": [
222437918
],
"pcm": [],
"perf": null
},
{
"thread_cnt": 3,
"bench_results": [
315043334
],
"pcm": [],
"perf": null
}
]
}
功能
-
flamegraph
功能可以在零配置的情况下生成基准函数的 flamegraph(而不是整个程序)。 -
pcm
功能收集与pcm
相关的数据,例如 L3 缓存命中/未命中、内存带宽(包括 DRAM 和 PM)、UPI 带宽等。它需要在目标主机上运行一个 pcm-server。 -
perf
功能收集常见的 perf 统计数据,如CPU_CYCLES
、INSTRUCTIONS
、BRANCH_MISSES
等。
请注意,上述功能可能相互排斥,即您可能一次只能启用一个功能。
控制基准测试执行
Shumai 有两个环境变量可以控制基准测试的执行方式
SHUMAI_THREAD
:只使用指定的线程数运行基准测试,它必须在基准测试配置中指定。SHUMAI_FILTER
:过滤配置,它必须是一个有效的正则表达式字符串。
依赖关系
~1.5MB
~35K SLoC