From 959dd519769fa802e585b233e2caf76191021f30 Mon Sep 17 00:00:00 2001 From: 魏曹先生 <1992414357@qq.com> Date: Sun, 8 Mar 2026 19:11:18 +0800 Subject: Add tokio dependency for benchmark runtime --- benches/sheet_benchmark.rs | 70 +++++++++++++++++++++++++++++----------------- 1 file changed, 44 insertions(+), 26 deletions(-) (limited to 'benches/sheet_benchmark.rs') diff --git a/benches/sheet_benchmark.rs b/benches/sheet_benchmark.rs index a2a79ed..d38d824 100644 --- a/benches/sheet_benchmark.rs +++ b/benches/sheet_benchmark.rs @@ -7,37 +7,42 @@ use sheet_system::{ sheet::SheetData, }; -fn sheet_file() -> PathBuf { - current_dir().unwrap().join(".temp").join("benchmark.sheet") -} - fn sheet_benchmark(c: &mut Criterion) { - let sheet_file = sheet_file(); - std::fs::write(&sheet_file, sheet_write(u16::MAX as usize).as_bytes()).unwrap(); + benchmark_file(c, 1); + benchmark_file(c, 16); + benchmark_file(c, 256); + benchmark_file(c, 65535); c.bench_function("sheet insert and apply", |b| b.iter(|| sheet_write(25))); - c.bench_function("sheet full read", |b| { - b.iter(|| sheet_full_read(&sheet_file)) - }); - c.bench_function("sheet mmap read", |b| { - b.iter(|| sheet_mmap_read(&sheet_file)) - }); - c.bench_function("sheet mmap copy read", |b| { - b.iter(|| sheet_mmap_copy_read(&sheet_file)) - }); - c.bench_function("sheet mmap read x10000", |b| { - let mmap = SheetData::mmap(&sheet_file).unwrap(); - let key = ["docs", "my_file_12.txt"]; +} + +fn sheet_file(count: u32) -> PathBuf { + let path = current_dir() + .unwrap() + .join(".temp") + .join(format!("benchmark_{}mappings.sheet", count)); + std::fs::write(&path, sheet_write(count).as_bytes()).unwrap(); + path +} +fn benchmark_file(c: &mut Criterion, count: u32) { + let sheet_file = sheet_file(count); + c.bench_function(format!("full read {} mappings", count).as_str(), |b| { b.iter(|| { - for _ in 0..10000 { - black_box(mmap.mp_c(&key).unwrap()); - } + let rt = tokio::runtime::Runtime::new().unwrap(); + rt.block_on(sheet_full_read(&sheet_file)) }) }); + c.bench_function(format!("mmap find in {} mappings", count).as_str(), |b| { + b.iter(|| sheet_mmap_read(&sheet_file, count)) + }); + c.bench_function( + format!("mmap find in {} mappings (copy)", count).as_str(), + |b| b.iter(|| sheet_mmap_copy_read(&sheet_file, count)), + ); } -fn sheet_write(count: usize) -> SheetData { +fn sheet_write(count: u32) -> SheetData { let mut sheet = SheetData::empty().pack("empty"); (0..count).for_each(|n| { sheet @@ -58,16 +63,29 @@ fn sheet_write(count: usize) -> SheetData { async fn sheet_full_read(path: &PathBuf) { let mut sheet_data = SheetData::empty(); sheet_data.full_read(path).await.unwrap(); + let median = 0; + let key = vec!["docs".to_string(), format!("my_file_{}.txt", median)]; + black_box(sheet_data.mappings().get(&key).unwrap()); } -fn sheet_mmap_read(path: &PathBuf) { +fn sheet_mmap_read(path: &PathBuf, count: u32) { + let median = (count / 2) as usize; let mmap = SheetData::mmap(path).unwrap(); - mmap.mp(&["docs", "my_file_12.txt"]).unwrap().unwrap(); + let result = mmap + .mp(&["docs", &format!("my_file_{}.txt", median)]) + .unwrap() + .unwrap(); + black_box(result); } -fn sheet_mmap_copy_read(path: &PathBuf) { +fn sheet_mmap_copy_read(path: &PathBuf, count: u32) { + let median = (count / 2) as usize; let mmap = SheetData::mmap(path).unwrap(); - mmap.mp_c(&["docs", "my_file_12.txt"]).unwrap().unwrap(); + let result = mmap + .mp_c(&["docs", &format!("my_file_{}.txt", median)]) + .unwrap() + .unwrap(); + black_box(result); } criterion_group!(benches, sheet_benchmark); -- cgit