# Phase 3 D3: Alloc Gate Specialization(Mixed “LEGACY-only” 最短化)設計メモ > NOTE (2025-12-13): この設計メモは **後続の Phase 4 D3** により置き換えられました。 > 最新の設計・ENV・実装指示は `docs/analysis/PHASE4_D3_ALLOC_GATE_SPECIALIZATION_1_DESIGN.md` を参照してください。 ## 目的 Mixed 本線(`MIXED_TINYV3_C7_SAFE`)では、 構成が固定されているため「毎回の gate 判定」をさらに削れる余地がある。 この D3 は `tiny_alloc_gate_fast()` の分岐を “Mixed に特化した形” にして、 alloc 入口の命令数と分岐を 1–2% 詰めることを狙う。 ## 前提(Mixed 本線の固定事項) - `HAKMEM_MID_V3_ENABLED=0`(C6 を MID に送らない) - `HAKMEM_TINY_STATIC_ROUTE=1`(policy_snapshot bypass) - `HAKMEM_TINY_ALLOC_ROUTE_SHAPE=1`(alloc dispatch 形最適化) - Tiny front v3 + LUT + fast classify は ON(既定) ## 非目標 - ルーティングポリシーの意味変更(ULTRA/MID/V7/LEGACY の優先順位は変えない) - サイズ→クラス変換の SSOT を壊す - allocator のアルゴリズム変更(形の削減のみ) ## Box Theory(箱割り) ### L0: Env(戻せる) - ENV gate: `HAKMEM_ALLOC_GATE_LEGACY_ONLY=0/1`(default: 0) - 目的: Mixed 本線だけで A/B → 勝てなければ即 OFF ### L1: AllocGateLegacyOnlyBox(境界: alloc gate 入口 1箇所) 責務: - `tiny_alloc_gate_fast()` のうち “Mixed 本線で常に同じ結果になる分岐” を削って、 `malloc_tiny_fast_for_class()` への最短経路を作る。 安全フェンス(必須): - 初回に 1 回だけ “本当に LEGACY-only か” を確認してから有効化する。 - 例: `small_policy_v7_init_from_env(&tmp)` で route_kind が LEGACY 以外を含むなら自動 disable - Learner 有効時は自動 disable(route が動的に変わる) ## 実装指示(小パッチ) ### Patch D3-1: ENV gate + “safe enable” 判定 - 新規: `core/box/alloc_gate_legacy_only_box.h/.c` - `alloc_gate_legacy_only_enabled_fast()`(hot path 用: boolean) - 初期化境界 1 箇所: - `small_policy_v7_init_from_env(&tmp)` で route_kind を検査 - `tmp.route_kind[i] != SMALL_ROUTE_LEGACY` が存在したら disable - learner ON のときも disable - A/B で ON のときだけ有効になるようにする ### Patch D3-2: `tiny_alloc_gate_fast()` 統合(差し替え 1 箇所) - `core/box/tiny_alloc_gate_box.h` - `TinyRoutePolicy` の分岐を “Mixed では常に同じ” に寄せる(ただし fence を守る) - 形の例(概略): - `if (alloc_gate_legacy_only_enabled_fast()) { return malloc_tiny_fast_for_class(size, class_idx); }` - それ以外は現行の gate ロジックを維持 注意: - `tiny_alloc_gate_fast` は「Tiny を使うか/Pool へ逃がすか」の境界なので、 “gate の意味” を変えない。削れるのは **分岐の形だけ**。 ## A/B(GO/NO-GO) Mixed 10-run(推奨: 20M iters): - baseline: `HAKMEM_ALLOC_GATE_LEGACY_ONLY=0` - opt: `HAKMEM_ALLOC_GATE_LEGACY_ONLY=1` 判定(10-run mean): - GO: **+1.0% 以上** - NO-GO: **-1.0% 以下** - ±1.0%: NEUTRAL(研究箱維持、default OFF) ## リスク - 低〜中 - Mixed 本線に限定すれば低い - “safe enable 判定” を入れないと、ENV 組み合わせで破綻するリスクが上がる ## Rollback - `HAKMEM_ALLOC_GATE_LEGACY_ONLY=0`(即 OFF) - 箱は独立させ、既存 gate を汚さない(境界 1 箇所差し替え)