Skip to content

Commit

Permalink
feat: benchmark and readme
Browse files Browse the repository at this point in the history
  • Loading branch information
maskudo committed Dec 26, 2023
1 parent 1e73dec commit aca4682
Show file tree
Hide file tree
Showing 4 changed files with 97 additions and 5 deletions.
6 changes: 5 additions & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,11 @@ test = false
bench = false

[[bench]]
name = "bench"
name = "engine_bench"
harness = false

[[bench]]
name = "threadpool_bench"
harness = false


Expand Down
4 changes: 4 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
# KV-store

Based on [Talent Plan, an open source training program initiated by PingCAPcourse](https://github.com/pingcap/talent-plan),
"TP 201: Practical Networked Applications in Rust"
8 changes: 4 additions & 4 deletions benches/bench.rs → benches/engine_bench.rs
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ fn set_bench(c: &mut Criterion) {
let store = KvStore::open(temp_dir.path()).expect("unable to open kvstore");
store
},
|mut store| {
|store| {
for i in 1..(1 << 12) {
store.set(format!("key{i}"), format!("value{i}")).unwrap();
}
Expand All @@ -29,7 +29,7 @@ fn set_bench(c: &mut Criterion) {
let store = SledKvsEngine::open(temp_dir.path()).expect("unable to open kvstore");
store
},
|mut store| {
|store| {
for i in 1..(1 << 12) {
store.set(format!("key{i}"), format!("value{i}")).unwrap();
}
Expand All @@ -45,7 +45,7 @@ fn get_bench(c: &mut Criterion) {
for i in &vec![8, 12, 16, 20] {
group.bench_with_input(format!("kvs_{i}"), i, |b, i| {
let temp_dir = TempDir::new().unwrap();
let mut store = KvStore::open(temp_dir.path()).unwrap();
let store = KvStore::open(temp_dir.path()).unwrap();
for key_i in 1..(1 << i) {
store
.set(format!("key{key_i}"), format!("value{key_i}"))
Expand All @@ -63,7 +63,7 @@ fn get_bench(c: &mut Criterion) {
for i in &vec![8, 12, 16, 20] {
group.bench_with_input(format!("sled_{i}"), i, |b, i| {
let temp_dir = TempDir::new().unwrap();
let mut store = SledKvsEngine::open(temp_dir.path()).unwrap();
let store = SledKvsEngine::open(temp_dir.path()).unwrap();
for key_i in 1..(1 << i) {
store
.set(format!("key{key_i}"), format!("value{key_i}"))
Expand Down
84 changes: 84 additions & 0 deletions benches/threadpool_bench.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
use criterion::{criterion_group, criterion_main, Criterion};
use rand::{rngs::SmallRng, Rng, SeedableRng};
use tempfile::TempDir;
use trash_db::engines::{kvstore::KvStore, sled::SledKvsEngine, KvsEngine};

fn set_bench(c: &mut Criterion) {
let mut group = c.benchmark_group("set_bench");
group.bench_function("kvs", |b| {
b.iter_batched(
|| {
let temp_dir =
TempDir::new().expect("unable to create temporary working directory");
let store = KvStore::open(temp_dir.path()).expect("unable to open kvstore");
store
},
|store| {
for i in 1..(1 << 12) {
store.set(format!("key{i}"), format!("value{i}")).unwrap();
}
},
criterion::BatchSize::SmallInput,
)
});
group.bench_function("sled", |b| {
b.iter_batched(
|| {
let temp_dir =
TempDir::new().expect("unable to create temporary working directory");
let store = SledKvsEngine::open(temp_dir.path()).expect("unable to open kvstore");
store
},
|store| {
for i in 1..(1 << 12) {
store.set(format!("key{i}"), format!("value{i}")).unwrap();
}
},
criterion::BatchSize::SmallInput,
)
});
group.finish();
}

fn get_bench(c: &mut Criterion) {
let mut group = c.benchmark_group("set_bench");
for i in &vec![8, 12, 16, 20] {
group.bench_with_input(format!("kvs_{i}"), i, |b, i| {
let temp_dir = TempDir::new().unwrap();
let store = KvStore::open(temp_dir.path()).unwrap();
for key_i in 1..(1 << i) {
store
.set(format!("key{key_i}"), format!("value{key_i}"))
.unwrap();
}
let mut rng = SmallRng::from_seed([0; 16]);
b.iter(|| {
store
.get(format!("key{}", rng.gen_range(1, 1 << i)))
.unwrap();
})
});
}

for i in &vec![8, 12, 16, 20] {
group.bench_with_input(format!("sled_{i}"), i, |b, i| {
let temp_dir = TempDir::new().unwrap();
let store = SledKvsEngine::open(temp_dir.path()).unwrap();
for key_i in 1..(1 << i) {
store
.set(format!("key{key_i}"), format!("value{key_i}"))
.unwrap();
}
let mut rng = SmallRng::from_seed([0; 16]);
b.iter(|| {
store
.get(format!("key{}", rng.gen_range(1, 1 << i)))
.unwrap();
})
});
}
group.finish();
}

criterion_group!(benches, set_bench, get_bench);
criterion_main!(benches);

0 comments on commit aca4682

Please sign in to comment.