#!/usr/bin/env bash set -euo pipefail # Larson defaults wrapper for HAKMEM Tiny. # Usage: # scripts/run_larson_defaults.sh [tput|pf] [DUR] [THREADS] # Examples: # scripts/run_larson_defaults.sh # 2s, threads=1,4, tput profile # scripts/run_larson_defaults.sh pf 10 4 # 10s, threads=4, low PF profile MODE=${1:-tput} # tput (throughput) or pf (lower page-fault/sys) DUR=${2:-2} THREADS_CSV=${3:-1,4} ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")"/.. && pwd)" cd "$ROOT_DIR" # Ensure binaries [[ -x ./larson_system ]] || make -s larson_system >/dev/null [[ -x ./larson_hakmem ]] || make -s larson_hakmem >/dev/null # Common env for HAKMEM Tiny + Larson export HAKMEM_LARSON_TINY_ONLY=${HAKMEM_LARSON_TINY_ONLY:-1} export HAKMEM_LARSON=${HAKMEM_LARSON:-1} export HAKMEM_WRAP_TINY=${HAKMEM_WRAP_TINY:-1} export HAKMEM_DISABLE_BATCH=${HAKMEM_DISABLE_BATCH:-1} export HAKMEM_TINY_META_ALLOC=${HAKMEM_TINY_META_ALLOC:-1} export HAKMEM_TINY_META_FREE=${HAKMEM_TINY_META_FREE:-1} export HAKMEM_TINY_USE_SUPERSLAB=${HAKMEM_TINY_USE_SUPERSLAB:-1} export HAKMEM_TINY_MUST_ADOPT=${HAKMEM_TINY_MUST_ADOPT:-1} export HAKMEM_TINY_SS_ADOPT=${HAKMEM_TINY_SS_ADOPT:-1} export HAKMEM_TINY_TRIM_SS=${HAKMEM_TINY_TRIM_SS:-1} # Publish→mail→adopt pipeline (fast-tier + mailbox) — defaults safe for bench # These are critical; keep here so we never forget them. export HAKMEM_TINY_FAST_CAP=${HAKMEM_TINY_FAST_CAP:-64} export HAKMEM_TINY_FAST_SPARE_PERIOD=${HAKMEM_TINY_FAST_SPARE_PERIOD:-8} export HAKMEM_TINY_TLS_LIST=${HAKMEM_TINY_TLS_LIST:-1} # Mailbox slow discovery to avoid missed registrations in short runs export HAKMEM_TINY_MAILBOX_SLOWDISC=${HAKMEM_TINY_MAILBOX_SLOWDISC:-1} export HAKMEM_TINY_MAILBOX_SLOWDISC_PERIOD=${HAKMEM_TINY_MAILBOX_SLOWDISC_PERIOD:-256} # Sukesuke (signal dump) defaults off; counters at exit only to avoid early noise export HAKMEM_TINY_SUKESUKE=${HAKMEM_TINY_SUKESUKE:-0} export HAKMEM_TINY_DUMP_ATEXIT_ONLY=${HAKMEM_TINY_DUMP_ATEXIT_ONLY:-1} export HAKMEM_TINY_COUNTERS_DUMP=${HAKMEM_TINY_COUNTERS_DUMP:-1} # Profile-specific knobs if [[ "$MODE" == "tput" ]]; then # Throughput-leaning defaults export HAKMEM_TINY_SS_FORCE_LG=${HAKMEM_TINY_SS_FORCE_LG:-21} # 2MB export HAKMEM_TINY_PUBLISH_THROTTLE=${HAKMEM_TINY_PUBLISH_THROTTLE:-8} export HAKMEM_TINY_DRAIN_THRESHOLD=${HAKMEM_TINY_DRAIN_THRESHOLD:-4} # Prefer mmap over adopt for raw tput until publish pipeline is proven export HAKMEM_TINY_MUST_ADOPT=${HAKMEM_TINY_MUST_ADOPT:-0} # SS cache/precharge ON also for tput(syscall抑制で張り付き解消を狙う) export HAKMEM_TINY_SS_CACHE=${HAKMEM_TINY_SS_CACHE:-8} export HAKMEM_TINY_SS_PRECHARGE=${HAKMEM_TINY_SS_PRECHARGE:-1} export HAKMEM_TINY_TRIM_SS=${HAKMEM_TINY_TRIM_SS:-0} else # Lower page-fault/sys defaults export HAKMEM_TINY_SS_FORCE_LG=${HAKMEM_TINY_SS_FORCE_LG:-20} # 1MB export HAKMEM_TINY_PUBLISH_THROTTLE=${HAKMEM_TINY_PUBLISH_THROTTLE:-8} export HAKMEM_TINY_DRAIN_THRESHOLD=${HAKMEM_TINY_DRAIN_THRESHOLD:-4} # Enable adopt on PF/sys profile to reduce mmap/sys export HAKMEM_TINY_MUST_ADOPT=${HAKMEM_TINY_MUST_ADOPT:-1} export HAKMEM_TINY_SS_CACHE=${HAKMEM_TINY_SS_CACHE:-4} export HAKMEM_TINY_SS_PRECHARGE=${HAKMEM_TINY_SS_PRECHARGE:-1} fi echo "[Larson Defaults] mode=$MODE dur=$DUR threads=$THREADS_CSV" echo "[Larson Defaults] HAKMEM_LARSON_TINY_ONLY=$HAKMEM_LARSON_TINY_ONLY HAKMEM_WRAP_TINY=$HAKMEM_WRAP_TINY" echo "[Larson Defaults] SS_FORCE_LG=$HAKMEM_TINY_SS_FORCE_LG THROTTLE=$HAKMEM_TINY_PUBLISH_THROTTLE DRAIN=$HAKMEM_TINY_DRAIN_THRESHOLD CACHE=$HAKMEM_TINY_SS_CACHE PRECHARGE=$HAKMEM_TINY_SS_PRECHARGE" echo "[Larson Defaults] FAST_CAP=$HAKMEM_TINY_FAST_CAP FAST_SPARE_PERIOD=$HAKMEM_TINY_FAST_SPARE_PERIOD TLS_LIST=$HAKMEM_TINY_TLS_LIST" echo "[Larson Defaults] MAILBOX_SLOWDISC=$HAKMEM_TINY_MAILBOX_SLOWDISC PERIOD=$HAKMEM_TINY_MAILBOX_SLOWDISC_PERIOD" # Delegate to perf runner (system/mimalloc/hakmem) DUR=$DUR THREADS=$THREADS_CSV scripts/run_larson_perf.sh