summaryrefslogtreecommitdiff
path: root/benches
diff options
context:
space:
mode:
Diffstat (limited to 'benches')
-rw-r--r--benches/sheet_benchmark.rs70
1 files changed, 44 insertions, 26 deletions
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);