Files
hakmem/archive/experimental_scripts/prof_sweep.sh

75 lines
1.8 KiB
Bash
Raw Normal View History

#!/usr/bin/env bash
set -euo pipefail
# Sampling profiler sweep across size ranges and threads.
# Default: short 2s runs; adjust with -d.
RUNTIME=2
THREADS="1,4"
CHUNK_PER_THREAD=10000
ROUNDS=1
SAMPLE_N=8 # 1/256
MIN=""
MAX=""
usage() {
cat << USAGE
Usage: scripts/prof_sweep.sh [options]
-d SEC runtime seconds (default: 2)
-t CSV threads CSV (default: 1,4)
-s N HAKMEM_PROF_SAMPLE exponent (default: 8 → 1/256)
-m BYTES min size override (optional)
-M BYTES max size override (optional)
Runs with HAKMEM_PROF=1 and prints profiler summary for each case.
USAGE
}
while getopts ":d:t:s:m:M:h" opt; do
case $opt in
d) RUNTIME="$OPTARG" ;;
t) THREADS="$OPTARG" ;;
s) SAMPLE_N="$OPTARG" ;;
m) MIN="$OPTARG" ;;
M) MAX="$OPTARG" ;;
h) usage; exit 0 ;;
:) echo "Missing arg -$OPTARG"; usage; exit 2 ;;
*) usage; exit 2 ;;
esac
done
ROOT_DIR="$(cd "$(dirname "$0")/.." && pwd)"
LARSON="$ROOT_DIR/mimalloc-bench/bench/larson/larson"
LIB="$(readlink -f "$ROOT_DIR/libhakmem.so")"
if [[ ! -x "$LARSON" ]]; then
echo "larson not found: $LARSON" >&2; exit 1
fi
runs=(
"tiny:8:1024"
"mid:2048:32768"
"gap:33000:65536"
"large:65536:1048576"
"big:2097152:4194304"
)
IFS=',' read -r -a TARR <<< "$THREADS"
echo "[CFG] runtime=$RUNTIME sample=1/$((1<<SAMPLE_N)) threads={$THREADS}"
for r in "${runs[@]}"; do
IFS=':' read -r name rmin rmax <<< "$r"
if [[ -n "$MIN" ]]; then rmin="$MIN"; fi
if [[ -n "$MAX" ]]; then rmax="$MAX"; fi
for t in "${TARR[@]}"; do
echo "\n== $name | ${t}T | ${rmin}-${rmax} | ${RUNTIME}s =="
HAKMEM_PROF=1 HAKMEM_PROF_SAMPLE="$SAMPLE_N" \
LD_PRELOAD="$LIB" "$LARSON" "$RUNTIME" "$rmin" "$rmax" "$CHUNK_PER_THREAD" "$ROUNDS" 12345 "$t" 2>&1 \
| tail -n 80
done
done
echo "\nSweep done."