99 lines
2.4 KiB
Markdown
99 lines
2.4 KiB
Markdown
|
|
# Phase 15: UnifiedCache FIFO→LIFO (Stack) v1 — Next Instructions
|
|||
|
|
|
|||
|
|
設計: `docs/analysis/PHASE15_UNIFIEDCACHE_LIFO_1_DESIGN.md`
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 0. Status / Why now
|
|||
|
|
|
|||
|
|
- Phase 14 v1/v2(intrusive tcache)は **NEUTRAL** → freeze(default OFF)
|
|||
|
|
- 次の狙いは intrusive を増やさず、既存 `slots[]` を使って **FIFO ring → LIFO stack** に変える(形状で命令数と局所性を取りに行く)
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 1. GO 条件
|
|||
|
|
|
|||
|
|
Mixed 10-run(clean env):
|
|||
|
|
- **GO**: mean +1.0% 以上
|
|||
|
|
- **NO-GO**: mean -1.0% 以下
|
|||
|
|
- **NEUTRAL**: ±1.0% → research box freeze
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 2. Patch 順(小さく積む)
|
|||
|
|
|
|||
|
|
### Patch 1: L0 ENV gate box(戻せる)
|
|||
|
|
|
|||
|
|
新規:
|
|||
|
|
- `core/box/tiny_unified_lifo_env_box.{h,c}`
|
|||
|
|
|
|||
|
|
ENV:
|
|||
|
|
- `HAKMEM_TINY_UNIFIED_LIFO=0/1`(default 0)
|
|||
|
|
|
|||
|
|
要件:
|
|||
|
|
- hot path に `getenv()` を置かない(cached)
|
|||
|
|
- bench_profile の `putenv()` 同期が必要なら refresh API を用意(ただし mode 切替の整合に注意)
|
|||
|
|
|
|||
|
|
### Patch 2: L1 LIFO 操作箱(副作用ゼロ)
|
|||
|
|
|
|||
|
|
新規(static inline 想定):
|
|||
|
|
- `core/box/tiny_unified_lifo_box.h`
|
|||
|
|
|
|||
|
|
API:
|
|||
|
|
- `unified_cache_try_pop_lifo(int class_idx) -> void* base_or_null`
|
|||
|
|
- `unified_cache_try_push_lifo(int class_idx, void* base) -> int handled(1/0)`
|
|||
|
|
|
|||
|
|
実装方針:
|
|||
|
|
- `TinyUnifiedCache` の `tail` を “top” とみなす(互換優先)
|
|||
|
|
- LIFO enabled のときは head は使わない(または 0 に固定)
|
|||
|
|
|
|||
|
|
### Patch 3: 統合点(入口で 1 回だけ)
|
|||
|
|
|
|||
|
|
統合候補(優先順):
|
|||
|
|
1) `core/box/tiny_front_hot_box.h`(hot alloc/free の実体)
|
|||
|
|
2) `core/front/tiny_unified_cache.h`(広範囲に効かせたい場合)
|
|||
|
|
|
|||
|
|
原則:
|
|||
|
|
- “mode 判定” は **関数入口で 1 回だけ**
|
|||
|
|
- hot パス中で mode の再判定を散らさない(Phase 11 の反省)
|
|||
|
|
|
|||
|
|
### Patch 4: 可視化(最小)
|
|||
|
|
|
|||
|
|
必要なときだけ:
|
|||
|
|
- LIFO hit/miss を TLS カウンタ(atomic 禁止)
|
|||
|
|
- ワンショット dump(ENV opt-in)
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 3. A/B(同一バイナリ)
|
|||
|
|
|
|||
|
|
Baseline:
|
|||
|
|
```sh
|
|||
|
|
HAKMEM_TINY_UNIFIED_LIFO=0 scripts/run_mixed_10_cleanenv.sh
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
Optimized:
|
|||
|
|
```sh
|
|||
|
|
HAKMEM_TINY_UNIFIED_LIFO=1 scripts/run_mixed_10_cleanenv.sh
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
追加(局所性が効くか):
|
|||
|
|
```sh
|
|||
|
|
HAKMEM_BENCH_C7_ONLY=1 HAKMEM_TINY_UNIFIED_LIFO=0 scripts/run_mixed_10_cleanenv.sh
|
|||
|
|
HAKMEM_BENCH_C7_ONLY=1 HAKMEM_TINY_UNIFIED_LIFO=1 scripts/run_mixed_10_cleanenv.sh
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 4. 健康診断
|
|||
|
|
|
|||
|
|
```sh
|
|||
|
|
scripts/verify_health_profiles.sh
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 5. Rollback
|
|||
|
|
|
|||
|
|
- `export HAKMEM_TINY_UNIFIED_LIFO=0`
|