Files
hakmem/docs/analysis/PHASE3_CACHE_LOCALITY_NEXT_INSTRUCTIONS.md
Moe Charm (CI) 19056282b6 Phase 3 D2: Wrapper Env Cache - [DECISION: NO-GO]
Target: Reduce wrapper_env_cfg() overhead in malloc/free hot path
- Strategy: Cache wrapper env configuration pointer in TLS
- Approach: Fast pointer cache (TLS caches const wrapper_env_cfg_t*)

Implementation:
- core/box/wrapper_env_cache_env_box.h: ENV gate (HAKMEM_WRAP_ENV_CACHE)
- core/box/wrapper_env_cache_box.h: TLS cache layer (wrapper_env_cfg_fast)
- core/box/hak_wrappers.inc.h: Integration into malloc/free hot paths
- ENV gate: HAKMEM_WRAP_ENV_CACHE=0/1 (default OFF)

A/B Test Results (Mixed, 10-run, 20M iters):
- Baseline (D2=0): 46.52M ops/s (avg), 46.47M ops/s (median)
- Optimized (D2=1): 45.85M ops/s (avg), 45.98M ops/s (median)
- Improvement: avg -1.44%, median -1.05% (DECISION: NO-GO)

Analysis:
- Regression cause: TLS cache adds overhead (branch + TLS access)
- wrapper_env_cfg() is already minimal (pointer return after simple check)
- Adding TLS caching layer makes it worse, not better
- Branch prediction penalty outweighs any potential savings

Cumulative Phase 2-3:
- B3: +2.89%, B4: +1.47%, C3: +2.20%
- D1: +1.06% (opt-in), D2: -1.44% (NO-GO)
- Total: ~7.2% (excluding D2)

Decision: FREEZE as research box (default OFF, regression confirmed)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2025-12-13 22:03:27 +09:00

89 lines
3.7 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 LocalityC1/C2/C3 完了後の次指示)
## 現在地Status
### C3: Static Routing ✅ ADOPT
- `HAKMEM_TINY_STATIC_ROUTE=1``MIXED_TINYV3_C7_SAFE` のデフォルトへ昇格policy_snapshot bypass
- 設計メモ: `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 ✅ GOENV opt-in
- `HAKMEM_FREE_STATIC_ROUTE=1`default OFF
- A/BMixed, 10-run mean**+1.06%**平均のみ閾値超え。median は負ける場合があるので “候補” 扱い)
- 設計メモ: `docs/analysis/PHASE3_D1_FREE_ROUTE_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 D2Wrapper Env Cacheを実装して A/B
狙い: wrapper 入口の `wrapper_env_cfg()` をさらに軽くして 12% 詰める。
- 設計メモ: `docs/analysis/PHASE3_D2_WRAPPER_ENV_CACHE_1_DESIGN.md`
- ENV: `HAKMEM_WRAP_ENV_CACHE=0/1`default 0
- A/B: Mixed 10-run推奨: 20M iters
- GO: +1.0% 以上
- NO-GO: -1.0% 以下
- ±1%: NEUTRAL研究箱維持
### Step 4: Phase 3 D3Alloc Gate Specializationは “perf で 5%超えたら” 着手
狙い: Mixed 本線の固定構成に合わせ、alloc gate の分岐を削って 12% 詰める。
- 設計メモ: `docs/analysis/PHASE3_D3_ALLOC_GATE_SPECIALIZATION_1_DESIGN.md`
- ENV: `HAKMEM_ALLOC_GATE_LEGACY_ONLY=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 の次)