49 lines
2.3 KiB
Markdown
49 lines
2.3 KiB
Markdown
|
|
# Phase P1: 学習の安定化(ヒステリシス/ドウェル+Canary採用)
|
|||
|
|
|
|||
|
|
目的: CAP/W_MAX/THP の自動調整に安定性を持たせ、短時間計測でも振動を抑えつつ安全に最適値へ収束させる。
|
|||
|
|
|
|||
|
|
## 実装点(hakmem_learner.c)
|
|||
|
|
- CAP 調整(Mid/Large)
|
|||
|
|
- 窓内ヒット率に基づく±`step`を継続しつつ、クラス別ドウェルを導入。
|
|||
|
|
- 環境変数で秒指定((`window_ms/1000`)単位で加算)
|
|||
|
|
- `HAKMEM_CAP_DWELL_SEC_MID`(既定3秒)
|
|||
|
|
- `HAKMEM_CAP_DWELL_SEC_LG`(既定5秒)
|
|||
|
|
- 変更が起きたときのみ該当クラスのドウェルをリセット→過剰振動抑制。
|
|||
|
|
|
|||
|
|
- W_MAX 学習(UCB1)
|
|||
|
|
- ドウェルに加えて Canary 試験導入(候補値を一時採用し、所定秒数のスコア比較で採否を決定)。
|
|||
|
|
- 環境変数:
|
|||
|
|
- `HAKMEM_WMAX_LEARN=1`(有効化)
|
|||
|
|
- `HAKMEM_WMAX_CANARY=1`(Canary有効, 既定ON)
|
|||
|
|
- `HAKMEM_WMAX_TRIAL_SEC`(既定5)
|
|||
|
|
- `HAKMEM_WMAX_ADOPT_PCT`(既定0.01→+1%以上で採用)
|
|||
|
|
- `HAKMEM_WMAX_DWELL_SEC`(アーム切替ドウェル)
|
|||
|
|
|
|||
|
|
- THP閾値 学習(UCB1)
|
|||
|
|
- 上記と同様の Canary 試験(別ENV)。
|
|||
|
|
- 環境変数:
|
|||
|
|
- `HAKMEM_THP_LEARN=1`(有効化)
|
|||
|
|
- `HAKMEM_THP_CANARY=1`(Canary有効, 既定ON)
|
|||
|
|
- `HAKMEM_THP_TRIAL_SEC`(既定6)
|
|||
|
|
- `HAKMEM_THP_ADOPT_PCT`(既定0.015→+1.5%以上で採用)
|
|||
|
|
- `HAKMEM_THP_DWELL_SEC`(アーム切替ドウェル)
|
|||
|
|
|
|||
|
|
- スコア指標(簡易)
|
|||
|
|
- `score = (mid_hit + large_hit) - (mid_miss + large_miss) - 2*l1_fallback`
|
|||
|
|
- Canaryは切替直前のアーム平均スコアをベースラインとし、試験区間平均と比較して採否を決定。
|
|||
|
|
|
|||
|
|
## 使い方(短時間プリセット)
|
|||
|
|
- 学習ON(Midバンド, 4T, 1秒)
|
|||
|
|
```
|
|||
|
|
HAKMEM_LEARN=1 HAKMEM_WMAX_LEARN=1 HAKMEM_WMAX_CANARY=1 \
|
|||
|
|
HAKMEM_THP_LEARN=1 HAKMEM_THP_CANARY=1 \
|
|||
|
|
HAKMEM_POOL_MIN_BUNDLE=4 HAKMEM_L25_MIN_BUNDLE=2 \
|
|||
|
|
LD_PRELOAD=$(readlink -f ./libhakmem.so) mimalloc-bench/bench/larson/larson 1 2048 32768 10000 1 12345 4
|
|||
|
|
```
|
|||
|
|
- 計測を長くする場合(2–10秒)は `*_TRIAL_SEC` と `*_DWELL_SEC` を少し伸ばすと振動がさらに減少。
|
|||
|
|
|
|||
|
|
## メモ
|
|||
|
|
- Learner起動: `HAKMEM_LEARN=1`(既定OFF)
|
|||
|
|
- 収束の可視化は `docs/benchmarks/*` のサマリとLearnerログを併読。
|
|||
|
|
|