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

98 lines
4.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Phase 3: Cache Locality - D1/D2 Validation Complete
## 現在地Status
### BASELINE_PHASE3 (10-run, Mixed, ws=400, 20M iters)
- Mean: 46.04M ops/s, Median: 46.04M ops/s, StdDev: 0.14M ops/s
- Baseline established: 2025-12-13
### C3: Static Routing ✅ ADOPT
- `HAKMEM_TINY_STATIC_ROUTE=1``MIXED_TINYV3_C7_SAFE` のデフォルトへ昇格policy_snapshot bypass
- Gain: +2.20% proven
- 設計メモ: `docs/analysis/PHASE3_C3_STATIC_ROUTING_1_DESIGN.md`
### C1: TLS Prefetch 🔬 NEUTRAL / FREEZE
- `HAKMEM_TINY_PREFETCH=1` は Mixed で平均が伸びず±1%域)→ default OFF 維持
- 設計メモ: `docs/analysis/PHASE3_C1_TLS_PREFETCH_1_DESIGN.md`
### C2: Metadata Cache 🔬 NEUTRAL / FREEZE
- `HAKMEM_TINY_METADATA_CACHE=1` は Mixed で平均が伸びず±1%域)→ default OFF 維持
- 設計メモ: `docs/analysis/PHASE3_C2_METADATA_CACHE_1_DESIGN.md`
### C4: MIXED MID_V3 Routing Fix ✅ ADOPT大きい勝ち
- `MIXED_TINYV3_C7_SAFE` のデフォルトを **MID_V3 OFF** に変更C6 を LEGACY 側へ戻す)
- A/BMixed, ws=400, 20M iters, 10-run**+13%** を確認
### D1: Free Path Route Cache ✅ ADOPT (20-run validated, PROMOTED TO DEFAULT)
- `HAKMEM_FREE_STATIC_ROUTE=1``MIXED_TINYV3_C7_SAFE` のデフォルトへ昇格
- 20-run validation results:
- Baseline (ROUTE=0): Mean 46.30M ops/s, Median 46.30M ops/s, StdDev 0.10M
- Optimized (ROUTE=1): Mean 47.32M ops/s, Median 47.39M ops/s, StdDev 0.11M
- Gain: Mean +2.19%, Median +2.37% (both criteria met)
- 設計メモ: `docs/analysis/PHASE3_D1_FREE_ROUTE_CACHE_1_DESIGN.md`
### D2: Wrapper Env Cache ❌ NO-GO / FROZEN
- `HAKMEM_WRAP_ENV_CACHE=1` showed -1.44% regression
- Root cause: TLS overhead > benefit in Mixed workload
- Status: Research box frozen (default OFF, do not pursue)
- 設計メモ: `docs/analysis/PHASE3_D2_WRAPPER_ENV_CACHE_1_DESIGN.md`
## 次の指示(ガツン)
### Step 0: Baseline 固定Mixed
1. まず “現行デフォルト” で 10-run を取る(比較の基準線)
```bash
HAKMEM_PROFILE=MIXED_TINYV3_C7_SAFE ./bench_random_mixed_hakmem 20000000 400 1
```
2. A/B の比較は **同じ iter / ws / threads** を厳守。
### Step 1: MID_V3 の扱いを “本線 SSOT” にする
目的: Mixed 本線は **MID_V3 を常時 OFF**、C6-heavy のみ ON を維持する。
- `core/bench_profile.h`(プリセット)
- Mixed: `HAKMEM_MID_V3_ENABLED=0`, `HAKMEM_MID_V3_CLASSES=0x0`
- C6-heavy: 既存通り `HAKMEM_MID_V3_ENABLED=1`, `HAKMEM_MID_V3_CLASSES=0x40`
- `docs/analysis/ENV_PROFILE_PRESETS.md`(人間向け SSOT
- Mixed 本線: MID_V3 OFF を明記
- C6-heavy: MID_V3 ON 推奨を明記
GO/NO-GO:
- Mixed (10-run mean): **+1.0% 以上で GO**(既に +13% を観測)
- C6-heavy: 参考Mixed を最優先)
### Step 2: 次のボトルネックを “数字で” 決める
MID_V3 を切った後に、改めて perf を取り直して “次の芯” を決める。
```bash
perf record -F 99 --call-graph dwarf -- \
HAKMEM_PROFILE=MIXED_TINYV3_C7_SAFE ./bench_random_mixed_hakmem 20000000 400 1
perf report --stdio
```
判定ルール:
- self% が **5% 未満の箱は NO-GO後回し**
- 5% 以上の関数/箱だけを次のフェーズ候補にする
### Step 3: Phase 3 D2 は NO-GO凍結
`HAKMEM_WRAP_ENV_CACHE=1` は **-1.44% 回帰**のため、研究箱として freezedefault OFF
次は D3alloc 側に進むか、Phase 3 を総括して次フェーズへ移る。
### Step 4: Phase 3 D3Alloc Gate Specializationは “perf で 5%超えたら” 着手
狙い: Mixed 本線の固定構成に合わせ、alloc gate の分岐を削って 12% 詰める。
- 実装指示書: `docs/analysis/PHASE4_ALLOC_GATE_SPECIALIZATION_NEXT_INSTRUCTIONS.md`
- 設計メモ(最新版): `docs/analysis/PHASE4_D3_ALLOC_GATE_SPECIALIZATION_1_DESIGN.md`
- ENV: `HAKMEM_ALLOC_GATE_SHAPE=0/1`default 0
- 注意: “safe enable 判定” を必ず入れて、ENV 組み合わせで壊れないようにする
## 次候補perf で 5% 超なら着手)
1. `tiny_alloc_gate_fast` / `malloc_tiny_fast_for_class`alloc 側の形最適化)
2. `free_tiny_fast_*`free 側第2ホットの追加短絡
3. wrapper`malloc`/`free`)の hot 入口の更なる短縮B4 の次)