Files
hakmem/docs/analysis/RESEARCH_BOXES_SSOT.md
Moe Charm (CI) e4c5f05355 Phase 86: Free Path Legacy Mask (NO-GO, +0.25%)
## Summary

Implemented Phase 86 "mask-only commit" optimization for free path:
- Bitset mask (0x7f for C0-C6) to identify LEGACY classes
- Direct call to tiny_legacy_fallback_free_base_with_env()
- No indirect function pointers (avoids Phase 85's -0.86% regression)
- Fail-fast on LARSON_FIX=1 (cross-thread validation incompatibility)

## Results (10-run SSOT)

**NO-GO**: +0.25% improvement (threshold: +1.0%)
- Control:    51,750,467 ops/s (CV: 2.26%)
- Treatment:  51,881,055 ops/s (CV: 2.32%)
- Delta:      +0.25% (mean), -0.15% (median)

## Root Cause

Competing optimizations plateau:
1. Phase 9/10 MONO LEGACY (+1.89%) already capture most free path benefit
2. Remaining margin insufficient to overcome:
   - Two branch checks (mask_enabled + has_class)
   - I-cache layout tax in hot path
   - Direct function call overhead

## Phase 85 vs Phase 86

| Metric | Phase 85 | Phase 86 |
|--------|----------|----------|
| Approach | Indirect calls + table | Bitset mask + direct call |
| Result | -0.86% | +0.25% |
| Verdict | NO-GO (regression) | NO-GO (insufficient) |

Phase 86 correctly avoided indirect call penalties but revealed architectural
limit: can't escape Phase 9/10 overlay without restructuring.

## Recommendation

Free path optimization layer has reached practical ceiling:
- Phase 9/10 +1.89% + Phase 6/19/FASTLANE +16-27% ≈ 18-29% total
- Further attempts on ceremony elimination face same constraints
- Recommend focus on different optimization layers (malloc, etc.)

## Files Changed

### New
- core/box/free_path_legacy_mask_box.h (API + globals)
- core/box/free_path_legacy_mask_box.c (refresh logic)

### Modified
- core/bench_profile.h (added refresh call)
- core/front/malloc_tiny_fast.h (added Phase 86 fast path check)
- Makefile (added object files)
- CURRENT_TASK.md (documented result)

All changes conditional on HAKMEM_FREE_PATH_LEGACY_MASK=1 (default OFF).

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

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2025-12-18 22:05:34 +09:00

50 lines
2.9 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.

# Research Boxes SSOT凍結箱の扱いと迷子防止
目的: 「凍結箱が増えて混乱する」を防ぐ。**削除はしない**layout tax で性能が符号反転しやすいため)。
代わりに **“見える化 + 触らない規約 + cleanenv”**で整理する。
## 原則Box Theory 運用)
- **本線SSOT**: `scripts/run_mixed_10_cleanenv.sh` + `HAKMEM_PROFILE=MIXED_TINYV3_C7_SAFE` を正とする。
- **研究箱FROZEN**: 既定 OFF。使うときは ENV を明示し、A/B は同一バイナリで行う。
- **削除禁止(原則)**:
- `.o` をリンクから外す / 大量削除は layout tax で速度が動くので封印。
- 代替: `#if HAKMEM_*_COMPILED` の compile-out、または hot path からの完全除外(参照しない)で“凍結”する。
## “ころころ”の典型原因と対策
- `HAKMEM_PROFILE` 未指定 → route が変わり数値が破綻
- 対策: 比較スクリプトは必ず `HAKMEM_PROFILE=MIXED_TINYV3_C7_SAFE` を明示
- export 漏れ(過去実験の ENV が残っている)
- 対策: `scripts/run_mixed_10_cleanenv.sh` を正として運用
- 別バイナリ比較layout差
- 対策: allocator reference は `scripts/run_allocator_preload_matrix.sh`同一バイナリLD_PRELOADも併用
- CPU power/thermal の変動(同一マシンでも起きる)
- 対策: `HAKMEM_BENCH_ENV_LOG=1``scripts/run_mixed_10_cleanenv.sh` が簡易環境ログを出力するgovernor/EPP/freq
## 研究箱の“棚卸し”のやり方(手順)
1. ノブ一覧を出す:
- `scripts/list_hakmem_knobs.sh`
2. SSOTで常に固定する値は `scripts/run_mixed_10_cleanenv.sh` に寄せる:
- “本線ON”はデフォルト値にして、漏れ防止で `export ...=${...:-<default>}`
- “研究箱OFF”は `export ...=0` で明示
3. 研究箱を触るときは、必ず結果docに:
- 対象ブ、default、A/B条件binary、profile、ITERS/WS、RUNS
- GO/NEUTRAL/NO-GO と rollback 方法
## いまのおすすめ方針(短縮)
- 本線の性能/安定を崩さない目的なら「研究箱を消す」より「SSOTで踏まない」を徹底するのが安全。
- 研究箱を“削除”するのは、次の条件を満たしたときだけ:
- (1) 少なくとも 2週間以上使っていない、(2) SSOT/bench_profile/cleanenv が参照していない、
(3) 同一バイナリ A/B で削除しても性能が変わらないlayout tax 無い)ことを確認した。
## 外部相談のSSOT貼り付けパケット
凍結箱が増えてくると「どの経路を踏んでるか」が外部に説明しづらくなるので、
レビュー依頼は “圧縮パケット” を正として使う:
- 生成: `scripts/make_chatgpt_pro_packet_free_path.sh`
- スナップショット: `docs/analysis/FREE_PATH_REVIEW_PACKET_CHATGPT.md`