Skip to content

v0.6.9

Choose a tag to compare

@maksymar maksymar released this 12 Jun 11:29
· 65 commits to main since this release
1198b43

Highlights

  • Performance: Improved BTreeMap performance (lazy key loading for big keys >16 bytes)
    • Better benchmarks, improved coverage
  • New: added BTreeSet data 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

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

---------------------------------------------------