Skip to content

feat(rocksdb): tune LargeSmt profile and config#1947

Open
huitseeker wants to merge 3 commits intonextfrom
huitseeker/rocksdb-updates
Open

feat(rocksdb): tune LargeSmt profile and config#1947
huitseeker wants to merge 3 commits intonextfrom
huitseeker/rocksdb-updates

Conversation

@huitseeker
Copy link
Copy Markdown
Contributor

The new default uses cached index and filter blocks, 16 KiB block tables, tuned Bloom filters, and bottommost ZSTD compression for SMT data. Metadata stays uncompressed. The RocksDB config also keeps support for tuning overrides, memory-budget controls, and durability mode selection.

The main issue this helps is #1776. It should also help the write-heavy performance work in #1537. In earlier quick Criterion runs, the tuned block-table profile improved vanilla insertion/100 by 14.13%, with_history insertion/10 by 9.44%, and with_history insertion/500 by 12.62%. Bottommost ZSTD improved vanilla insertion/1 by 12.39%. Read-path changes in those runs were mostly within noise, so this is best treated as a better default write profile.

This PR does not try to fix the RocksDB correctness issues in #1728, #1729, or #1730. It changes defaults and config control, not error handling or storage semantics.

@huitseeker huitseeker force-pushed the huitseeker/rocksdb-updates branch from b552c83 to c6ae78e Compare April 15, 2026 17:47
@huitseeker huitseeker marked this pull request as ready for review April 15, 2026 17:47
Tune the default LargeSmt RocksDB profile, expose tuning and memory-budget controls, restore durability mode selection, and keep config-builder coverage aligned with the backend changes.

The default profile now uses cached index/filter blocks, 16 KiB block-based tables, per-column-family Bloom filter settings, and bottommost ZSTD compression for SMT data while keeping metadata uncompressed. The store startup path continues to use the existing cache-size and max-open-files knobs, and now also carries durability selection without widening the operational surface further than needed.

Benchmark signal from prior account_tree Criterion quick runs supports carrying these defaults: the block-table profile change improved vanilla insertion/100 from 101.348 ms to 87.024 ms (-14.13%), with_history insertion/10 from 89.361 ms to 80.927 ms (-9.44%), and with_history insertion/500 from 109.341 ms to 95.542 ms (-12.62%). The bottommost ZSTD change improved vanilla insertion/1 from 84.445 ms to 73.982 ms (-12.39%, significant). Access-path deltas in those quick runs were mostly within Criterion's noise band, so this change is justified as a write-heavy default-profile improvement rather than a general across-the-board speedup.
@huitseeker huitseeker force-pushed the huitseeker/rocksdb-updates branch from bb578e9 to e89b6a6 Compare April 16, 2026 06:21
Copy link
Copy Markdown
Collaborator

@Mirko-von-Leipzig Mirko-von-Leipzig left a comment

Choose a reason for hiding this comment

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

I'm not entirely sure how to review something like this. Beyond saying that the code still compiles so there's that 😅

Comment thread crates/large-smt-backend-rocksdb/Cargo.toml
Copy link
Copy Markdown
Contributor

@kkovaacs kkovaacs left a comment

Choose a reason for hiding this comment

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

Looks good to me.

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