122 lines
5.0 KiB
Markdown
122 lines
5.0 KiB
Markdown
|
|
# Phase 6: Front FastLane(Layer Collapse)Design v1
|
|||
|
|
|
|||
|
|
## 0. 背景 / ねらい
|
|||
|
|
|
|||
|
|
直近の勝ち筋は「分岐形」ではなく **重複排除(境界の一本化)** と **ENV/TLS 読み回数の削減**だった。
|
|||
|
|
一方で “削る(別バイナリ比較)” は配置/LTO の二次効果で壊れやすく **NO-GO**。
|
|||
|
|
|
|||
|
|
外部レビュー(ML2)では、次の芯は **Front FastLane(wrapper→gate→policy→route の Layer Collapse)**が最優先、という結論になった。
|
|||
|
|
|
|||
|
|
- 外部回答の記録: `PHASE_ML2_CHATGPT_RESPONSE_FASTLANE.md`
|
|||
|
|
- 質問状: `PHASE_ML2_CHATGPT_QUESTIONNAIRE_FASTLANE.md`
|
|||
|
|
|
|||
|
|
## 1. ゴール(Box Theory)
|
|||
|
|
|
|||
|
|
- **Hot の入口を 1 箱に畳む**(malloc/free の “入口固定費” を減らす)
|
|||
|
|
- **境界は 1 箇所**(FastLane → ColdFallback の単一フォールバック)
|
|||
|
|
- **戻せる**(ENV gate で A/B)
|
|||
|
|
- **見える化は最小**(hit/fallback のカウンタだけ)
|
|||
|
|
- **Fail-Fast**(確信が持てないものは必ず既存経路へ)
|
|||
|
|
|
|||
|
|
## 2. 非ゴール(やらない)
|
|||
|
|
|
|||
|
|
- 凍結箱を「削除して痩せさせる」(E7 NO-GO)
|
|||
|
|
- 参照: `docs/analysis/PHASE5_E7_FROZEN_BOX_PRUNE_AB_TEST_RESULTS.md`
|
|||
|
|
- “branch hint” の固定最適化(CPU/モードで逆効果になりやすい)
|
|||
|
|
|
|||
|
|
## 3. 形(Box 図)
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
(ENV: HAKMEM_FRONT_FASTLANE=0/1)
|
|||
|
|
+---------------------+
|
|||
|
|
| L0: FastLaneEnvBox |
|
|||
|
|
+---------------------+
|
|||
|
|
|
|
|||
|
|
v
|
|||
|
|
+--------------------+ +--------------------------+
|
|||
|
|
| malloc/free wrapper| --> | L1: FrontFastLaneBox |
|
|||
|
|
| (既存のまま) | | - size->class->route |
|
|||
|
|
+--------------------+ | - try_alloc / try_free |
|
|||
|
|
| - fast: 直線 + 早期return|
|
|||
|
|
+--------------------------+
|
|||
|
|
| \
|
|||
|
|
handled->| \ not-handled
|
|||
|
|
v v
|
|||
|
|
+------------------+ +-----------------------+
|
|||
|
|
| L1a: HotHandlers | | L2: ColdFallbackIface |
|
|||
|
|
| (既存を呼ぶだけ) | | (既存 wrapper 継続) |
|
|||
|
|
+------------------+ +-----------------------+
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**境界 1 箇所**: `FrontFastLaneBox` が “handled できない” と判断したら即 `ColdFallbackIface`(=既存 wrapper の続き)へ落とす。
|
|||
|
|
|
|||
|
|
## 4. 既存資産の再利用(重要)
|
|||
|
|
|
|||
|
|
FastLane を “新規で全部作る” のではなく、既に勝っている箱を **Hot 入口で 1 回だけ読む**形に揃える。
|
|||
|
|
|
|||
|
|
- Wrapper ENV snapshot:
|
|||
|
|
- `core/box/malloc_wrapper_env_snapshot_box.h`
|
|||
|
|
- `core/box/free_wrapper_env_snapshot_box.h`
|
|||
|
|
- Tiny route snapshot:
|
|||
|
|
- `core/box/tiny_route_env_box.h`(route_kind を class ごとに決める)
|
|||
|
|
- ENV snapshot consolidation(ある場合):
|
|||
|
|
- `core/box/hakmem_env_snapshot_box.h`
|
|||
|
|
|
|||
|
|
方針:
|
|||
|
|
- FastLane 内で “同じ判定を 2 回やらない”。
|
|||
|
|
- 既存の Hot handler(例: `malloc_tiny_fast_for_class()` / `tiny_alloc_gate_fast()` / `free_tiny_fast()`)を **呼ぶだけ**に留める。
|
|||
|
|
|
|||
|
|
## 5. FastLane の責務(L1)
|
|||
|
|
|
|||
|
|
### 5.1 alloc: try_alloc(size) の責務
|
|||
|
|
|
|||
|
|
- size から class を決める(可能なら LUT / 1 回)
|
|||
|
|
- class から route を決める(可能なら snapshot / 1 回)
|
|||
|
|
- “確信が持てる”場合のみ Hot handler に直行し、成功したら即 return
|
|||
|
|
- 失敗したら **即 not-handled**(Cold へ)
|
|||
|
|
|
|||
|
|
### 5.2 free: try_free(ptr) の責務
|
|||
|
|
|
|||
|
|
- **確信が持てる**場合のみ tiny free へ直行(例: header で tiny 物を fail-fast 判定できる)
|
|||
|
|
- それ以外は not-handled(Cold へ)
|
|||
|
|
|
|||
|
|
## 6. Fail-Fast(安全ゲート)
|
|||
|
|
|
|||
|
|
FastLane の原則:
|
|||
|
|
- “fast path に入る条件” は **必要最小**
|
|||
|
|
- “fallback 条件” は **広く**
|
|||
|
|
|
|||
|
|
例(alloc):
|
|||
|
|
- `size <= tiny_get_max_size()`(もしくは wrapper snapshot 由来の cheap 判定)
|
|||
|
|
- class が範囲内
|
|||
|
|
- route が “既知の tiny hot handler で処理可能”
|
|||
|
|
|
|||
|
|
例(free):
|
|||
|
|
- header magic / class_idx が valid
|
|||
|
|
- “tiny が確実” と言える場合のみ(曖昧なら必ず Cold)
|
|||
|
|
|
|||
|
|
## 7. ENV / A/B 方針
|
|||
|
|
|
|||
|
|
- `HAKMEM_FRONT_FASTLANE=0/1`(default 1, opt-out)
|
|||
|
|
- optional:
|
|||
|
|
- `HAKMEM_FRONT_FASTLANE_CLASS_MASK=0x??`(段階導入用)
|
|||
|
|
|
|||
|
|
A/B:
|
|||
|
|
- Mixed 10-run は必ず clean env runner を使う(ENV 漏れ防止)
|
|||
|
|
- `scripts/run_mixed_10_cleanenv.sh`
|
|||
|
|
|
|||
|
|
GO/NO-GO(運用):
|
|||
|
|
- GO: Mixed 10-run mean **+1.0% 以上**
|
|||
|
|
- NEUTRAL: **±1.0%**(freeze)
|
|||
|
|
- NO-GO: **-1.0% 以下**(rollback/freeze)
|
|||
|
|
|
|||
|
|
## 8. 実装方針(小パッチ順)
|
|||
|
|
|
|||
|
|
1. **ENV gate 箱**(default ON)
|
|||
|
|
2. **FrontFastLaneBox**(alloc のみ / tiny のみ)
|
|||
|
|
3. **free を追加**(tiny 直通のみ、曖昧なら落とす)
|
|||
|
|
4. **最小 stats**(hit/fallback、理由は 3〜6 種類まで)
|
|||
|
|
5. 健康診断 + Mixed 10-run A/B
|
|||
|
|
|
|||
|
|
次の具体指示は `docs/analysis/PHASE6_FRONT_FASTLANE_NEXT_INSTRUCTIONS.md` にまとめる。
|