Skip to content

Add BENCH_RESTARTABLE flag; skip stop/start for no-daemon systems#899

Merged
alexey-milovidov merged 1 commit into
mainfrom
bench-restartable-flag
May 12, 2026
Merged

Add BENCH_RESTARTABLE flag; skip stop/start for no-daemon systems#899
alexey-milovidov merged 1 commit into
mainfrom
bench-restartable-flag

Conversation

@alexey-milovidov
Copy link
Copy Markdown
Member

Summary

  • Reintroduce BENCH_RESTARTABLE (default yes) in lib/benchmark-common.sh as a flag independent of BENCH_DURABLE.
  • When BENCH_RESTARTABLE=no, the cold cycle in bench_run_query and the pre-window restart in bench_concurrent_qps skip ./stopbench_wait_stopped./startbench_check_loop and just bench_flush_caches.
  • Set BENCH_RESTARTABLE=no on 34 shims whose start/stop are no-ops: clickhouse-local variants (clickhouse-parquet{,-partitioned}, clickhouse-datalake{,-partitioned}, chyt), duckdb variants, datafusion variants, glaredb variants, spark variants, sail/sail-partitioned, hyper{,-parquet}, chdb{,-parquet-partitioned}, sqlite, turso, octosql, opteryx, drill.

Why

Embedded-CLI systems have no-op start/stop but ./check keeps succeeding (the CLI is launchable on demand). The unified driver still ran the cold cycle on every query, and bench_wait_stopped would burn its full 60s timeout each time because ./check never starts failing. Across a 43-query sweep that's ~25-30 minutes of pure idle wait per benchmark run.

Test plan

  • Run ./benchmark.sh against one shim system that uses BENCH_RESTARTABLE=no (e.g. duckdb/) and confirm cold queries no longer block 60s on bench_wait_stopped.
  • Run ./benchmark.sh against one shim system that keeps the default BENCH_RESTARTABLE=yes (e.g. clickhouse/) and confirm the cold cycle still runs.
  • Eyeball log output for [t1,t2,t3] / Load time / Data size lines — format unchanged.

🤖 Generated with Claude Code

Embedded-CLI systems (clickhouse-local variants, duckdb, datafusion,
sqlite, hyper, chdb, spark variants, etc.) have no-op start/stop and
their ./check always succeeds. The unified driver still ran the cold
cycle stop -> wait_stopped -> drop_caches -> start -> check on every
query, and bench_wait_stopped would burn its full 60s timeout each
time because ./check never starts failing. Across the query sweep
that's ~25-30 minutes of pure idle wait per benchmark run.

Reintroduce BENCH_RESTARTABLE (default yes) as a flag independent of
BENCH_DURABLE. When no, bench_run_query and bench_concurrent_qps skip
the stop/wait/start/check dance and only drop_caches between queries.
Set BENCH_RESTARTABLE=no on the 34 shims whose start/stop are pure
no-ops.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@alexey-milovidov alexey-milovidov self-assigned this May 12, 2026
@alexey-milovidov alexey-milovidov merged commit 6cf67aa into main May 12, 2026
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