Skip to content

feat(bench): reproducible run script + competitor matrix (A3, #8)#258

Merged
ELares merged 1 commit into
mainfrom
feat/bench-run-script
Jun 16, 2026
Merged

feat(bench): reproducible run script + competitor matrix (A3, #8)#258
ELares merged 1 commit into
mainfrom
feat/bench-run-script

Conversation

@ELares

@ELares ELares commented Jun 16, 2026

Copy link
Copy Markdown
Owner

A3: the one scripted invocation that reproduces a published run end to end, plus the dated competitor matrix it's measured against.

  • scripts/bench/run.sh: release build -> disjoint server/client core pinning over loopback (taskset; graceful unpinned fallback) -> server boot with readiness probe + always-kill trap -> write-only warmup (hot keyset, ~90% hit) -> 3 passes (memmodel memory.json, loadgen closed.json peak QPS, loadgen open.json + open.hgrm tail) -> manifest.json. Every knob an env var; --smoke runs in seconds. shellcheck-clean.
  • docs/bench/COMPETITORS.md: dated, pinned Valkey 9.1.0 / Redis 8.8.0 / Dragonfly v1.39.0 with the per-entry memory facts A1 compares against; bumps require a PR; A4 installs the pinned Valkey.
  • scripts/bench/README.md, .gitignore (bench-results/).

Adversarial review caught + fixed: (1) shards now match the pinned server-core count (was NCPU on a half-box pin -> oversubscription distorting QPS-per-core); (2) pre-launch port-free check (SO_REUSEPORT would let a stale server co-reside and mix numbers); (3) corrected the Dragonfly BSL change date to 2030-07-01.

Smoke-verified end to end (clean shutdown, no orphan, correct manifest). shellcheck clean; invariant lints unaffected (no Rust changed).

🤖 Generated with Claude Code

#8)

The one scripted invocation that reproduces a published run end to end
(BENCHMARK.md #8), plus the living competitor matrix it is measured against.

- scripts/bench/run.sh: builds the release binaries, pins the server and client
  to DISJOINT cores over loopback where taskset exists (configurable
  SERVER_CORES/CLIENT_CORES; warns and runs unpinned without taskset), boots the
  server with a readiness probe + a trap that always kills it (no orphan), warms
  the hot keyset write-only so the read-heavy pass hits (~90%), then runs three
  measured passes into a versioned out dir: memmodel -> memory.json, loadgen
  closed -> closed.json (peak QPS), loadgen open -> open.json + open.hgrm
  (coordinated-omission-free tail). Every knob is an overridable env var; a
  --smoke mode runs in seconds; a manifest.json records knobs + host facts +
  version + UTC stamp + matrix pointer. shellcheck-clean, bash-3.2-safe.
- docs/bench/COMPETITORS.md: the committed, DATED (2026-06-16) competitor matrix.
  Pinned Valkey 9.1.0 / Redis 8.8.0 / Dragonfly v1.39.0 with the per-entry memory
  facts the A1 model is compared against (Redis kvobj in 8.2; Valkey embedded
  key/value in 8.0 + the 8.1 hashtable redesign; Dragonfly dashtable overhead)
  and jemalloc defaults. Bumps require an explicit PR; A4's head-to-head (#96)
  installs the pinned Valkey version.
- scripts/bench/README.md: usage + pinning methodology + matrix/A4 relationship.
- .gitignore: bench-results/ (run artifacts are never committed).

Adversarial review fixes: (1) the server shard count now matches the cores it is
pinned to (count_cores of the server pinned set, not the host total), so the
thread-per-core engine is not oversubscribed and QPS-per-core stays honest; (2)
a pre-launch connect check fails fast if the port is already serving (SO_REUSEPORT
would otherwise let a stale server silently co-reside and mix numbers); (3)
corrected the Dragonfly BSL change date to 2030-07-01 (per its LICENSE.md).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Signed-off-by: Zeke <ezequiel.lares@outlook.com>
@ELares ELares merged commit a6fd159 into main Jun 16, 2026
1 check passed
@ELares ELares deleted the feat/bench-run-script branch June 16, 2026 06:02
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