Files
hakmem/docs/analysis/PHASE6_FRONT_FASTLANE_1_DESIGN.md
2025-12-14 16:28:23 +09:00

122 lines
5.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Phase 6: Front FastLaneLayer CollapseDesign v1
## 0. 背景 / ねらい
直近の勝ち筋は「分岐形」ではなく **重複排除(境界の一本化)** と **ENV/TLS 読み回数の削減**だった。
一方で “削る(別バイナリ比較)” は配置/LTO の二次効果で壊れやすく **NO-GO**
外部レビューML2では、次の芯は **Front FastLanewrapper→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-handledCold へ)
## 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` にまとめる。