diff --git a/benchmarks/src/btreemap.rs b/benchmarks/src/btreemap.rs index 01214fae..47d959a9 100644 --- a/benchmarks/src/btreemap.rs +++ b/benchmarks/src/btreemap.rs @@ -1,6 +1,7 @@ use crate::Random; use canbench_rs::{bench, bench_fn, BenchResult}; -use ic_stable_structures::{storable::Blob, BTreeMap, DefaultMemoryImpl, Storable}; +use ic_stable_structures::memory_manager::{MemoryId, MemoryManager}; +use ic_stable_structures::{storable::Blob, BTreeMap, DefaultMemoryImpl, Memory, Storable}; use std::ops::Bound; use tiny_rng::{Rand, Rng}; @@ -164,12 +165,24 @@ 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>() +} + #[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()); @@ -204,16 +217,20 @@ pub fn btreemap_insert_blob_8_u64_v2() -> BenchResult { pub fn btreemap_insert_10mib_values() -> BenchResult { let mut btree = BTreeMap::new(DefaultMemoryImpl::default()); - // Insert 200 10MiB values. + // Insert 20 10MiB values. let mut rng = Rng::from_seed(0); let mut values = vec![]; - for _ in 0..200 { - values.push(rng.iter(Rand::rand_u8).take(10 * 1024).collect::>()); + for _ in 0..20 { + values.push( + rng.iter(Rand::rand_u8) + .take(10 * 1024 * 1024) + .collect::>(), + ); } bench_fn(|| { let mut i = 0u64; - for value in values.into_iter() { + for value in values { btree.insert(i, value); i += 1; } @@ -543,6 +560,11 @@ 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>() +} + #[bench(raw)] pub fn btreemap_get_u64_u64() -> BenchResult { let btree = BTreeMap::new_v1(DefaultMemoryImpl::default()); @@ -555,6 +577,13 @@ pub fn btreemap_get_u64_u64_v2() -> BenchResult { 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()); @@ -590,9 +619,15 @@ fn insert_blob_helper_v2() -> BenchResult { insert_helper::, Blob>(btree) } +fn insert_blob_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) +} + // Profiles inserting a large number of random blobs into a btreemap. fn insert_helper( - mut btree: BTreeMap, + mut btree: BTreeMap, ) -> BenchResult { let num_keys = 10_000; let mut rng = Rng::from_seed(0); @@ -640,8 +675,14 @@ fn get_blob_helper_v2() -> BenchResult { get_helper::, Blob>(btree) } +fn get_blob_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) +} + fn get_helper( - mut btree: BTreeMap, + mut btree: BTreeMap, ) -> BenchResult { let num_keys = 10_000; let mut rng = Rng::from_seed(0); diff --git a/benchmarks/src/vec.rs b/benchmarks/src/vec.rs index 564e1ff8..4a0475bb 100644 --- a/benchmarks/src/vec.rs +++ b/benchmarks/src/vec.rs @@ -1,7 +1,8 @@ use crate::Random; use canbench_rs::{bench, bench_fn, BenchResult}; +use ic_stable_structures::memory_manager::{MemoryId, MemoryManager}; use ic_stable_structures::storable::Blob; -use ic_stable_structures::{DefaultMemoryImpl, StableVec, Storable}; +use ic_stable_structures::{DefaultMemoryImpl, Memory, StableVec, Storable}; use tiny_rng::{Rand, Rng}; #[bench(raw)] @@ -44,6 +45,11 @@ pub fn vec_get_blob_4() -> BenchResult { vec_get_blob::<4>() } +#[bench(raw)] +pub fn vec_get_blob_4_mem_manager() -> BenchResult { + vec_get_blob_mem_manager::<4>() +} + #[bench(raw)] pub fn vec_get_blob_8() -> BenchResult { vec_get_blob::<8>() @@ -64,6 +70,11 @@ pub fn vec_get_blob_64() -> BenchResult { vec_get_blob::<64>() } +#[bench(raw)] +pub fn vec_get_blob_64_mem_manager() -> BenchResult { + vec_get_blob_mem_manager::<64>() +} + #[bench(raw)] pub fn vec_get_blob_128() -> BenchResult { vec_get_blob::<128>() @@ -71,7 +82,7 @@ pub fn vec_get_blob_128() -> BenchResult { #[bench(raw)] pub fn vec_get_u64() -> BenchResult { - vec_get::() + vec_get::(DefaultMemoryImpl::default()) } fn vec_insert_blob() -> BenchResult { @@ -97,12 +108,17 @@ fn vec_insert() -> BenchResult { } fn vec_get_blob() -> BenchResult { - vec_get::>() + vec_get::>(DefaultMemoryImpl::default()) +} + +fn vec_get_blob_mem_manager() -> BenchResult { + let memory_manager = MemoryManager::init(DefaultMemoryImpl::default()); + vec_get::>(memory_manager.get(MemoryId::new(42))) } -fn vec_get() -> BenchResult { +fn vec_get(memory: impl Memory) -> BenchResult { let num_items = 10_000; - let svec: StableVec = StableVec::new(DefaultMemoryImpl::default()).unwrap(); + let svec: StableVec = StableVec::new(memory).unwrap(); let mut rng = Rng::from_seed(0); diff --git a/canbench_results.yml b/canbench_results.yml index 287e104d..b205d13e 100644 --- a/canbench_results.yml +++ b/canbench_results.yml @@ -71,6 +71,12 @@ benches: heap_increase: 0 stable_memory_increase: 0 scopes: {} + btreemap_get_blob_512_1024_v2_mem_manager: + total: + instructions: 3164909208 + heap_increase: 0 + stable_memory_increase: 0 + scopes: { } btreemap_get_blob_64_1024: total: instructions: 572513751 @@ -130,12 +136,18 @@ benches: instructions: 255485892 heap_increase: 0 stable_memory_increase: 0 + scopes: { } + btreemap_get_u64_u64_v2_mem_manager: + total: + instructions: 673752904 + heap_increase: 0 + stable_memory_increase: 0 scopes: {} btreemap_insert_10mib_values: total: - instructions: 82015559 + instructions: 5251584111 heap_increase: 0 - stable_memory_increase: 32 + stable_memory_increase: 3613 scopes: {} btreemap_insert_blob_1024_128: total: @@ -208,6 +220,12 @@ benches: instructions: 5070548871 heap_increase: 0 stable_memory_increase: 261 + scopes: { } + btreemap_insert_blob_1024_512_v2_mem_manager: + total: + instructions: 6292667075 + heap_increase: 0 + stable_memory_increase: 256 scopes: {} btreemap_insert_blob_1024_64: total: @@ -359,6 +377,12 @@ benches: heap_increase: 0 stable_memory_increase: 7 scopes: {} + btreemap_insert_u64_u64_mem_manager: + total: + instructions: 1019612837 + heap_increase: 0 + stable_memory_increase: 0 + scopes: { } btreemap_insert_u64_u64_v2: total: instructions: 421501977 @@ -635,11 +659,23 @@ benches: heap_increase: 0 stable_memory_increase: 0 scopes: {} + vec_get_blob_4_mem_manager: + total: + instructions: 14476122 + heap_increase: 0 + stable_memory_increase: 0 + scopes: { } vec_get_blob_64: total: instructions: 12960294 heap_increase: 0 stable_memory_increase: 0 + scopes: { } + vec_get_blob_64_mem_manager: + total: + instructions: 24146389 + heap_increase: 0 + stable_memory_increase: 0 scopes: {} vec_get_blob_8: total: