Skip to content

perf: add batch write of BTreeMap node children addresses#365

Merged
maksymar merged 6 commits intomainfrom
maksym/save_v2_batch
Jul 8, 2025
Merged

perf: add batch write of BTreeMap node children addresses#365
maksymar merged 6 commits intomainfrom
maksym/save_v2_batch

Conversation

@maksymar
Copy link
Copy Markdown
Contributor

@maksymar maksymar commented Jul 7, 2025

This PR introduces batch writing of BTreeMap node children addresses to improve performance.

This PR follows the idea from #364 to batch individual writes.
Although there are no significant changes overall, the majority of cases show slight improvements (p25–p75: approx -0.07%), with: worst +0.27%, median 0.00%, best -1.28%.

btreemap

  instructions:
    status:   No significant changes 👍
    counts:   [total 285 | regressed 0 | improved 0 | new 0 | unchanged 285]
    change:   [max +1.43M | p75 0 | median 0 | p25 -637.40K | min -10.48M]
    change %: [max +0.27% | p75 0.00% | median 0.00% | p25 -0.07% | min -1.28%]

@github-actions
Copy link
Copy Markdown

github-actions Bot commented Jul 7, 2025

canbench 🏋 (dir: ./benchmarks/memory_manager) 2545e63 2025-07-08 10:14:47 UTC

./benchmarks/memory_manager/canbench_results.yml is up to date
📦 canbench_results_memory-manager.csv available in artifacts

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

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%]

---------------------------------------------------
CSV results saved to canbench_results.csv

@github-actions
Copy link
Copy Markdown

github-actions Bot commented Jul 7, 2025

canbench 🏋 (dir: ./benchmarks/compare) 2545e63 2025-07-08 10:15:38 UTC

./benchmarks/compare/canbench_results.yml is up to date
📦 canbench_results_compare.csv available in artifacts

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

Summary:
  instructions:
    status:   No significant changes 👍
    counts:   [total 18 | regressed 0 | improved 0 | new 0 | unchanged 18]
    change:   [max +3.85M | 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 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%]

---------------------------------------------------
CSV results saved to canbench_results.csv

@github-actions
Copy link
Copy Markdown

github-actions Bot commented Jul 7, 2025

canbench 🏋 (dir: ./benchmarks/vec) 2545e63 2025-07-08 10:14:49 UTC

./benchmarks/vec/canbench_results.yml is up to date
📦 canbench_results_vec.csv available in artifacts

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

Summary:
  instructions:
    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%]

  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%]

---------------------------------------------------
CSV results saved to canbench_results.csv

@github-actions
Copy link
Copy Markdown

github-actions Bot commented Jul 7, 2025

canbench 🏋 (dir: ./benchmarks/btreemap) 2545e63 2025-07-08 10:16:37 UTC

./benchmarks/btreemap/canbench_results.yml is up to date
📦 canbench_results_btreemap.csv available in artifacts

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

Summary:
  instructions:
    status:   No significant changes 👍
    counts:   [total 285 | regressed 0 | improved 0 | new 0 | unchanged 285]
    change:   [max +1.43M | p75 0 | median 0 | p25 -637.40K | min -10.48M]
    change %: [max +0.27% | p75 0.00% | median 0.00% | p25 -0.07% | min -1.28%]

  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%]

---------------------------------------------------
CSV results saved to canbench_results.csv

@github-actions
Copy link
Copy Markdown

github-actions Bot commented Jul 7, 2025

canbench 🏋 (dir: ./benchmarks/btreeset) 2545e63 2025-07-08 10:14:59 UTC

./benchmarks/btreeset/canbench_results.yml is up to date
📦 canbench_results_btreeset.csv available in artifacts

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

Summary:
  instructions:
    status:   No significant changes 👍
    counts:   [total 100 | regressed 0 | improved 0 | new 0 | unchanged 100]
    change:   [max +15 | p75 0 | median 0 | p25 0 | min -2.23M]
    change %: [max 0.00% | p75 0.00% | median 0.00% | p25 0.00% | min -0.09%]

  heap_increase:
    status:   No significant changes 👍
    counts:   [total 100 | regressed 0 | improved 0 | new 0 | unchanged 100]
    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 100 | regressed 0 | improved 0 | new 0 | unchanged 100]
    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%]

---------------------------------------------------
CSV results saved to canbench_results.csv

@maksymar maksymar requested a review from Copilot July 8, 2025 10:27
@maksymar maksymar marked this pull request as ready for review July 8, 2025 10:27
@maksymar maksymar requested a review from a team as a code owner July 8, 2025 10:27
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull Request Overview

This PR adds a batched write for BTreeMap node children addresses to reduce per-child writes and updates benchmark results to reflect instruction count changes.

  • Replace per-child write_u64 calls with a single writer.write of a concatenated byte buffer
  • Update benchmark YAMLs with new instruction counts after performance change

Reviewed Changes

Copilot reviewed 4 out of 4 changed files in this pull request and generated 1 comment.

File Description
src/btreemap/node/v2.rs Implement batch writing of children addresses
benchmarks/compare/*.yml Updated instruction counts for write_chunks bench
benchmarks/btreemap/*.yml Updated instruction counts for btreemap benches
benchmarks/btreeset/*.yml Updated instruction counts for btreeset benches
Comments suppressed due to low confidence (1)

src/btreemap/node/v2.rs:262

  • [nitpick] Allocating a new Vec<u8> on each call may add overhead; consider reusing a shared buffer or a stack-allocated array if child count is bounded.
        let mut bytes = Vec::with_capacity(byte_len);

Comment thread src/btreemap/node/v2.rs
@maksymar maksymar merged commit bbd0d0d into main Jul 8, 2025
17 checks passed
@maksymar maksymar deleted the maksym/save_v2_batch branch July 8, 2025 13:28
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants