Files
hakmem/docs/status/archive/P0_SOFT_CAP_2025_10_22.md

45 lines
2.6 KiB
Markdown
Raw Normal View History

# Phase P0: Soft CAP 実装・安全実行プリセット
目的: Mid/L2.5 のリフィル強度を `FrozenPolicy` の CAP で制御し、過剰補充とフォールバックを抑制。併せてベンチスクリプトに外部タイムアウトを導入し、長時間ハングを防止。
## 実装概要
- Mid Pool (`hakmem_pool.c`)
- Soft CAP 連動のバンドル制御を `refill_freelist()` に実装。
- `pol->mid_cap[*]``pages_by_class[*]` の差分で `bundles` を 1..4 に調整。
- CAP 以上では `bundles=1`最小。CAP 未満では不足に応じて下限min bundleを確保。
- CAP 超過時の簡易ステアル±1..4 シャード)で過剰リフィル回避。
- L2.5 Large Pool (`hakmem_l25_pool.c`)
- Soft CAP 連動の簡易バンドル1..2)を `refill_freelist()` に追加。
- 既定は `1`、CAP 未満で不足が大きい場合のみ `2` まで前補充。
- CAP 超過時は `1` に固定。CAP 超でもアロケーションは枯渇させないソフトCAP
- CAP 超過時は先に隣接シャードから 12 段ステアルを試行(`hak_l25_pool_try_alloc`)。
## 環境変数P0関連
- `HAKMEM_POOL_MIN_BUNDLE`Mid: 最小バンドル数(既定 2、推奨 A/B: 34
- `HAKMEM_L25_MIN_BUNDLE`L2.5: 最小バンドル数(既定 1、範囲 1..2
## ベンチスクリプトの安全化(外部タイムアウト)
- `scripts/run_bench_suite.sh`
- 既定 `RUNTIME=1``BENCH_TIMEOUT=RUNTIME+3``KILL_GRACE=2`
- すべての実行を `timeout -k` でラップ
- `scripts/save_prof_sweep.sh`: 同上(保存スイープ)
- `scripts/ab_sweep_mid.sh`: 同上Mid A/B
- 付属: `scripts/kill_bench.sh`検出→TERM→KILL
## 推奨プリセット(短時間)
- 保存スイープ1s, 1/4T, sample=1/256
- `BENCH_TIMEOUT=6 scripts/save_prof_sweep.sh -d 1 -t 1,4 -s 8`
- Mid A/BWRAP L1=OFF, 学習OFF
- `RUNTIME=1 THREADS=1,4 BENCH_TIMEOUT=5 scripts/ab_sweep_mid.sh`
- 小スイートsystem/mimalloc/hakmem
- `RUNTIME=1 THREADS=1,4 BENCH_TIMEOUT=6 scripts/run_bench_suite.sh`
## 現時点の観測1秒計測の例
- Mid CAP 基本: 既定 `64,64,64,32,16` が良好大CAPは競合・リフィル増で不利
- DYN1=14,336B: `CAP_MID_DYN1=64` が安定ワークロード依存、要A/B
- 推奨: `HAKMEM_POOL_MIN_BUNDLE=4` をA/Bで検証Mid 4Tが伸びる傾向
以降P1: Water-filling のヒステリシス/ドウェル、W_MAX/THP 閾値の Canary 採用を追加し、BEST 構成の安定化を図る。