97 lines
3.0 KiB
Markdown
97 lines
3.0 KiB
Markdown
|
|
# 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 で確立)
|