docs: Phase 7 FastLane free hot/cold alignment instructions

This commit is contained in:
Moe Charm (CI)
2025-12-14 17:52:55 +09:00
parent dcc1d42e7f
commit 7a3702e069
2 changed files with 105 additions and 0 deletions

View File

@ -37,6 +37,12 @@
### Next: TBDPhase 6 完了、次の芯を検討中) ### Next: TBDPhase 6 完了、次の芯を検討中)
現状の候補(優先順):
1) **Phase 7: FastLane Free Hot/Cold Alignment**
- FastLane free が `free_tiny_fast()`monolithic固定で、既存の勝ち箱 `free_tiny_fast_hot()`Hot/Cold + DUALHOTが効かない “ねじれ” を解消する。
- 指示書: `docs/analysis/PHASE7_FRONT_FASTLANE_FREE_HOTCOLD_1_NEXT_INSTRUCTIONS.md`
- A/B: `HAKMEM_FREE_TINY_FAST_HOTCOLD=0/1`(同一バイナリ)
## 更新メモ2025-12-14 Phase 5 E5-3 Analysis - Strategic Pivot ## 更新メモ2025-12-14 Phase 5 E5-3 Analysis - Strategic Pivot
### Phase 5 E5-3: Candidate Analysis & Strategic Recommendations ⚠️ DEFER (2025-12-14) ### Phase 5 E5-3: Candidate Analysis & Strategic Recommendations ⚠️ DEFER (2025-12-14)

View File

@ -0,0 +1,99 @@
# Phase 7: FastLane Free Hot/Cold Alignment次の指示書
## 0. 目的(狙い)
Phase 6 で FastLanedefault ON+ Free DeDupdefault ONまで本線化できた。次は **FastLane free が `free_tiny_fast()`monolithic固定になっている不整合**を解消し、既存の勝ち箱である **`free_tiny_fast_hot()`Hot/Cold + DUALHOT** を FastLane からも使えるようにする。
狙いは「新しい最適化」ではなく、**既存の勝ちパスを FastLane にも通す**こと。
- 期待: **+1〜4%**free 支配なので上振れあり)
- リスク: 中(`free_tiny_fast_cold()``noinline,cold` のため、cold 比率が高いと回帰し得る)
## 1. 現状と問題Box のねじれ)
現状:
- wrapper の free 入口では `HAKMEM_FREE_TINY_FAST_HOTCOLD=1` のとき `free_tiny_fast_hot()` が使われる。
- しかし Phase 6 の FastLane free は `free_tiny_fast()` を直接呼ぶため、**hot/cold 側の勝ち箱DUALHOT 等)が FastLane 経由だと効かない**。
この “ねじれ” を直すのが Phase 7 の芯。
## 2. 変更方針(境界は 1 箇所のまま)
- `front_fastlane_try_free()`**DeDup 経路**default pathで、
- `HAKMEM_FREE_TINY_FAST_HOTCOLD=1``free_tiny_fast_hot(ptr)` を使う
- `HAKMEM_FREE_TINY_FAST_HOTCOLD=0` → 従来どおり `free_tiny_fast(ptr)`
- class mask 運用(`HAKMEM_FRONT_FASTLANE_CLASS_MASK!=0xFF`)の互換のため、
- **mask を絞っている場合は従来経路を維持**FastLane が “勝手に free しない”)
境界:
- handled → returnFastLane 内で完結)
- not handled → wrapper へフォールバック(従来どおり)
## 3. 実装指示(小パッチ順)
### Patch 1: FastLane free の DeDup 経路を hot/cold 対応にする
対象:
- `core/box/front_fastlane_box.h`
変更点(概略):
- 既存DeDup 経路):
- `int result = free_tiny_fast(ptr);`
- 変更後:
- `int result = hak_free_tiny_fast_hotcold_enabled() ? free_tiny_fast_hot(ptr) : free_tiny_fast(ptr);`
注意:
- `front_fastlane_box.h``../front/malloc_tiny_fast.h` を include 済みなので、
- `free_tiny_fast_hot()` / `hak_free_tiny_fast_hotcold_enabled()` は追加 include なしで参照できる想定。
- Fail-Fast`!g_initialized`)は維持。
- `HAKMEM_FRONT_FASTLANE_FREE_DEDUP=0`mask 運用用)は従来のまま。
## 4. A/B同一バイナリ
前提:
- `HAKMEM_FRONT_FASTLANE=1`default ON
- `HAKMEM_FRONT_FASTLANE_FREE_DEDUP=1`default ON
### Mixed 10-runclean env
A: hot/cold OFFmonolithic
```sh
HAKMEM_FREE_TINY_FAST_HOTCOLD=0 scripts/run_mixed_10_cleanenv.sh
```
B: hot/cold ONFastLane でも hot/cold を使う)
```sh
HAKMEM_FREE_TINY_FAST_HOTCOLD=1 scripts/run_mixed_10_cleanenv.sh
```
判定Mixed 10-run mean:
- GO: **+1.0% 以上**
- NEUTRAL: **±1.0%**
- NO-GO: **-1.0% 以下**
### C6-heavy 5-run任意
```sh
HAKMEM_PROFILE=C6_HEAVY_LEGACY_POOLV1 HAKMEM_FREE_TINY_FAST_HOTCOLD=0 ./bench_mid_large_mt_hakmem 1 1000000 400 1
HAKMEM_PROFILE=C6_HEAVY_LEGACY_POOLV1 HAKMEM_FREE_TINY_FAST_HOTCOLD=1 ./bench_mid_large_mt_hakmem 1 1000000 400 1
```
## 5. 健康診断(必須)
```sh
scripts/verify_health_profiles.sh
```
## 6. 昇格GO のときだけ)
- `core/bench_profile.h``MIXED_TINYV3_C7_SAFE` は既に `HAKMEM_FREE_TINY_FAST_HOTCOLD=1`(想定)なので、**追加作業不要**。
- `C6_HEAVY_LEGACY_POOLV1` も必要なら default=1 を維持。
- `CURRENT_TASK.md` に A/B 数値と rollback を追記。
## 7. Rollback
- `HAKMEM_FREE_TINY_FAST_HOTCOLD=0`FastLane free も monolithic に戻る)
- さらに戻すなら
- `HAKMEM_FRONT_FASTLANE_FREE_DEDUP=0`
- `HAKMEM_FRONT_FASTLANE=0`