From a410fc5b80d7226bce5d2d21a6a174a4e2e19ba6 Mon Sep 17 00:00:00 2001 From: Maksym Arutyunyan Date: Tue, 8 Apr 2025 12:04:25 +0200 Subject: [PATCH 1/5] cleanup benchmarks --- benchmarks/src/btreemap.rs | 428 ++++++++----------------------------- 1 file changed, 93 insertions(+), 335 deletions(-) diff --git a/benchmarks/src/btreemap.rs b/benchmarks/src/btreemap.rs index ca478de6..757b3a20 100644 --- a/benchmarks/src/btreemap.rs +++ b/benchmarks/src/btreemap.rs @@ -5,169 +5,56 @@ use ic_stable_structures::{storable::Blob, BTreeMap, DefaultMemoryImpl, Memory, use std::ops::Bound; use tiny_rng::{Rand, Rng}; -#[bench(raw)] -pub fn btreemap_insert_blob_4_1024() -> BenchResult { - insert_blob_helper::<4, 1024>() -} - -#[bench(raw)] -pub fn btreemap_insert_blob_4_1024_v2() -> BenchResult { - insert_blob_helper_v2::<4, 1024>() -} - -#[bench(raw)] -pub fn btreemap_insert_blob_8_1024() -> BenchResult { - insert_blob_helper::<8, 1024>() -} - -#[bench(raw)] -pub fn btreemap_insert_blob_8_1024_v2() -> BenchResult { - insert_blob_helper_v2::<8, 1024>() -} - -#[bench(raw)] -pub fn btreemap_insert_blob_16_1024() -> BenchResult { - insert_blob_helper::<16, 1024>() -} - -#[bench(raw)] -pub fn btreemap_insert_blob_16_1024_v2() -> BenchResult { - insert_blob_helper_v2::<16, 1024>() -} - -#[bench(raw)] -pub fn btreemap_insert_blob_32_1024() -> BenchResult { - insert_blob_helper::<32, 1024>() -} - -#[bench(raw)] -pub fn btreemap_insert_blob_32_1024_v2() -> BenchResult { - insert_blob_helper_v2::<32, 1024>() -} - -#[bench(raw)] -pub fn btreemap_insert_blob_64_1024() -> BenchResult { - insert_blob_helper::<64, 1024>() -} - -#[bench(raw)] -pub fn btreemap_insert_blob_64_1024_v2() -> BenchResult { - insert_blob_helper_v2::<64, 1024>() -} - -#[bench(raw)] -pub fn btreemap_insert_blob_128_1024() -> BenchResult { - insert_blob_helper::<128, 1024>() -} - -#[bench(raw)] -pub fn btreemap_insert_blob_128_1024_v2() -> BenchResult { - insert_blob_helper_v2::<128, 1024>() -} - -#[bench(raw)] -pub fn btreemap_insert_blob_256_1024() -> BenchResult { - insert_blob_helper::<256, 1024>() -} - -#[bench(raw)] -pub fn btreemap_insert_blob_256_1024_v2() -> BenchResult { - insert_blob_helper_v2::<256, 1024>() -} - -#[bench(raw)] -pub fn btreemap_insert_blob_512_1024() -> BenchResult { - insert_blob_helper::<512, 1024>() -} - -#[bench(raw)] -pub fn btreemap_insert_blob_512_1024_v2() -> BenchResult { - insert_blob_helper_v2::<512, 1024>() -} - -#[bench(raw)] -pub fn btreemap_insert_blob_1024_4() -> BenchResult { - insert_blob_helper::<1024, 4>() -} - -#[bench(raw)] -pub fn btreemap_insert_blob_1024_4_v2() -> BenchResult { - insert_blob_helper_v2::<1024, 4>() -} - -#[bench(raw)] -pub fn btreemap_insert_blob_1024_8() -> BenchResult { - insert_blob_helper::<1024, 8>() -} - -#[bench(raw)] -pub fn btreemap_insert_blob_1024_8_v2() -> BenchResult { - insert_blob_helper_v2::<1024, 8>() -} - -#[bench(raw)] -pub fn btreemap_insert_blob_1024_16() -> BenchResult { - insert_blob_helper::<1024, 16>() -} - -#[bench(raw)] -pub fn btreemap_insert_blob_1024_16_v2() -> BenchResult { - insert_blob_helper_v2::<1024, 16>() -} - -#[bench(raw)] -pub fn btreemap_insert_blob_1024_32() -> BenchResult { - insert_blob_helper::<1024, 32>() -} - -#[bench(raw)] -pub fn btreemap_insert_blob_1024_32_v2() -> BenchResult { - insert_blob_helper_v2::<1024, 32>() -} - -#[bench(raw)] -pub fn btreemap_insert_blob_1024_64() -> BenchResult { - insert_blob_helper::<1024, 64>() -} - -#[bench(raw)] -pub fn btreemap_insert_blob_1024_64_v2() -> BenchResult { - insert_blob_helper_v2::<1024, 64>() -} - -#[bench(raw)] -pub fn btreemap_insert_blob_1024_128() -> BenchResult { - insert_blob_helper::<1024, 128>() -} - -#[bench(raw)] -pub fn btreemap_insert_blob_1024_128_v2() -> BenchResult { - insert_blob_helper_v2::<1024, 128>() -} - -#[bench(raw)] -pub fn btreemap_insert_blob_1024_256() -> BenchResult { - insert_blob_helper::<1024, 256>() -} - -#[bench(raw)] -pub fn btreemap_insert_blob_1024_256_v2() -> BenchResult { - insert_blob_helper_v2::<1024, 256>() -} - -#[bench(raw)] -pub fn btreemap_insert_blob_1024_512() -> BenchResult { - insert_blob_helper::<1024, 512>() -} - -#[bench(raw)] -pub fn btreemap_insert_blob_1024_512_v2() -> BenchResult { - insert_blob_helper_v2::<1024, 512>() -} - -#[bench(raw)] -pub fn btreemap_insert_blob_1024_512_v2_mem_manager() -> BenchResult { - insert_blob_helper_v2_mem_manager::<1024, 512>() +/// Helper macro to generate benchmarks. +macro_rules! bench_tests { + ($( $fn_name:ident, $helper:ident, $k:expr, $v:expr );+ $(;)?) => { + $( + #[bench(raw)] + pub fn $fn_name() -> BenchResult { + $helper::<$k, $v>() + } + )+ + }; +} + +// Benchmarks inserting blobs into a BTreeMap. +bench_tests! { + // K x 1024 + btreemap_insert_blob_4_1024, insert_blob_helper, 4, 1024; + btreemap_insert_blob_4_1024_v2, insert_blob_helper_v2, 4, 1024; + btreemap_insert_blob_8_1024, insert_blob_helper, 8, 1024; + btreemap_insert_blob_8_1024_v2, insert_blob_helper_v2, 8, 1024; + btreemap_insert_blob_16_1024, insert_blob_helper, 16, 1024; + btreemap_insert_blob_16_1024_v2, insert_blob_helper_v2, 16, 1024; + btreemap_insert_blob_32_1024, insert_blob_helper, 32, 1024; + btreemap_insert_blob_32_1024_v2, insert_blob_helper_v2, 32, 1024; + btreemap_insert_blob_64_1024, insert_blob_helper, 64, 1024; + btreemap_insert_blob_64_1024_v2, insert_blob_helper_v2, 64, 1024; + btreemap_insert_blob_128_1024, insert_blob_helper, 128, 1024; + btreemap_insert_blob_128_1024_v2, insert_blob_helper_v2, 128, 1024; + btreemap_insert_blob_256_1024, insert_blob_helper, 256, 1024; + btreemap_insert_blob_256_1024_v2, insert_blob_helper_v2, 256, 1024; + btreemap_insert_blob_512_1024, insert_blob_helper, 512, 1024; + btreemap_insert_blob_512_1024_v2, insert_blob_helper_v2, 512, 1024; + + // 1024 x V + btreemap_insert_blob_1024_4, insert_blob_helper, 1024, 4; + btreemap_insert_blob_1024_4_v2, insert_blob_helper_v2, 1024, 4; + btreemap_insert_blob_1024_8, insert_blob_helper, 1024, 8; + btreemap_insert_blob_1024_8_v2, insert_blob_helper_v2, 1024, 8; + btreemap_insert_blob_1024_16, insert_blob_helper, 1024, 16; + btreemap_insert_blob_1024_16_v2, insert_blob_helper_v2, 1024, 16; + btreemap_insert_blob_1024_32, insert_blob_helper, 1024, 32; + btreemap_insert_blob_1024_32_v2, insert_blob_helper_v2, 1024, 32; + btreemap_insert_blob_1024_64, insert_blob_helper, 1024, 64; + btreemap_insert_blob_1024_64_v2, insert_blob_helper_v2, 1024, 64; + btreemap_insert_blob_1024_128, insert_blob_helper, 1024, 128; + btreemap_insert_blob_1024_128_v2, insert_blob_helper_v2, 1024, 128; + btreemap_insert_blob_1024_256, insert_blob_helper, 1024, 256; + btreemap_insert_blob_1024_256_v2, insert_blob_helper_v2, 1024, 256; + btreemap_insert_blob_1024_512, insert_blob_helper, 1024, 512; + btreemap_insert_blob_1024_512_v2, insert_blob_helper_v2, 1024, 512; + btreemap_insert_blob_1024_512_v2_mem_manager, insert_blob_helper_v2_mem_manager, 1024, 512; } #[bench(raw)] @@ -365,85 +252,25 @@ pub fn btreemap_iter_count_10mib_values() -> BenchResult { }) } -/// Benchmarks removing keys from a BTreeMap. -#[bench(raw)] -pub fn btreemap_remove_blob_4_1024() -> BenchResult { - remove_blob_helper::<4, 1024>() -} - -#[bench(raw)] -pub fn btreemap_remove_blob_4_1024_v2() -> BenchResult { - remove_blob_helper_v2::<4, 1024>() -} - -#[bench(raw)] -pub fn btreemap_remove_blob_8_1024() -> BenchResult { - remove_blob_helper::<8, 1024>() -} - -#[bench(raw)] -pub fn btreemap_remove_blob_8_1024_v2() -> BenchResult { - remove_blob_helper_v2::<8, 1024>() -} - -#[bench(raw)] -pub fn btreemap_remove_blob_16_1024() -> BenchResult { - remove_blob_helper::<16, 1024>() -} - -#[bench(raw)] -pub fn btreemap_remove_blob_16_1024_v2() -> BenchResult { - remove_blob_helper_v2::<16, 1024>() -} - -#[bench(raw)] -pub fn btreemap_remove_blob_32_1024() -> BenchResult { - remove_blob_helper::<32, 1024>() -} - -#[bench(raw)] -pub fn btreemap_remove_blob_32_1024_v2() -> BenchResult { - remove_blob_helper_v2::<32, 1024>() -} - -#[bench(raw)] -pub fn btreemap_remove_blob_64_1024() -> BenchResult { - remove_blob_helper::<64, 1024>() -} - -#[bench(raw)] -pub fn btreemap_remove_blob_64_1024_v2() -> BenchResult { - remove_blob_helper_v2::<64, 1024>() -} - -#[bench(raw)] -pub fn btreemap_remove_blob_128_1024() -> BenchResult { - remove_blob_helper::<128, 1024>() -} - -#[bench(raw)] -pub fn btreemap_remove_blob_128_1024_v2() -> BenchResult { - remove_blob_helper_v2::<128, 1024>() -} - -#[bench(raw)] -pub fn btreemap_remove_blob_256_1024() -> BenchResult { - remove_blob_helper::<256, 1024>() -} - -#[bench(raw)] -pub fn btreemap_remove_blob_256_1024_v2() -> BenchResult { - remove_blob_helper_v2::<256, 1024>() -} - -#[bench(raw)] -pub fn btreemap_remove_blob_512_1024() -> BenchResult { - remove_blob_helper::<512, 1024>() -} - -#[bench(raw)] -pub fn btreemap_remove_blob_512_1024_v2() -> BenchResult { - remove_blob_helper_v2::<512, 1024>() +// Benchmarks removing keys from a BTreeMap. +bench_tests! { + // K x 1024 + btreemap_remove_blob_4_1024, remove_blob_helper, 4, 1024; + btreemap_remove_blob_4_1024_v2, remove_blob_helper_v2, 4, 1024; + btreemap_remove_blob_8_1024, remove_blob_helper, 8, 1024; + btreemap_remove_blob_8_1024_v2, remove_blob_helper_v2, 8, 1024; + btreemap_remove_blob_16_1024, remove_blob_helper, 16, 1024; + btreemap_remove_blob_16_1024_v2, remove_blob_helper_v2, 16, 1024; + btreemap_remove_blob_32_1024, remove_blob_helper, 32, 1024; + btreemap_remove_blob_32_1024_v2, remove_blob_helper_v2, 32, 1024; + btreemap_remove_blob_64_1024, remove_blob_helper, 64, 1024; + btreemap_remove_blob_64_1024_v2, remove_blob_helper_v2, 64, 1024; + btreemap_remove_blob_128_1024, remove_blob_helper, 128, 1024; + btreemap_remove_blob_128_1024_v2, remove_blob_helper_v2, 128, 1024; + btreemap_remove_blob_256_1024, remove_blob_helper, 256, 1024; + btreemap_remove_blob_256_1024_v2, remove_blob_helper_v2, 256, 1024; + btreemap_remove_blob_512_1024, remove_blob_helper, 512, 1024; + btreemap_remove_blob_512_1024_v2, remove_blob_helper_v2, 512, 1024; } #[bench(raw)] @@ -479,90 +306,26 @@ pub fn btreemap_remove_blob_8_u64_v2() -> BenchResult { remove_helper::, u64>(btree) } -/// Benchmarks getting keys from a BTreeMap. -#[bench(raw)] -pub fn btreemap_get_blob_4_1024() -> BenchResult { - get_blob_helper::<4, 1024>() -} - -#[bench(raw)] -pub fn btreemap_get_blob_4_1024_v2() -> BenchResult { - get_blob_helper_v2::<4, 1024>() -} - -#[bench(raw)] -pub fn btreemap_get_blob_8_1024() -> BenchResult { - get_blob_helper::<8, 1024>() -} - -#[bench(raw)] -pub fn btreemap_get_blob_8_1024_v2() -> BenchResult { - get_blob_helper_v2::<8, 1024>() -} - -#[bench(raw)] -pub fn btreemap_get_blob_16_1024() -> BenchResult { - get_blob_helper::<16, 1024>() -} - -#[bench(raw)] -pub fn btreemap_get_blob_16_1024_v2() -> BenchResult { - get_blob_helper_v2::<16, 1024>() -} - -#[bench(raw)] -pub fn btreemap_get_blob_32_1024() -> BenchResult { - get_blob_helper::<32, 1024>() -} - -#[bench(raw)] -pub fn btreemap_get_blob_32_1024_v2() -> BenchResult { - get_blob_helper_v2::<32, 1024>() -} - -#[bench(raw)] -pub fn btreemap_get_blob_64_1024() -> BenchResult { - get_blob_helper::<64, 1024>() -} - -#[bench(raw)] -pub fn btreemap_get_blob_64_1024_v2() -> BenchResult { - get_blob_helper_v2::<64, 1024>() -} - -#[bench(raw)] -pub fn btreemap_get_blob_128_1024() -> BenchResult { - get_blob_helper::<128, 1024>() -} - -#[bench(raw)] -pub fn btreemap_get_blob_128_1024_v2() -> BenchResult { - get_blob_helper_v2::<128, 1024>() -} - -#[bench(raw)] -pub fn btreemap_get_blob_256_1024() -> BenchResult { - get_blob_helper::<256, 1024>() -} - -#[bench(raw)] -pub fn btreemap_get_blob_256_1024_v2() -> BenchResult { - get_blob_helper_v2::<256, 1024>() -} - -#[bench(raw)] -pub fn btreemap_get_blob_512_1024() -> BenchResult { - get_blob_helper::<512, 1024>() -} - -#[bench(raw)] -pub fn btreemap_get_blob_512_1024_v2() -> BenchResult { - get_blob_helper_v2::<512, 1024>() -} - -#[bench(raw)] -pub fn btreemap_get_blob_512_1024_v2_mem_manager() -> BenchResult { - get_blob_helper_v2_mem_manager::<512, 1024>() +// Benchmarks getting keys from a BTreeMap. +bench_tests! { + // K x 1024 + btreemap_get_blob_4_1024, get_blob_helper, 4, 1024; + btreemap_get_blob_4_1024_v2, get_blob_helper_v2, 4, 1024; + btreemap_get_blob_8_1024, get_blob_helper, 8, 1024; + btreemap_get_blob_8_1024_v2, get_blob_helper_v2, 8, 1024; + btreemap_get_blob_16_1024, get_blob_helper, 16, 1024; + btreemap_get_blob_16_1024_v2, get_blob_helper_v2, 16, 1024; + btreemap_get_blob_32_1024, get_blob_helper, 32, 1024; + btreemap_get_blob_32_1024_v2, get_blob_helper_v2, 32, 1024; + btreemap_get_blob_64_1024, get_blob_helper, 64, 1024; + btreemap_get_blob_64_1024_v2, get_blob_helper_v2, 64, 1024; + btreemap_get_blob_128_1024, get_blob_helper, 128, 1024; + btreemap_get_blob_128_1024_v2, get_blob_helper_v2, 128, 1024; + btreemap_get_blob_256_1024, get_blob_helper, 256, 1024; + btreemap_get_blob_256_1024_v2, get_blob_helper_v2, 256, 1024; + btreemap_get_blob_512_1024, get_blob_helper, 512, 1024; + btreemap_get_blob_512_1024_v2, get_blob_helper_v2, 512, 1024; + btreemap_get_blob_512_1024_v2_mem_manager, get_blob_helper_v2_mem_manager, 512, 1024; } #[bench(raw)] @@ -707,15 +470,10 @@ fn get_helper( }) } -/// Benchmarks `contains_key` of a BTreeMap. -#[bench(raw)] -pub fn btreemap_contains_key_blob_4_1024() -> BenchResult { - contains_key_blob_helper::<4, 1024>() -} - -#[bench(raw)] -pub fn btreemap_contains_key_blob_4_1024_v2() -> BenchResult { - contains_key_blob_helper_v2::<4, 1024>() +// Benchmarks `contains_key` of a BTreeMap. +bench_tests! { + btreemap_contains_key_blob_4_1024, contains_key_blob_helper, 4, 1024; + btreemap_contains_key_blob_4_1024_v2, contains_key_blob_helper_v2, 4, 1024; } // Profiles `contains_key` on a large number of random blobs from a btreemap. From d158dc65cc06cabce41584e8a592ea5bf9a59d23 Mon Sep 17 00:00:00 2001 From: Maksym Arutyunyan Date: Tue, 8 Apr 2025 12:34:06 +0200 Subject: [PATCH 2/5] . --- benchmarks/src/btreemap.rs | 148 ++++++++++++++++--------------------- canbench_results.yml | 12 +-- 2 files changed, 68 insertions(+), 92 deletions(-) diff --git a/benchmarks/src/btreemap.rs b/benchmarks/src/btreemap.rs index 757b3a20..5ef31f25 100644 --- a/benchmarks/src/btreemap.rs +++ b/benchmarks/src/btreemap.rs @@ -17,87 +17,64 @@ macro_rules! bench_tests { }; } +type Blob4 = Blob<4>; +type Blob8 = Blob<8>; +type Blob16 = Blob<16>; +type Blob32 = Blob<32>; +type Blob64 = Blob<64>; +type Blob128 = Blob<128>; +type Blob256 = Blob<256>; +type Blob512 = Blob<512>; +type Blob1024 = Blob<1024>; + // Benchmarks inserting blobs into a BTreeMap. bench_tests! { // K x 1024 - btreemap_insert_blob_4_1024, insert_blob_helper, 4, 1024; - btreemap_insert_blob_4_1024_v2, insert_blob_helper_v2, 4, 1024; - btreemap_insert_blob_8_1024, insert_blob_helper, 8, 1024; - btreemap_insert_blob_8_1024_v2, insert_blob_helper_v2, 8, 1024; - btreemap_insert_blob_16_1024, insert_blob_helper, 16, 1024; - btreemap_insert_blob_16_1024_v2, insert_blob_helper_v2, 16, 1024; - btreemap_insert_blob_32_1024, insert_blob_helper, 32, 1024; - btreemap_insert_blob_32_1024_v2, insert_blob_helper_v2, 32, 1024; - btreemap_insert_blob_64_1024, insert_blob_helper, 64, 1024; - btreemap_insert_blob_64_1024_v2, insert_blob_helper_v2, 64, 1024; - btreemap_insert_blob_128_1024, insert_blob_helper, 128, 1024; - btreemap_insert_blob_128_1024_v2, insert_blob_helper_v2, 128, 1024; - btreemap_insert_blob_256_1024, insert_blob_helper, 256, 1024; - btreemap_insert_blob_256_1024_v2, insert_blob_helper_v2, 256, 1024; - btreemap_insert_blob_512_1024, insert_blob_helper, 512, 1024; - btreemap_insert_blob_512_1024_v2, insert_blob_helper_v2, 512, 1024; + btreemap_insert_blob_4_1024, insert_helper_v1, Blob4, Blob1024; + btreemap_insert_blob_4_1024_v2, insert_helper_v2, Blob4, Blob1024; + btreemap_insert_blob_8_1024, insert_helper_v1, Blob8, Blob1024; + btreemap_insert_blob_8_1024_v2, insert_helper_v2, Blob8, Blob1024; + btreemap_insert_blob_16_1024, insert_helper_v1, Blob16, Blob1024; + btreemap_insert_blob_16_1024_v2, insert_helper_v2, Blob16, Blob1024; + btreemap_insert_blob_32_1024, insert_helper_v1, Blob32, Blob1024; + btreemap_insert_blob_32_1024_v2, insert_helper_v2, Blob32, Blob1024; + btreemap_insert_blob_64_1024, insert_helper_v1, Blob64, Blob1024; + btreemap_insert_blob_64_1024_v2, insert_helper_v2, Blob64, Blob1024; + btreemap_insert_blob_128_1024, insert_helper_v1, Blob128, Blob1024; + btreemap_insert_blob_128_1024_v2, insert_helper_v2, Blob128, Blob1024; + btreemap_insert_blob_256_1024, insert_helper_v1, Blob256, Blob1024; + btreemap_insert_blob_256_1024_v2, insert_helper_v2, Blob256, Blob1024; + btreemap_insert_blob_512_1024, insert_helper_v1, Blob512, Blob1024; + btreemap_insert_blob_512_1024_v2, insert_helper_v2, Blob512, Blob1024; // 1024 x V - btreemap_insert_blob_1024_4, insert_blob_helper, 1024, 4; - btreemap_insert_blob_1024_4_v2, insert_blob_helper_v2, 1024, 4; - btreemap_insert_blob_1024_8, insert_blob_helper, 1024, 8; - btreemap_insert_blob_1024_8_v2, insert_blob_helper_v2, 1024, 8; - btreemap_insert_blob_1024_16, insert_blob_helper, 1024, 16; - btreemap_insert_blob_1024_16_v2, insert_blob_helper_v2, 1024, 16; - btreemap_insert_blob_1024_32, insert_blob_helper, 1024, 32; - btreemap_insert_blob_1024_32_v2, insert_blob_helper_v2, 1024, 32; - btreemap_insert_blob_1024_64, insert_blob_helper, 1024, 64; - btreemap_insert_blob_1024_64_v2, insert_blob_helper_v2, 1024, 64; - btreemap_insert_blob_1024_128, insert_blob_helper, 1024, 128; - btreemap_insert_blob_1024_128_v2, insert_blob_helper_v2, 1024, 128; - btreemap_insert_blob_1024_256, insert_blob_helper, 1024, 256; - btreemap_insert_blob_1024_256_v2, insert_blob_helper_v2, 1024, 256; - btreemap_insert_blob_1024_512, insert_blob_helper, 1024, 512; - btreemap_insert_blob_1024_512_v2, insert_blob_helper_v2, 1024, 512; - btreemap_insert_blob_1024_512_v2_mem_manager, insert_blob_helper_v2_mem_manager, 1024, 512; -} - -#[bench(raw)] -pub fn btreemap_insert_u64_u64() -> BenchResult { - let btree = BTreeMap::new_v1(DefaultMemoryImpl::default()); - insert_helper::(btree) -} - -#[bench(raw)] -pub fn btreemap_insert_u64_u64_mem_manager() -> BenchResult { - let memory_manager = MemoryManager::init(DefaultMemoryImpl::default()); - let btree = BTreeMap::new(memory_manager.get(MemoryId::new(42))); - insert_helper::(btree) -} - -#[bench(raw)] -pub fn btreemap_insert_u64_u64_v2() -> BenchResult { - let btree = BTreeMap::new(DefaultMemoryImpl::default()); - insert_helper::(btree) -} - -#[bench(raw)] -pub fn btreemap_insert_u64_blob_8() -> BenchResult { - let btree = BTreeMap::new_v1(DefaultMemoryImpl::default()); - insert_helper::>(btree) -} - -#[bench(raw)] -pub fn btreemap_insert_u64_blob_8_v2() -> BenchResult { - let btree = BTreeMap::new(DefaultMemoryImpl::default()); - insert_helper::>(btree) -} - -#[bench(raw)] -pub fn btreemap_insert_blob_8_u64() -> BenchResult { - let btree = BTreeMap::new_v1(DefaultMemoryImpl::default()); - insert_helper::, u64>(btree) -} - -#[bench(raw)] -pub fn btreemap_insert_blob_8_u64_v2() -> BenchResult { - let btree = BTreeMap::new(DefaultMemoryImpl::default()); - insert_helper::, u64>(btree) + btreemap_insert_blob_1024_4, insert_helper_v1, Blob1024, Blob4; + btreemap_insert_blob_1024_4_v2, insert_helper_v2, Blob1024, Blob4; + btreemap_insert_blob_1024_8, insert_helper_v1, Blob1024, Blob8; + btreemap_insert_blob_1024_8_v2, insert_helper_v2, Blob1024, Blob8; + btreemap_insert_blob_1024_16, insert_helper_v1, Blob1024, Blob16; + btreemap_insert_blob_1024_16_v2, insert_helper_v2, Blob1024, Blob16; + btreemap_insert_blob_1024_32, insert_helper_v1, Blob1024, Blob32; + btreemap_insert_blob_1024_32_v2, insert_helper_v2, Blob1024, Blob32; + btreemap_insert_blob_1024_64, insert_helper_v1, Blob1024, Blob64; + btreemap_insert_blob_1024_64_v2, insert_helper_v2, Blob1024, Blob64; + btreemap_insert_blob_1024_128, insert_helper_v1, Blob1024, Blob128; + btreemap_insert_blob_1024_128_v2, insert_helper_v2, Blob1024, Blob128; + btreemap_insert_blob_1024_256, insert_helper_v1, Blob1024, Blob256; + btreemap_insert_blob_1024_256_v2, insert_helper_v2, Blob1024, Blob256; + btreemap_insert_blob_1024_512, insert_helper_v1, Blob1024, Blob512; + btreemap_insert_blob_1024_512_v2, insert_helper_v2, Blob1024, Blob512; + btreemap_insert_blob_1024_512_v2_mem_manager, insert_helper_v2_mem_manager, Blob1024, Blob512; + + btreemap_insert_u64_u64, insert_helper_v1, u64, u64; + btreemap_insert_u64_u64_v2, insert_helper_v2, u64, u64; + btreemap_insert_u64_u64_v2_mem_manager, insert_helper_v2_mem_manager, u64, u64; + + btreemap_insert_u64_blob_8, insert_helper_v1, u64, Blob8; + btreemap_insert_u64_blob_8_v2, insert_helper_v2, u64, Blob8; + + btreemap_insert_blob_8_u64, insert_helper_v1, Blob8, u64; + btreemap_insert_blob_8_u64_v2, insert_helper_v2, Blob8, u64; } #[bench(raw)] @@ -116,10 +93,8 @@ pub fn btreemap_insert_10mib_values() -> BenchResult { } bench_fn(|| { - let mut i = 0u64; - for value in values { - btree.insert(i, value); - i += 1; + for (i, value) in values.into_iter().enumerate() { + btree.insert(i as u32, value); } }) } @@ -372,20 +347,21 @@ pub fn btreemap_get_blob_8_u64_v2() -> BenchResult { } // Profiles inserting a large number of random blobs into a btreemap. -fn insert_blob_helper() -> BenchResult { +fn insert_helper_v1() -> BenchResult { let btree = BTreeMap::new_v1(DefaultMemoryImpl::default()); - insert_helper::, Blob>(btree) + insert_helper::(btree) } -fn insert_blob_helper_v2() -> BenchResult { +fn insert_helper_v2() -> BenchResult { let btree = BTreeMap::new(DefaultMemoryImpl::default()); - insert_helper::, Blob>(btree) + insert_helper::(btree) } -fn insert_blob_helper_v2_mem_manager() -> BenchResult { +fn insert_helper_v2_mem_manager( +) -> BenchResult { let memory_manager = MemoryManager::init(DefaultMemoryImpl::default()); let btree = BTreeMap::new(memory_manager.get(MemoryId::new(42))); - insert_helper::, Blob>(btree) + insert_helper::(btree) } // Profiles inserting a large number of random blobs into a btreemap. diff --git a/canbench_results.yml b/canbench_results.yml index e68ce309..fd1265e1 100644 --- a/canbench_results.yml +++ b/canbench_results.yml @@ -389,18 +389,18 @@ benches: heap_increase: 0 stable_memory_increase: 7 scopes: {} - btreemap_insert_u64_u64_mem_manager: - total: - instructions: 558130823 - heap_increase: 0 - stable_memory_increase: 0 - scopes: {} btreemap_insert_u64_u64_v2: total: instructions: 428895247 heap_increase: 0 stable_memory_increase: 6 scopes: {} + btreemap_insert_u64_u64_v2_mem_manager: + total: + instructions: 558130823 + heap_increase: 0 + stable_memory_increase: 0 + scopes: {} btreemap_iter_10mib_values: total: instructions: 11407378 From 8544e1486bd61c5242d8cf89e72f38795d500516 Mon Sep 17 00:00:00 2001 From: Maksym Arutyunyan Date: Tue, 8 Apr 2025 12:42:09 +0200 Subject: [PATCH 3/5] btreemap_remove --- benchmarks/src/btreemap.rs | 82 ++++++++++++++------------------------ 1 file changed, 29 insertions(+), 53 deletions(-) diff --git a/benchmarks/src/btreemap.rs b/benchmarks/src/btreemap.rs index 5ef31f25..e73203f4 100644 --- a/benchmarks/src/btreemap.rs +++ b/benchmarks/src/btreemap.rs @@ -230,55 +230,31 @@ pub fn btreemap_iter_count_10mib_values() -> BenchResult { // Benchmarks removing keys from a BTreeMap. bench_tests! { // K x 1024 - btreemap_remove_blob_4_1024, remove_blob_helper, 4, 1024; - btreemap_remove_blob_4_1024_v2, remove_blob_helper_v2, 4, 1024; - btreemap_remove_blob_8_1024, remove_blob_helper, 8, 1024; - btreemap_remove_blob_8_1024_v2, remove_blob_helper_v2, 8, 1024; - btreemap_remove_blob_16_1024, remove_blob_helper, 16, 1024; - btreemap_remove_blob_16_1024_v2, remove_blob_helper_v2, 16, 1024; - btreemap_remove_blob_32_1024, remove_blob_helper, 32, 1024; - btreemap_remove_blob_32_1024_v2, remove_blob_helper_v2, 32, 1024; - btreemap_remove_blob_64_1024, remove_blob_helper, 64, 1024; - btreemap_remove_blob_64_1024_v2, remove_blob_helper_v2, 64, 1024; - btreemap_remove_blob_128_1024, remove_blob_helper, 128, 1024; - btreemap_remove_blob_128_1024_v2, remove_blob_helper_v2, 128, 1024; - btreemap_remove_blob_256_1024, remove_blob_helper, 256, 1024; - btreemap_remove_blob_256_1024_v2, remove_blob_helper_v2, 256, 1024; - btreemap_remove_blob_512_1024, remove_blob_helper, 512, 1024; - btreemap_remove_blob_512_1024_v2, remove_blob_helper_v2, 512, 1024; -} - -#[bench(raw)] -pub fn btreemap_remove_u64_u64() -> BenchResult { - let btree = BTreeMap::new_v1(DefaultMemoryImpl::default()); - remove_helper::(btree) -} -#[bench(raw)] -pub fn btreemap_remove_u64_u64_v2() -> BenchResult { - let btree = BTreeMap::new(DefaultMemoryImpl::default()); - remove_helper::(btree) -} - -#[bench(raw)] -pub fn btreemap_remove_u64_blob_8() -> BenchResult { - let btree = BTreeMap::new_v1(DefaultMemoryImpl::default()); - remove_helper::>(btree) -} -#[bench(raw)] -pub fn btreemap_remove_u64_blob_8_v2() -> BenchResult { - let btree = BTreeMap::new(DefaultMemoryImpl::default()); - remove_helper::>(btree) -} - -#[bench(raw)] -pub fn btreemap_remove_blob_8_u64() -> BenchResult { - let btree = BTreeMap::new_v1(DefaultMemoryImpl::default()); - remove_helper::, u64>(btree) -} -#[bench(raw)] -pub fn btreemap_remove_blob_8_u64_v2() -> BenchResult { - let btree = BTreeMap::new(DefaultMemoryImpl::default()); - remove_helper::, u64>(btree) + btreemap_remove_blob_4_1024, remove_helper_v1, Blob4, Blob1024; + btreemap_remove_blob_4_1024_v2, remove_helper_v2, Blob4, Blob1024; + btreemap_remove_blob_8_1024, remove_helper_v1, Blob8, Blob1024; + btreemap_remove_blob_8_1024_v2, remove_helper_v2, Blob8, Blob1024; + btreemap_remove_blob_16_1024, remove_helper_v1, Blob16, Blob1024; + btreemap_remove_blob_16_1024_v2, remove_helper_v2, Blob16, Blob1024; + btreemap_remove_blob_32_1024, remove_helper_v1, Blob32, Blob1024; + btreemap_remove_blob_32_1024_v2, remove_helper_v2, Blob32, Blob1024; + btreemap_remove_blob_64_1024, remove_helper_v1, Blob64, Blob1024; + btreemap_remove_blob_64_1024_v2, remove_helper_v2, Blob64, Blob1024; + btreemap_remove_blob_128_1024, remove_helper_v1, Blob128, Blob1024; + btreemap_remove_blob_128_1024_v2, remove_helper_v2, Blob128, Blob1024; + btreemap_remove_blob_256_1024, remove_helper_v1, Blob256, Blob1024; + btreemap_remove_blob_256_1024_v2, remove_helper_v2, Blob256, Blob1024; + btreemap_remove_blob_512_1024, remove_helper_v1, Blob512, Blob1024; + btreemap_remove_blob_512_1024_v2, remove_helper_v2, Blob512, Blob1024; + + btreemap_remove_u64_u64, remove_helper_v1, u64, u64; + btreemap_remove_u64_u64_v2, remove_helper_v2, u64, u64; + + btreemap_remove_u64_blob_8, remove_helper_v1, u64, Blob8; + btreemap_remove_u64_blob_8_v2, remove_helper_v2, u64, Blob8; + + btreemap_remove_blob_8_u64, remove_helper_v1, Blob8, u64; + btreemap_remove_blob_8_u64_v2, remove_helper_v2, Blob8, u64; } // Benchmarks getting keys from a BTreeMap. @@ -490,14 +466,14 @@ fn contains_key_helper } // Inserts a large number of random blobs into a btreemap, then profiles removing them. -fn remove_blob_helper() -> BenchResult { +fn remove_helper_v1() -> BenchResult { let btree = BTreeMap::new_v1(DefaultMemoryImpl::default()); - remove_helper::, Blob>(btree) + remove_helper::(btree) } -fn remove_blob_helper_v2() -> BenchResult { +fn remove_helper_v2() -> BenchResult { let btree = BTreeMap::new(DefaultMemoryImpl::default()); - remove_helper::, Blob>(btree) + remove_helper::(btree) } fn remove_helper( From 666f15fbc59f3cbae21c4f36a1489d501c59cfa7 Mon Sep 17 00:00:00 2001 From: Maksym Arutyunyan Date: Tue, 8 Apr 2025 12:52:30 +0200 Subject: [PATCH 4/5] cleanup --- benchmarks/src/btreemap.rs | 191 +++++++++++++++---------------------- 1 file changed, 79 insertions(+), 112 deletions(-) diff --git a/benchmarks/src/btreemap.rs b/benchmarks/src/btreemap.rs index e73203f4..a186d3ee 100644 --- a/benchmarks/src/btreemap.rs +++ b/benchmarks/src/btreemap.rs @@ -72,11 +72,76 @@ bench_tests! { btreemap_insert_u64_blob_8, insert_helper_v1, u64, Blob8; btreemap_insert_u64_blob_8_v2, insert_helper_v2, u64, Blob8; - btreemap_insert_blob_8_u64, insert_helper_v1, Blob8, u64; btreemap_insert_blob_8_u64_v2, insert_helper_v2, Blob8, u64; } +// Benchmarks removing keys from a BTreeMap. +bench_tests! { + // K x 1024 + btreemap_remove_blob_4_1024, remove_helper_v1, Blob4, Blob1024; + btreemap_remove_blob_4_1024_v2, remove_helper_v2, Blob4, Blob1024; + btreemap_remove_blob_8_1024, remove_helper_v1, Blob8, Blob1024; + btreemap_remove_blob_8_1024_v2, remove_helper_v2, Blob8, Blob1024; + btreemap_remove_blob_16_1024, remove_helper_v1, Blob16, Blob1024; + btreemap_remove_blob_16_1024_v2, remove_helper_v2, Blob16, Blob1024; + btreemap_remove_blob_32_1024, remove_helper_v1, Blob32, Blob1024; + btreemap_remove_blob_32_1024_v2, remove_helper_v2, Blob32, Blob1024; + btreemap_remove_blob_64_1024, remove_helper_v1, Blob64, Blob1024; + btreemap_remove_blob_64_1024_v2, remove_helper_v2, Blob64, Blob1024; + btreemap_remove_blob_128_1024, remove_helper_v1, Blob128, Blob1024; + btreemap_remove_blob_128_1024_v2, remove_helper_v2, Blob128, Blob1024; + btreemap_remove_blob_256_1024, remove_helper_v1, Blob256, Blob1024; + btreemap_remove_blob_256_1024_v2, remove_helper_v2, Blob256, Blob1024; + btreemap_remove_blob_512_1024, remove_helper_v1, Blob512, Blob1024; + btreemap_remove_blob_512_1024_v2, remove_helper_v2, Blob512, Blob1024; + + btreemap_remove_u64_u64, remove_helper_v1, u64, u64; + btreemap_remove_u64_u64_v2, remove_helper_v2, u64, u64; + + btreemap_remove_u64_blob_8, remove_helper_v1, u64, Blob8; + btreemap_remove_u64_blob_8_v2, remove_helper_v2, u64, Blob8; + btreemap_remove_blob_8_u64, remove_helper_v1, Blob8, u64; + btreemap_remove_blob_8_u64_v2, remove_helper_v2, Blob8, u64; +} + +// Benchmarks getting keys from a BTreeMap. +bench_tests! { + // K x 1024 + btreemap_get_blob_4_1024, get_helper_v1, Blob4, Blob1024; + btreemap_get_blob_4_1024_v2, get_helper_v2, Blob4, Blob1024; + btreemap_get_blob_8_1024, get_helper_v1, Blob8, Blob1024; + btreemap_get_blob_8_1024_v2, get_helper_v2, Blob8, Blob1024; + btreemap_get_blob_16_1024, get_helper_v1, Blob16, Blob1024; + btreemap_get_blob_16_1024_v2, get_helper_v2, Blob16, Blob1024; + btreemap_get_blob_32_1024, get_helper_v1, Blob32, Blob1024; + btreemap_get_blob_32_1024_v2, get_helper_v2, Blob32, Blob1024; + btreemap_get_blob_64_1024, get_helper_v1, Blob64, Blob1024; + btreemap_get_blob_64_1024_v2, get_helper_v2, Blob64, Blob1024; + btreemap_get_blob_128_1024, get_helper_v1, Blob128, Blob1024; + btreemap_get_blob_128_1024_v2, get_helper_v2, Blob128, Blob1024; + btreemap_get_blob_256_1024, get_helper_v1, Blob256, Blob1024; + btreemap_get_blob_256_1024_v2, get_helper_v2, Blob256, Blob1024; + btreemap_get_blob_512_1024, get_helper_v1, Blob512, Blob1024; + btreemap_get_blob_512_1024_v2, get_helper_v2, Blob512, Blob1024; + btreemap_get_blob_512_1024_v2_mem_manager, get_helper_v2_mem_manager, Blob512, Blob1024; + + btreemap_get_u64_u64, get_helper_v1, u64, u64; + btreemap_get_u64_u64_v2, get_helper_v2, u64, u64; + btreemap_get_u64_u64_v2_mem_manager, get_helper_v2_mem_manager, u64, u64; + + btreemap_get_u64_blob_8, get_helper_v1, u64, Blob8; + btreemap_get_u64_blob_8_v2, get_helper_v2, u64, Blob8; + btreemap_get_blob_8_u64, get_helper_v1, Blob8, u64; + btreemap_get_blob_8_u64_v2, get_helper_v2, Blob8, u64; +} + +// Benchmarks `contains_key` of a BTreeMap. +bench_tests! { + btreemap_contains_key_blob_4_1024, contains_key_helper_v1, Blob4, Blob1024; + btreemap_contains_key_blob_4_1024_v2, contains_key_helper_v2, Blob4, Blob1024; +} + #[bench(raw)] pub fn btreemap_insert_10mib_values() -> BenchResult { let mut btree = BTreeMap::new(DefaultMemoryImpl::default()); @@ -227,101 +292,6 @@ pub fn btreemap_iter_count_10mib_values() -> BenchResult { }) } -// Benchmarks removing keys from a BTreeMap. -bench_tests! { - // K x 1024 - btreemap_remove_blob_4_1024, remove_helper_v1, Blob4, Blob1024; - btreemap_remove_blob_4_1024_v2, remove_helper_v2, Blob4, Blob1024; - btreemap_remove_blob_8_1024, remove_helper_v1, Blob8, Blob1024; - btreemap_remove_blob_8_1024_v2, remove_helper_v2, Blob8, Blob1024; - btreemap_remove_blob_16_1024, remove_helper_v1, Blob16, Blob1024; - btreemap_remove_blob_16_1024_v2, remove_helper_v2, Blob16, Blob1024; - btreemap_remove_blob_32_1024, remove_helper_v1, Blob32, Blob1024; - btreemap_remove_blob_32_1024_v2, remove_helper_v2, Blob32, Blob1024; - btreemap_remove_blob_64_1024, remove_helper_v1, Blob64, Blob1024; - btreemap_remove_blob_64_1024_v2, remove_helper_v2, Blob64, Blob1024; - btreemap_remove_blob_128_1024, remove_helper_v1, Blob128, Blob1024; - btreemap_remove_blob_128_1024_v2, remove_helper_v2, Blob128, Blob1024; - btreemap_remove_blob_256_1024, remove_helper_v1, Blob256, Blob1024; - btreemap_remove_blob_256_1024_v2, remove_helper_v2, Blob256, Blob1024; - btreemap_remove_blob_512_1024, remove_helper_v1, Blob512, Blob1024; - btreemap_remove_blob_512_1024_v2, remove_helper_v2, Blob512, Blob1024; - - btreemap_remove_u64_u64, remove_helper_v1, u64, u64; - btreemap_remove_u64_u64_v2, remove_helper_v2, u64, u64; - - btreemap_remove_u64_blob_8, remove_helper_v1, u64, Blob8; - btreemap_remove_u64_blob_8_v2, remove_helper_v2, u64, Blob8; - - btreemap_remove_blob_8_u64, remove_helper_v1, Blob8, u64; - btreemap_remove_blob_8_u64_v2, remove_helper_v2, Blob8, u64; -} - -// Benchmarks getting keys from a BTreeMap. -bench_tests! { - // K x 1024 - btreemap_get_blob_4_1024, get_blob_helper, 4, 1024; - btreemap_get_blob_4_1024_v2, get_blob_helper_v2, 4, 1024; - btreemap_get_blob_8_1024, get_blob_helper, 8, 1024; - btreemap_get_blob_8_1024_v2, get_blob_helper_v2, 8, 1024; - btreemap_get_blob_16_1024, get_blob_helper, 16, 1024; - btreemap_get_blob_16_1024_v2, get_blob_helper_v2, 16, 1024; - btreemap_get_blob_32_1024, get_blob_helper, 32, 1024; - btreemap_get_blob_32_1024_v2, get_blob_helper_v2, 32, 1024; - btreemap_get_blob_64_1024, get_blob_helper, 64, 1024; - btreemap_get_blob_64_1024_v2, get_blob_helper_v2, 64, 1024; - btreemap_get_blob_128_1024, get_blob_helper, 128, 1024; - btreemap_get_blob_128_1024_v2, get_blob_helper_v2, 128, 1024; - btreemap_get_blob_256_1024, get_blob_helper, 256, 1024; - btreemap_get_blob_256_1024_v2, get_blob_helper_v2, 256, 1024; - btreemap_get_blob_512_1024, get_blob_helper, 512, 1024; - btreemap_get_blob_512_1024_v2, get_blob_helper_v2, 512, 1024; - btreemap_get_blob_512_1024_v2_mem_manager, get_blob_helper_v2_mem_manager, 512, 1024; -} - -#[bench(raw)] -pub fn btreemap_get_u64_u64() -> BenchResult { - let btree = BTreeMap::new_v1(DefaultMemoryImpl::default()); - get_helper::(btree) -} - -#[bench(raw)] -pub fn btreemap_get_u64_u64_v2() -> BenchResult { - let btree = BTreeMap::new(DefaultMemoryImpl::default()); - get_helper::(btree) -} - -#[bench(raw)] -pub fn btreemap_get_u64_u64_v2_mem_manager() -> BenchResult { - let memory_manager = MemoryManager::init(DefaultMemoryImpl::default()); - let btree = BTreeMap::new(memory_manager.get(MemoryId::new(42))); - get_helper::(btree) -} - -#[bench(raw)] -pub fn btreemap_get_u64_blob_8() -> BenchResult { - let btree = BTreeMap::new_v1(DefaultMemoryImpl::default()); - get_helper::>(btree) -} - -#[bench(raw)] -pub fn btreemap_get_u64_blob_8_v2() -> BenchResult { - let btree = BTreeMap::new(DefaultMemoryImpl::default()); - get_helper::>(btree) -} - -#[bench(raw)] -pub fn btreemap_get_blob_8_u64() -> BenchResult { - let btree = BTreeMap::new_v1(DefaultMemoryImpl::default()); - get_helper::, u64>(btree) -} - -#[bench(raw)] -pub fn btreemap_get_blob_8_u64_v2() -> BenchResult { - let btree = BTreeMap::new(DefaultMemoryImpl::default()); - get_helper::, u64>(btree) -} - // Profiles inserting a large number of random blobs into a btreemap. fn insert_helper_v1() -> BenchResult { let btree = BTreeMap::new_v1(DefaultMemoryImpl::default()); @@ -380,20 +350,21 @@ fn iter_helper(size: u32, value_size: u32, iter_type: IterType) -> BenchResult { } // Profiles getting a large number of random blobs from a btreemap. -fn get_blob_helper() -> BenchResult { +fn get_helper_v1() -> BenchResult { let btree = BTreeMap::new_v1(DefaultMemoryImpl::default()); - get_helper::, Blob>(btree) + get_helper::(btree) } -fn get_blob_helper_v2() -> BenchResult { +fn get_helper_v2() -> BenchResult { let btree = BTreeMap::new(DefaultMemoryImpl::default()); - get_helper::, Blob>(btree) + get_helper::(btree) } -fn get_blob_helper_v2_mem_manager() -> BenchResult { +fn get_helper_v2_mem_manager( +) -> BenchResult { let memory_manager = MemoryManager::init(DefaultMemoryImpl::default()); let btree = BTreeMap::new(memory_manager.get(MemoryId::new(42))); - get_helper::, Blob>(btree) + get_helper::(btree) } fn get_helper( @@ -422,21 +393,17 @@ fn get_helper( }) } -// Benchmarks `contains_key` of a BTreeMap. -bench_tests! { - btreemap_contains_key_blob_4_1024, contains_key_blob_helper, 4, 1024; - btreemap_contains_key_blob_4_1024_v2, contains_key_blob_helper_v2, 4, 1024; -} - // Profiles `contains_key` on a large number of random blobs from a btreemap. -fn contains_key_blob_helper() -> BenchResult { +fn contains_key_helper_v1() -> BenchResult +{ let btree = BTreeMap::new_v1(DefaultMemoryImpl::default()); - contains_key_helper::, Blob>(btree) + contains_key_helper::(btree) } -fn contains_key_blob_helper_v2() -> BenchResult { +fn contains_key_helper_v2() -> BenchResult +{ let btree = BTreeMap::new(DefaultMemoryImpl::default()); - contains_key_helper::, Blob>(btree) + contains_key_helper::(btree) } fn contains_key_helper( From be32b7f90ed3d94cd39b2088599296304823afd7 Mon Sep 17 00:00:00 2001 From: Maksym Arutyunyan Date: Tue, 8 Apr 2025 13:19:12 +0200 Subject: [PATCH 5/5] empty commit