Skip to content

bench: YCSB + AI-metadata harnesses over a workload-test engine adapter layer - #79

Merged
wchwawa merged 1 commit into
mainfrom
bench/workload-test-harness
Oct 25, 2026
Merged

wchwawa merged 1 commit into
mainfrom
bench/workload-test-harness

Conversation

@wchwawa

@wchwawa wchwawa commented Oct 23, 2026

Copy link
Copy Markdown
Member

What

Three new non-published bench files under benches/, buildable via the accompanying Cargo.toml/Cargo.lock changes (new optional deps: redb, postgres behind a pg feature; two new [[bench]] targets):

  • workload_test_engines.rs — a workload-test-only engine adapter layer: one trait (get / put / delete / ordered + prefix scans / S3-style delimiter listing / atomic batch / CAS / longest-prefix) with seven implementations: holt, RocksDB, SQLite, sled, LMDB (heed), redb, PostgreSQL (unix socket; batches as single-round-trip UNNEST upserts). All engines pinned to one async-durable profile (WAL on, no per-op fsync) and one private-cache budget (HOLT_BENCH_CACHE_MB). Comparators get honest app-layer emulations (fast-forward delimiter seeks, walk/bisect longest-prefix), holt its native APIs — so every table reads as native semantics vs honest emulation. The module doc scopes it explicitly as a measurement surface, not an application interface (single-threaded, panics on error, counts-and-discards scans).
  • ycsb.rs — spec-faithful YCSB core workloads A–F (hashed user<fnv64> keys, 1 KiB records, scrambled-zipfian θ=0.99 / latest distributions, official run order: load, A→B→C→F→D, reload, E).
  • ai_meta.rs — AI metadata workload suite modeling the metadata plane of the MLPerf Storage v3.0 workload set: kvcache (chained prefix-cache block index; native LPM vs walk vs bisect), manifest (dataset shard manifest), ckpt (checkpoint catalog with atomic rotate), registry (HF-style artifact registry with CAS), s3page (ListObjects 1000-prefix pages, minio#17472 shape — the reproduction whose 256 MiB vs 2 GiB numbers back Value-fetching prefix scans and longest_prefix_record fall off a cliff beyond the buffer pool (full 512 KiB frame reads on the walker path) #78).

Why

Gives the repo a standard (YCSB) and an AI-shaped comparison surface over seven engines with one keygen per workload, so issue-shaped reproductions cost ~80 lines (s3page was built and run the same day). The s3page scenario's cache-pressure inversion is already documented in #78.

Not in this PR

Measured results and methodology write-ups (RESULTS_AI.md, README section) stay local for now; harnesses are self-describing via module docs and env knobs.

Testing

cargo check --benches --features pg clean; all five scenarios and all six YCSB workloads exercised across all seven engines on macOS (Apple M3 Pro) during the benchmark runs referenced in #78.

… adapter layer

workload_test_engines.rs is a measurement-only adapter trait (get/put/
delete/scans/delimiter list/atomic batch/CAS/longest-prefix) with seven
implementations — holt, RocksDB, SQLite, sled, LMDB (heed), redb and
PostgreSQL (unix socket, UNNEST bulk batches) — pinned to one async-
durable profile and one cache budget. Its doc comment scopes it
explicitly as a workload-test interface, not an application API.

ycsb.rs is a spec-faithful YCSB core port (hashed user keys, 1 KiB
records, scrambled-zipfian/latest, official A,B,C,F,D then reload-E
order). ai_meta.rs models the metadata plane of AI storage workloads:
kvcache chain index, dataset manifest, checkpoint catalog, HF-style
registry, and the s3page ListObjects-page reproduction (minio#17472
shape) whose cache-pressure numbers back #78.

Results and methodology docs stay out of this change; the harnesses
are self-describing via module docs and env knobs.

Signed-off-by: wchwawa <wch19961116@gmail.com>
@wchwawa
wchwawa merged commit e6a28f3 into main Oct 25, 2026
11 checks passed
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.

1 participant