1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
|
use std::{env::current_dir, hint::black_box, path::PathBuf};
use criterion::{Criterion, criterion_group, criterion_main};
use sheet_system::{
index_source::IndexSource,
mapping::{LocalMapping, LocalMappingForward},
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();
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"];
b.iter(|| {
for _ in 0..10000 {
black_box(mmap.mp_c(&key).unwrap());
}
})
});
}
fn sheet_write(count: usize) -> SheetData {
let mut sheet = SheetData::empty().pack("empty");
(0..count).for_each(|n| {
sheet
.insert_mapping(
LocalMapping::new(
vec!["docs".to_string(), format!("my_file_{}.txt", n)],
IndexSource::new(true, n as u32, 2u16),
LocalMappingForward::Latest,
)
.unwrap(),
)
.unwrap();
});
sheet.apply().unwrap();
sheet.unpack()
}
async fn sheet_full_read(path: &PathBuf) {
let mut sheet_data = SheetData::empty();
sheet_data.full_read(path).await.unwrap();
}
fn sheet_mmap_read(path: &PathBuf) {
let mmap = SheetData::mmap(path).unwrap();
mmap.mp(&["docs", "my_file_12.txt"]).unwrap().unwrap();
}
fn sheet_mmap_copy_read(path: &PathBuf) {
let mmap = SheetData::mmap(path).unwrap();
mmap.mp_c(&["docs", "my_file_12.txt"]).unwrap().unwrap();
}
criterion_group!(benches, sheet_benchmark);
criterion_main!(benches);
|