From 2c8e0aac5808278d2ce1c404eb6fb87c286f567c Mon Sep 17 00:00:00 2001 From: Dragoljub Duric Date: Wed, 7 Feb 2024 13:14:23 +0000 Subject: [PATCH 01/24] . --- src/btreemap.rs | 15 +++++++ src/btreemap/iter.rs | 101 ++++++++++++++++++++++++++++++++----------- src/btreemap/node.rs | 4 +- 3 files changed, 92 insertions(+), 28 deletions(-) diff --git a/src/btreemap.rs b/src/btreemap.rs index 9ce8318c..0dd823e7 100644 --- a/src/btreemap.rs +++ b/src/btreemap.rs @@ -2317,6 +2317,21 @@ mod test { }); } + #[test] + fn iter_count_test() { + btree_test(|mut btree| { + for i in 1..=250 { + assert_eq!(btree.insert(b(&[i]), b(&[])), None); + } + + for i in 1..250 { + for j in i..=250 { + assert_eq!(btree.range(b(&[i])..b(&[j])).count(), (j - i) as usize); + } + } + }); + } + #[test] fn range_various_prefixes() { btree_test(|mut btree| { diff --git a/src/btreemap/iter.rs b/src/btreemap/iter.rs index 5b1dc0a9..d2a9df16 100644 --- a/src/btreemap/iter.rs +++ b/src/btreemap/iter.rs @@ -6,12 +6,14 @@ use crate::{types::NULL, Address, Memory, Storable}; use std::borrow::Cow; use std::ops::{Bound, RangeBounds}; +#[derive(Clone)] /// An indicator of the current position in the map. pub(crate) enum Cursor { Address(Address), Node { node: Node, next: Index }, } +#[derive(Clone)] /// An index into a node's child or entry. pub(crate) enum Index { Child(usize), @@ -71,19 +73,10 @@ where range, } } -} -impl Iterator for Iter<'_, K, V, M> -where - K: Storable + Ord + Clone, - V: Storable, - M: Memory, -{ - type Item = (K, V); - - fn next(&mut self) -> Option { - match self.cursors.pop() { - Some(Cursor::Address(address)) => { + fn update_cursors_for_iteration(&mut self, cursor: Cursor) { + match cursor { + Cursor::Address(address) => { if address != NULL { // Load the node at the given address, and add it to the cursors. let node = self.map.load_node(address); @@ -97,13 +90,12 @@ where node, }); } - self.next() } - Some(Cursor::Node { + Cursor::Node { node, next: Index::Child(child_idx), - }) => { + } => { let child_address = node.child(child_idx); // After iterating on the child, iterate on the next _entry_ in this node. @@ -115,21 +107,17 @@ where // Add the child to the top of the cursors to be iterated on first. self.cursors.push(Cursor::Address(child_address)); - - self.next() } - Some(Cursor::Node { + Cursor::Node { node, next: Index::Entry(entry_idx), - }) => { + } => { if entry_idx >= node.entries_len() { // No more entries to iterate on in this node. - return self.next(); + return; } - let (key, encoded_value) = node.entry(entry_idx, self.map.memory()); - // Add to the cursors the next element to be traversed. self.cursors.push(Cursor::Node { next: match node.node_type() { @@ -140,6 +128,21 @@ where }, node, }); + } + } + } + + fn next_without_loading_value(&mut self) -> Option<()> { + // If the cursors are empty. Iteration is complete. + let cursor_last = self.cursors.pop()?; + self.update_cursors_for_iteration(cursor_last.clone()); + if let Cursor::Node { + node, + next: Index::Entry(entry_idx), + } = cursor_last + { + if entry_idx < node.entries_len() { + let key = node.key(entry_idx); // If the key does not belong to the range, iteration stops. if !self.range.contains(&key) { @@ -148,13 +151,59 @@ where return None; } - Some((key, V::from_bytes(Cow::Owned(encoded_value)))) + return Some(()); } - None => { - // The cursors are empty. Iteration is complete. - None + } + + self.next().map(|_| ()) + } +} + +impl Iterator for Iter<'_, K, V, M> +where + K: Storable + Ord + Clone, + V: Storable, + M: Memory, +{ + type Item = (K, V); + + fn next(&mut self) -> Option { + // If the cursors are empty. Iteration is complete. + let cursor_last = self.cursors.pop()?; + self.update_cursors_for_iteration(cursor_last.clone()); + if let Cursor::Node { + node, + next: Index::Entry(entry_idx), + } = cursor_last + { + if entry_idx < node.entries_len() { + let key = node.key(entry_idx); + + // If the key does not belong to the range, iteration stops. + if !self.range.contains(&key) { + // Clear all cursors to avoid needless work in subsequent calls. + self.cursors = vec![]; + return None; + } + + let encoded_value = node.value(entry_idx, self.map.memory()).to_vec(); + + return Some((key.clone(), V::from_bytes(Cow::Owned(encoded_value)))); } } + + self.next() + } + + fn count(mut self) -> usize + where + Self: Sized, + { + let mut cnt = 0; + while let Some(_) = self.next_without_loading_value() { + cnt += 1; + } + return cnt; } } diff --git a/src/btreemap/node.rs b/src/btreemap/node.rs index 28ee7bdd..1dcab170 100644 --- a/src/btreemap/node.rs +++ b/src/btreemap/node.rs @@ -46,7 +46,7 @@ pub type Entry = (K, Vec); /// 2. `V2`, which supports both bounded and unbounded types. /// /// See `v1.rs` and `v2.rs` for more details. -#[derive(Debug)] +#[derive(Debug, Clone)] pub struct Node { address: Address, keys: Vec, @@ -434,7 +434,7 @@ impl NodeHeader { } // The value in a K/V pair. -#[derive(Debug)] +#[derive(Debug, Clone)] enum Value { // The value's encoded bytes. ByVal(Vec), From d205b6e2b7cb32641474819156dbf96b57aa2592 Mon Sep 17 00:00:00 2001 From: Dragoljub Duric Date: Wed, 7 Feb 2024 13:23:19 +0000 Subject: [PATCH 02/24] fix clippy --- src/btreemap/iter.rs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/btreemap/iter.rs b/src/btreemap/iter.rs index d2a9df16..285c6f8a 100644 --- a/src/btreemap/iter.rs +++ b/src/btreemap/iter.rs @@ -145,7 +145,7 @@ where let key = node.key(entry_idx); // If the key does not belong to the range, iteration stops. - if !self.range.contains(&key) { + if !self.range.contains(key) { // Clear all cursors to avoid needless work in subsequent calls. self.cursors = vec![]; return None; @@ -180,7 +180,7 @@ where let key = node.key(entry_idx); // If the key does not belong to the range, iteration stops. - if !self.range.contains(&key) { + if !self.range.contains(key) { // Clear all cursors to avoid needless work in subsequent calls. self.cursors = vec![]; return None; @@ -200,10 +200,10 @@ where Self: Sized, { let mut cnt = 0; - while let Some(_) = self.next_without_loading_value() { + while self.next_without_loading_value().is_some() { cnt += 1; } - return cnt; + cnt } } From 38dc7b5f4c4cb8be7aa6fac4b35608978e59c7e9 Mon Sep 17 00:00:00 2001 From: Dragoljub Duric Date: Wed, 7 Feb 2024 17:16:47 +0000 Subject: [PATCH 03/24] Add benchmark --- benchmarks/src/btreemap.rs | 29 ++++++ canbench_results.yml | 205 +++++++++++++++++++------------------ 2 files changed, 134 insertions(+), 100 deletions(-) diff --git a/benchmarks/src/btreemap.rs b/benchmarks/src/btreemap.rs index 868dbd91..b48c2ea0 100644 --- a/benchmarks/src/btreemap.rs +++ b/benchmarks/src/btreemap.rs @@ -1,6 +1,7 @@ use crate::Random; use canbench::{benchmark, macros::bench, BenchResult}; use ic_stable_structures::{storable::Blob, BTreeMap, DefaultMemoryImpl, Storable}; +use std::ops::Bound; use tiny_rng::{Rand, Rng}; #[bench] @@ -219,6 +220,34 @@ pub fn btreemap_insert_10mib_values() -> BenchResult { }) } +#[bench] +pub fn btreemap_iter_count() -> BenchResult { + let mut btree = BTreeMap::new(DefaultMemoryImpl::default()); + + // Insert 200 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::>()); + } + + let mut i = 0u8; + for value in values.into_iter() { + btree.insert(i, value); + i += 1; + } + + benchmark(|| { + for j in 0..i { + for k in j + 1..i { + btree + .range((Bound::Included(j), Bound::Included(k))) + .count(); + } + } + }) +} + /// Benchmarks removing keys from a BTreeMap. #[bench] pub fn btreemap_remove_blob_4_1024() -> BenchResult { diff --git a/canbench_results.yml b/canbench_results.yml index 8ad5889d..8cc488c9 100644 --- a/canbench_results.yml +++ b/canbench_results.yml @@ -1,544 +1,549 @@ btreemap_get_blob_128_1024: measurements: - instructions: 1006573538 + instructions: 1006573497 node_load_v1: 832328557 stable_memory_size: 261 btreemap_get_blob_128_1024_v2: measurements: - instructions: 1123805990 + instructions: 1123805949 node_load_v2: 938155476 stable_memory_size: 196 btreemap_get_blob_16_1024: measurements: - instructions: 487229806 + instructions: 487229765 node_load_v1: 339804418 stable_memory_size: 216 btreemap_get_blob_16_1024_v2: measurements: - instructions: 583474971 + instructions: 583474930 node_load_v2: 430852270 stable_memory_size: 162 btreemap_get_blob_256_1024: measurements: - instructions: 1510660940 + instructions: 1510660899 node_load_v1: 1309093774 stable_memory_size: 293 btreemap_get_blob_256_1024_v2: measurements: - instructions: 1626341678 + instructions: 1626341637 node_load_v2: 1410845462 stable_memory_size: 220 btreemap_get_blob_32_1024: measurements: - instructions: 534895222 + instructions: 534895181 node_load_v1: 378516147 stable_memory_size: 231 btreemap_get_blob_32_1024_v2: measurements: - instructions: 633048491 + instructions: 633048450 node_load_v2: 471574348 stable_memory_size: 174 btreemap_get_blob_4_1024: measurements: - instructions: 355650535 + instructions: 355650494 node_load_v1: 231720942 stable_memory_size: 124 btreemap_get_blob_4_1024_v2: measurements: - instructions: 446660432 + instructions: 446660391 node_load_v2: 313869359 stable_memory_size: 93 btreemap_get_blob_512_1024: measurements: - instructions: 2506597898 + instructions: 2506597857 node_load_v1: 2251570705 stable_memory_size: 352 btreemap_get_blob_512_1024_v2: measurements: - instructions: 2625838052 + instructions: 2625838011 node_load_v2: 2356816367 stable_memory_size: 264 btreemap_get_blob_64_1024: measurements: - instructions: 780061526 + instructions: 780061485 node_load_v1: 616669297 stable_memory_size: 246 btreemap_get_blob_64_1024_v2: measurements: - instructions: 878745163 + instructions: 878745122 node_load_v2: 706540951 stable_memory_size: 184 btreemap_get_blob_8_1024: measurements: - instructions: 406432578 + instructions: 406432537 node_load_v1: 259168629 stable_memory_size: 184 btreemap_get_blob_8_1024_v2: measurements: - instructions: 493282925 + instructions: 493282884 node_load_v2: 336415667 stable_memory_size: 139 btreemap_get_blob_8_u64: measurements: - instructions: 368106593 + instructions: 368106552 node_load_v1: 253569163 stable_memory_size: 7 btreemap_get_blob_8_u64_v2: measurements: - instructions: 466009078 + instructions: 466009037 node_load_v2: 345475118 stable_memory_size: 5 btreemap_get_u64_blob_8: measurements: - instructions: 351156467 + instructions: 351156426 node_load_v1: 250986516 stable_memory_size: 8 btreemap_get_u64_blob_8_v2: measurements: - instructions: 413554294 + instructions: 413554253 node_load_v2: 309705639 stable_memory_size: 6 btreemap_get_u64_u64: measurements: - instructions: 353621464 + instructions: 353621423 node_load_v1: 249502481 stable_memory_size: 8 btreemap_get_u64_u64_v2: measurements: - instructions: 422146359 + instructions: 422146318 node_load_v2: 312364993 stable_memory_size: 7 btreemap_insert_10mib_values: measurements: - instructions: 107942355 + instructions: 107942333 node_load_v2: 10057317 node_save_v2: 77823608 stable_memory_size: 33 btreemap_insert_blob_1024_128: measurements: - instructions: 5115889431 + instructions: 5115889409 node_load_v1: 4062772095 node_save_v1: 185771186 stable_memory_size: 263 btreemap_insert_blob_1024_128_v2: measurements: - instructions: 5394772440 + instructions: 5394772418 node_load_v2: 4190686429 node_save_v2: 206085822 stable_memory_size: 197 btreemap_insert_blob_1024_16: measurements: - instructions: 5074839717 + instructions: 5074839695 node_load_v1: 4058526995 node_save_v1: 172957200 stable_memory_size: 242 btreemap_insert_blob_1024_16_v2: measurements: - instructions: 5358731374 + instructions: 5358731352 node_load_v2: 4195507437 node_save_v2: 193208733 stable_memory_size: 182 btreemap_insert_blob_1024_256: measurements: - instructions: 5130740072 + instructions: 5130740050 node_load_v1: 4039224210 node_save_v1: 201310396 stable_memory_size: 293 btreemap_insert_blob_1024_256_v2: measurements: - instructions: 5352948952 + instructions: 5352948930 node_load_v2: 4171364974 node_save_v2: 221531887 stable_memory_size: 220 btreemap_insert_blob_1024_32: measurements: - instructions: 5089791785 + instructions: 5089791763 node_load_v1: 4079908295 node_save_v1: 173954636 stable_memory_size: 240 btreemap_insert_blob_1024_32_v2: measurements: - instructions: 5357513466 + instructions: 5357513444 node_load_v2: 4214236378 node_save_v2: 194114909 stable_memory_size: 181 btreemap_insert_blob_1024_4: measurements: - instructions: 4968257212 + instructions: 4968257190 node_load_v1: 4058890666 node_save_v1: 162657999 stable_memory_size: 236 btreemap_insert_blob_1024_4_v2: measurements: - instructions: 5264404231 + instructions: 5264404209 node_load_v2: 4189301776 node_save_v2: 182905394 stable_memory_size: 177 btreemap_insert_blob_1024_512: measurements: - instructions: 5224338924 + instructions: 5224338902 node_load_v1: 4064093845 node_save_v1: 236696639 stable_memory_size: 349 btreemap_insert_blob_1024_512_v2: measurements: - instructions: 5481571968 + instructions: 5481571946 node_load_v2: 4201549676 node_save_v2: 257610609 stable_memory_size: 262 btreemap_insert_blob_1024_64: measurements: - instructions: 5110806943 + instructions: 5110806921 node_load_v1: 4075394290 node_save_v1: 178905580 stable_memory_size: 251 btreemap_insert_blob_1024_64_v2: measurements: - instructions: 5377434456 + instructions: 5377434434 node_load_v2: 4214020891 node_save_v2: 199157099 stable_memory_size: 189 btreemap_insert_blob_1024_8: measurements: - instructions: 5053776980 + instructions: 5053776958 node_load_v1: 4051194851 node_save_v1: 167362943 stable_memory_size: 238 btreemap_insert_blob_1024_8_v2: measurements: - instructions: 5331593907 + instructions: 5331593885 node_load_v2: 4181516149 node_save_v2: 187604446 stable_memory_size: 179 btreemap_insert_blob_128_1024: measurements: - instructions: 1577091213 + instructions: 1577091191 node_load_v1: 812526962 node_save_v1: 301462572 stable_memory_size: 261 btreemap_insert_blob_128_1024_v2: measurements: - instructions: 1726441521 + instructions: 1726441499 node_load_v2: 925130424 node_save_v2: 322015815 stable_memory_size: 196 btreemap_insert_blob_16_1024: measurements: - instructions: 992366717 + instructions: 992366695 node_load_v1: 322073344 node_save_v1: 291094888 stable_memory_size: 216 btreemap_insert_blob_16_1024_v2: measurements: - instructions: 1108674244 + instructions: 1108674222 node_load_v2: 419541518 node_save_v2: 310638874 stable_memory_size: 162 btreemap_insert_blob_256_1024: measurements: - instructions: 2114284649 + instructions: 2114284627 node_load_v1: 1278881721 node_save_v1: 300728644 stable_memory_size: 293 btreemap_insert_blob_256_1024_v2: measurements: - instructions: 2273386999 + instructions: 2273386977 node_load_v2: 1395147359 node_save_v2: 321544817 stable_memory_size: 220 btreemap_insert_blob_32_1024: measurements: - instructions: 1041724177 + instructions: 1041724155 node_load_v1: 358626551 node_save_v1: 298295476 stable_memory_size: 231 btreemap_insert_blob_32_1024_v2: measurements: - instructions: 1156895178 + instructions: 1156895156 node_load_v2: 459271136 node_save_v2: 316798162 stable_memory_size: 174 btreemap_insert_blob_4_1024: measurements: - instructions: 772106359 + instructions: 772106337 node_load_v1: 212848724 node_save_v1: 267119730 stable_memory_size: 124 btreemap_insert_blob_4_1024_v2: measurements: - instructions: 862904908 + instructions: 862904886 node_load_v2: 286322995 node_save_v2: 284380143 stable_memory_size: 93 btreemap_insert_blob_512_1024: measurements: - instructions: 3195541992 + instructions: 3195541970 node_load_v1: 2200910325 node_save_v1: 306828402 stable_memory_size: 352 btreemap_insert_blob_512_1024_v2: measurements: - instructions: 3317431106 + instructions: 3317431084 node_load_v2: 2302979370 node_save_v2: 323365428 stable_memory_size: 264 btreemap_insert_blob_64_1024: measurements: - instructions: 1305958991 + instructions: 1305958969 node_load_v1: 584672643 node_save_v1: 300400388 stable_memory_size: 246 btreemap_insert_blob_64_1024_v2: measurements: - instructions: 1439210453 + instructions: 1439210431 node_load_v2: 692993072 node_save_v2: 319569550 stable_memory_size: 184 btreemap_insert_blob_8_1024: measurements: - instructions: 905706875 + instructions: 905706853 node_load_v1: 247335003 node_save_v1: 284445265 stable_memory_size: 184 btreemap_insert_blob_8_1024_v2: measurements: - instructions: 1002633716 + instructions: 1002633694 node_load_v2: 325787553 node_save_v2: 303101882 stable_memory_size: 139 btreemap_insert_blob_8_u64: measurements: - instructions: 589493749 + instructions: 589493727 node_load_v1: 243685209 node_save_v1: 164111004 stable_memory_size: 7 btreemap_insert_blob_8_u64_v2: measurements: - instructions: 697133799 + instructions: 697133777 node_load_v2: 329438301 node_save_v2: 184403609 stable_memory_size: 5 btreemap_insert_u64_blob_8: measurements: - instructions: 611656296 + instructions: 611656274 node_load_v1: 233854938 node_save_v1: 203753854 stable_memory_size: 8 btreemap_insert_u64_blob_8_v2: measurements: - instructions: 679823522 + instructions: 679823500 node_load_v2: 294338080 node_save_v2: 211575679 stable_memory_size: 6 btreemap_insert_u64_u64: measurements: - instructions: 627664728 + instructions: 627664706 node_load_v1: 234409394 node_save_v1: 211208718 stable_memory_size: 8 btreemap_insert_u64_u64_v2: measurements: - instructions: 703623870 + instructions: 703623848 node_load_v2: 300411584 node_save_v2: 220348622 stable_memory_size: 7 +btreemap_iter_count: + measurements: + instructions: 65743677214 + node_load_v2: 4398038633 + stable_memory_size: 33 btreemap_remove_blob_128_1024: measurements: - instructions: 1957356649 + instructions: 1957356608 node_load_v1: 914434789 node_save_v1: 514074570 stable_memory_size: 261 btreemap_remove_blob_128_1024_v2: measurements: - instructions: 2117203127 + instructions: 2117203086 node_load_v2: 1032337866 node_save_v2: 556162319 stable_memory_size: 196 btreemap_remove_blob_16_1024: measurements: - instructions: 1247951670 + instructions: 1247951629 node_load_v1: 371456037 node_save_v1: 473518008 stable_memory_size: 216 btreemap_remove_blob_16_1024_v2: measurements: - instructions: 1391842517 + instructions: 1391842476 node_load_v2: 479235617 node_save_v2: 512046945 stable_memory_size: 162 btreemap_remove_blob_256_1024: measurements: - instructions: 2573453911 + instructions: 2573453870 node_load_v1: 1428465620 node_save_v1: 511120662 stable_memory_size: 293 btreemap_remove_blob_256_1024_v2: measurements: - instructions: 2738027594 + instructions: 2738027553 node_load_v2: 1548255619 node_save_v2: 551257725 stable_memory_size: 220 btreemap_remove_blob_32_1024: measurements: - instructions: 1324817959 + instructions: 1324817918 node_load_v1: 403513191 node_save_v1: 492234126 stable_memory_size: 231 btreemap_remove_blob_32_1024_v2: measurements: - instructions: 1476050369 + instructions: 1476050328 node_load_v2: 519013227 node_save_v2: 532132813 stable_memory_size: 174 btreemap_remove_blob_4_1024: measurements: - instructions: 807721649 + instructions: 807721608 node_load_v1: 233144442 node_save_v1: 306452731 stable_memory_size: 124 btreemap_remove_blob_4_1024_v2: measurements: - instructions: 913517563 + instructions: 913517522 node_load_v2: 314086802 node_save_v2: 331046095 stable_memory_size: 93 btreemap_remove_blob_512_1024: measurements: - instructions: 3867652464 + instructions: 3867652423 node_load_v1: 2474030645 node_save_v1: 527547819 stable_memory_size: 352 btreemap_remove_blob_512_1024_v2: measurements: - instructions: 4041285449 + instructions: 4041285408 node_load_v2: 2600718246 node_save_v2: 569534896 stable_memory_size: 264 btreemap_remove_blob_64_1024: measurements: - instructions: 1639040548 + instructions: 1639040507 node_load_v1: 661396112 node_save_v1: 505335855 stable_memory_size: 246 btreemap_remove_blob_64_1024_v2: measurements: - instructions: 1795315618 + instructions: 1795315577 node_load_v2: 778335609 node_save_v2: 546167574 stable_memory_size: 184 btreemap_remove_blob_8_1024: measurements: - instructions: 1038596601 + instructions: 1038596560 node_load_v1: 278756927 node_save_v1: 408063372 stable_memory_size: 184 btreemap_remove_blob_8_1024_v2: measurements: - instructions: 1150784585 + instructions: 1150784544 node_load_v2: 359148126 node_save_v2: 441289916 stable_memory_size: 139 btreemap_remove_blob_8_u64: measurements: - instructions: 756190189 + instructions: 756190148 node_load_v1: 271109869 node_save_v1: 258955340 stable_memory_size: 7 btreemap_remove_blob_8_u64_v2: measurements: - instructions: 902070967 + instructions: 902070926 node_load_v2: 371425008 node_save_v2: 300237913 stable_memory_size: 5 btreemap_remove_u64_blob_8: measurements: - instructions: 846321611 + instructions: 846321570 node_load_v1: 263317086 node_save_v1: 354096302 stable_memory_size: 8 btreemap_remove_u64_blob_8_v2: measurements: - instructions: 935942012 + instructions: 935941971 node_load_v2: 329460173 node_save_v2: 373120565 stable_memory_size: 6 btreemap_remove_u64_u64: measurements: - instructions: 874256488 + instructions: 874256447 node_load_v1: 264707458 node_save_v1: 370018389 stable_memory_size: 8 btreemap_remove_u64_u64_v2: measurements: - instructions: 976419924 + instructions: 976419883 node_load_v2: 337138522 node_save_v2: 394608862 stable_memory_size: 7 memory_manager_baseline: measurements: - instructions: 1144 + instructions: 1122 stable_memory_size: 8000 memory_manager_grow: measurements: - instructions: 287018881 + instructions: 287018859 stable_memory_size: 32001 memory_manager_overhead: measurements: - instructions: 4605248 + instructions: 4605226 stable_memory_size: 8321 vec_get_blob_128: measurements: - instructions: 22055455 + instructions: 22055433 stable_memory_size: 20 vec_get_blob_16: measurements: - instructions: 11055138 + instructions: 11055116 stable_memory_size: 3 vec_get_blob_32: measurements: - instructions: 11849080 + instructions: 11849058 stable_memory_size: 6 vec_get_blob_4: measurements: - instructions: 6830239 + instructions: 6830217 stable_memory_size: 1 vec_get_blob_64: measurements: - instructions: 16495665 + instructions: 16495643 stable_memory_size: 10 vec_get_blob_8: measurements: - instructions: 8222880 + instructions: 8222858 stable_memory_size: 2 vec_get_u64: measurements: - instructions: 7450346 + instructions: 7450324 stable_memory_size: 2 vec_insert_blob_128: measurements: - instructions: 4942837 + instructions: 4942815 stable_memory_size: 20 vec_insert_blob_16: measurements: - instructions: 4880610 + instructions: 4880588 stable_memory_size: 3 vec_insert_blob_32: measurements: - instructions: 4941003 + instructions: 4940981 stable_memory_size: 6 vec_insert_blob_4: measurements: - instructions: 4940348 + instructions: 4940326 stable_memory_size: 1 vec_insert_blob_64: measurements: - instructions: 4941527 + instructions: 4941505 stable_memory_size: 10 vec_insert_blob_8: measurements: - instructions: 4940479 + instructions: 4940457 stable_memory_size: 2 vec_insert_u64: measurements: - instructions: 7600479 + instructions: 7750457 stable_memory_size: 2 From 1858ceb03afbb294e6882d5adb013968146827ae Mon Sep 17 00:00:00 2001 From: Dragoljub Duric Date: Thu, 8 Feb 2024 11:02:10 +0000 Subject: [PATCH 04/24] Fix next_without_loading_value(). --- canbench_results.yml | 4 ++-- src/btreemap/iter.rs | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/canbench_results.yml b/canbench_results.yml index 8cc488c9..d0acf9a1 100644 --- a/canbench_results.yml +++ b/canbench_results.yml @@ -344,8 +344,8 @@ btreemap_insert_u64_u64_v2: stable_memory_size: 7 btreemap_iter_count: measurements: - instructions: 65743677214 - node_load_v2: 4398038633 + instructions: 13815905541 + node_load_v2: 4398038607 stable_memory_size: 33 btreemap_remove_blob_128_1024: measurements: diff --git a/src/btreemap/iter.rs b/src/btreemap/iter.rs index 285c6f8a..d3ffa14b 100644 --- a/src/btreemap/iter.rs +++ b/src/btreemap/iter.rs @@ -155,7 +155,7 @@ where } } - self.next().map(|_| ()) + self.next_without_loading_value() } } From edce423061d33a3add4c7598e1ee0e83d60fdeb1 Mon Sep 17 00:00:00 2001 From: Dragoljub Duric Date: Thu, 8 Feb 2024 13:53:26 +0000 Subject: [PATCH 05/24] Make iter_count_test a proptest. --- src/btreemap.rs | 37 ++++++++++++++++++++++--------------- 1 file changed, 22 insertions(+), 15 deletions(-) diff --git a/src/btreemap.rs b/src/btreemap.rs index 0dd823e7..16586f4c 100644 --- a/src/btreemap.rs +++ b/src/btreemap.rs @@ -1256,6 +1256,7 @@ mod test { storable::{Blob, Bound as StorableBound}, VectorMemory, }; + use proptest::proptest; use std::cell::RefCell; use std::rc::Rc; @@ -2317,21 +2318,6 @@ mod test { }); } - #[test] - fn iter_count_test() { - btree_test(|mut btree| { - for i in 1..=250 { - assert_eq!(btree.insert(b(&[i]), b(&[])), None); - } - - for i in 1..250 { - for j in i..=250 { - assert_eq!(btree.range(b(&[i])..b(&[j])).count(), (j - i) as usize); - } - } - }); - } - #[test] fn range_various_prefixes() { btree_test(|mut btree| { @@ -3044,4 +3030,25 @@ mod test { let btree: BTreeMap = BTreeMap::init(btree.into_memory()); assert_eq!(btree.get(&T), Some(T)); } + + proptest! { + #[test] + fn iter_count_test( + start in 0..250u8, + size in 1..250u8, + ) { + let end = std::cmp::min(start + size, 255); + btree_test(|mut btree| { + for i in start..end { + assert_eq!(btree.insert(b(&[i]), b(&[])), None); + } + + for i in start..end { + for j in i..end { + assert_eq!(btree.range(b(&[i])..b(&[j])).count(), (j - i) as usize); + } + } + }); + } + } } From c1c0a5602edf4dd0fd3d7c26a585b56c890dc2ce Mon Sep 17 00:00:00 2001 From: Dragoljub Duric Date: Thu, 8 Feb 2024 14:03:42 +0000 Subject: [PATCH 06/24] . --- benchmarks/src/btreemap.rs | 49 +++++++++ canbench_results.yml | 210 +++++++++++++++++++------------------ 2 files changed, 159 insertions(+), 100 deletions(-) diff --git a/benchmarks/src/btreemap.rs b/benchmarks/src/btreemap.rs index 868dbd91..2ffc683f 100644 --- a/benchmarks/src/btreemap.rs +++ b/benchmarks/src/btreemap.rs @@ -1,3 +1,5 @@ +use std::ops::Bound; + use crate::Random; use canbench::{benchmark, macros::bench, BenchResult}; use ic_stable_structures::{storable::Blob, BTreeMap, DefaultMemoryImpl, Storable}; @@ -219,6 +221,53 @@ pub fn btreemap_insert_10mib_values() -> BenchResult { }) } +#[bench] +pub fn btreemap_iter_count() -> BenchResult { + let mut btree = BTreeMap::new(DefaultMemoryImpl::default()); + let size: u8 = 200; + for i in 0..size { + btree.insert(i, i); + } + + benchmark(|| { + for i in 0..size { + for j in i + 1..size { + btree + .range((Bound::Included(i), Bound::Included(j))) + .count(); + } + } + }) +} + +#[bench] +pub fn btreemap_iter_count_10mib_values() -> BenchResult { + let mut btree = BTreeMap::new(DefaultMemoryImpl::default()); + + // Insert 200 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::>()); + } + + let mut i = 0u8; + for value in values.into_iter() { + btree.insert(i, value); + i += 1; + } + + benchmark(|| { + for j in 0..i { + for k in j + 1..i { + btree + .range((Bound::Included(j), Bound::Included(k))) + .count(); + } + } + }) +} + /// Benchmarks removing keys from a BTreeMap. #[bench] pub fn btreemap_remove_blob_4_1024() -> BenchResult { diff --git a/canbench_results.yml b/canbench_results.yml index 8ad5889d..adea6cc1 100644 --- a/canbench_results.yml +++ b/canbench_results.yml @@ -1,544 +1,554 @@ btreemap_get_blob_128_1024: measurements: - instructions: 1006573538 + instructions: 1006573497 node_load_v1: 832328557 stable_memory_size: 261 btreemap_get_blob_128_1024_v2: measurements: - instructions: 1123805990 + instructions: 1123805949 node_load_v2: 938155476 stable_memory_size: 196 btreemap_get_blob_16_1024: measurements: - instructions: 487229806 + instructions: 487229765 node_load_v1: 339804418 stable_memory_size: 216 btreemap_get_blob_16_1024_v2: measurements: - instructions: 583474971 + instructions: 583474930 node_load_v2: 430852270 stable_memory_size: 162 btreemap_get_blob_256_1024: measurements: - instructions: 1510660940 + instructions: 1510660899 node_load_v1: 1309093774 stable_memory_size: 293 btreemap_get_blob_256_1024_v2: measurements: - instructions: 1626341678 + instructions: 1626341637 node_load_v2: 1410845462 stable_memory_size: 220 btreemap_get_blob_32_1024: measurements: - instructions: 534895222 + instructions: 534895181 node_load_v1: 378516147 stable_memory_size: 231 btreemap_get_blob_32_1024_v2: measurements: - instructions: 633048491 + instructions: 633048450 node_load_v2: 471574348 stable_memory_size: 174 btreemap_get_blob_4_1024: measurements: - instructions: 355650535 + instructions: 355650494 node_load_v1: 231720942 stable_memory_size: 124 btreemap_get_blob_4_1024_v2: measurements: - instructions: 446660432 + instructions: 446660391 node_load_v2: 313869359 stable_memory_size: 93 btreemap_get_blob_512_1024: measurements: - instructions: 2506597898 + instructions: 2506597857 node_load_v1: 2251570705 stable_memory_size: 352 btreemap_get_blob_512_1024_v2: measurements: - instructions: 2625838052 + instructions: 2625838011 node_load_v2: 2356816367 stable_memory_size: 264 btreemap_get_blob_64_1024: measurements: - instructions: 780061526 + instructions: 780061485 node_load_v1: 616669297 stable_memory_size: 246 btreemap_get_blob_64_1024_v2: measurements: - instructions: 878745163 + instructions: 878745122 node_load_v2: 706540951 stable_memory_size: 184 btreemap_get_blob_8_1024: measurements: - instructions: 406432578 + instructions: 406432537 node_load_v1: 259168629 stable_memory_size: 184 btreemap_get_blob_8_1024_v2: measurements: - instructions: 493282925 + instructions: 493282884 node_load_v2: 336415667 stable_memory_size: 139 btreemap_get_blob_8_u64: measurements: - instructions: 368106593 + instructions: 368106552 node_load_v1: 253569163 stable_memory_size: 7 btreemap_get_blob_8_u64_v2: measurements: - instructions: 466009078 + instructions: 466009037 node_load_v2: 345475118 stable_memory_size: 5 btreemap_get_u64_blob_8: measurements: - instructions: 351156467 + instructions: 351156426 node_load_v1: 250986516 stable_memory_size: 8 btreemap_get_u64_blob_8_v2: measurements: - instructions: 413554294 + instructions: 413554253 node_load_v2: 309705639 stable_memory_size: 6 btreemap_get_u64_u64: measurements: - instructions: 353621464 + instructions: 353621423 node_load_v1: 249502481 stable_memory_size: 8 btreemap_get_u64_u64_v2: measurements: - instructions: 422146359 + instructions: 422146318 node_load_v2: 312364993 stable_memory_size: 7 btreemap_insert_10mib_values: measurements: - instructions: 107942355 + instructions: 107942333 node_load_v2: 10057317 node_save_v2: 77823608 stable_memory_size: 33 btreemap_insert_blob_1024_128: measurements: - instructions: 5115889431 + instructions: 5115889409 node_load_v1: 4062772095 node_save_v1: 185771186 stable_memory_size: 263 btreemap_insert_blob_1024_128_v2: measurements: - instructions: 5394772440 + instructions: 5394772418 node_load_v2: 4190686429 node_save_v2: 206085822 stable_memory_size: 197 btreemap_insert_blob_1024_16: measurements: - instructions: 5074839717 + instructions: 5074839695 node_load_v1: 4058526995 node_save_v1: 172957200 stable_memory_size: 242 btreemap_insert_blob_1024_16_v2: measurements: - instructions: 5358731374 + instructions: 5358731352 node_load_v2: 4195507437 node_save_v2: 193208733 stable_memory_size: 182 btreemap_insert_blob_1024_256: measurements: - instructions: 5130740072 + instructions: 5130740050 node_load_v1: 4039224210 node_save_v1: 201310396 stable_memory_size: 293 btreemap_insert_blob_1024_256_v2: measurements: - instructions: 5352948952 + instructions: 5352948930 node_load_v2: 4171364974 node_save_v2: 221531887 stable_memory_size: 220 btreemap_insert_blob_1024_32: measurements: - instructions: 5089791785 + instructions: 5089791763 node_load_v1: 4079908295 node_save_v1: 173954636 stable_memory_size: 240 btreemap_insert_blob_1024_32_v2: measurements: - instructions: 5357513466 + instructions: 5357513444 node_load_v2: 4214236378 node_save_v2: 194114909 stable_memory_size: 181 btreemap_insert_blob_1024_4: measurements: - instructions: 4968257212 + instructions: 4968257190 node_load_v1: 4058890666 node_save_v1: 162657999 stable_memory_size: 236 btreemap_insert_blob_1024_4_v2: measurements: - instructions: 5264404231 + instructions: 5264404209 node_load_v2: 4189301776 node_save_v2: 182905394 stable_memory_size: 177 btreemap_insert_blob_1024_512: measurements: - instructions: 5224338924 + instructions: 5224338902 node_load_v1: 4064093845 node_save_v1: 236696639 stable_memory_size: 349 btreemap_insert_blob_1024_512_v2: measurements: - instructions: 5481571968 + instructions: 5481571946 node_load_v2: 4201549676 node_save_v2: 257610609 stable_memory_size: 262 btreemap_insert_blob_1024_64: measurements: - instructions: 5110806943 + instructions: 5110806921 node_load_v1: 4075394290 node_save_v1: 178905580 stable_memory_size: 251 btreemap_insert_blob_1024_64_v2: measurements: - instructions: 5377434456 + instructions: 5377434434 node_load_v2: 4214020891 node_save_v2: 199157099 stable_memory_size: 189 btreemap_insert_blob_1024_8: measurements: - instructions: 5053776980 + instructions: 5053776958 node_load_v1: 4051194851 node_save_v1: 167362943 stable_memory_size: 238 btreemap_insert_blob_1024_8_v2: measurements: - instructions: 5331593907 + instructions: 5331593885 node_load_v2: 4181516149 node_save_v2: 187604446 stable_memory_size: 179 btreemap_insert_blob_128_1024: measurements: - instructions: 1577091213 + instructions: 1577091191 node_load_v1: 812526962 node_save_v1: 301462572 stable_memory_size: 261 btreemap_insert_blob_128_1024_v2: measurements: - instructions: 1726441521 + instructions: 1726441499 node_load_v2: 925130424 node_save_v2: 322015815 stable_memory_size: 196 btreemap_insert_blob_16_1024: measurements: - instructions: 992366717 + instructions: 992366695 node_load_v1: 322073344 node_save_v1: 291094888 stable_memory_size: 216 btreemap_insert_blob_16_1024_v2: measurements: - instructions: 1108674244 + instructions: 1108674222 node_load_v2: 419541518 node_save_v2: 310638874 stable_memory_size: 162 btreemap_insert_blob_256_1024: measurements: - instructions: 2114284649 + instructions: 2114284627 node_load_v1: 1278881721 node_save_v1: 300728644 stable_memory_size: 293 btreemap_insert_blob_256_1024_v2: measurements: - instructions: 2273386999 + instructions: 2273386977 node_load_v2: 1395147359 node_save_v2: 321544817 stable_memory_size: 220 btreemap_insert_blob_32_1024: measurements: - instructions: 1041724177 + instructions: 1041724155 node_load_v1: 358626551 node_save_v1: 298295476 stable_memory_size: 231 btreemap_insert_blob_32_1024_v2: measurements: - instructions: 1156895178 + instructions: 1156895156 node_load_v2: 459271136 node_save_v2: 316798162 stable_memory_size: 174 btreemap_insert_blob_4_1024: measurements: - instructions: 772106359 + instructions: 772106337 node_load_v1: 212848724 node_save_v1: 267119730 stable_memory_size: 124 btreemap_insert_blob_4_1024_v2: measurements: - instructions: 862904908 + instructions: 862904886 node_load_v2: 286322995 node_save_v2: 284380143 stable_memory_size: 93 btreemap_insert_blob_512_1024: measurements: - instructions: 3195541992 + instructions: 3195541970 node_load_v1: 2200910325 node_save_v1: 306828402 stable_memory_size: 352 btreemap_insert_blob_512_1024_v2: measurements: - instructions: 3317431106 + instructions: 3317431084 node_load_v2: 2302979370 node_save_v2: 323365428 stable_memory_size: 264 btreemap_insert_blob_64_1024: measurements: - instructions: 1305958991 + instructions: 1305958969 node_load_v1: 584672643 node_save_v1: 300400388 stable_memory_size: 246 btreemap_insert_blob_64_1024_v2: measurements: - instructions: 1439210453 + instructions: 1439210431 node_load_v2: 692993072 node_save_v2: 319569550 stable_memory_size: 184 btreemap_insert_blob_8_1024: measurements: - instructions: 905706875 + instructions: 905706853 node_load_v1: 247335003 node_save_v1: 284445265 stable_memory_size: 184 btreemap_insert_blob_8_1024_v2: measurements: - instructions: 1002633716 + instructions: 1002633694 node_load_v2: 325787553 node_save_v2: 303101882 stable_memory_size: 139 btreemap_insert_blob_8_u64: measurements: - instructions: 589493749 + instructions: 589493727 node_load_v1: 243685209 node_save_v1: 164111004 stable_memory_size: 7 btreemap_insert_blob_8_u64_v2: measurements: - instructions: 697133799 + instructions: 697133777 node_load_v2: 329438301 node_save_v2: 184403609 stable_memory_size: 5 btreemap_insert_u64_blob_8: measurements: - instructions: 611656296 + instructions: 611656274 node_load_v1: 233854938 node_save_v1: 203753854 stable_memory_size: 8 btreemap_insert_u64_blob_8_v2: measurements: - instructions: 679823522 + instructions: 679823500 node_load_v2: 294338080 node_save_v2: 211575679 stable_memory_size: 6 btreemap_insert_u64_u64: measurements: - instructions: 627664728 + instructions: 627664706 node_load_v1: 234409394 node_save_v1: 211208718 stable_memory_size: 8 btreemap_insert_u64_u64_v2: measurements: - instructions: 703623870 + instructions: 703623848 node_load_v2: 300411584 node_save_v2: 220348622 stable_memory_size: 7 +btreemap_iter_count: + measurements: + instructions: 5649483487 + node_load_v2: 1321385334 + stable_memory_size: 1 +btreemap_iter_count_10mib_values: + measurements: + instructions: 165219849597 + node_load_v2: 4219296086 + stable_memory_size: 33 btreemap_remove_blob_128_1024: measurements: - instructions: 1957356649 + instructions: 1957356608 node_load_v1: 914434789 node_save_v1: 514074570 stable_memory_size: 261 btreemap_remove_blob_128_1024_v2: measurements: - instructions: 2117203127 + instructions: 2117203086 node_load_v2: 1032337866 node_save_v2: 556162319 stable_memory_size: 196 btreemap_remove_blob_16_1024: measurements: - instructions: 1247951670 + instructions: 1247951629 node_load_v1: 371456037 node_save_v1: 473518008 stable_memory_size: 216 btreemap_remove_blob_16_1024_v2: measurements: - instructions: 1391842517 + instructions: 1391842476 node_load_v2: 479235617 node_save_v2: 512046945 stable_memory_size: 162 btreemap_remove_blob_256_1024: measurements: - instructions: 2573453911 + instructions: 2573453870 node_load_v1: 1428465620 node_save_v1: 511120662 stable_memory_size: 293 btreemap_remove_blob_256_1024_v2: measurements: - instructions: 2738027594 + instructions: 2738027553 node_load_v2: 1548255619 node_save_v2: 551257725 stable_memory_size: 220 btreemap_remove_blob_32_1024: measurements: - instructions: 1324817959 + instructions: 1324817918 node_load_v1: 403513191 node_save_v1: 492234126 stable_memory_size: 231 btreemap_remove_blob_32_1024_v2: measurements: - instructions: 1476050369 + instructions: 1476050328 node_load_v2: 519013227 node_save_v2: 532132813 stable_memory_size: 174 btreemap_remove_blob_4_1024: measurements: - instructions: 807721649 + instructions: 807721608 node_load_v1: 233144442 node_save_v1: 306452731 stable_memory_size: 124 btreemap_remove_blob_4_1024_v2: measurements: - instructions: 913517563 + instructions: 913517522 node_load_v2: 314086802 node_save_v2: 331046095 stable_memory_size: 93 btreemap_remove_blob_512_1024: measurements: - instructions: 3867652464 + instructions: 3867652423 node_load_v1: 2474030645 node_save_v1: 527547819 stable_memory_size: 352 btreemap_remove_blob_512_1024_v2: measurements: - instructions: 4041285449 + instructions: 4041285408 node_load_v2: 2600718246 node_save_v2: 569534896 stable_memory_size: 264 btreemap_remove_blob_64_1024: measurements: - instructions: 1639040548 + instructions: 1639040507 node_load_v1: 661396112 node_save_v1: 505335855 stable_memory_size: 246 btreemap_remove_blob_64_1024_v2: measurements: - instructions: 1795315618 + instructions: 1795315577 node_load_v2: 778335609 node_save_v2: 546167574 stable_memory_size: 184 btreemap_remove_blob_8_1024: measurements: - instructions: 1038596601 + instructions: 1038596560 node_load_v1: 278756927 node_save_v1: 408063372 stable_memory_size: 184 btreemap_remove_blob_8_1024_v2: measurements: - instructions: 1150784585 + instructions: 1150784544 node_load_v2: 359148126 node_save_v2: 441289916 stable_memory_size: 139 btreemap_remove_blob_8_u64: measurements: - instructions: 756190189 + instructions: 756190148 node_load_v1: 271109869 node_save_v1: 258955340 stable_memory_size: 7 btreemap_remove_blob_8_u64_v2: measurements: - instructions: 902070967 + instructions: 902070926 node_load_v2: 371425008 node_save_v2: 300237913 stable_memory_size: 5 btreemap_remove_u64_blob_8: measurements: - instructions: 846321611 + instructions: 846321570 node_load_v1: 263317086 node_save_v1: 354096302 stable_memory_size: 8 btreemap_remove_u64_blob_8_v2: measurements: - instructions: 935942012 + instructions: 935941971 node_load_v2: 329460173 node_save_v2: 373120565 stable_memory_size: 6 btreemap_remove_u64_u64: measurements: - instructions: 874256488 + instructions: 874256447 node_load_v1: 264707458 node_save_v1: 370018389 stable_memory_size: 8 btreemap_remove_u64_u64_v2: measurements: - instructions: 976419924 + instructions: 976419883 node_load_v2: 337138522 node_save_v2: 394608862 stable_memory_size: 7 memory_manager_baseline: measurements: - instructions: 1144 + instructions: 1122 stable_memory_size: 8000 memory_manager_grow: measurements: - instructions: 287018881 + instructions: 287018859 stable_memory_size: 32001 memory_manager_overhead: measurements: - instructions: 4605248 + instructions: 4605226 stable_memory_size: 8321 vec_get_blob_128: measurements: - instructions: 22055455 + instructions: 22055433 stable_memory_size: 20 vec_get_blob_16: measurements: - instructions: 11055138 + instructions: 11055116 stable_memory_size: 3 vec_get_blob_32: measurements: - instructions: 11849080 + instructions: 11849058 stable_memory_size: 6 vec_get_blob_4: measurements: - instructions: 6830239 + instructions: 6830217 stable_memory_size: 1 vec_get_blob_64: measurements: - instructions: 16495665 + instructions: 16495643 stable_memory_size: 10 vec_get_blob_8: measurements: - instructions: 8222880 + instructions: 8222858 stable_memory_size: 2 vec_get_u64: measurements: - instructions: 7450346 + instructions: 7450324 stable_memory_size: 2 vec_insert_blob_128: measurements: - instructions: 4942837 + instructions: 4942815 stable_memory_size: 20 vec_insert_blob_16: measurements: - instructions: 4880610 + instructions: 4880588 stable_memory_size: 3 vec_insert_blob_32: measurements: - instructions: 4941003 + instructions: 4940981 stable_memory_size: 6 vec_insert_blob_4: measurements: - instructions: 4940348 + instructions: 4940326 stable_memory_size: 1 vec_insert_blob_64: measurements: - instructions: 4941527 + instructions: 4941505 stable_memory_size: 10 vec_insert_blob_8: measurements: - instructions: 4940479 + instructions: 4940457 stable_memory_size: 2 vec_insert_u64: measurements: - instructions: 7600479 + instructions: 7750457 stable_memory_size: 2 From e549d7f51ebb22189e5725d4762e625916d53cbb Mon Sep 17 00:00:00 2001 From: Dragoljub Duric Date: Thu, 8 Feb 2024 14:07:30 +0000 Subject: [PATCH 07/24] . --- benchmarks/src/btreemap.rs | 19 +++++++++++++++++++ canbench_results.yml | 5 +++++ 2 files changed, 24 insertions(+) diff --git a/benchmarks/src/btreemap.rs b/benchmarks/src/btreemap.rs index b48c2ea0..365f0917 100644 --- a/benchmarks/src/btreemap.rs +++ b/benchmarks/src/btreemap.rs @@ -223,6 +223,25 @@ pub fn btreemap_insert_10mib_values() -> BenchResult { #[bench] pub fn btreemap_iter_count() -> BenchResult { let mut btree = BTreeMap::new(DefaultMemoryImpl::default()); + let size: u8 = 200; + for i in 0..size { + btree.insert(i, i); + } + + benchmark(|| { + for i in 0..size { + for j in i + 1..size { + btree + .range((Bound::Included(i), Bound::Included(j))) + .count(); + } + } + }) +} + +#[bench] +pub fn btreemap_iter_count_10mib_values() -> BenchResult { + let mut btree = BTreeMap::new(DefaultMemoryImpl::default()); // Insert 200 10MiB values. let mut rng = Rng::from_seed(0); diff --git a/canbench_results.yml b/canbench_results.yml index d0acf9a1..12d38543 100644 --- a/canbench_results.yml +++ b/canbench_results.yml @@ -343,6 +343,11 @@ btreemap_insert_u64_u64_v2: node_save_v2: 220348622 stable_memory_size: 7 btreemap_iter_count: + measurements: + instructions: 6149118280 + node_load_v2: 1307115388 + stable_memory_size: 1 +btreemap_iter_count_10mib_values: measurements: instructions: 13815905541 node_load_v2: 4398038607 From 9fad566e503aaa5259a9d3b9a150d522a6e5d75b Mon Sep 17 00:00:00 2001 From: Dragoljub Duric Date: Thu, 8 Feb 2024 14:17:35 +0000 Subject: [PATCH 08/24] fix proptest --- src/btreemap.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/btreemap.rs b/src/btreemap.rs index 16586f4c..53050967 100644 --- a/src/btreemap.rs +++ b/src/btreemap.rs @@ -3037,7 +3037,7 @@ mod test { start in 0..250u8, size in 1..250u8, ) { - let end = std::cmp::min(start + size, 255); + let end = std::cmp::min(start as u64 + size as u64, 255) as u8; btree_test(|mut btree| { for i in start..end { assert_eq!(btree.insert(b(&[i]), b(&[])), None); From 1e175424cf69c92cb2e22eb06b3c18f9dee5303f Mon Sep 17 00:00:00 2001 From: Dragoljub Duric Date: Thu, 8 Feb 2024 15:31:09 +0000 Subject: [PATCH 09/24] Recatro iter without code duplication. --- canbench_results.yml | 4 ++-- src/btreemap/iter.rs | 45 +++++++++++++++----------------------------- 2 files changed, 17 insertions(+), 32 deletions(-) diff --git a/canbench_results.yml b/canbench_results.yml index 12d38543..5e10f954 100644 --- a/canbench_results.yml +++ b/canbench_results.yml @@ -344,12 +344,12 @@ btreemap_insert_u64_u64_v2: stable_memory_size: 7 btreemap_iter_count: measurements: - instructions: 6149118280 + instructions: 6192817906 node_load_v2: 1307115388 stable_memory_size: 1 btreemap_iter_count_10mib_values: measurements: - instructions: 13815905541 + instructions: 13846202491 node_load_v2: 4398038607 stable_memory_size: 33 btreemap_remove_blob_128_1024: diff --git a/src/btreemap/iter.rs b/src/btreemap/iter.rs index d3ffa14b..67b63060 100644 --- a/src/btreemap/iter.rs +++ b/src/btreemap/iter.rs @@ -132,7 +132,7 @@ where } } - fn next_without_loading_value(&mut self) -> Option<()> { + fn next_internal(&mut self, load_value: bool) -> Option<(K, Option)> { // If the cursors are empty. Iteration is complete. let cursor_last = self.cursors.pop()?; self.update_cursors_for_iteration(cursor_last.clone()); @@ -150,12 +150,19 @@ where self.cursors = vec![]; return None; } - - return Some(()); + return Some(( + key.clone(), + if load_value { + let encoded_value = node.value(entry_idx, self.map.memory()).to_vec(); + Some(V::from_bytes(Cow::Owned(encoded_value))) + } else { + None + }, + )); } } - self.next_without_loading_value() + self.next_internal(load_value) } } @@ -168,31 +175,9 @@ where type Item = (K, V); fn next(&mut self) -> Option { - // If the cursors are empty. Iteration is complete. - let cursor_last = self.cursors.pop()?; - self.update_cursors_for_iteration(cursor_last.clone()); - if let Cursor::Node { - node, - next: Index::Entry(entry_idx), - } = cursor_last - { - if entry_idx < node.entries_len() { - let key = node.key(entry_idx); - - // If the key does not belong to the range, iteration stops. - if !self.range.contains(key) { - // Clear all cursors to avoid needless work in subsequent calls. - self.cursors = vec![]; - return None; - } - - let encoded_value = node.value(entry_idx, self.map.memory()).to_vec(); - - return Some((key.clone(), V::from_bytes(Cow::Owned(encoded_value)))); - } - } - - self.next() + // It is safe to unwrap value because when the key exists the + // value will exist as well, and it will be loaded. + self.next_internal(true).map(|(k, v)| (k, v.unwrap())) } fn count(mut self) -> usize @@ -200,7 +185,7 @@ where Self: Sized, { let mut cnt = 0; - while self.next_without_loading_value().is_some() { + while self.next_internal(false).is_some() { cnt += 1; } cnt From aa45bf37f7d28486dad3239495616489855b62fc Mon Sep 17 00:00:00 2001 From: Dragoljub Duric Date: Fri, 9 Feb 2024 15:21:25 +0000 Subject: [PATCH 10/24] . --- .github/workflows/ci.yml | 2 +- rust-toolchain.toml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 8edd4557..de0dcfcf 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -6,7 +6,7 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - rust: [ 1.73.0 ] + rust: [ 1.76.0 ] steps: - uses: actions/checkout@v2 diff --git a/rust-toolchain.toml b/rust-toolchain.toml index 6b9ac7bc..2cfa2b89 100644 --- a/rust-toolchain.toml +++ b/rust-toolchain.toml @@ -1,3 +1,3 @@ [toolchain] -channel = "1.73.0" +channel = "1.76.0" targets = ["wasm32-unknown-unknown"] From b328ff6bdcf8fa691660e9114df87d13f63fc853 Mon Sep 17 00:00:00 2001 From: Dragoljub Duric Date: Fri, 9 Feb 2024 15:26:44 +0000 Subject: [PATCH 11/24] . --- src/btreemap/node/v2.rs | 2 +- src/lib.rs | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/src/btreemap/node/v2.rs b/src/btreemap/node/v2.rs index b051921b..6d9cde7d 100644 --- a/src/btreemap/node/v2.rs +++ b/src/btreemap/node/v2.rs @@ -233,7 +233,7 @@ impl Node { // Add a null overflow address. // This might get overwritten later in case the node does overflow. - writer.write_u64(offset, self.overflows.get(0).unwrap_or(&NULL).get()); + writer.write_u64(offset, self.overflows.first().unwrap_or(&NULL).get()); offset += Bytes::from(8u64); // Write the children diff --git a/src/lib.rs b/src/lib.rs index 11ebfff7..efe8d1b1 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -97,8 +97,7 @@ impl Display for GrowFailed { write!( f, "Failed to grow memory: current size={}, delta={}", - self.current_size, - self.delta + self.current_size, self.delta ) } } From 404a4817661ef6c88ee77785e75dcbe5b5f22d8b Mon Sep 17 00:00:00 2001 From: Dragoljub Djuric Date: Fri, 9 Feb 2024 16:31:06 +0100 Subject: [PATCH 12/24] Update benchmarks/src/btreemap.rs Co-authored-by: Islam El-Ashi --- benchmarks/src/btreemap.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/benchmarks/src/btreemap.rs b/benchmarks/src/btreemap.rs index 2ffc683f..a7b8a20f 100644 --- a/benchmarks/src/btreemap.rs +++ b/benchmarks/src/btreemap.rs @@ -222,7 +222,7 @@ pub fn btreemap_insert_10mib_values() -> BenchResult { } #[bench] -pub fn btreemap_iter_count() -> BenchResult { +pub fn btreemap_iter_count_small_values() -> BenchResult { let mut btree = BTreeMap::new(DefaultMemoryImpl::default()); let size: u8 = 200; for i in 0..size { From 86c99bc8bc60bab7c7f4d631b7d391916affb06d Mon Sep 17 00:00:00 2001 From: Dragoljub Duric Date: Fri, 9 Feb 2024 15:50:21 +0000 Subject: [PATCH 13/24] Apply comments --- benchmarks/src/btreemap.rs | 38 ++++++++++++-------------------------- canbench_results.yml | 14 +++++++------- 2 files changed, 19 insertions(+), 33 deletions(-) diff --git a/benchmarks/src/btreemap.rs b/benchmarks/src/btreemap.rs index a7b8a20f..3c390a6d 100644 --- a/benchmarks/src/btreemap.rs +++ b/benchmarks/src/btreemap.rs @@ -224,19 +224,15 @@ pub fn btreemap_insert_10mib_values() -> BenchResult { #[bench] pub fn btreemap_iter_count_small_values() -> BenchResult { let mut btree = BTreeMap::new(DefaultMemoryImpl::default()); - let size: u8 = 200; + let size: u32 = 2000; for i in 0..size { - btree.insert(i, i); + btree.insert(i, vec![]); } benchmark(|| { - for i in 0..size { - for j in i + 1..size { - btree - .range((Bound::Included(i), Bound::Included(j))) - .count(); - } - } + btree + .range((Bound::Included(0), Bound::Included(size))) + .count(); }) } @@ -244,27 +240,17 @@ pub fn btreemap_iter_count_small_values() -> BenchResult { pub fn btreemap_iter_count_10mib_values() -> BenchResult { let mut btree = BTreeMap::new(DefaultMemoryImpl::default()); - // Insert 200 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::>()); - } + let size: u8 = 200; - let mut i = 0u8; - for value in values.into_iter() { - btree.insert(i, value); - i += 1; + // Insert 200 10MiB values. + for i in 0..size { + btree.insert(i, vec![0u8; 10 * 1024]); } benchmark(|| { - for j in 0..i { - for k in j + 1..i { - btree - .range((Bound::Included(j), Bound::Included(k))) - .count(); - } - } + btree + .range((Bound::Included(0), Bound::Included(size))) + .count(); }) } diff --git a/canbench_results.yml b/canbench_results.yml index adea6cc1..bffd0b47 100644 --- a/canbench_results.yml +++ b/canbench_results.yml @@ -342,16 +342,16 @@ btreemap_insert_u64_u64_v2: node_load_v2: 300411584 node_save_v2: 220348622 stable_memory_size: 7 -btreemap_iter_count: - measurements: - instructions: 5649483487 - node_load_v2: 1321385334 - stable_memory_size: 1 btreemap_iter_count_10mib_values: measurements: - instructions: 165219849597 - node_load_v2: 4219296086 + instructions: 24074759 + node_load_v2: 520223 stable_memory_size: 33 +btreemap_iter_count_small_values: + measurements: + instructions: 6105654 + node_load_v2: 1641534 + stable_memory_size: 7 btreemap_remove_blob_128_1024: measurements: instructions: 1957356608 From 6c9acf21714a39a57bac8c445b844c75e48d5273 Mon Sep 17 00:00:00 2001 From: Dragoljub Duric Date: Fri, 9 Feb 2024 15:55:15 +0000 Subject: [PATCH 14/24] Rerun benches --- canbench_results.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/canbench_results.yml b/canbench_results.yml index bffd0b47..4a5b1abd 100644 --- a/canbench_results.yml +++ b/canbench_results.yml @@ -344,13 +344,13 @@ btreemap_insert_u64_u64_v2: stable_memory_size: 7 btreemap_iter_count_10mib_values: measurements: - instructions: 24074759 - node_load_v2: 520223 + instructions: 1923261 + node_load_v2: 554857 stable_memory_size: 33 btreemap_iter_count_small_values: measurements: - instructions: 6105654 - node_load_v2: 1641534 + instructions: 8842375 + node_load_v2: 1662656 stable_memory_size: 7 btreemap_remove_blob_128_1024: measurements: From 84c70c4418b4501df3ea64a58bac8557baaf6203 Mon Sep 17 00:00:00 2001 From: Dragoljub Duric Date: Mon, 12 Feb 2024 14:08:57 +0000 Subject: [PATCH 15/24] refactor next_internal to avoid cloning --- canbench_results.yml | 12 ++++----- src/btreemap/iter.rs | 58 ++++++++++++++++++-------------------------- 2 files changed, 29 insertions(+), 41 deletions(-) diff --git a/canbench_results.yml b/canbench_results.yml index 0c48824d..16fd36cd 100644 --- a/canbench_results.yml +++ b/canbench_results.yml @@ -344,13 +344,13 @@ btreemap_insert_u64_u64_v2: stable_memory_size: 7 btreemap_iter_count_10mib_values: measurements: - instructions: 1674294 - node_load_v2: 436630 + instructions: 530543 + node_load_v2: 413792 stable_memory_size: 33 btreemap_iter_count_small_values: measurements: - instructions: 39427638 - node_load_v2: 6483830 + instructions: 11963239 + node_load_v2: 6367125 stable_memory_size: 32 btreemap_remove_blob_128_1024: measurements: @@ -490,11 +490,11 @@ memory_manager_baseline: stable_memory_size: 8000 memory_manager_grow: measurements: - instructions: 284711825 + instructions: 283783820 stable_memory_size: 32001 memory_manager_overhead: measurements: - instructions: 4523476 + instructions: 4522090 stable_memory_size: 8321 vec_get_blob_128: measurements: diff --git a/src/btreemap/iter.rs b/src/btreemap/iter.rs index 67b63060..caf02ba5 100644 --- a/src/btreemap/iter.rs +++ b/src/btreemap/iter.rs @@ -74,8 +74,9 @@ where } } - fn update_cursors_for_iteration(&mut self, cursor: Cursor) { - match cursor { + fn next_internal(&mut self, load_value: bool) -> Option<(K, Option)> { + // If the cursors are empty. Iteration is complete. + match self.cursors.pop()? { Cursor::Address(address) => { if address != NULL { // Load the node at the given address, and add it to the cursors. @@ -90,6 +91,7 @@ where node, }); } + self.next_internal(load_value) } Cursor::Node { @@ -107,6 +109,8 @@ where // Add the child to the top of the cursors to be iterated on first. self.cursors.push(Cursor::Address(child_address)); + + self.next_internal(load_value) } Cursor::Node { @@ -115,7 +119,22 @@ where } => { if entry_idx >= node.entries_len() { // No more entries to iterate on in this node. - return; + return self.next_internal(load_value); + } + + let key = node.key(entry_idx).clone(); + let value = if load_value { + let encoded_value = node.value(entry_idx, self.map.memory()).to_vec(); + Some(V::from_bytes(Cow::Owned(encoded_value))) + } else { + None + }; + + // If the key does not belong to the range, iteration stops. + if !self.range.contains(&key) { + // Clear all cursors to avoid needless work in subsequent calls. + self.cursors = vec![]; + return None; } // Add to the cursors the next element to be traversed. @@ -128,41 +147,10 @@ where }, node, }); - } - } - } - - fn next_internal(&mut self, load_value: bool) -> Option<(K, Option)> { - // If the cursors are empty. Iteration is complete. - let cursor_last = self.cursors.pop()?; - self.update_cursors_for_iteration(cursor_last.clone()); - if let Cursor::Node { - node, - next: Index::Entry(entry_idx), - } = cursor_last - { - if entry_idx < node.entries_len() { - let key = node.key(entry_idx); - // If the key does not belong to the range, iteration stops. - if !self.range.contains(key) { - // Clear all cursors to avoid needless work in subsequent calls. - self.cursors = vec![]; - return None; - } - return Some(( - key.clone(), - if load_value { - let encoded_value = node.value(entry_idx, self.map.memory()).to_vec(); - Some(V::from_bytes(Cow::Owned(encoded_value))) - } else { - None - }, - )); + return Some((key, value)); } } - - self.next_internal(load_value) } } From f56cfc8bcf85df7f7549245d451ba4270ac386d9 Mon Sep 17 00:00:00 2001 From: Dragoljub Duric Date: Mon, 12 Feb 2024 14:11:54 +0000 Subject: [PATCH 16/24] remove Clone --- src/btreemap/iter.rs | 2 -- src/btreemap/node.rs | 4 ++-- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/src/btreemap/iter.rs b/src/btreemap/iter.rs index caf02ba5..d1db7cd8 100644 --- a/src/btreemap/iter.rs +++ b/src/btreemap/iter.rs @@ -6,14 +6,12 @@ use crate::{types::NULL, Address, Memory, Storable}; use std::borrow::Cow; use std::ops::{Bound, RangeBounds}; -#[derive(Clone)] /// An indicator of the current position in the map. pub(crate) enum Cursor { Address(Address), Node { node: Node, next: Index }, } -#[derive(Clone)] /// An index into a node's child or entry. pub(crate) enum Index { Child(usize), diff --git a/src/btreemap/node.rs b/src/btreemap/node.rs index 1dcab170..28ee7bdd 100644 --- a/src/btreemap/node.rs +++ b/src/btreemap/node.rs @@ -46,7 +46,7 @@ pub type Entry = (K, Vec); /// 2. `V2`, which supports both bounded and unbounded types. /// /// See `v1.rs` and `v2.rs` for more details. -#[derive(Debug, Clone)] +#[derive(Debug)] pub struct Node { address: Address, keys: Vec, @@ -434,7 +434,7 @@ impl NodeHeader { } // The value in a K/V pair. -#[derive(Debug, Clone)] +#[derive(Debug)] enum Value { // The value's encoded bytes. ByVal(Vec), From b1640ff94f999e06620e492dd26f66a47e56c8a5 Mon Sep 17 00:00:00 2001 From: Dragoljub Duric Date: Tue, 13 Feb 2024 10:43:00 +0000 Subject: [PATCH 17/24] cnabench_results from main --- canbench_results.yml | 1168 ++++++++++++++++++++++-------------------- 1 file changed, 614 insertions(+), 554 deletions(-) diff --git a/canbench_results.yml b/canbench_results.yml index 70b9ba9f..0cf37552 100644 --- a/canbench_results.yml +++ b/canbench_results.yml @@ -1,554 +1,614 @@ -btreemap_get_blob_128_1024: - measurements: - instructions: 918297550 - node_load_v1: 754035202 - stable_memory_size: 261 -btreemap_get_blob_128_1024_v2: - measurements: - instructions: 1012404828 - node_load_v2: 838471112 - stable_memory_size: 196 -btreemap_get_blob_16_1024: - measurements: - instructions: 402489372 - node_load_v1: 265476351 - stable_memory_size: 216 -btreemap_get_blob_16_1024_v2: - measurements: - instructions: 483065575 - node_load_v2: 341517378 - stable_memory_size: 162 -btreemap_get_blob_256_1024: - measurements: - instructions: 1419922692 - node_load_v1: 1228326401 - stable_memory_size: 293 -btreemap_get_blob_256_1024_v2: - measurements: - instructions: 1514269692 - node_load_v2: 1310914461 - stable_memory_size: 220 -btreemap_get_blob_32_1024: - measurements: - instructions: 445863040 - node_load_v1: 300380122 - stable_memory_size: 231 -btreemap_get_blob_32_1024_v2: - measurements: - instructions: 526615123 - node_load_v2: 376711582 - stable_memory_size: 174 -btreemap_get_blob_4_1024: - measurements: - instructions: 276611192 - node_load_v1: 161238932 - stable_memory_size: 124 -btreemap_get_blob_4_1024_v2: - measurements: - instructions: 355490148 - node_load_v2: 232414919 - stable_memory_size: 93 -btreemap_get_blob_512_1024: - measurements: - instructions: 2415920006 - node_load_v1: 2170866594 - stable_memory_size: 352 -btreemap_get_blob_512_1024_v2: - measurements: - instructions: 2511422025 - node_load_v2: 2254559660 - stable_memory_size: 264 -btreemap_get_blob_64_1024: - measurements: - instructions: 688360199 - node_load_v1: 535401984 - stable_memory_size: 246 -btreemap_get_blob_64_1024_v2: - measurements: - instructions: 769311566 - node_load_v2: 608827767 - stable_memory_size: 184 -btreemap_get_blob_8_1024: - measurements: - instructions: 324971280 - node_load_v1: 187633627 - stable_memory_size: 184 -btreemap_get_blob_8_1024_v2: - measurements: - instructions: 402008927 - node_load_v2: 256407446 - stable_memory_size: 139 -btreemap_get_blob_8_u64: - measurements: - instructions: 293440780 - node_load_v1: 187956979 - stable_memory_size: 7 -btreemap_get_blob_8_u64_v2: - measurements: - instructions: 372798113 - node_load_v2: 262576982 - stable_memory_size: 5 -btreemap_get_u64_blob_8: - measurements: - instructions: 274218978 - node_load_v1: 182442985 - stable_memory_size: 8 -btreemap_get_u64_blob_8_v2: - measurements: - instructions: 331020864 - node_load_v2: 236444481 - stable_memory_size: 6 -btreemap_get_u64_u64: - measurements: - instructions: 276850992 - node_load_v1: 181567530 - stable_memory_size: 8 -btreemap_get_u64_u64_v2: - measurements: - instructions: 338418081 - node_load_v2: 238660311 - stable_memory_size: 7 -btreemap_insert_10mib_values: - measurements: - instructions: 99997294 - node_load_v2: 7855891 - node_save_v2: 72799502 - stable_memory_size: 33 -btreemap_insert_blob_1024_128: - measurements: - instructions: 4984105840 - node_load_v1: 3988909453 - node_save_v1: 146460142 - stable_memory_size: 263 -btreemap_insert_blob_1024_128_v2: - measurements: - instructions: 5239604456 - node_load_v2: 4090603010 - node_save_v2: 171846832 - stable_memory_size: 197 -btreemap_insert_blob_1024_16: - measurements: - instructions: 4944664880 - node_load_v1: 3985448476 - node_save_v1: 133442320 - stable_memory_size: 242 -btreemap_insert_blob_1024_16_v2: - measurements: - instructions: 5204903603 - node_load_v2: 4095654733 - node_save_v2: 158980711 - stable_memory_size: 182 -btreemap_insert_blob_1024_256: - measurements: - instructions: 4998981709 - node_load_v1: 3965654660 - node_save_v1: 161983415 - stable_memory_size: 293 -btreemap_insert_blob_1024_256_v2: - measurements: - instructions: 5197123201 - node_load_v2: 4070258951 - node_save_v2: 187329183 - stable_memory_size: 220 -btreemap_insert_blob_1024_32: - measurements: - instructions: 4958594629 - node_load_v1: 4005822869 - node_save_v1: 134559317 - stable_memory_size: 240 -btreemap_insert_blob_1024_32_v2: - measurements: - instructions: 5202700273 - node_load_v2: 4113362166 - node_save_v2: 159929338 - stable_memory_size: 181 -btreemap_insert_blob_1024_4: - measurements: - instructions: 4840591273 - node_load_v1: 3985365549 - node_save_v1: 124687423 - stable_memory_size: 236 -btreemap_insert_blob_1024_4_v2: - measurements: - instructions: 5113551566 - node_load_v2: 4089690715 - node_save_v2: 150184318 - stable_memory_size: 177 -btreemap_insert_blob_1024_512: - measurements: - instructions: 5087635883 - node_load_v1: 3989806728 - node_save_v1: 193925745 - stable_memory_size: 349 -btreemap_insert_blob_1024_512_v2: - measurements: - instructions: 5320097350 - node_load_v2: 4099519139 - node_save_v2: 219719584 - stable_memory_size: 262 -btreemap_insert_blob_1024_64: - measurements: - instructions: 4979331968 - node_load_v1: 4001759787 - node_save_v1: 139286228 - stable_memory_size: 251 -btreemap_insert_blob_1024_64_v2: - measurements: - instructions: 5221310486 - node_load_v2: 4112538215 - node_save_v2: 164772561 - stable_memory_size: 189 -btreemap_insert_blob_1024_8: - measurements: - instructions: 4924885892 - node_load_v1: 3978237186 - node_save_v1: 128434218 - stable_memory_size: 238 -btreemap_insert_blob_1024_8_v2: - measurements: - instructions: 5179644486 - node_load_v2: 4082400473 - node_save_v2: 153945446 - stable_memory_size: 179 -btreemap_insert_blob_128_1024: - measurements: - instructions: 1437616292 - node_load_v1: 739027550 - node_save_v1: 257309360 - stable_memory_size: 261 -btreemap_insert_blob_128_1024_v2: - measurements: - instructions: 1565933845 - node_load_v2: 826942435 - node_save_v2: 283053248 - stable_memory_size: 196 -btreemap_insert_blob_16_1024: - measurements: - instructions: 858846535 - node_load_v1: 253207451 - node_save_v1: 248356858 - stable_memory_size: 216 -btreemap_insert_blob_16_1024_v2: - measurements: - instructions: 960083194 - node_load_v2: 330853838 - node_save_v2: 273042097 - stable_memory_size: 162 -btreemap_insert_blob_256_1024: - measurements: - instructions: 1974624891 - node_load_v1: 1204369041 - node_save_v1: 256351524 - stable_memory_size: 293 -btreemap_insert_blob_256_1024_v2: - measurements: - instructions: 2111102480 - node_load_v2: 1294504838 - node_save_v2: 282314461 - stable_memory_size: 220 -btreemap_insert_blob_32_1024: - measurements: - instructions: 904010965 - node_load_v1: 286588753 - node_save_v1: 254796471 - stable_memory_size: 231 -btreemap_insert_blob_32_1024_v2: - measurements: - instructions: 1004184959 - node_load_v2: 366954442 - node_save_v2: 278850203 - stable_memory_size: 174 -btreemap_insert_blob_4_1024: - measurements: - instructions: 652382785 - node_load_v1: 149831245 - node_save_v1: 228197043 - stable_memory_size: 124 -btreemap_insert_blob_4_1024_v2: - measurements: - instructions: 736453619 - node_load_v2: 212173910 - node_save_v2: 250260310 - stable_memory_size: 93 -btreemap_insert_blob_512_1024: - measurements: - instructions: 3053462673 - node_load_v1: 2124633848 - node_save_v1: 261440735 - stable_memory_size: 352 -btreemap_insert_blob_512_1024_v2: - measurements: - instructions: 3155320531 - node_load_v2: 2201526645 - node_save_v2: 283885891 - stable_memory_size: 264 -btreemap_insert_blob_64_1024: - measurements: - instructions: 1166106772 - node_load_v1: 510883301 - node_save_v1: 256301205 - stable_memory_size: 246 -btreemap_insert_blob_64_1024_v2: - measurements: - instructions: 1279910739 - node_load_v2: 595578889 - node_save_v2: 280900588 - stable_memory_size: 184 -btreemap_insert_blob_8_1024: - measurements: - instructions: 776453148 - node_load_v1: 179790788 - node_save_v1: 242797687 - stable_memory_size: 184 -btreemap_insert_blob_8_1024_v2: - measurements: - instructions: 866232312 - node_load_v2: 246352950 - node_save_v2: 266596061 - stable_memory_size: 139 -btreemap_insert_blob_8_u64: - measurements: - instructions: 472686878 - node_load_v1: 181986700 - node_save_v1: 126883358 - stable_memory_size: 7 -btreemap_insert_blob_8_u64_v2: - measurements: - instructions: 566706828 - node_load_v2: 250601037 - node_save_v2: 151769417 - stable_memory_size: 5 -btreemap_insert_u64_blob_8: - measurements: - instructions: 480324223 - node_load_v1: 170565445 - node_save_v1: 153183226 - stable_memory_size: 8 -btreemap_insert_u64_blob_8_v2: - measurements: - instructions: 548609694 - node_load_v2: 224781217 - node_save_v2: 168239993 - stable_memory_size: 6 -btreemap_insert_u64_u64: - measurements: - instructions: 494167871 - node_load_v1: 171859779 - node_save_v1: 159769002 - stable_memory_size: 8 -btreemap_insert_u64_u64_v2: - measurements: - instructions: 569015520 - node_load_v2: 230782820 - node_save_v2: 175856694 - stable_memory_size: 7 -btreemap_iter_count_10mib_values: - measurements: - instructions: 530543 - node_load_v2: 413792 - stable_memory_size: 33 -btreemap_iter_count_small_values: - measurements: - instructions: 11963239 - node_load_v2: 6367125 - stable_memory_size: 32 -btreemap_remove_blob_128_1024: - measurements: - instructions: 1765436627 - node_load_v1: 831238789 - node_save_v1: 435218602 - stable_memory_size: 261 -btreemap_remove_blob_128_1024_v2: - measurements: - instructions: 1910258373 - node_load_v2: 925249945 - node_save_v2: 487653874 - stable_memory_size: 196 -btreemap_remove_blob_16_1024: - measurements: - instructions: 1070289873 - node_load_v1: 293118687 - node_save_v1: 401442409 - stable_memory_size: 216 -btreemap_remove_blob_16_1024_v2: - measurements: - instructions: 1203248521 - node_load_v2: 381414821 - node_save_v2: 449480819 - stable_memory_size: 162 -btreemap_remove_blob_256_1024: - measurements: - instructions: 2382407241 - node_load_v1: 1344675202 - node_save_v1: 432970452 - stable_memory_size: 293 -btreemap_remove_blob_256_1024_v2: - measurements: - instructions: 2530218035 - node_load_v2: 1439645617 - node_save_v2: 483420926 - stable_memory_size: 220 -btreemap_remove_blob_32_1024: - measurements: - instructions: 1140153781 - node_load_v1: 322843280 - node_save_v1: 417148893 - stable_memory_size: 231 -btreemap_remove_blob_32_1024_v2: - measurements: - instructions: 1278111352 - node_load_v2: 415907179 - node_save_v2: 466999763 - stable_memory_size: 174 -btreemap_remove_blob_4_1024: - measurements: - instructions: 674418478 - node_load_v1: 164435030 - node_save_v1: 259959839 - stable_memory_size: 124 -btreemap_remove_blob_4_1024_v2: - measurements: - instructions: 773931207 - node_load_v2: 233938221 - node_save_v2: 290606040 - stable_memory_size: 93 -btreemap_remove_blob_512_1024: - measurements: - instructions: 3671936473 - node_load_v1: 2390036799 - node_save_v1: 446122393 - stable_memory_size: 352 -btreemap_remove_blob_512_1024_v2: - measurements: - instructions: 3826090329 - node_load_v2: 2488915437 - node_save_v2: 498703262 - stable_memory_size: 264 -btreemap_remove_blob_64_1024: - measurements: - instructions: 1448155157 - node_load_v1: 577581483 - node_save_v1: 428020659 - stable_memory_size: 246 -btreemap_remove_blob_64_1024_v2: - measurements: - instructions: 1590358981 - node_load_v2: 671421671 - node_save_v2: 479097166 - stable_memory_size: 184 -btreemap_remove_blob_8_1024: - measurements: - instructions: 877475340 - node_load_v1: 203792348 - node_save_v1: 345768939 - stable_memory_size: 184 -btreemap_remove_blob_8_1024_v2: - measurements: - instructions: 986682953 - node_load_v2: 274023708 - node_save_v2: 387155036 - stable_memory_size: 139 -btreemap_remove_blob_8_u64: - measurements: - instructions: 607672459 - node_load_v1: 202072945 - node_save_v1: 200360852 - stable_memory_size: 7 -btreemap_remove_blob_8_u64_v2: - measurements: - instructions: 739316591 - node_load_v2: 283135159 - node_save_v2: 248529586 - stable_memory_size: 5 -btreemap_remove_u64_blob_8: - measurements: - instructions: 669856911 - node_load_v1: 192918268 - node_save_v1: 269708119 - stable_memory_size: 8 -btreemap_remove_u64_blob_8_v2: - measurements: - instructions: 765304028 - node_load_v2: 253212163 - node_save_v2: 302212433 - stable_memory_size: 6 -btreemap_remove_u64_u64: - measurements: - instructions: 693077801 - node_load_v1: 193826722 - node_save_v1: 283366051 - stable_memory_size: 8 -btreemap_remove_u64_u64_v2: - measurements: - instructions: 797832204 - node_load_v2: 258765788 - node_save_v2: 320071273 - stable_memory_size: 7 -memory_manager_baseline: - measurements: - instructions: 1122 - stable_memory_size: 8000 -memory_manager_grow: - measurements: - instructions: 283783820 - stable_memory_size: 32001 -memory_manager_overhead: - measurements: - instructions: 4522090 - stable_memory_size: 8321 -vec_get_blob_128: - measurements: - instructions: 20697043 - stable_memory_size: 20 -vec_get_blob_16: - measurements: - instructions: 9639316 - stable_memory_size: 3 -vec_get_blob_32: - measurements: - instructions: 10445322 - stable_memory_size: 6 -vec_get_blob_4: - measurements: - instructions: 5683767 - stable_memory_size: 1 -vec_get_blob_64: - measurements: - instructions: 15108707 - stable_memory_size: 10 -vec_get_blob_8: - measurements: - instructions: 6902502 - stable_memory_size: 2 -vec_get_u64: - measurements: - instructions: 6170324 - stable_memory_size: 2 -vec_insert_blob_128: - measurements: - instructions: 3682815 - stable_memory_size: 20 -vec_insert_blob_16: - measurements: - instructions: 3680588 - stable_memory_size: 3 -vec_insert_blob_32: - measurements: - instructions: 3680981 - stable_memory_size: 6 -vec_insert_blob_4: - measurements: - instructions: 3680326 - stable_memory_size: 1 -vec_insert_blob_64: - measurements: - instructions: 3681505 - stable_memory_size: 10 -vec_insert_blob_8: - measurements: - instructions: 3680457 - stable_memory_size: 2 -vec_insert_u64: - measurements: - instructions: 5710457 - stable_memory_size: 2 \ No newline at end of file +benches: + btreemap_get_blob_128_1024: + total: + instructions: 878062290 + heap_increase: 0 + stable_memory_increase: 0 + scopes: {} + btreemap_get_blob_128_1024_v2: + total: + instructions: 976048733 + heap_increase: 0 + stable_memory_increase: 0 + scopes: {} + btreemap_get_blob_16_1024: + total: + instructions: 361111644 + heap_increase: 0 + stable_memory_increase: 0 + scopes: {} + btreemap_get_blob_16_1024_v2: + total: + instructions: 445035580 + heap_increase: 0 + stable_memory_increase: 0 + scopes: {} + btreemap_get_blob_256_1024: + total: + instructions: 1376454247 + heap_increase: 0 + stable_memory_increase: 0 + scopes: {} + btreemap_get_blob_256_1024_v2: + total: + instructions: 1475809402 + heap_increase: 0 + stable_memory_increase: 0 + scopes: {} + btreemap_get_blob_32_1024: + total: + instructions: 405064351 + heap_increase: 0 + stable_memory_increase: 0 + scopes: {} + btreemap_get_blob_32_1024_v2: + total: + instructions: 488777878 + heap_increase: 0 + stable_memory_increase: 0 + scopes: {} + btreemap_get_blob_4_1024: + total: + instructions: 242790863 + heap_increase: 0 + stable_memory_increase: 0 + scopes: {} + btreemap_get_blob_4_1024_v2: + total: + instructions: 324656308 + heap_increase: 0 + stable_memory_increase: 0 + scopes: {} + btreemap_get_blob_512_1024: + total: + instructions: 2372451103 + heap_increase: 0 + stable_memory_increase: 0 + scopes: {} + btreemap_get_blob_512_1024_v2: + total: + instructions: 2472995457 + heap_increase: 0 + stable_memory_increase: 0 + scopes: {} + btreemap_get_blob_64_1024: + total: + instructions: 649031563 + heap_increase: 0 + stable_memory_increase: 0 + scopes: {} + btreemap_get_blob_64_1024_v2: + total: + instructions: 732957639 + heap_increase: 0 + stable_memory_increase: 0 + scopes: {} + btreemap_get_blob_8_1024: + total: + instructions: 282185767 + heap_increase: 0 + stable_memory_increase: 0 + scopes: {} + btreemap_get_blob_8_1024_v2: + total: + instructions: 363313956 + heap_increase: 0 + stable_memory_increase: 0 + scopes: {} + btreemap_get_blob_8_u64: + total: + instructions: 252253558 + heap_increase: 0 + stable_memory_increase: 0 + scopes: {} + btreemap_get_blob_8_u64_v2: + total: + instructions: 334300748 + heap_increase: 0 + stable_memory_increase: 0 + scopes: {} + btreemap_get_u64_blob_8: + total: + instructions: 231996637 + heap_increase: 0 + stable_memory_increase: 0 + scopes: {} + btreemap_get_u64_blob_8_v2: + total: + instructions: 290957570 + heap_increase: 0 + stable_memory_increase: 0 + scopes: {} + btreemap_get_u64_u64: + total: + instructions: 234867637 + heap_increase: 0 + stable_memory_increase: 0 + scopes: {} + btreemap_get_u64_u64_v2: + total: + instructions: 298873070 + heap_increase: 0 + stable_memory_increase: 0 + scopes: {} + btreemap_insert_10mib_values: + total: + instructions: 99513298 + heap_increase: 0 + stable_memory_increase: 32 + scopes: {} + btreemap_insert_blob_1024_128: + total: + instructions: 4932437171 + heap_increase: 0 + stable_memory_increase: 262 + scopes: {} + btreemap_insert_blob_1024_128_v2: + total: + instructions: 5320898591 + heap_increase: 0 + stable_memory_increase: 196 + scopes: {} + btreemap_insert_blob_1024_16: + total: + instructions: 4894250002 + heap_increase: 0 + stable_memory_increase: 241 + scopes: {} + btreemap_insert_blob_1024_16_v2: + total: + instructions: 5284630493 + heap_increase: 0 + stable_memory_increase: 181 + scopes: {} + btreemap_insert_blob_1024_256: + total: + instructions: 4944651078 + heap_increase: 0 + stable_memory_increase: 292 + scopes: {} + btreemap_insert_blob_1024_256_v2: + total: + instructions: 5333518681 + heap_increase: 0 + stable_memory_increase: 219 + scopes: {} + btreemap_insert_blob_1024_32: + total: + instructions: 4909263380 + heap_increase: 0 + stable_memory_increase: 239 + scopes: {} + btreemap_insert_blob_1024_32_v2: + total: + instructions: 5298675249 + heap_increase: 0 + stable_memory_increase: 180 + scopes: {} + btreemap_insert_blob_1024_4: + total: + instructions: 4790950889 + heap_increase: 0 + stable_memory_increase: 235 + scopes: {} + btreemap_insert_blob_1024_4_v2: + total: + instructions: 5185472451 + heap_increase: 0 + stable_memory_increase: 176 + scopes: {} + btreemap_insert_blob_1024_512: + total: + instructions: 5030151861 + heap_increase: 0 + stable_memory_increase: 348 + scopes: {} + btreemap_insert_blob_1024_512_v2: + total: + instructions: 5426022185 + heap_increase: 0 + stable_memory_increase: 261 + scopes: {} + btreemap_insert_blob_1024_64: + total: + instructions: 4928608138 + heap_increase: 0 + stable_memory_increase: 250 + scopes: {} + btreemap_insert_blob_1024_64_v2: + total: + instructions: 5317541232 + heap_increase: 0 + stable_memory_increase: 188 + scopes: {} + btreemap_insert_blob_1024_8: + total: + instructions: 4875408971 + heap_increase: 0 + stable_memory_increase: 237 + scopes: {} + btreemap_insert_blob_1024_8_v2: + total: + instructions: 5267475770 + heap_increase: 0 + stable_memory_increase: 178 + scopes: {} + btreemap_insert_blob_128_1024: + total: + instructions: 1381031376 + heap_increase: 0 + stable_memory_increase: 260 + scopes: {} + btreemap_insert_blob_128_1024_v2: + total: + instructions: 1510646032 + heap_increase: 0 + stable_memory_increase: 195 + scopes: {} + btreemap_insert_blob_16_1024: + total: + instructions: 802983818 + heap_increase: 0 + stable_memory_increase: 215 + scopes: {} + btreemap_insert_blob_16_1024_v2: + total: + instructions: 900358652 + heap_increase: 0 + stable_memory_increase: 161 + scopes: {} + btreemap_insert_blob_256_1024: + total: + instructions: 1906432263 + heap_increase: 0 + stable_memory_increase: 292 + scopes: {} + btreemap_insert_blob_256_1024_v2: + total: + instructions: 2096024018 + heap_increase: 0 + stable_memory_increase: 219 + scopes: {} + btreemap_insert_blob_32_1024: + total: + instructions: 852439720 + heap_increase: 0 + stable_memory_increase: 230 + scopes: {} + btreemap_insert_blob_32_1024_v2: + total: + instructions: 944156278 + heap_increase: 0 + stable_memory_increase: 173 + scopes: {} + btreemap_insert_blob_4_1024: + total: + instructions: 601819649 + heap_increase: 0 + stable_memory_increase: 123 + scopes: {} + btreemap_insert_blob_4_1024_v2: + total: + instructions: 685719671 + heap_increase: 0 + stable_memory_increase: 92 + scopes: {} + btreemap_insert_blob_512_1024: + total: + instructions: 2985018960 + heap_increase: 0 + stable_memory_increase: 351 + scopes: {} + btreemap_insert_blob_512_1024_v2: + total: + instructions: 3244662757 + heap_increase: 0 + stable_memory_increase: 263 + scopes: {} + btreemap_insert_blob_64_1024: + total: + instructions: 1116942462 + heap_increase: 0 + stable_memory_increase: 245 + scopes: {} + btreemap_insert_blob_64_1024_v2: + total: + instructions: 1219328855 + heap_increase: 0 + stable_memory_increase: 183 + scopes: {} + btreemap_insert_blob_8_1024: + total: + instructions: 720470828 + heap_increase: 0 + stable_memory_increase: 183 + scopes: {} + btreemap_insert_blob_8_1024_v2: + total: + instructions: 811304273 + heap_increase: 0 + stable_memory_increase: 138 + scopes: {} + btreemap_insert_blob_8_u64: + total: + instructions: 416168832 + heap_increase: 0 + stable_memory_increase: 6 + scopes: {} + btreemap_insert_blob_8_u64_v2: + total: + instructions: 514617225 + heap_increase: 0 + stable_memory_increase: 4 + scopes: {} + btreemap_insert_u64_blob_8: + total: + instructions: 426450307 + heap_increase: 0 + stable_memory_increase: 7 + scopes: {} + btreemap_insert_u64_blob_8_v2: + total: + instructions: 492818493 + heap_increase: 0 + stable_memory_increase: 5 + scopes: {} + btreemap_insert_u64_u64: + total: + instructions: 438058583 + heap_increase: 0 + stable_memory_increase: 7 + scopes: {} + btreemap_insert_u64_u64_v2: + total: + instructions: 508135036 + heap_increase: 0 + stable_memory_increase: 6 + scopes: {} + btreemap_iter_count_10mib_values: + total: + instructions: 23609229 + heap_increase: 0 + stable_memory_increase: 0 + scopes: {} + btreemap_iter_count_small_values: + total: + instructions: 25579067 + heap_increase: 0 + stable_memory_increase: 0 + scopes: {} + btreemap_remove_blob_128_1024: + total: + instructions: 1693092896 + heap_increase: 0 + stable_memory_increase: 0 + scopes: {} + btreemap_remove_blob_128_1024_v2: + total: + instructions: 1834843882 + heap_increase: 0 + stable_memory_increase: 0 + scopes: {} + btreemap_remove_blob_16_1024: + total: + instructions: 994045948 + heap_increase: 0 + stable_memory_increase: 0 + scopes: {} + btreemap_remove_blob_16_1024_v2: + total: + instructions: 1127685703 + heap_increase: 0 + stable_memory_increase: 0 + scopes: {} + btreemap_remove_blob_256_1024: + total: + instructions: 2307255652 + heap_increase: 0 + stable_memory_increase: 0 + scopes: {} + btreemap_remove_blob_256_1024_v2: + total: + instructions: 2456187441 + heap_increase: 0 + stable_memory_increase: 0 + scopes: {} + btreemap_remove_blob_32_1024: + total: + instructions: 1066324254 + heap_increase: 0 + stable_memory_increase: 0 + scopes: {} + btreemap_remove_blob_32_1024_v2: + total: + instructions: 1202125590 + heap_increase: 0 + stable_memory_increase: 0 + scopes: {} + btreemap_remove_blob_4_1024: + total: + instructions: 616566216 + heap_increase: 0 + stable_memory_increase: 0 + scopes: {} + btreemap_remove_blob_4_1024_v2: + total: + instructions: 716542736 + heap_increase: 0 + stable_memory_increase: 0 + scopes: {} + btreemap_remove_blob_512_1024: + total: + instructions: 3596249202 + heap_increase: 0 + stable_memory_increase: 0 + scopes: {} + btreemap_remove_blob_512_1024_v2: + total: + instructions: 3748172387 + heap_increase: 0 + stable_memory_increase: 0 + scopes: {} + btreemap_remove_blob_64_1024: + total: + instructions: 1376819825 + heap_increase: 0 + stable_memory_increase: 0 + scopes: {} + btreemap_remove_blob_64_1024_v2: + total: + instructions: 1514472314 + heap_increase: 0 + stable_memory_increase: 0 + scopes: {} + btreemap_remove_blob_8_1024: + total: + instructions: 805394764 + heap_increase: 0 + stable_memory_increase: 0 + scopes: {} + btreemap_remove_blob_8_1024_v2: + total: + instructions: 921132101 + heap_increase: 0 + stable_memory_increase: 0 + scopes: {} + btreemap_remove_blob_8_u64: + total: + instructions: 538725231 + heap_increase: 0 + stable_memory_increase: 0 + scopes: {} + btreemap_remove_blob_8_u64_v2: + total: + instructions: 672706816 + heap_increase: 0 + stable_memory_increase: 0 + scopes: {} + btreemap_remove_u64_blob_8: + total: + instructions: 597013331 + heap_increase: 0 + stable_memory_increase: 0 + scopes: {} + btreemap_remove_u64_blob_8_v2: + total: + instructions: 693174306 + heap_increase: 0 + stable_memory_increase: 0 + scopes: {} + btreemap_remove_u64_u64: + total: + instructions: 620591054 + heap_increase: 0 + stable_memory_increase: 0 + scopes: {} + btreemap_remove_u64_u64_v2: + total: + instructions: 725619289 + heap_increase: 0 + stable_memory_increase: 0 + scopes: {} + memory_manager_baseline: + total: + instructions: 1052 + heap_increase: 0 + stable_memory_increase: 8000 + scopes: {} + memory_manager_grow: + total: + instructions: 285287867 + heap_increase: 2 + stable_memory_increase: 32000 + scopes: {} + memory_manager_overhead: + total: + instructions: 4543611 + heap_increase: 0 + stable_memory_increase: 8320 + scopes: {} + vec_get_blob_128: + total: + instructions: 20896057 + heap_increase: 0 + stable_memory_increase: 0 + scopes: {} + vec_get_blob_16: + total: + instructions: 9789410 + heap_increase: 0 + stable_memory_increase: 0 + scopes: {} + vec_get_blob_32: + total: + instructions: 10620310 + heap_increase: 0 + stable_memory_increase: 0 + scopes: {} + vec_get_blob_4: + total: + instructions: 5789429 + heap_increase: 0 + stable_memory_increase: 0 + scopes: {} + vec_get_blob_64: + total: + instructions: 15306283 + heap_increase: 0 + stable_memory_increase: 0 + scopes: {} + vec_get_blob_8: + total: + instructions: 7026042 + heap_increase: 0 + stable_memory_increase: 0 + scopes: {} + vec_get_u64: + total: + instructions: 6270307 + heap_increase: 0 + stable_memory_increase: 0 + scopes: {} + vec_insert_blob_128: + total: + instructions: 3782818 + heap_increase: 0 + stable_memory_increase: 19 + scopes: {} + vec_insert_blob_16: + total: + instructions: 3780574 + heap_increase: 0 + stable_memory_increase: 2 + scopes: {} + vec_insert_blob_32: + total: + instructions: 3780970 + heap_increase: 0 + stable_memory_increase: 5 + scopes: {} + vec_insert_blob_4: + total: + instructions: 3780310 + heap_increase: 0 + stable_memory_increase: 0 + scopes: {} + vec_insert_blob_64: + total: + instructions: 3781498 + heap_increase: 0 + stable_memory_increase: 9 + scopes: {} + vec_insert_blob_8: + total: + instructions: 3780442 + heap_increase: 0 + stable_memory_increase: 1 + scopes: {} + vec_insert_u64: + total: + instructions: 5850442 + heap_increase: 0 + stable_memory_increase: 1 + scopes: {} +version: 0.1.1 \ No newline at end of file From 358f4ab91a1bcb270cee26629489bcd8450b1ede Mon Sep 17 00:00:00 2001 From: Dragoljub Duric Date: Tue, 13 Feb 2024 10:44:25 +0000 Subject: [PATCH 18/24] . --- canbench_results.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/canbench_results.yml b/canbench_results.yml index 0cf37552..e3f4254d 100644 --- a/canbench_results.yml +++ b/canbench_results.yml @@ -611,4 +611,4 @@ benches: heap_increase: 0 stable_memory_increase: 1 scopes: {} -version: 0.1.1 \ No newline at end of file +version: 0.1.1 From 9ca6ba60a31011bb1e3e5aa3d38234c6bf78acb6 Mon Sep 17 00:00:00 2001 From: Dragoljub Duric Date: Tue, 13 Feb 2024 10:53:50 +0000 Subject: [PATCH 19/24] move test to btreemap/proptests.rs --- src/btreemap.rs | 22 ---------------------- src/btreemap/proptests.rs | 16 ++++++++++++++++ 2 files changed, 16 insertions(+), 22 deletions(-) diff --git a/src/btreemap.rs b/src/btreemap.rs index 40abb85c..e2a38413 100644 --- a/src/btreemap.rs +++ b/src/btreemap.rs @@ -1256,7 +1256,6 @@ mod test { storable::{Blob, Bound as StorableBound}, VectorMemory, }; - use proptest::proptest; use std::cell::RefCell; use std::rc::Rc; @@ -3030,25 +3029,4 @@ mod test { let btree: BTreeMap = BTreeMap::init(btree.into_memory()); assert_eq!(btree.get(&T), Some(T)); } - - proptest! { - #[test] - fn iter_count_test( - start in 0..250u8, - size in 1..250u8, - ) { - let end = std::cmp::min(start as u64 + size as u64, 255) as u8; - btree_test(|mut btree| { - for i in start..end { - assert_eq!(btree.insert(b(&[i]), b(&[])), None); - } - - for i in start..end { - for j in i..end { - assert_eq!(btree.range(b(&[i])..b(&[j])).count(), (j - i) as usize); - } - } - }); - } - } } diff --git a/src/btreemap/proptests.rs b/src/btreemap/proptests.rs index 175af763..a4eb4c41 100644 --- a/src/btreemap/proptests.rs +++ b/src/btreemap/proptests.rs @@ -144,6 +144,22 @@ fn map_upper_bound_iter(#[strategy(pvec(0u64..u64::MAX -1 , 10..100))] keys: Vec }); } +#[proptest] +fn iter_count_test(#[strategy(0..250u8)] start: u8, #[strategy(1..250u8)] size: u8) { + let end = std::cmp::min(start as u64 + size as u64, 255) as u8; + btree_test(|mut btree| { + for i in start..end { + assert_eq!(btree.insert(b(&[i]), b(&[])), None); + } + + for i in start..end { + for j in i..end { + assert_eq!(btree.range(b(&[i])..b(&[j])).count(), (j - i) as usize); + } + } + }); +} + // Given an operation, executes it on the given stable btreemap and standard btreemap, verifying // that the result of the operation is equal in both btrees. fn execute_operation( From d032bb5c3b83283ed73cf3caeb7a1c1ddff83209 Mon Sep 17 00:00:00 2001 From: Dragoljub Duric Date: Tue, 13 Feb 2024 11:33:23 +0000 Subject: [PATCH 20/24] rerun canbench --- canbench_results.yml | 130 +++++++++++++++++++++---------------------- 1 file changed, 65 insertions(+), 65 deletions(-) diff --git a/canbench_results.yml b/canbench_results.yml index e3f4254d..aead01c4 100644 --- a/canbench_results.yml +++ b/canbench_results.yml @@ -133,379 +133,379 @@ benches: scopes: {} btreemap_insert_10mib_values: total: - instructions: 99513298 + instructions: 99623146 heap_increase: 0 stable_memory_increase: 32 scopes: {} btreemap_insert_blob_1024_128: total: - instructions: 4932437171 + instructions: 4932454513 heap_increase: 0 stable_memory_increase: 262 scopes: {} btreemap_insert_blob_1024_128_v2: total: - instructions: 5320898591 + instructions: 5320915933 heap_increase: 0 stable_memory_increase: 196 scopes: {} btreemap_insert_blob_1024_16: total: - instructions: 4894250002 + instructions: 4894267669 heap_increase: 0 stable_memory_increase: 241 scopes: {} btreemap_insert_blob_1024_16_v2: total: - instructions: 5284630493 + instructions: 5284648198 heap_increase: 0 stable_memory_increase: 181 scopes: {} btreemap_insert_blob_1024_256: total: - instructions: 4944651078 + instructions: 4944668550 heap_increase: 0 stable_memory_increase: 292 scopes: {} btreemap_insert_blob_1024_256_v2: total: - instructions: 5333518681 + instructions: 5333536153 heap_increase: 0 stable_memory_increase: 219 scopes: {} btreemap_insert_blob_1024_32: total: - instructions: 4909263380 + instructions: 4909280657 heap_increase: 0 stable_memory_increase: 239 scopes: {} btreemap_insert_blob_1024_32_v2: total: - instructions: 5298675249 + instructions: 5298692615 heap_increase: 0 stable_memory_increase: 180 scopes: {} btreemap_insert_blob_1024_4: total: - instructions: 4790950889 + instructions: 4790968322 heap_increase: 0 stable_memory_increase: 235 scopes: {} btreemap_insert_blob_1024_4_v2: total: - instructions: 5185472451 + instructions: 5185489998 heap_increase: 0 stable_memory_increase: 176 scopes: {} btreemap_insert_blob_1024_512: total: - instructions: 5030151861 + instructions: 5030169242 heap_increase: 0 stable_memory_increase: 348 scopes: {} btreemap_insert_blob_1024_512_v2: total: - instructions: 5426022185 + instructions: 5426039566 heap_increase: 0 stable_memory_increase: 261 scopes: {} btreemap_insert_blob_1024_64: total: - instructions: 4928608138 + instructions: 4928625701 heap_increase: 0 stable_memory_increase: 250 scopes: {} btreemap_insert_blob_1024_64_v2: total: - instructions: 5317541232 + instructions: 5317558795 heap_increase: 0 stable_memory_increase: 188 scopes: {} btreemap_insert_blob_1024_8: total: - instructions: 4875408971 + instructions: 4875426469 heap_increase: 0 stable_memory_increase: 237 scopes: {} btreemap_insert_blob_1024_8_v2: total: - instructions: 5267475770 + instructions: 5267493420 heap_increase: 0 stable_memory_increase: 178 scopes: {} btreemap_insert_blob_128_1024: total: - instructions: 1381031376 + instructions: 1381048640 heap_increase: 0 stable_memory_increase: 260 scopes: {} btreemap_insert_blob_128_1024_v2: total: - instructions: 1510646032 + instructions: 1510663296 heap_increase: 0 stable_memory_increase: 195 scopes: {} btreemap_insert_blob_16_1024: total: - instructions: 802983818 + instructions: 802999561 heap_increase: 0 stable_memory_increase: 215 scopes: {} btreemap_insert_blob_16_1024_v2: total: - instructions: 900358652 + instructions: 900374509 heap_increase: 0 stable_memory_increase: 161 scopes: {} btreemap_insert_blob_256_1024: total: - instructions: 1906432263 + instructions: 1906449735 heap_increase: 0 stable_memory_increase: 292 scopes: {} btreemap_insert_blob_256_1024_v2: total: - instructions: 2096024018 + instructions: 2096041490 heap_increase: 0 stable_memory_increase: 219 scopes: {} btreemap_insert_blob_32_1024: total: - instructions: 852439720 + instructions: 852456360 heap_increase: 0 stable_memory_increase: 230 scopes: {} btreemap_insert_blob_32_1024_v2: total: - instructions: 944156278 + instructions: 944172918 heap_increase: 0 stable_memory_increase: 173 scopes: {} btreemap_insert_blob_4_1024: total: - instructions: 601819649 + instructions: 601828775 heap_increase: 0 stable_memory_increase: 123 scopes: {} btreemap_insert_blob_4_1024_v2: total: - instructions: 685719671 + instructions: 685728797 heap_increase: 0 stable_memory_increase: 92 scopes: {} btreemap_insert_blob_512_1024: total: - instructions: 2985018960 + instructions: 2985036484 heap_increase: 0 stable_memory_increase: 351 scopes: {} btreemap_insert_blob_512_1024_v2: total: - instructions: 3244662757 + instructions: 3244680281 heap_increase: 0 stable_memory_increase: 263 scopes: {} btreemap_insert_blob_64_1024: total: - instructions: 1116942462 + instructions: 1116959609 heap_increase: 0 stable_memory_increase: 245 scopes: {} btreemap_insert_blob_64_1024_v2: total: - instructions: 1219328855 + instructions: 1219346002 heap_increase: 0 stable_memory_increase: 183 scopes: {} btreemap_insert_blob_8_1024: total: - instructions: 720470828 + instructions: 720484387 heap_increase: 0 stable_memory_increase: 183 scopes: {} btreemap_insert_blob_8_1024_v2: total: - instructions: 811304273 + instructions: 811317908 heap_increase: 0 stable_memory_increase: 138 scopes: {} btreemap_insert_blob_8_u64: total: - instructions: 416168832 + instructions: 416182417 heap_increase: 0 stable_memory_increase: 6 scopes: {} btreemap_insert_blob_8_u64_v2: total: - instructions: 514617225 + instructions: 514636022 heap_increase: 0 stable_memory_increase: 4 scopes: {} btreemap_insert_u64_blob_8: total: - instructions: 426450307 + instructions: 426467779 heap_increase: 0 stable_memory_increase: 7 scopes: {} btreemap_insert_u64_blob_8_v2: total: - instructions: 492818493 + instructions: 492840753 heap_increase: 0 stable_memory_increase: 5 scopes: {} btreemap_insert_u64_u64: total: - instructions: 438058583 + instructions: 438076081 heap_increase: 0 stable_memory_increase: 7 scopes: {} btreemap_insert_u64_u64_v2: total: - instructions: 508135036 + instructions: 508159001 heap_increase: 0 stable_memory_increase: 6 scopes: {} btreemap_iter_count_10mib_values: total: - instructions: 23609229 + instructions: 499316 heap_increase: 0 stable_memory_increase: 0 scopes: {} btreemap_iter_count_small_values: total: - instructions: 25579067 + instructions: 10192855 heap_increase: 0 stable_memory_increase: 0 scopes: {} btreemap_remove_blob_128_1024: total: - instructions: 1693092896 + instructions: 1693118128 heap_increase: 0 stable_memory_increase: 0 scopes: {} btreemap_remove_blob_128_1024_v2: total: - instructions: 1834843882 + instructions: 1834869114 heap_increase: 0 stable_memory_increase: 0 scopes: {} btreemap_remove_blob_16_1024: total: - instructions: 994045948 + instructions: 994068957 heap_increase: 0 stable_memory_increase: 0 scopes: {} btreemap_remove_blob_16_1024_v2: total: - instructions: 1127685703 + instructions: 1127708712 heap_increase: 0 stable_memory_increase: 0 scopes: {} btreemap_remove_blob_256_1024: total: - instructions: 2307255652 + instructions: 2307281188 heap_increase: 0 stable_memory_increase: 0 scopes: {} btreemap_remove_blob_256_1024_v2: total: - instructions: 2456187441 + instructions: 2456212977 heap_increase: 0 stable_memory_increase: 0 scopes: {} btreemap_remove_blob_32_1024: total: - instructions: 1066324254 + instructions: 1066348574 heap_increase: 0 stable_memory_increase: 0 scopes: {} btreemap_remove_blob_32_1024_v2: total: - instructions: 1202125590 + instructions: 1202149948 heap_increase: 0 stable_memory_increase: 0 scopes: {} btreemap_remove_blob_4_1024: total: - instructions: 616566216 + instructions: 616579554 heap_increase: 0 stable_memory_increase: 0 scopes: {} btreemap_remove_blob_4_1024_v2: total: - instructions: 716542736 + instructions: 716556112 heap_increase: 0 stable_memory_increase: 0 scopes: {} btreemap_remove_blob_512_1024: total: - instructions: 3596249202 + instructions: 3596274814 heap_increase: 0 stable_memory_increase: 0 scopes: {} btreemap_remove_blob_512_1024_v2: total: - instructions: 3748172387 + instructions: 3748198037 heap_increase: 0 stable_memory_increase: 0 scopes: {} btreemap_remove_blob_64_1024: total: - instructions: 1376819825 + instructions: 1376844886 heap_increase: 0 stable_memory_increase: 0 scopes: {} btreemap_remove_blob_64_1024_v2: total: - instructions: 1514472314 + instructions: 1514497375 heap_increase: 0 stable_memory_increase: 0 scopes: {} btreemap_remove_blob_8_1024: total: - instructions: 805394764 + instructions: 805414581 heap_increase: 0 stable_memory_increase: 0 scopes: {} btreemap_remove_blob_8_1024_v2: total: - instructions: 921132101 + instructions: 921151956 heap_increase: 0 stable_memory_increase: 0 scopes: {} btreemap_remove_blob_8_u64: total: - instructions: 538725231 + instructions: 538745086 heap_increase: 0 stable_memory_increase: 0 scopes: {} btreemap_remove_blob_8_u64_v2: total: - instructions: 672706816 + instructions: 672733239 heap_increase: 0 stable_memory_increase: 0 scopes: {} btreemap_remove_u64_blob_8: total: - instructions: 597013331 + instructions: 597038867 heap_increase: 0 stable_memory_increase: 0 scopes: {} btreemap_remove_u64_blob_8_v2: total: - instructions: 693174306 + instructions: 693205162 heap_increase: 0 stable_memory_increase: 0 scopes: {} btreemap_remove_u64_u64: total: - instructions: 620591054 + instructions: 620616628 heap_increase: 0 stable_memory_increase: 0 scopes: {} btreemap_remove_u64_u64_v2: total: - instructions: 725619289 + instructions: 725651456 heap_increase: 0 stable_memory_increase: 0 scopes: {} @@ -517,13 +517,13 @@ benches: scopes: {} memory_manager_grow: total: - instructions: 285287867 + instructions: 285095872 heap_increase: 2 stable_memory_increase: 32000 scopes: {} memory_manager_overhead: total: - instructions: 4543611 + instructions: 4527062 heap_increase: 0 stable_memory_increase: 8320 scopes: {} From 83a641804208c863fde05f420199b939ef4c7647 Mon Sep 17 00:00:00 2001 From: Dragoljub Duric Date: Tue, 13 Feb 2024 11:39:54 +0000 Subject: [PATCH 21/24] clippy --- src/btreemap/iter.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/btreemap/iter.rs b/src/btreemap/iter.rs index d1db7cd8..90c8c05b 100644 --- a/src/btreemap/iter.rs +++ b/src/btreemap/iter.rs @@ -146,7 +146,7 @@ where node, }); - return Some((key, value)); + Some((key, value)) } } } From 46d9893eaade3eb2eeb2dd92315009136ffdbc1e Mon Sep 17 00:00:00 2001 From: Dragoljub Duric Date: Tue, 13 Feb 2024 16:21:47 +0000 Subject: [PATCH 22/24] Adress comment --- canbench_results.yml | 130 +++++++++++++++++++++---------------------- src/btreemap/iter.rs | 31 +++++------ 2 files changed, 78 insertions(+), 83 deletions(-) diff --git a/canbench_results.yml b/canbench_results.yml index aead01c4..f97d6a1a 100644 --- a/canbench_results.yml +++ b/canbench_results.yml @@ -133,379 +133,379 @@ benches: scopes: {} btreemap_insert_10mib_values: total: - instructions: 99623146 + instructions: 99513298 heap_increase: 0 stable_memory_increase: 32 scopes: {} btreemap_insert_blob_1024_128: total: - instructions: 4932454513 + instructions: 4932437171 heap_increase: 0 stable_memory_increase: 262 scopes: {} btreemap_insert_blob_1024_128_v2: total: - instructions: 5320915933 + instructions: 5320898591 heap_increase: 0 stable_memory_increase: 196 scopes: {} btreemap_insert_blob_1024_16: total: - instructions: 4894267669 + instructions: 4894250002 heap_increase: 0 stable_memory_increase: 241 scopes: {} btreemap_insert_blob_1024_16_v2: total: - instructions: 5284648198 + instructions: 5284630493 heap_increase: 0 stable_memory_increase: 181 scopes: {} btreemap_insert_blob_1024_256: total: - instructions: 4944668550 + instructions: 4944651078 heap_increase: 0 stable_memory_increase: 292 scopes: {} btreemap_insert_blob_1024_256_v2: total: - instructions: 5333536153 + instructions: 5333518681 heap_increase: 0 stable_memory_increase: 219 scopes: {} btreemap_insert_blob_1024_32: total: - instructions: 4909280657 + instructions: 4909263380 heap_increase: 0 stable_memory_increase: 239 scopes: {} btreemap_insert_blob_1024_32_v2: total: - instructions: 5298692615 + instructions: 5298675249 heap_increase: 0 stable_memory_increase: 180 scopes: {} btreemap_insert_blob_1024_4: total: - instructions: 4790968322 + instructions: 4790950889 heap_increase: 0 stable_memory_increase: 235 scopes: {} btreemap_insert_blob_1024_4_v2: total: - instructions: 5185489998 + instructions: 5185472451 heap_increase: 0 stable_memory_increase: 176 scopes: {} btreemap_insert_blob_1024_512: total: - instructions: 5030169242 + instructions: 5030151861 heap_increase: 0 stable_memory_increase: 348 scopes: {} btreemap_insert_blob_1024_512_v2: total: - instructions: 5426039566 + instructions: 5426022185 heap_increase: 0 stable_memory_increase: 261 scopes: {} btreemap_insert_blob_1024_64: total: - instructions: 4928625701 + instructions: 4928608138 heap_increase: 0 stable_memory_increase: 250 scopes: {} btreemap_insert_blob_1024_64_v2: total: - instructions: 5317558795 + instructions: 5317541232 heap_increase: 0 stable_memory_increase: 188 scopes: {} btreemap_insert_blob_1024_8: total: - instructions: 4875426469 + instructions: 4875408971 heap_increase: 0 stable_memory_increase: 237 scopes: {} btreemap_insert_blob_1024_8_v2: total: - instructions: 5267493420 + instructions: 5267475770 heap_increase: 0 stable_memory_increase: 178 scopes: {} btreemap_insert_blob_128_1024: total: - instructions: 1381048640 + instructions: 1381031376 heap_increase: 0 stable_memory_increase: 260 scopes: {} btreemap_insert_blob_128_1024_v2: total: - instructions: 1510663296 + instructions: 1510646032 heap_increase: 0 stable_memory_increase: 195 scopes: {} btreemap_insert_blob_16_1024: total: - instructions: 802999561 + instructions: 802983818 heap_increase: 0 stable_memory_increase: 215 scopes: {} btreemap_insert_blob_16_1024_v2: total: - instructions: 900374509 + instructions: 900358652 heap_increase: 0 stable_memory_increase: 161 scopes: {} btreemap_insert_blob_256_1024: total: - instructions: 1906449735 + instructions: 1906432263 heap_increase: 0 stable_memory_increase: 292 scopes: {} btreemap_insert_blob_256_1024_v2: total: - instructions: 2096041490 + instructions: 2096024018 heap_increase: 0 stable_memory_increase: 219 scopes: {} btreemap_insert_blob_32_1024: total: - instructions: 852456360 + instructions: 852439720 heap_increase: 0 stable_memory_increase: 230 scopes: {} btreemap_insert_blob_32_1024_v2: total: - instructions: 944172918 + instructions: 944156278 heap_increase: 0 stable_memory_increase: 173 scopes: {} btreemap_insert_blob_4_1024: total: - instructions: 601828775 + instructions: 601819649 heap_increase: 0 stable_memory_increase: 123 scopes: {} btreemap_insert_blob_4_1024_v2: total: - instructions: 685728797 + instructions: 685719671 heap_increase: 0 stable_memory_increase: 92 scopes: {} btreemap_insert_blob_512_1024: total: - instructions: 2985036484 + instructions: 2985018960 heap_increase: 0 stable_memory_increase: 351 scopes: {} btreemap_insert_blob_512_1024_v2: total: - instructions: 3244680281 + instructions: 3244662757 heap_increase: 0 stable_memory_increase: 263 scopes: {} btreemap_insert_blob_64_1024: total: - instructions: 1116959609 + instructions: 1116942462 heap_increase: 0 stable_memory_increase: 245 scopes: {} btreemap_insert_blob_64_1024_v2: total: - instructions: 1219346002 + instructions: 1219328855 heap_increase: 0 stable_memory_increase: 183 scopes: {} btreemap_insert_blob_8_1024: total: - instructions: 720484387 + instructions: 720470828 heap_increase: 0 stable_memory_increase: 183 scopes: {} btreemap_insert_blob_8_1024_v2: total: - instructions: 811317908 + instructions: 811304273 heap_increase: 0 stable_memory_increase: 138 scopes: {} btreemap_insert_blob_8_u64: total: - instructions: 416182417 + instructions: 416168832 heap_increase: 0 stable_memory_increase: 6 scopes: {} btreemap_insert_blob_8_u64_v2: total: - instructions: 514636022 + instructions: 514617225 heap_increase: 0 stable_memory_increase: 4 scopes: {} btreemap_insert_u64_blob_8: total: - instructions: 426467779 + instructions: 426450307 heap_increase: 0 stable_memory_increase: 7 scopes: {} btreemap_insert_u64_blob_8_v2: total: - instructions: 492840753 + instructions: 492818493 heap_increase: 0 stable_memory_increase: 5 scopes: {} btreemap_insert_u64_u64: total: - instructions: 438076081 + instructions: 438058583 heap_increase: 0 stable_memory_increase: 7 scopes: {} btreemap_insert_u64_u64_v2: total: - instructions: 508159001 + instructions: 508135036 heap_increase: 0 stable_memory_increase: 6 scopes: {} btreemap_iter_count_10mib_values: total: - instructions: 499316 + instructions: 497381 heap_increase: 0 stable_memory_increase: 0 scopes: {} btreemap_iter_count_small_values: total: - instructions: 10192855 + instructions: 10116842 heap_increase: 0 stable_memory_increase: 0 scopes: {} btreemap_remove_blob_128_1024: total: - instructions: 1693118128 + instructions: 1693092896 heap_increase: 0 stable_memory_increase: 0 scopes: {} btreemap_remove_blob_128_1024_v2: total: - instructions: 1834869114 + instructions: 1834843882 heap_increase: 0 stable_memory_increase: 0 scopes: {} btreemap_remove_blob_16_1024: total: - instructions: 994068957 + instructions: 994045948 heap_increase: 0 stable_memory_increase: 0 scopes: {} btreemap_remove_blob_16_1024_v2: total: - instructions: 1127708712 + instructions: 1127685703 heap_increase: 0 stable_memory_increase: 0 scopes: {} btreemap_remove_blob_256_1024: total: - instructions: 2307281188 + instructions: 2307255652 heap_increase: 0 stable_memory_increase: 0 scopes: {} btreemap_remove_blob_256_1024_v2: total: - instructions: 2456212977 + instructions: 2456187441 heap_increase: 0 stable_memory_increase: 0 scopes: {} btreemap_remove_blob_32_1024: total: - instructions: 1066348574 + instructions: 1066324254 heap_increase: 0 stable_memory_increase: 0 scopes: {} btreemap_remove_blob_32_1024_v2: total: - instructions: 1202149948 + instructions: 1202125590 heap_increase: 0 stable_memory_increase: 0 scopes: {} btreemap_remove_blob_4_1024: total: - instructions: 616579554 + instructions: 616566216 heap_increase: 0 stable_memory_increase: 0 scopes: {} btreemap_remove_blob_4_1024_v2: total: - instructions: 716556112 + instructions: 716542736 heap_increase: 0 stable_memory_increase: 0 scopes: {} btreemap_remove_blob_512_1024: total: - instructions: 3596274814 + instructions: 3596249202 heap_increase: 0 stable_memory_increase: 0 scopes: {} btreemap_remove_blob_512_1024_v2: total: - instructions: 3748198037 + instructions: 3748172387 heap_increase: 0 stable_memory_increase: 0 scopes: {} btreemap_remove_blob_64_1024: total: - instructions: 1376844886 + instructions: 1376819825 heap_increase: 0 stable_memory_increase: 0 scopes: {} btreemap_remove_blob_64_1024_v2: total: - instructions: 1514497375 + instructions: 1514472314 heap_increase: 0 stable_memory_increase: 0 scopes: {} btreemap_remove_blob_8_1024: total: - instructions: 805414581 + instructions: 805394764 heap_increase: 0 stable_memory_increase: 0 scopes: {} btreemap_remove_blob_8_1024_v2: total: - instructions: 921151956 + instructions: 921132101 heap_increase: 0 stable_memory_increase: 0 scopes: {} btreemap_remove_blob_8_u64: total: - instructions: 538745086 + instructions: 538725231 heap_increase: 0 stable_memory_increase: 0 scopes: {} btreemap_remove_blob_8_u64_v2: total: - instructions: 672733239 + instructions: 672706816 heap_increase: 0 stable_memory_increase: 0 scopes: {} btreemap_remove_u64_blob_8: total: - instructions: 597038867 + instructions: 597013331 heap_increase: 0 stable_memory_increase: 0 scopes: {} btreemap_remove_u64_blob_8_v2: total: - instructions: 693205162 + instructions: 693174306 heap_increase: 0 stable_memory_increase: 0 scopes: {} btreemap_remove_u64_u64: total: - instructions: 620616628 + instructions: 620591054 heap_increase: 0 stable_memory_increase: 0 scopes: {} btreemap_remove_u64_u64_v2: total: - instructions: 725651456 + instructions: 725619289 heap_increase: 0 stable_memory_increase: 0 scopes: {} @@ -517,13 +517,13 @@ benches: scopes: {} memory_manager_grow: total: - instructions: 285095872 + instructions: 285287867 heap_increase: 2 stable_memory_increase: 32000 scopes: {} memory_manager_overhead: total: - instructions: 4527062 + instructions: 4543611 heap_increase: 0 stable_memory_increase: 8320 scopes: {} diff --git a/src/btreemap/iter.rs b/src/btreemap/iter.rs index 90c8c05b..26df50d6 100644 --- a/src/btreemap/iter.rs +++ b/src/btreemap/iter.rs @@ -72,7 +72,7 @@ where } } - fn next_internal(&mut self, load_value: bool) -> Option<(K, Option)> { + fn next_map, usize) -> T>(&mut self, map: F) -> Option { // If the cursors are empty. Iteration is complete. match self.cursors.pop()? { Cursor::Address(address) => { @@ -89,7 +89,7 @@ where node, }); } - self.next_internal(load_value) + self.next_map(map) } Cursor::Node { @@ -108,7 +108,7 @@ where // Add the child to the top of the cursors to be iterated on first. self.cursors.push(Cursor::Address(child_address)); - self.next_internal(load_value) + self.next_map(map) } Cursor::Node { @@ -117,24 +117,18 @@ where } => { if entry_idx >= node.entries_len() { // No more entries to iterate on in this node. - return self.next_internal(load_value); + return self.next_map(map); } - let key = node.key(entry_idx).clone(); - let value = if load_value { - let encoded_value = node.value(entry_idx, self.map.memory()).to_vec(); - Some(V::from_bytes(Cow::Owned(encoded_value))) - } else { - None - }; - // If the key does not belong to the range, iteration stops. - if !self.range.contains(&key) { + if !self.range.contains(node.key(entry_idx)) { // Clear all cursors to avoid needless work in subsequent calls. self.cursors = vec![]; return None; } + let res = map(&node, entry_idx); + // Add to the cursors the next element to be traversed. self.cursors.push(Cursor::Node { next: match node.node_type() { @@ -146,7 +140,7 @@ where node, }); - Some((key, value)) + Some(res) } } } @@ -161,9 +155,10 @@ where type Item = (K, V); fn next(&mut self) -> Option { - // It is safe to unwrap value because when the key exists the - // value will exist as well, and it will be loaded. - self.next_internal(true).map(|(k, v)| (k, v.unwrap())) + self.next_map(|node, entry_idx| { + let (key, encoded_value) = node.entry(entry_idx, self.map.memory()); + (key, V::from_bytes(Cow::Owned(encoded_value))) + }) } fn count(mut self) -> usize @@ -171,7 +166,7 @@ where Self: Sized, { let mut cnt = 0; - while self.next_internal(false).is_some() { + while self.next_map(|_, _| ()).is_some() { cnt += 1; } cnt From 55d9b22f4e30591c37cc90c03fef30bb2642a90c Mon Sep 17 00:00:00 2001 From: Dragoljub Djuric Date: Wed, 14 Feb 2024 10:45:21 +0100 Subject: [PATCH 23/24] Update src/btreemap/iter.rs Co-authored-by: Islam El-Ashi --- src/btreemap/iter.rs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/btreemap/iter.rs b/src/btreemap/iter.rs index 26df50d6..3949352f 100644 --- a/src/btreemap/iter.rs +++ b/src/btreemap/iter.rs @@ -72,6 +72,8 @@ where } } + // Iterates to find the next element in the requested range. + // If it exists, `map` is applied to that element and the result is returned. fn next_map, usize) -> T>(&mut self, map: F) -> Option { // If the cursors are empty. Iteration is complete. match self.cursors.pop()? { From b65841790f43e461ddcb22a33c72a2b7100697bb Mon Sep 17 00:00:00 2001 From: Dragoljub Duric Date: Wed, 14 Feb 2024 09:47:17 +0000 Subject: [PATCH 24/24] Apply suggestion from comments. --- src/btreemap/proptests.rs | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/btreemap/proptests.rs b/src/btreemap/proptests.rs index a4eb4c41..144d97e9 100644 --- a/src/btreemap/proptests.rs +++ b/src/btreemap/proptests.rs @@ -144,9 +144,8 @@ fn map_upper_bound_iter(#[strategy(pvec(0u64..u64::MAX -1 , 10..100))] keys: Vec }); } -#[proptest] -fn iter_count_test(#[strategy(0..250u8)] start: u8, #[strategy(1..250u8)] size: u8) { - let end = std::cmp::min(start as u64 + size as u64, 255) as u8; +#[proptest(cases = 10)] +fn iter_count_test(#[strategy(0..250u8)] start: u8, #[strategy(#start..255u8)] end: u8) { btree_test(|mut btree| { for i in start..end { assert_eq!(btree.insert(b(&[i]), b(&[])), None);