# Phase 52: Tail Latency Proxy(epoch throughput quantiles) 目的: 「alloc/free の tail」を **コード変更なし**で近似し、SSOT 化する。 方針: 単一プロセス soak の **短い epoch** を大量に取り、epoch throughput の分布(p50/p90/p99/p999)で tail を proxy する。 理由: - 1-op latency histogram を入れると測定オーバーヘッドが大きい - 既に epoch 出力(`[EPOCH] ... Throughput ... rss_kb=...`)があるので、低コストで tail proxy が取れる --- ## Step 0: Build ```bash make bench_random_mixed_hakmem_minimal make bench_random_mixed_system make bench_random_mixed_mi ``` --- ## Step 1: Single-process epoch soak(5分、epoch=1秒) hakmem FAST: ```bash BENCH_BIN=./bench_random_mixed_hakmem_minimal \ DURATION_SEC=300 EPOCH_SEC=1 WS=400 \ scripts/soak_mixed_single_process.sh > tail_epoch_hakmem_fast_5m.csv ``` mimalloc / system: ```bash BENCH_BIN=./bench_random_mixed_mi \ DURATION_SEC=300 EPOCH_SEC=1 WS=400 \ scripts/soak_mixed_single_process.sh > tail_epoch_mimalloc_5m.csv BENCH_BIN=./bench_random_mixed_system \ DURATION_SEC=300 EPOCH_SEC=1 WS=400 \ scripts/soak_mixed_single_process.sh > tail_epoch_system_5m.csv ``` 注意: - `EPOCH_SEC=1` で ~300 サンプル(p99 近傍が見える) - さらに tail を見たい場合は `DURATION_SEC=1800`(30分)で ~1800 サンプル --- ## Step 2: 集計(p50/p90/p99/p999) CSV から分位を計算する。 重要: - **throughput の tail は “低い側”**(p1/p0.1)で見る(p99 は “速い側”) - **latency percentiles は per-epoch latency を作ってから計算**する(`p99(latency) ≠ 1/p99(throughput)`) 推奨(正しい計算): ```bash python3 scripts/analyze_epoch_tail_csv.py tail_epoch_hakmem_fast_5m.csv ``` 推奨: - p50/p90/p99 は 5分で十分 - p999 は 30分以上推奨(サンプル数が足りない) (分析スクリプトがある場合はそれを使用。なければ簡易 awk/python を追加する Phase 52-1 で行う) --- ## Step 3: SSOT 更新 更新先: - `docs/analysis/PERFORMANCE_TARGETS_SCORECARD.md` 追記: - tail proxy(p99 epoch throughput / p99 latency proxy) - どの条件(FAST/WS/epoch_sec/duration)で測ったか