- benches/rq_micro.rs: raw-structure microbench, threads x producer:consumer ratio sweep. Benches all three queue types in one binary (they compile in every build; only the runtime alias is feature-selected), so no rebuild dance. Queues sized to the op count so the occupancy contract is met. - benches/rq_runtime.rs: whole-runtime benches with the selected variant: yield-storm (pure queue churn), ping-pong-pairs (park/unpark latency), spawn-storm (slab + free list + queue under churn). Scheduler-count sweep. - scripts/bench_rq.sh: rebuilds rq_runtime per rq-* feature, runs rq_micro once, aggregates RQCSV lines into bench_results/summary.csv. - All knobs via SMARM_BENCH_* env vars; house table format + machine lines. - run_queue module is now #[doc(hidden)] pub (types + push/pop/len + MpmcRing::with_capacity) solely so the external bench binary can drive the raw structures. docs(roadmap): phase 4 ticked (harness done; numbers from the 20-core box). New fast-follow per review: assert the invariants we lean on — debug_assert! on hot paths, loud assert!/panic on cold ones, at the point of reliance; sweep existing code during the phase-5 audit, adopt as house style. Validated end-to-end at smoke scale on the 1-core sandbox: full driver run, 24-row summary.csv across micro (3 structures x sweeps) and runtime (3 variants x 3 benches x thread sweep).
32 lines
1.1 KiB
Bash
Executable File
32 lines
1.1 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# Run-queue shootout driver (ROADMAP_v0.5 phase 4).
|
|
#
|
|
# Rebuilds the runtime bench once per rq-* feature and runs the raw-structure
|
|
# microbench once (it covers all structures in a single binary). Results land
|
|
# in bench_results/ as full logs; the RQCSV lines are aggregated into
|
|
# bench_results/summary.csv for plotting.
|
|
#
|
|
# Tune the sweep for the box, e.g. on the 20-core machine:
|
|
# SMARM_BENCH_THREADS="1 2 4 8 16 20" ./scripts/bench_rq.sh
|
|
set -euo pipefail
|
|
cd "$(dirname "$0")/.."
|
|
|
|
OUT=bench_results
|
|
mkdir -p "$OUT"
|
|
: "${SMARM_BENCH_THREADS:=1 2 4}"
|
|
export SMARM_BENCH_THREADS
|
|
|
|
echo "== raw structures (one binary, all variants) =="
|
|
cargo bench --bench rq_micro 2>&1 | tee "$OUT/micro.txt"
|
|
|
|
for v in rq-mutex rq-mpmc rq-striped; do
|
|
echo "== runtime benches: $v =="
|
|
cargo bench --bench rq_runtime --no-default-features --features "$v" \
|
|
2>&1 | tee "$OUT/runtime-$v.txt"
|
|
done
|
|
|
|
echo "bench,kind,a,b,c,d,median_us,ops_per_s" > "$OUT/summary.csv"
|
|
grep -h '^RQCSV,' "$OUT"/*.txt | sed 's/^RQCSV,//' >> "$OUT/summary.csv"
|
|
echo
|
|
echo "Summary: $OUT/summary.csv ($(($(wc -l < "$OUT/summary.csv") - 1)) rows)"
|