Skip to content

Commit a5907a8

Browse files
committed
lru benchmarks
1 parent a23fb32 commit a5907a8

4 files changed

Lines changed: 81 additions & 0 deletions

File tree

Cargo.toml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -315,6 +315,10 @@ name = "car-index"
315315
harness = false
316316
required-features = ["benchmark-private"]
317317

318+
[[bench]]
319+
name = "lru"
320+
harness = false
321+
318322
[package.metadata.docs.rs]
319323
# See https://docs.rs/about/metadata
320324
rustdoc-args = ["--document-private-items"]

benches/car-index.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
11
// Copyright 2019-2025 ChainSafe Systems
22
// SPDX-License-Identifier: Apache-2.0, MIT
33

4+
//! ```console
5+
//! $ cargo bench --bench car-index
6+
//! ```
7+
48
use cid::Cid;
59
use criterion::{BenchmarkId, Criterion, criterion_group, criterion_main};
610
use forest::benchmark_private::{

benches/example-benchmark.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
// Copyright 2019-2025 ChainSafe Systems
22
// SPDX-License-Identifier: Apache-2.0, MIT
3+
34
//! ```console
45
//! $ cargo bench --bench example-benchmark
56
//! ```

benches/lru.rs

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
// Copyright 2019-2025 ChainSafe Systems
2+
// SPDX-License-Identifier: Apache-2.0, MIT
3+
4+
//! ```console
5+
//! $ cargo bench --bench lru
6+
//! ```
7+
8+
use criterion::{Criterion, criterion_group, criterion_main};
9+
use rand::{SeedableRng as _, seq::SliceRandom as _};
10+
use std::hint::black_box;
11+
12+
const LRU_CAPACITY: usize = 4096;
13+
14+
fn bench_lru_caches(c: &mut Criterion) {
15+
let input = gen_input();
16+
let mut group: criterion::BenchmarkGroup<'_, criterion::measurement::WallTime> =
17+
c.benchmark_group("LRU");
18+
group
19+
.bench_function("lru::LruCache::push", |b| {
20+
b.iter(|| {
21+
let mut c = lru::LruCache::new(LRU_CAPACITY.try_into().unwrap());
22+
for (k, v) in black_box(&input).iter() {
23+
c.push(k, v);
24+
}
25+
})
26+
})
27+
.bench_function("lru::LruCache::get", |b| {
28+
let mut c = lru::LruCache::new(LRU_CAPACITY.try_into().unwrap());
29+
for i in 0..LRU_CAPACITY {
30+
c.push(i, format!("{i}"));
31+
}
32+
b.iter(|| {
33+
for (k, _) in black_box(&input).iter() {
34+
black_box(&mut c).get(k);
35+
}
36+
})
37+
})
38+
.bench_function("hashlink::LruCache::insert", |b| {
39+
b.iter(|| {
40+
let mut c = hashlink::LruCache::new(LRU_CAPACITY);
41+
for (k, v) in black_box(&input).iter() {
42+
c.insert(k, v);
43+
}
44+
})
45+
})
46+
.bench_function("hashlink::LruCache::get", |b| {
47+
let mut c = hashlink::LruCache::new(LRU_CAPACITY);
48+
for i in 0..LRU_CAPACITY {
49+
c.insert(i, format!("{i}"));
50+
}
51+
b.iter(|| {
52+
for (k, _) in black_box(&input).iter() {
53+
black_box(&mut c).get(k);
54+
}
55+
})
56+
});
57+
group.finish();
58+
}
59+
60+
fn gen_input() -> Vec<(usize, String)> {
61+
let mut v = Vec::with_capacity(LRU_CAPACITY * 2);
62+
for i in 0..LRU_CAPACITY {
63+
v.push((i, format!("{i}")));
64+
v.push((i, format!("{i}")));
65+
}
66+
let mut rng = rand_chacha::ChaChaRng::seed_from_u64(1024);
67+
v.shuffle(&mut rng);
68+
v
69+
}
70+
71+
criterion_group!(benches, bench_lru_caches);
72+
criterion_main!(benches);

0 commit comments

Comments
 (0)