#!/usr/bin/env bash set -euo pipefail # A/B sweep for Mid (2–32KiB) fast-return params: trylock probes × ring return div. # Saves logs under docs/benchmarks/_AB_FAST_MID RUNTIME=${RUNTIME:-2} THREADS_CSV=${THREADS:-"1,4"} PROBES=${PROBES:-"2,3"} RETURNS=${RETURNS:-"2,3"} ROOT_DIR="$(cd "$(dirname "$0")/.." && pwd)" OUTDIR="$ROOT_DIR/docs/benchmarks/$(date +%Y%m%d_%H%M%S)_AB_FAST_MID" mkdir -p "$OUTDIR" LIB="$(readlink -f "$ROOT_DIR/libhakmem.so")" LARSON="$ROOT_DIR/mimalloc-bench/bench/larson/larson" echo "A/B fast-return (Mid 2–32KiB) RUNTIME=${RUNTIME}s THREADS=${THREADS_CSV}" | tee "$OUTDIR/summary.txt" echo "PROBES={${PROBES}} RETURNS={${RETURNS}}" | tee -a "$OUTDIR/summary.txt" IFS=',' read -r -a TARR <<< "$THREADS_CSV" IFS=',' read -r -a PARR <<< "$PROBES" IFS=',' read -r -a RARR <<< "$RETURNS" for pr in "${PARR[@]}"; do for rd in "${RARR[@]}"; do for t in "${TARR[@]}"; do label="pr${pr}_rd${rd}_T${t}" echo "== $label ==" | tee -a "$OUTDIR/summary.txt" timeout -k 2s $((RUNTIME+6))s \ env HAKMEM_HDR_LIGHT=1 HAKMEM_POOL_TLS_RING=1 HAKMEM_SHARD_MIX=1 \ HAKMEM_TRYLOCK_PROBES="$pr" HAKMEM_RING_RETURN_DIV="$rd" \ LD_PRELOAD="$LIB" "$LARSON" "$RUNTIME" 2048 32768 10000 1 12345 "$t" \ 2>&1 | tee "$OUTDIR/${label}.log" | tail -n 3 | tee -a "$OUTDIR/summary.txt" done done done echo "Saved: $OUTDIR" | tee -a "$OUTDIR/summary.txt"