1
1
use crate :: Random ;
2
2
use canbench_rs:: { bench, bench_fn, BenchResult } ;
3
- use ic_stable_structures:: { storable:: Blob , BTreeMap , DefaultMemoryImpl , Storable } ;
3
+ use ic_stable_structures:: memory_manager:: { MemoryId , MemoryManager } ;
4
+ use ic_stable_structures:: { storable:: Blob , BTreeMap , DefaultMemoryImpl , Memory , Storable } ;
4
5
use std:: ops:: Bound ;
5
6
use tiny_rng:: { Rand , Rng } ;
6
7
@@ -164,12 +165,24 @@ pub fn btreemap_insert_blob_1024_512_v2() -> BenchResult {
164
165
insert_blob_helper_v2 :: < 1024 , 512 > ( )
165
166
}
166
167
168
+ #[ bench( raw) ]
169
+ pub fn btreemap_insert_blob_1024_512_v2_mem_manager ( ) -> BenchResult {
170
+ insert_blob_helper_v2_mem_manager :: < 1024 , 512 > ( )
171
+ }
172
+
167
173
#[ bench( raw) ]
168
174
pub fn btreemap_insert_u64_u64 ( ) -> BenchResult {
169
175
let btree = BTreeMap :: new_v1 ( DefaultMemoryImpl :: default ( ) ) ;
170
176
insert_helper :: < u64 , u64 > ( btree)
171
177
}
172
178
179
+ #[ bench( raw) ]
180
+ pub fn btreemap_insert_u64_u64_mem_manager ( ) -> BenchResult {
181
+ let memory_manager = MemoryManager :: init ( DefaultMemoryImpl :: default ( ) ) ;
182
+ let btree = BTreeMap :: new ( memory_manager. get ( MemoryId :: new ( 42 ) ) ) ;
183
+ insert_helper :: < u64 , u64 > ( btree)
184
+ }
185
+
173
186
#[ bench( raw) ]
174
187
pub fn btreemap_insert_u64_u64_v2 ( ) -> BenchResult {
175
188
let btree = BTreeMap :: new ( DefaultMemoryImpl :: default ( ) ) ;
@@ -204,16 +217,20 @@ pub fn btreemap_insert_blob_8_u64_v2() -> BenchResult {
204
217
pub fn btreemap_insert_10mib_values ( ) -> BenchResult {
205
218
let mut btree = BTreeMap :: new ( DefaultMemoryImpl :: default ( ) ) ;
206
219
207
- // Insert 200 10MiB values.
220
+ // Insert 20 10MiB values.
208
221
let mut rng = Rng :: from_seed ( 0 ) ;
209
222
let mut values = vec ! [ ] ;
210
- for _ in 0 ..200 {
211
- values. push ( rng. iter ( Rand :: rand_u8) . take ( 10 * 1024 ) . collect :: < Vec < _ > > ( ) ) ;
223
+ for _ in 0 ..20 {
224
+ values. push (
225
+ rng. iter ( Rand :: rand_u8)
226
+ . take ( 10 * 1024 * 1024 )
227
+ . collect :: < Vec < _ > > ( ) ,
228
+ ) ;
212
229
}
213
230
214
231
bench_fn ( || {
215
232
let mut i = 0u64 ;
216
- for value in values. into_iter ( ) {
233
+ for value in values {
217
234
btree. insert ( i, value) ;
218
235
i += 1 ;
219
236
}
@@ -543,6 +560,11 @@ pub fn btreemap_get_blob_512_1024_v2() -> BenchResult {
543
560
get_blob_helper_v2 :: < 512 , 1024 > ( )
544
561
}
545
562
563
+ #[ bench( raw) ]
564
+ pub fn btreemap_get_blob_512_1024_v2_mem_manager ( ) -> BenchResult {
565
+ get_blob_helper_v2_mem_manager :: < 512 , 1024 > ( )
566
+ }
567
+
546
568
#[ bench( raw) ]
547
569
pub fn btreemap_get_u64_u64 ( ) -> BenchResult {
548
570
let btree = BTreeMap :: new_v1 ( DefaultMemoryImpl :: default ( ) ) ;
@@ -555,6 +577,13 @@ pub fn btreemap_get_u64_u64_v2() -> BenchResult {
555
577
get_helper :: < u64 , u64 > ( btree)
556
578
}
557
579
580
+ #[ bench( raw) ]
581
+ pub fn btreemap_get_u64_u64_v2_mem_manager ( ) -> BenchResult {
582
+ let memory_manager = MemoryManager :: init ( DefaultMemoryImpl :: default ( ) ) ;
583
+ let btree = BTreeMap :: new ( memory_manager. get ( MemoryId :: new ( 42 ) ) ) ;
584
+ get_helper :: < u64 , u64 > ( btree)
585
+ }
586
+
558
587
#[ bench( raw) ]
559
588
pub fn btreemap_get_u64_blob_8 ( ) -> BenchResult {
560
589
let btree = BTreeMap :: new_v1 ( DefaultMemoryImpl :: default ( ) ) ;
@@ -590,9 +619,15 @@ fn insert_blob_helper_v2<const K: usize, const V: usize>() -> BenchResult {
590
619
insert_helper :: < Blob < K > , Blob < V > > ( btree)
591
620
}
592
621
622
+ fn insert_blob_helper_v2_mem_manager < const K : usize , const V : usize > ( ) -> BenchResult {
623
+ let memory_manager = MemoryManager :: init ( DefaultMemoryImpl :: default ( ) ) ;
624
+ let btree = BTreeMap :: new ( memory_manager. get ( MemoryId :: new ( 42 ) ) ) ;
625
+ insert_helper :: < Blob < K > , Blob < V > > ( btree)
626
+ }
627
+
593
628
// Profiles inserting a large number of random blobs into a btreemap.
594
629
fn insert_helper < K : Clone + Ord + Storable + Random , V : Storable + Random > (
595
- mut btree : BTreeMap < K , V , DefaultMemoryImpl > ,
630
+ mut btree : BTreeMap < K , V , impl Memory > ,
596
631
) -> BenchResult {
597
632
let num_keys = 10_000 ;
598
633
let mut rng = Rng :: from_seed ( 0 ) ;
@@ -640,8 +675,14 @@ fn get_blob_helper_v2<const K: usize, const V: usize>() -> BenchResult {
640
675
get_helper :: < Blob < K > , Blob < V > > ( btree)
641
676
}
642
677
678
+ fn get_blob_helper_v2_mem_manager < const K : usize , const V : usize > ( ) -> BenchResult {
679
+ let memory_manager = MemoryManager :: init ( DefaultMemoryImpl :: default ( ) ) ;
680
+ let btree = BTreeMap :: new ( memory_manager. get ( MemoryId :: new ( 42 ) ) ) ;
681
+ get_helper :: < Blob < K > , Blob < V > > ( btree)
682
+ }
683
+
643
684
fn get_helper < K : Clone + Ord + Storable + Random , V : Storable + Random > (
644
- mut btree : BTreeMap < K , V , DefaultMemoryImpl > ,
685
+ mut btree : BTreeMap < K , V , impl Memory > ,
645
686
) -> BenchResult {
646
687
let num_keys = 10_000 ;
647
688
let mut rng = Rng :: from_seed ( 0 ) ;
0 commit comments