Benchmark result for "Local" allocation

โš“ Rust    ๐Ÿ“… 2026-03-24    ๐Ÿ‘ค surdeus    ๐Ÿ‘๏ธ 2      

surdeus

After 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

Read full topic

๐Ÿท๏ธ Rust_feed