# Phase 48: Rebase(mimalloc/system/jemalloc)+ Stability Suite 目的: Phase 39 以降で **FAST baseline が大きく動いた**ため、`docs/analysis/PERFORMANCE_TARGETS_SCORECARD.md` の参照値(mimalloc/system/jemalloc/libc)を **同一条件で再計測**して更新する。あわせて「速さ以外の勝ち筋」(syscall/RSS/長時間安定性)の **測定ルーチン**を固定する。 方針(Box Theory): - **測定は clean env** を正とする: `scripts/run_mixed_10_cleanenv.sh` - **比較は FAST build を正**(Standard/OBSERVE は別目的) - **link-out / 物理削除はしない**(layout tax で符号反転するため)。compile-out で運用する。 --- ## Step 0: 準備(ビルド) ```bash make bench_random_mixed_hakmem_minimal make bench_random_mixed_system make bench_random_mixed_mi ``` (任意)jemalloc がある場合のみ: ```bash ls -la /lib/x86_64-linux-gnu/libjemalloc.so.2 ``` --- ## Step 1: Mixed 10-run rebase(同一スクリプトで回す) ### 1-A) hakmem FAST(正) ```bash BENCH_BIN=./bench_random_mixed_hakmem_minimal scripts/run_mixed_10_cleanenv.sh ``` ### 1-B) system malloc(別バイナリ reference) ```bash BENCH_BIN=./bench_random_mixed_system scripts/run_mixed_10_cleanenv.sh ``` ### 1-C) mimalloc(別バイナリ reference) ```bash BENCH_BIN=./bench_random_mixed_mi scripts/run_mixed_10_cleanenv.sh ``` ### 1-D) jemalloc(LD_PRELOAD reference、任意) ```bash LD_PRELOAD=/lib/x86_64-linux-gnu/libjemalloc.so.2 \ BENCH_BIN=./bench_random_mixed_system scripts/run_mixed_10_cleanenv.sh ``` 更新先(SSOT): - `docs/analysis/PERFORMANCE_TARGETS_SCORECARD.md` の `Current snapshot` と `Reference allocators` --- ## Step 2: Syscall budget(steady-state OS churn) 目的: warmup 後に `mmap/munmap/madvise` が暴れていないことを確認する(mimallocに対する勝ち筋の1つ)。 内部カウンタ(推奨、短時間): ```bash HAKMEM_SS_OS_STATS=1 BENCH_BIN=./bench_random_mixed_hakmem_minimal \ ITERS=200000000 WS=400 RUNS=1 scripts/run_mixed_10_cleanenv.sh ``` チェック: - `[SS_OS_STATS] ... mmap_total=... madvise=... madvise_disabled=...` - 目標: warmup 後に **増え続けない** / “極端に多くない” --- ## Step 3: RSS/長時間安定性(soak) 目的: 「速さ以外の勝ち筋」を数値化する(RSS drift / ops/s drift / CV)。 推奨(30–60分、FAST build): - RSS drift: **+5% 以内**(目安) - ops/s drift: **-5% 以上落ちない** - CV: **~1–2%** を維持 実施方法: - まずは `docs/analysis/PERFORMANCE_TARGETS_SCORECARD.md` の `Memory stability / Long-run stability` を SSOT とし、測定テンプレを追記する(スクリプト化は別PhaseでOK)。 --- ## 判定 - Phase 48 は「最適化」ではなく「**基準の固定**」が目的。 - GO/NO-GO は無し(測定結果をスコアカードへ反映して完了)。