docs: Phase 7 FastLane free hot/cold alignment instructions
This commit is contained in:
@ -37,6 +37,12 @@
|
|||||||
|
|
||||||
### Next: TBD(Phase 6 完了、次の芯を検討中)
|
### Next: TBD(Phase 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)
|
||||||
|
|||||||
@ -0,0 +1,99 @@
|
|||||||
|
# Phase 7: FastLane Free Hot/Cold Alignment(次の指示書)
|
||||||
|
|
||||||
|
## 0. 目的(狙い)
|
||||||
|
|
||||||
|
Phase 6 で FastLane(default ON)+ Free DeDup(default 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 → return(FastLane 内で完結)
|
||||||
|
- 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-run(clean env)
|
||||||
|
|
||||||
|
A: hot/cold OFF(monolithic)
|
||||||
|
```sh
|
||||||
|
HAKMEM_FREE_TINY_FAST_HOTCOLD=0 scripts/run_mixed_10_cleanenv.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
B: hot/cold ON(FastLane でも 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`
|
||||||
|
|
||||||
Reference in New Issue
Block a user