#!/usr/bin/env bash set -euo pipefail # Single-run OBSERVE helper for "is the path actually executed?" checks. # # This script is intentionally NOT a throughput SSOT runner. # It is a pre-flight: verify route/banner + per-class counters + stats are non-zero. # # Usage: # ./scripts/run_mixed_observe_ssot.sh # WS=400 ITERS=20000000 ./scripts/run_mixed_observe_ssot.sh # # Requires: `make bench_random_mixed_hakmem_observe` profile=${HAKMEM_PROFILE:-MIXED_TINYV3_C7_SAFE} iters=${ITERS:-20000000} ws=${WS:-400} bin=${BENCH_BIN:-./bench_random_mixed_hakmem_observe} # SSOT header: bin sha / profile / iters / ws echo "[SSOT-HEADER] bin=$(sha256sum "${bin}" | cut -c1-8) profile=${profile} iters=${iters} ws=${ws} mode=OBSERVE" # Force the same size range as SSOT to avoid class distribution drift. export HAKMEM_BENCH_MIN_SIZE=${SSOT_MIN_SIZE:-16} export HAKMEM_BENCH_MAX_SIZE=${SSOT_MAX_SIZE:-1040} export HAKMEM_BENCH_C5_ONLY=0 export HAKMEM_BENCH_C6_ONLY=0 export HAKMEM_BENCH_C7_ONLY=0 # One-shot route configuration banner (Phase 70-1). export HAKMEM_ROUTE_BANNER=1 # Keep cleanenv defaults aligned with the main runner for knobs that affect control flow. export HAKMEM_WARM_POOL_SIZE=${HAKMEM_WARM_POOL_SIZE:-16} export HAKMEM_TINY_C4_INLINE_SLOTS=${HAKMEM_TINY_C4_INLINE_SLOTS:-1} export HAKMEM_TINY_C5_INLINE_SLOTS=${HAKMEM_TINY_C5_INLINE_SLOTS:-1} export HAKMEM_TINY_C6_INLINE_SLOTS=${HAKMEM_TINY_C6_INLINE_SLOTS:-1} export HAKMEM_TINY_INLINE_SLOTS_FIXED=${HAKMEM_TINY_INLINE_SLOTS_FIXED:-1} export HAKMEM_TINY_INLINE_SLOTS_SWITCHDISPATCH=${HAKMEM_TINY_INLINE_SLOTS_SWITCHDISPATCH:-1} export HAKMEM_TINY_INLINE_SLOTS_SWITCHDISPATCH_FIXED=${HAKMEM_TINY_INLINE_SLOTS_SWITCHDISPATCH_FIXED:-0} if [[ "${HAKMEM_BENCH_HEADER_LOG:-1}" == "1" ]]; then sha="$(git rev-parse --short HEAD 2>/dev/null || echo unknown)" echo "[OBSERVE] sha=${sha} bin=${bin} profile=${profile} iters=${iters} ws=${ws} size=${HAKMEM_BENCH_MIN_SIZE}..${HAKMEM_BENCH_MAX_SIZE}" >&2 fi HAKMEM_PROFILE="${profile}" "${bin}" "${iters}" "${ws}" 1