Files
hakmem/docs/analysis/PHASE24_OBSERVE_TAX_PRUNE_1_DESIGN.md

61 lines
1.8 KiB
Markdown
Raw Normal View History

# Phase 24: OBSERVE Tax Prunetiny_class_stats の hot-path atomic を compile-out
**Status**: ✅ GOdefault: compiled-out を維持)
## Problem statement
Tiny の hot path に「観測OBSERVE」用の atomic 増分が残っている:
- `core/box/tiny_class_stats_box.h`
- `tiny_class_stats_on_*()``atomic_fetch_add_explicit()` を実行
観測は研究/診断用途であり、常時コスト(固定税)として残すのは mimalloc 的にも不利。
## Goal
観測目的の atomic を **compile-out** して、hot path の固定税をゼロに寄せる。
- ✅ compile-out: `#if HAKMEM_*_COMPILED`Phase 22 の勝ち筋)
- ❌ link-out: Makefile から `.o` を外すPhase 22-2 の NO-GO
## Scope (v1)
対象5箇所
- `tiny_class_stats_on_uc_miss(ci)`
- `tiny_class_stats_on_warm_hit(ci)`
- `tiny_class_stats_on_shared_lock(ci)`
- `tiny_class_stats_on_tls_carve_attempt(ci)`
- `tiny_class_stats_on_tls_carve_success(ci)`
## DesignBox Theory
### BuildFlagsBoxcompile-time boundary
- `core/hakmem_build_flags.h`
- `HAKMEM_TINY_CLASS_STATS_COMPILED=0/1`default: 0
### API 不変(戻せる / 構造を汚さない)
- `tiny_class_stats_on_*()` の関数形は保持
- compiled-out 時は no-op引数未使用は `(void)ci;` で抑制)
## A/B planbuild-level
1) baselinedefault compile-out
- `make clean && make -j bench_random_mixed_hakmem`
- `scripts/run_mixed_10_cleanenv.sh`
2) compiled-in研究用
- `make clean && make -j EXTRA_CFLAGS='-DHAKMEM_TINY_CLASS_STATS_COMPILED=1' bench_random_mixed_hakmem`
- `scripts/run_mixed_10_cleanenv.sh`
## GO/NO-GO保守運用
この種の “prune” は layout 変化が絡むため、判断は保守的に運用する:
- GO: +0.5% 以上
- NEUTRAL: ±0.5%
- NO-GO: -0.5% 以下revert 推奨)