# Phase 50: Operational Edge(syscall / RSS / long-run / tail) 目的: mimalloc と「速度だけ」で殴り合わず、**運用の勝ち筋**(OS churn / RSS drift / long-run stability / tail latency)を SSOT 化する。 Phase 48 で rebase 済みなので、Phase 50 は **“測り方を固定”**して今後の最適化判断の土台にする。 前提(運用): - 速度比較の正: FAST build(`make perf_fast` / `bench_random_mixed_hakmem_minimal`) - 計測の正: `scripts/run_mixed_10_cleanenv.sh`(ENV leak を防ぐ) - 変更は compile-out / ENV で戻せる(link-out/物理削除はしない) --- ## A) Syscall budget(steady-state OS churn) 狙い: - warmup 後に `mmap/munmap/madvise` が **増え続けない**(= churn しない) - 指標は “回数/ops” で扱う 手順(FAST, 200M ops, 1-run): ```bash make bench_random_mixed_hakmem_minimal 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=...` - `mmap_total/ITERS`, `madvise/ITERS`(per-op) 判定(目安): - `mmap+munmap+madvise` 合計が **1e8 ops あたり 1 回以下**(= 1e-8/op)を理想 - 現実の許容は workload 次第(Phase 48 実測を SSOT として追跡) --- ## B) RSS / fragmentation(メモリ安定性) 狙い: - RSS が **単調増加しない** - soak で drift が **+5%以内**(目安) 手順(30–60分、FAST): - `ITERS` を分割し、同一 `WS` で繰り返す(例: 20M×N) - ループごとに RSS を採取し、CSV へ記録 推奨スクリプト: - `scripts/soak_mixed_rss.sh`(Phase 50 で追加。実行方法はスクリプト内) 例(30分 soak, FAST): ```bash make bench_random_mixed_hakmem_minimal BENCH_BIN=./bench_random_mixed_hakmem_minimal \ DURATION_SEC=1800 STEP_ITERS=20000000 WS=400 \ scripts/soak_mixed_rss.sh > soak_fast.csv ``` 記録(最低限): - time, ops/s, RSS(MB) - peak RSS, steady RSS, drift(%) --- ## C) Long-run throughput stability(性能の一貫性) 狙い: - 30–60分で ops/s が **-5% 以上落ちない** - CV(変動係数)が **~1–2%** を維持 方法: - 上の soak と同時に “ops/s” をログ化 - “最初の 5 分” と “最後の 5 分” の平均を比較 --- ## D) Tail(p99/p999)を将来測れる形にする 現状の bench は ops/s 指標が中心。次のどちらかを採用して SSOT 化する(Phase 51 以降): 1. bench 側に histogram を追加(observer build のみ) 2. 外部計測(perf + timestamp sampling)で近似 この Phase 50 では「どちらを採用するか」を決めて、スコアカードに TODO を書く。 --- ## E) スコアカード更新(SSOT) 更新先: - `docs/analysis/PERFORMANCE_TARGETS_SCORECARD.md` 追記する項目: - Syscall budget(Phase 48 の値を SSOT 化) - RSS drift / throughput drift のテンプレ(Phase 50 で確立)