# Phase 43 — Header write tax reduction(alloc hot: preserve-class skip) ## 目的 FAST build(`make perf_fast`)で、`tiny_region_id_write_header`(alloc hot)の **実作業**を減らして +1% 以上を狙う。 Phase 42 の結論: gate はもう Top 50 圏外。次は「実作業(header store)」が芯。 ## 背景(観測) - `tiny_region_id_write_header` が runtime profiling で大きい(alloc の固定作業)。 - Tiny の nextptr 仕様では **C1–C6 は header を保持**(next_off=1)、C0/C7 は header を上書き(next_off=0)。 - `core/tiny_nextptr.h`(SSOT) - `core/box/tiny_header_box.h` の `tiny_class_preserves_header()` つまり **C1–C6 については “free 中に header が壊れない”**前提が成立するので、alloc で毎回 header を書く必要が本来ない。 ## 方針(Box Theory) - Standard/OBSERVE は触らない(安全・互換を維持)。 - FAST(`HAKMEM_BENCH_MINIMAL=1`)の中だけで、alloc 側の header write を減らす。 - link-out / 物理削除は禁止(layout tax の前例がある)。 ## Step 0: Invariant 確認(必須) 1) nextptr 仕様確認 - C0: next_off=0(header 上書き) - C1–C6: next_off=1(header 保持) - C7: next_off=0(デフォルト) 2) 「header 保持クラス」の block が最初に header を持つこと - linear carve / refill 経路で、C1–C6 には header が書かれていることを確認する。 - 例: `core/tiny_refill_opt.h` の carve/popfreenode で `tiny_header_write_if_preserved()` が走ること ## Step 1: 変更(FAST 限定) ターゲット: - `core/tiny_region_id.h` の `tiny_region_id_write_header(...)` の hot 経路 変更方針: - `tiny_class_preserves_header(class_idx)==true` のクラス(C1–C6)について、 - FAST では **alloc 時の header store をスキップ** - `user = header_ptr + 1` を返すだけ(header は “既に正しい”前提) - `tiny_class_preserves_header(class_idx)==false`(C0/C7)だけは **従来どおり header を書く** 重要: - 既存の Phase 21 “HOTFULL” の hot/cold split を壊さない(FAST でも HOTFULL の直線性を維持)。 ## Step 2: A/B(FAST 10-run) baseline: - `make perf_fast`(FAST v3) treatment: - `make perf_fast`(FAST v4 / Phase 43) 判定(risk 高めなので閾値を上げる): - GO: +1.0% 以上 - NEUTRAL: ±1.0% - NO-GO: -1.0% 以下(即 revert) ## Step 3: 健康診断(最小) - `make perf_observe` を 1回(crash/ASSERT がないこと) ## ログ - `docs/analysis/PHASE43_HEADER_WRITE_TAX_REDUCTION_RESULTS.md` を作成し、10-run mean/median と判定を書く。 - `docs/analysis/PERFORMANCE_TARGETS_SCORECARD.md` の FAST build 履歴を更新。