# Phase 60: Alloc Pass-Down SSOT(重複スナップショット/ルート計算の排除) 目的: - 現状の層(FastLane/Box群)と学習層(OFF)を維持したまま、**alloc 側の op-per-loop 冗長**を削って **+5–10% の積み上げ**を狙う。 - 方針は Phase 19-6C(free 側 pass-down)と同型: **入口で 1回だけ計算し、下流へ引き回す**(境界 1 箇所、単純化)。 スコープ: - 対象: alloc hot path(`malloc_tiny_fast.h` / `front_fastlane_try_alloc()` 相当) - 非対象: アルゴリズム刷新(segment/page 再設計)、研究箱の物理削除(layout tax リスク) 成功基準(A/B): - Mixed 10-run mean(FAST build)で **+1.0% 以上 = GO** - ±1.0% = NEUTRAL(freeze、code cleanliness 目的で保持) - -1.0% 以下 = NO-GO(revert) 計測の正: - `BENCH_BIN=./bench_random_mixed_hakmem_minimal scripts/run_mixed_10_cleanenv.sh` - 比較は **同一バイナリ + ENV トグル**(別バイナリ比較は layout 混入) --- ## Step 0: Runtime 実行確認(必須) Phase 40/41 の教訓: ASM にあっても実行されない最適化は触らない。 - `perf report --no-children` で top 50 に alloc 側の対象関数が入っていることを確認する。 - 対象候補(例): - `malloc_tiny_fast*` - `front_fastlane_try_alloc*` - `tiny_c7_ultra_alloc` - `unified_cache_pop_or_refill` --- ## Step 1: L0 ENV box(戻せる) 新規: - `core/box/alloc_passdown_ssot_env_box.{h,c}`(or `.h` only) ENV: - `HAKMEM_ALLOC_PASSDOWN_SSOT=0/1`(default: 0) --- ## Step 2: L1 “入口で 1回だけ” helper(SSOT) 設計: - alloc 入口で必要な情報(例: `route_kind`, `use_tiny_heap`, `class_idx`, `policy_snapshot_ptr`)を 1 回だけ確定する。 - 下流の cold/slow/refill には **引数で渡す**(再計算禁止)。 実装指針: - `static inline` helper でまとめる(関数分割を増やさない=layout tax 回避) - 例: - `alloc_compute_route_and_heap(class_idx, ...) -> {route_kind, use_tiny_heap}` - `alloc_select_handler(route_kind, ...)` --- ## Step 3: 下流の重複を除去(pass-down) 典型的に削れる冗長: - policy snapshot の二重取得 - `tiny_route_for_class()` の複数回呼び出し - route kind → heap kind 判定の重複 注意: - 入口の branch を増やしすぎない(Phase 43 の教訓: branch は store より高い) - “monolithic + early-exit” を優先し、noinline helper 乱立は避ける --- ## Step 4: A/B(Mixed 10-run) OFF: - `HAKMEM_ALLOC_PASSDOWN_SSOT=0` ON: - `HAKMEM_ALLOC_PASSDOWN_SSOT=1` 判定: - GO: +1.0% 以上 - NEUTRAL: ±1.0% - NO-GO: -1.0% 以下(即 revert) --- ## Rollback - `HAKMEM_ALLOC_PASSDOWN_SSOT=0`(同一バイナリで切戻し) --- ## 次(Phase 60B/C 候補) - 60B: TLS “同じ値を 1回だけ読む” を徹底(alloc/free 入口で snapshot/passdown) - 60C: `unified_cache_*` の telemetry(release atomics/relaxed counters)見直し(compile-out)