Files
hakmem/docs/analysis/PHASE3_D3_ALLOC_GATE_SPECIALIZATION_1_DESIGN.md
2025-12-14 00:05:11 +09:00

3.5 KiB
Raw Blame History

Phase 3 D3: Alloc Gate SpecializationMixed “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 入口の命令数と分岐を 12% 詰めることを狙う。

前提Mixed 本線の固定事項)

  • HAKMEM_MID_V3_ENABLED=0C6 を MID に送らない)
  • HAKMEM_TINY_STATIC_ROUTE=1policy_snapshot bypass
  • HAKMEM_TINY_ALLOC_ROUTE_SHAPE=1alloc 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/1default: 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 有効時は自動 disableroute が動的に変わる)

実装指示(小パッチ)

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/BGO/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 箇所差し替え)