71 lines
2.7 KiB
Markdown
71 lines
2.7 KiB
Markdown
|
|
# 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 履歴を更新。
|
|||
|
|
|