132 lines
4.0 KiB
Markdown
132 lines
4.0 KiB
Markdown
|
|
# Phase 14 v2: Pointer-Chase Reduction — Hot Path Integration Next Instructions(Tiny tcache intrusive LIFO)
|
|||
|
|
|
|||
|
|
## Status
|
|||
|
|
|
|||
|
|
- Phase 14 v1(tcache L1 追加)は Mixed 10-run で **NEUTRAL**(+0.20% mean / +0.59% median)
|
|||
|
|
- 結果: `docs/analysis/PHASE14_POINTER_CHASE_REDUCTION_1_AB_TEST_RESULTS.md`
|
|||
|
|
- 実装: `core/box/tiny_tcache_env_box.{h,c}` / `core/box/tiny_tcache_box.h` / `core/front/tiny_unified_cache.h`
|
|||
|
|
- ただし現状の v1 は **free 側(`unified_cache_push()`)だけ tcache に入れて、alloc 側(`tiny_hot_alloc_fast()`)が tcache を消費しない**ため、
|
|||
|
|
- tcache が「実質 sink」になり、ROI が正しく測れない
|
|||
|
|
- “tcache-style” の前提(push/pop の対称)が崩れている
|
|||
|
|
|
|||
|
|
Phase 14 v2 は **tiny front の実ホットパス**に tcache を接続して、正しい A/B を取り直す。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 0. 目的(GO 条件)
|
|||
|
|
|
|||
|
|
Mixed 10-run(clean env)で:
|
|||
|
|
- **GO**: mean +1.0% 以上
|
|||
|
|
- **NO-GO**: mean -1.0% 以下(即 rollback / freeze)
|
|||
|
|
- **NEUTRAL**: ±1.0%(research box freeze)
|
|||
|
|
|
|||
|
|
追加ゲート(必須):
|
|||
|
|
- `HAKMEM_TINY_TCACHE=1` のとき **tcache pop が実際に発生**している(0 なら設計未通電)
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 1. Box 図(境界 1 箇所)
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
L0: tiny_tcache_env_box (ENV gate / refresh / rollback)
|
|||
|
|
↓
|
|||
|
|
L1: tiny_tcache_box (intrusive LIFO: push/pop, cap)
|
|||
|
|
↓
|
|||
|
|
L2: tiny_front_hot_box (hot alloc/free: tcache → unified_cache(FIFO))
|
|||
|
|
↓
|
|||
|
|
L3: cold/refill (unified_cache_refill → SuperSlab)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
境界は **“tcache miss/overflow → 既存 UnifiedCache”** の 1 箇所に固定する。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 2. 実装パッチ順(小さく積む)
|
|||
|
|
|
|||
|
|
### Patch 1: Hot alloc に tcache pop を接続(必須)
|
|||
|
|
|
|||
|
|
対象:
|
|||
|
|
- `core/box/tiny_front_hot_box.h`
|
|||
|
|
|
|||
|
|
変更:
|
|||
|
|
- `tiny_hot_alloc_fast(int class_idx)` の先頭で
|
|||
|
|
- `tiny_tcache_try_pop(class_idx)` を試す
|
|||
|
|
- HIT なら `tiny_header_finalize_alloc(base, class_idx)` で即 return
|
|||
|
|
- MISS なら既存の FIFO(`cache->slots[head]`)へフォールバック
|
|||
|
|
|
|||
|
|
要件:
|
|||
|
|
- tcache OFF(default)ではホット経路が肥大しないよう最小差分にする
|
|||
|
|
- “確信がないなら fallback” を厳守(Fail-Fast)
|
|||
|
|
|
|||
|
|
### Patch 2: Hot free に tcache push を接続(推奨)
|
|||
|
|
|
|||
|
|
対象:
|
|||
|
|
- `core/box/tiny_front_hot_box.h`
|
|||
|
|
|
|||
|
|
変更:
|
|||
|
|
- `tiny_hot_free_fast(int class_idx, void* base)` の先頭で
|
|||
|
|
- `tiny_tcache_try_push(class_idx, base)` を試す
|
|||
|
|
- SUCCESS なら `return 1`
|
|||
|
|
- overflow / disabled のときだけ既存 FIFO へ
|
|||
|
|
|
|||
|
|
狙い:
|
|||
|
|
- `unified_cache_push()` 経由以外の “直 push” 経路でも tcache が効く状態にする
|
|||
|
|
|
|||
|
|
### Patch 3: 可視化(最小・TLS)
|
|||
|
|
|
|||
|
|
対象候補:
|
|||
|
|
- `core/box/tiny_tcache_box.h`(TLS カウンタ)
|
|||
|
|
|
|||
|
|
追加(debug / research 用):
|
|||
|
|
- `tcache_pop_hit/miss`
|
|||
|
|
- `tcache_push_hit/overflow`
|
|||
|
|
- “ワンショット dump” を 1 回だけ(ENV opt-in)で出せるようにする
|
|||
|
|
|
|||
|
|
禁止:
|
|||
|
|
- hot path に atomic 統計を置かない(Phase 12 / POOL-DN-BATCH の教訓)
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 3. A/B テスト(同一バイナリ)
|
|||
|
|
|
|||
|
|
Baseline:
|
|||
|
|
```sh
|
|||
|
|
HAKMEM_TINY_TCACHE=0 scripts/run_mixed_10_cleanenv.sh
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
Optimized:
|
|||
|
|
```sh
|
|||
|
|
HAKMEM_TINY_TCACHE=1 scripts/run_mixed_10_cleanenv.sh
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
追加(効果が class 依存か確認):
|
|||
|
|
```sh
|
|||
|
|
HAKMEM_BENCH_C7_ONLY=1 HAKMEM_TINY_TCACHE=0 scripts/run_mixed_10_cleanenv.sh
|
|||
|
|
HAKMEM_BENCH_C7_ONLY=1 HAKMEM_TINY_TCACHE=1 scripts/run_mixed_10_cleanenv.sh
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
cap 探索(research、必要なときだけ):
|
|||
|
|
```sh
|
|||
|
|
HAKMEM_TINY_TCACHE=1 HAKMEM_TINY_TCACHE_CAP=32 scripts/run_mixed_10_cleanenv.sh
|
|||
|
|
HAKMEM_TINY_TCACHE=1 HAKMEM_TINY_TCACHE_CAP=64 scripts/run_mixed_10_cleanenv.sh
|
|||
|
|
HAKMEM_TINY_TCACHE=1 HAKMEM_TINY_TCACHE_CAP=128 scripts/run_mixed_10_cleanenv.sh
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 4. 健康診断(必須)
|
|||
|
|
|
|||
|
|
```sh
|
|||
|
|
scripts/verify_health_profiles.sh
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 5. 判定と扱い
|
|||
|
|
|
|||
|
|
- GO: `bench_profile` への昇格は **MIXED_TINYV3_C7_SAFE のみ**から開始(段階的)
|
|||
|
|
- NEUTRAL/NO-GO: Phase 14 v2 は research box として freeze(default OFF のまま)
|
|||
|
|
- Rollback:
|
|||
|
|
- `export HAKMEM_TINY_TCACHE=0`
|
|||
|
|
|