# Phase 24: OBSERVE Tax Prune(tiny_class_stats の hot-path atomic を compile-out) **Status**: ✅ GO(default: 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)` ## Design(Box Theory) ### BuildFlagsBox(compile-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 plan(build-level) 1) baseline(default 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 推奨)