v0.6.9
Highlights
- Performance: Improved
BTreeMapperformance (lazy key loading for big keys >16 bytes)- Better benchmarks, improved coverage
- New: added
BTreeSetdata structure - Documentation: stable-structures book now published
- Cleanup & CI: internal refactors and improved CI
What's Changed
- perf: improve contains_key performance by @maksymar in #271
- ci: add emojis for visualization to top-level canbench summary by @maksymar in #275
- chore: cleanup benchmarks by @maksymar in #276
- chore: btreemap code cleanup by @maksymar in #277
- test: add multi‑type key/value support to BTreeMap tests by @maksymar in #283
- chore: BTreeMap tests cleanup by @maksymar in #287
- docs: improved documentation for BTreeMap by @ielashi in #284
- docs: add skeleton for stable structures book by @ielashi in #289
- feat: Add stable B tree set in stable structures by @dragoljub-duric in #204
- feat: Add new BTreeSet functions by @dragoljub-duric in #292
- chore: Add computational complexity to doc comments of BTreeSet functions by @dragoljub-duric in #293
- docs: add memory trait and memory manager documentation to book by @ielashi in #290
- chore: Update docs for BTreeSet by @dragoljub-duric in #297
- chore: add mdbook github workflow by @ielashi in #291
- feat: publish stable structures book to github pages by @ielashi in #298
- fix: broken link in memory manager doc by @ielashi in #299
- chore: update canbench-rs to 0.1.11 by @maksymar in #302
- ci: update canbench to 0.1.12 by @maksymar in #301
- ci: upgrade canbench to v0.1.13 by @maksymar in #303
- fix: Use correct feature name for canbench profiling by @dsarlis in #296
- chore: bump canbench version to 0.1.14 by @maksymar in #304
- test: improve BTreeMap bench coverage and readability by @maksymar in #285
- chore: update rust dependencies to canbench v0.1.14 by @maksymar in #305
- feat: add optional bench_scope feature for stable-structures by @maksymar in #308
- chore: cleanup deps by @maksymar in #307
- refactor: prepare for lazy key loading by @maksymar in #310
- chore: add workflow for slack notifications by @mraszyk in #311
- perf: Inline from_bytes by @frankdavid in #313
- fix: do not trigger slack notification upon adding reviewers by @mraszyk in #314
- fix: gh pages publish dir by @marc0olo in #309
- feat: add lazy loading for large BTreeMap keys by @maksymar in #312
- ci: add repo name to slack message by @maksymar in #315
- ci: split benchmarks per type by @maksymar in #316
- chore: bump canbench version to 0.1.15 by @maksymar in #317
- fix: fix dependency for bench_scope feature in benchmarks by @maksymar in #320
- test: add benchmarks to compare stable memory vs btreemap performance by @maksymar in #319
- refactor: rename FixedVec to UnboundedVecN by @maksymar in #325
- test: add stable Vec benchmarks by @maksymar in #324
- chore: refactor storable/tuples for better readability by @maksymar in #323
- chore(deps): bump slackapi/slack-github-action from 1.25.0 to 2.1.0 by @dependabot in #321
- chore: Revert "chore(deps): bump slackapi/slack-github-action from 1.25.0 to 2.1.0" by @dsarlis in #328
- fix: use cargo build locked to remove noise from canbench measurements by @maksymar in #327
- chore: fix compilation warning by @maksymar in #330
- fix: fix canbench stability by locking its dependencies by @maksymar in #332
- perf: optimize value swap in BTreeMap by @maksymar in #333
- refactor: improve naming of BTreeMap inner key/value storage by @maksymar in #334
- chore: bump canbench version to v0.1.16 by @maksymar in #335
- refactor: relocate vec types for benchmarks by @maksymar in #336
- perf: use size with offset in lazy loading BTreeMap items by @maksymar in #337
- perf: Introduce benchmarks for the BTreeSet data structure by @dragoljub-duric in #340
- chore: Add CI job for BTreeSet benchmarks by @dragoljub-duric in #341
- chore: bump canbench version to v0.1.17 by @maksymar in #342
- chore: bump canbench version to v0.2.0 by @maksymar in #343
- chore: bump dependency versions by @maksymar in #344
- chore: bump version to v0.6.9 by @maksymar in #345
New Contributors
- @maksymar made their first contribution in #271
- @mraszyk made their first contribution in #311
- @marc0olo made their first contribution in #309
Full Changelog: v0.6.8...v0.6.9
Benchmarks Diff v0.6.9 vs v0.6.7
Google sheets CSV reports link. All CSV files provided in assets section below.
btreemap
---------------------------------------------------
Summary:
instructions:
status: Regressions and improvements 🔴🟢
counts: [total 285 | regressed 50 | improved 134 | new 0 | unchanged 101]
change: [max +899.01M | p75 +4.24M | median -8.50M | p25 -99.48M | min -1.78B]
change %: [max +26.15% | p75 +0.94% | median -1.49% | p25 -9.79% | min -88.41%]
heap_increase:
status: No significant changes 👍
counts: [total 285 | regressed 0 | improved 0 | new 0 | unchanged 285]
change: [max 0 | p75 0 | median 0 | p25 0 | min 0]
change %: [max 0.00% | p75 0.00% | median 0.00% | p25 0.00% | min 0.00%]
stable_memory_increase:
status: No significant changes 👍
counts: [total 285 | regressed 0 | improved 0 | new 0 | unchanged 285]
change: [max 0 | p75 0 | median 0 | p25 0 | min 0]
change %: [max 0.00% | p75 0.00% | median 0.00% | p25 0.00% | min 0.00%]
---------------------------------------------------
Only significant changes:
| status | name | calls | ins | ins Δ% | HI | HI Δ% | SMI | SMI Δ% |
|--------|---------------------------------------------|-------|---------|---------|----|--------|-----|---------|
| + | btreemap_v2_scan_keys_1k_0b | | 1.19M | +26.15% | 0 | 0.00% | 0 | 0.00% |
| + | btreemap_v2_scan_keys_rev_1k_0b | | 1.19M | +23.88% | 0 | 0.00% | 0 | 0.00% |
| + | btreemap_v2_remove_blob_1024_128 | | 7.38B | +13.87% | 0 | 0.00% | 0 | 0.00% |
| + | btreemap_v2_remove_blob_512_128 | | 4.09B | +13.32% | 0 | 0.00% | 0 | 0.00% |
| + | btreemap_v2_mem_manager_remove_blob512_u64 | | 4.35B | +12.87% | 0 | 0.00% | 0 | 0.00% |
| + | btreemap_v2_remove_blob_256_128 | | 2.44B | +10.74% | 0 | 0.00% | 0 | 0.00% |
| + | btreemap_v2_scan_keys_1k_10kib | | 2.60M | +10.32% | 0 | 0.00% | 0 | 0.00% |
| + | btreemap_v2_scan_keys_rev_1k_10kib | | 2.58M | +9.59% | 0 | 0.00% | 0 | 0.00% |
| + | btreemap_v2_remove_blob_128_128 | | 1.61B | +9.15% | 0 | 0.00% | 0 | 0.00% |
| + | btreemap_v2_range_count_1k_10kib | | 2.65M | +8.67% | 0 | 0.00% | 0 | 0.00% |
| + | btreemap_v2_insert_blob_1024_128 | | 5.50B | +7.70% | 0 | 0.00% | 196 | 0.00% |
| + | btreemap_v2_insert_blob_512_128 | | 3.05B | +6.63% | 0 | 0.00% | 111 | 0.00% |
| + | btreemap_v2_insert_blob_256_128 | | 1.80B | +6.50% | 0 | 0.00% | 67 | 0.00% |
| + | btreemap_v2_mem_manager_insert_blob512_u64 | | 3.15B | +6.23% | 0 | 0.00% | 0 | 0.00% |
| + | btreemap_v2_remove_vec_32_64 | | 981.77M | +5.58% | 0 | 0.00% | 0 | 0.00% |
| + | btreemap_v2_remove_vec_32_16 | | 885.75M | +5.38% | 0 | 0.00% | 0 | 0.00% |
| + | btreemap_v2_insert_blob_128_128 | | 1.19B | +4.62% | 0 | 0.00% | 46 | 0.00% |
| + | btreemap_v2_remove_blob_32_4 | | 712.64M | +3.93% | 0 | 0.00% | 0 | 0.00% |
| + | btreemap_v2_insert_blob_32_64 | | 543.10M | +3.87% | 0 | 0.00% | 18 | 0.00% |
| + | btreemap_v2_get_vec_16_128 | | 456.73M | +3.83% | 0 | 0.00% | 0 | 0.00% |
| + | btreemap_v2_remove_blob_32_64 | | 754.17M | +3.81% | 0 | 0.00% | 0 | 0.00% |
| + | btreemap_v2_remove_blob_32_8 | | 712.28M | +3.80% | 0 | 0.00% | 0 | 0.00% |
| + | btreemap_v2_insert_blob_32_32 | | 536.93M | +3.77% | 0 | 0.00% | 13 | 0.00% |
| + | btreemap_v2_remove_vec_32_32 | | 879.00M | +3.77% | 0 | 0.00% | 0 | 0.00% |
| + | btreemap_v2_insert_blob_32_128 | | 551.94M | +3.66% | 0 | 0.00% | 28 | 0.00% |
| ... | ... 134 rows omitted ... | | | | | | | |
| - | btreemap_v2_insert_vec_1024_128 | | 2.73B | -17.75% | 0 | 0.00% | 193 | 0.00% |
| - | btreemap_v2_get_vec_128_128 | | 583.90M | -17.80% | 0 | 0.00% | 0 | 0.00% |
| - | btreemap_v2_pop_last_vec_128_128 | | 1.51B | -17.85% | 0 | 0.00% | 0 | 0.00% |
| - | btreemap_v2_contains_vec_32_256 | | 441.72M | -18.09% | 0 | 0.00% | 0 | 0.00% |
| - | btreemap_v2_contains_vec_128_128 | | 574.28M | -19.15% | 0 | 0.00% | 0 | 0.00% |
| - | btreemap_v2_pop_last_vec_256_128 | | 2.06B | -20.30% | 0 | 0.00% | 0 | 0.00% |
| - | btreemap_v2_pop_first_vec_256_128 | | 2.00B | -21.02% | 0 | 0.00% | 0 | 0.00% |
| - | btreemap_v2_pop_first_blob_64_128 | | 1.05B | -21.19% | 0 | 0.00% | 0 | 0.00% |
| - | btreemap_v2_pop_last_blob_64_128 | | 1.02B | -22.30% | 0 | 0.00% | 0 | 0.00% |
| - | btreemap_v2_pop_last_vec_512_128 | | 2.79B | -25.20% | 0 | 0.00% | 0 | 0.00% |
| - | btreemap_v2_pop_first_vec_512_128 | | 2.69B | -25.40% | 0 | 0.00% | 0 | 0.00% |
| - | btreemap_v2_get_vec_256_128 | | 912.19M | -26.01% | 0 | 0.00% | 0 | 0.00% |
| - | btreemap_v2_contains_vec_256_128 | | 902.32M | -26.81% | 0 | 0.00% | 0 | 0.00% |
| - | btreemap_v2_get_blob_64_128 | | 436.96M | -27.38% | 0 | 0.00% | 0 | 0.00% |
| - | btreemap_v2_mem_manager_get_vec512_u64 | | 1.27B | -29.03% | 0 | 0.00% | 0 | 0.00% |
| - | btreemap_v2_pop_last_vec_1024_128 | | 4.24B | -29.62% | 0 | 0.00% | 0 | 0.00% |
| - | btreemap_v2_pop_first_vec_1024_128 | | 4.02B | -30.38% | 0 | 0.00% | 0 | 0.00% |
| - | btreemap_v2_get_vec_512_128 | | 1.26B | -30.83% | 0 | 0.00% | 0 | 0.00% |
| - | btreemap_v2_contains_blob_64_128 | | 414.36M | -31.14% | 0 | 0.00% | 0 | 0.00% |
| - | btreemap_v2_mem_manager_contains_vec512_u64 | | 1.23B | -31.31% | 0 | 0.00% | 0 | 0.00% |
| - | btreemap_v2_contains_vec_512_128 | | 1.25B | -31.38% | 0 | 0.00% | 0 | 0.00% |
| - | btreemap_v2_get_vec_1024_128 | | 1.84B | -36.97% | 0 | 0.00% | 0 | 0.00% |
| - | btreemap_v2_contains_vec_1024_128 | | 1.82B | -37.54% | 0 | 0.00% | 0 | 0.00% |
| - | btreemap_v2_get_10mib_values | | 388.59M | -68.34% | 0 | 0.00% | 0 | 0.00% |
| - | btreemap_v2_contains_10mib_values | | 142.21M | -88.41% | 0 | 0.00% | 0 | 0.00% |
ins = instructions, HI = heap_increase, SMI = stable_memory_increase, Δ% = percent change
---------------------------------------------------
compare
---------------------------------------------------
Summary:
instructions:
status: Improvements detected 🟢
counts: [total 18 | regressed 0 | improved 3 | new 0 | unchanged 15]
change: [max +11 | p75 0 | median -2 | p25 -245.41K | min -2.89B]
change %: [max 0.00% | p75 0.00% | median -0.00% | p25 -0.00% | min -25.60%]
heap_increase:
status: No significant changes 👍
counts: [total 18 | regressed 0 | improved 0 | new 0 | unchanged 18]
change: [max 0 | p75 0 | median 0 | p25 0 | min 0]
change %: [max 0.00% | p75 0.00% | median 0.00% | p25 0.00% | min 0.00%]
stable_memory_increase:
status: No significant changes 👍
counts: [total 18 | regressed 0 | improved 0 | new 0 | unchanged 18]
change: [max 0 | p75 0 | median 0 | p25 0 | min 0]
change %: [max 0.00% | p75 0.00% | median 0.00% | p25 0.00% | min 0.00%]
---------------------------------------------------
Only significant changes:
| status | name | calls | ins | ins Δ% | HI | HI Δ% | SMI | SMI Δ% |
|--------|-------------------------|-------|---------|---------|-------|--------|-------|---------|
| - | read_chunks_btreemap_1m | | 134.60B | -2.10% | 1.89K | 0.00% | 3.20K | 0.00% |
| - | read_chunks_btreemap_1k | | 5.42B | -7.21% | 1.60K | 0.00% | 1.67K | 0.00% |
| - | read_chunks_btreemap_1 | | 1.22B | -25.60% | 3.23K | 0.00% | 1.67K | 0.00% |
ins = instructions, HI = heap_increase, SMI = stable_memory_increase, Δ% = percent change
---------------------------------------------------
memory_manager
---------------------------------------------------
Summary:
instructions:
status: No significant changes 👍
counts: [total 3 | regressed 0 | improved 0 | new 0 | unchanged 3]
change: [max 0 | p75 0 | median 0 | p25 0 | min 0]
change %: [max 0.00% | p75 0.00% | median 0.00% | p25 0.00% | min 0.00%]
heap_increase:
status: No significant changes 👍
counts: [total 3 | regressed 0 | improved 0 | new 0 | unchanged 3]
change: [max 0 | p75 0 | median 0 | p25 0 | min 0]
change %: [max 0.00% | p75 0.00% | median 0.00% | p25 0.00% | min 0.00%]
stable_memory_increase:
status: No significant changes 👍
counts: [total 3 | regressed 0 | improved 0 | new 0 | unchanged 3]
change: [max 0 | p75 0 | median 0 | p25 0 | min 0]
change %: [max 0.00% | p75 0.00% | median 0.00% | p25 0.00% | min 0.00%]
---------------------------------------------------
vec
---------------------------------------------------
Summary:
instructions:
status: Improvements detected 🟢
counts: [total 16 | regressed 0 | improved 1 | new 0 | unchanged 15]
change: [max +102.33K | p75 +20.00K | median 0 | p25 0 | min -480.00K]
change %: [max +1.82% | p75 +0.31% | median 0.00% | p25 0.00% | min -9.11%]
heap_increase:
status: No significant changes 👍
counts: [total 16 | regressed 0 | improved 0 | new 0 | unchanged 16]
change: [max 0 | p75 0 | median 0 | p25 0 | min 0]
change %: [max 0.00% | p75 0.00% | median 0.00% | p25 0.00% | min 0.00%]
stable_memory_increase:
status: No significant changes 👍
counts: [total 16 | regressed 0 | improved 0 | new 0 | unchanged 16]
change: [max 0 | p75 0 | median 0 | p25 0 | min 0]
change %: [max 0.00% | p75 0.00% | median 0.00% | p25 0.00% | min 0.00%]
---------------------------------------------------
Only significant changes:
| status | name | calls | ins | ins Δ% | HI | HI Δ% | SMI | SMI Δ% |
|--------|-------------|-------|-------|---------|----|--------|-----|---------|
| - | vec_get_u64 | | 4.79M | -9.11% | 0 | 0.00% | 0 | 0.00% |
ins = instructions, HI = heap_increase, SMI = stable_memory_increase, Δ% = percent change
---------------------------------------------------