Benchmark result for "Local" allocation
โ Rust ๐ 2026-03-24 ๐ค surdeus ๐๏ธ 2After all the effort of getting โLocalโ allocation to work, I wanted to know if it was actually faster, so I just tried a simple benchmark:
#[divan::bench(args = [1, 5, 10, 100, 1000, 10000])]
fn allocate_stdbox(bencher: divan::Bencher, size: usize) {
bencher.counter(size).bench_local(|| {
let mut v = Vec::new();
for _i in 0..200 {
v.push( Box::new(99) );
}
})
}
#[divan::bench(args = [1, 5, 10, 100, 1000, 10000])]
fn allocate_lbox(bencher: divan::Bencher, size: usize) {
use rustdb::alloc::{Local,lvec,lbox};
Local::enable_bump();
bencher.counter(size).bench_local(|| {
let mut v = lvec();
for _i in 0..200 {
v.push( lbox(99) );
}
})
}
fn main() {
// Run registered benchmarks.
divan::main();
}
Results:
Timer precision: 50 ns
example fastest โ slowest โ median โ mean โ samples โ iters
โโ allocate_lbox โ โ โ โ โ
โ โโ 1 3.089 ยตs โ 9.034 ยตs โ 3.119 ยตs โ 3.31 ยตs โ 100 โ 100
โ โ 323.7 Kitem/s โ 110.6 Kitem/s โ 320.5 Kitem/s โ 302 Kitem/s โ โ
โ โโ 5 3.086 ยตs โ 6.233 ยตs โ 3.396 ยตs โ 3.383 ยตs โ 100 โ 200
โ โ 1.62 Mitem/s โ 802.1 Kitem/s โ 1.471 Mitem/s โ 1.477 Mitem/s โ โ
โ โโ 10 3.31 ยตs โ 9.734 ยตs โ 3.426 ยตs โ 3.533 ยตs โ 100 โ 200
โ โ 3.02 Mitem/s โ 1.027 Mitem/s โ 2.918 Mitem/s โ 2.829 Mitem/s โ โ
โ โโ 100 3.388 ยตs โ 7.259 ยตs โ 3.509 ยตs โ 3.573 ยตs โ 100 โ 200
โ โ 29.5 Mitem/s โ 13.77 Mitem/s โ 28.49 Mitem/s โ 27.98 Mitem/s โ โ
โ โโ 1000 3.38 ยตs โ 9.669 ยตs โ 3.512 ยตs โ 3.576 ยตs โ 100 โ 200
โ โ 295.7 Mitem/s โ 103.4 Mitem/s โ 284.6 Mitem/s โ 279.6 Mitem/s โ โ
โ โฐโ 10000 3.393 ยตs โ 5.566 ยตs โ 3.628 ยตs โ 3.608 ยตs โ 100 โ 200
โ 2.946 Gitem/s โ 1.796 Gitem/s โ 2.756 Gitem/s โ 2.771 Gitem/s โ โ
โฐโ allocate_stdbox โ โ โ โ โ
โโ 1 3.961 ยตs โ 32.57 ยตs โ 3.984 ยตs โ 5.503 ยตs โ 100 โ 100
โ 252.4 Kitem/s โ 30.7 Kitem/s โ 250.9 Kitem/s โ 181.7 Kitem/s โ โ
โโ 5 4.088 ยตs โ 11.04 ยตs โ 4.301 ยตs โ 5.936 ยตs โ 100 โ 200
โ 1.223 Mitem/s โ 452.4 Kitem/s โ 1.162 Mitem/s โ 842.3 Kitem/s โ โ
โโ 10 4.092 ยตs โ 15.92 ยตs โ 7.909 ยตs โ 6.443 ยตs โ 100 โ 100
โ 2.443 Mitem/s โ 628.1 Kitem/s โ 1.264 Mitem/s โ 1.551 Mitem/s โ โ
โโ 100 4.216 ยตs โ 23.12 ยตs โ 7.323 ยตs โ 6.46 ยตs โ 100 โ 100
โ 23.71 Mitem/s โ 4.323 Mitem/s โ 13.65 Mitem/s โ 15.47 Mitem/s โ โ
โโ 1000 4.214 ยตs โ 9.987 ยตs โ 7.262 ยตs โ 6.241 ยตs โ 100 โ 100
โ 237.2 Mitem/s โ 100.1 Mitem/s โ 137.6 Mitem/s โ 160.2 Mitem/s โ โ
โฐโ 10000 4.212 ยตs โ 10.73 ยตs โ 8.05 ยตs โ 6.431 ยตs โ 100 โ 100
2.374 Gitem/s โ 931.5 Mitem/s โ 1.242 Gitem/s โ 1.554 Gitem/s โ โ
So on this allocation-intensive test, it was nearly twice as fast on average. I have to say I am quite dubious whether this is really worthwhile, but it has still been an interesting exercise.
1 post - 1 participant
๐ท๏ธ Rust_feed