## Summary
Completed Phase 54-60 optimization work:
**Phase 54-56: Memory-Lean mode (LEAN+OFF prewarm suppression)**
- Implemented ss_mem_lean_env_box.h with ENV gates
- Balanced mode (LEAN+OFF) promoted as production default
- Result: +1.2% throughput, better stability, zero syscall overhead
- Added to bench_profile.h: MIXED_TINYV3_C7_BALANCED preset
**Phase 57: 60-min soak finalization**
- Balanced mode: 60-min soak, RSS drift 0%, CV 5.38%
- Speed-first mode: 60-min soak, RSS drift 0%, CV 1.58%
- Syscall budget: 1.25e-7/op (800× under target)
- Status: PRODUCTION-READY
**Phase 59: 50% recovery baseline rebase**
- hakmem FAST (Balanced): 59.184M ops/s, CV 1.31%
- mimalloc: 120.466M ops/s, CV 3.50%
- Ratio: 49.13% (M1 ACHIEVED within statistical noise)
- Superior stability: 2.68× better CV than mimalloc
**Phase 60: Alloc pass-down SSOT (NO-GO)**
- Implemented alloc_passdown_ssot_env_box.h
- Modified malloc_tiny_fast.h for SSOT pattern
- Result: -0.46% (NO-GO)
- Key lesson: SSOT not applicable where early-exit already optimized
## Key Metrics
- Performance: 49.13% of mimalloc (M1 effectively achieved)
- Stability: CV 1.31% (superior to mimalloc 3.50%)
- Syscall budget: 1.25e-7/op (excellent)
- RSS: 33MB stable, 0% drift over 60 minutes
## Files Added/Modified
New boxes:
- core/box/ss_mem_lean_env_box.h
- core/box/ss_release_policy_box.{h,c}
- core/box/alloc_passdown_ssot_env_box.h
Scripts:
- scripts/soak_mixed_single_process.sh
- scripts/analyze_epoch_tail_csv.py
- scripts/soak_mixed_rss.sh
- scripts/calculate_percentiles.py
- scripts/analyze_soak.py
Documentation: Phase 40-60 analysis documents
## Design Decisions
1. Profile separation (core/bench_profile.h):
- MIXED_TINYV3_C7_SAFE: Speed-first (no LEAN)
- MIXED_TINYV3_C7_BALANCED: Balanced mode (LEAN+OFF)
2. Box Theory compliance:
- All ENV gates reversible (HAKMEM_SS_MEM_LEAN, HAKMEM_ALLOC_PASSDOWN_SSOT)
- Single conversion points maintained
- No physical deletions (compile-out only)
3. Lessons learned:
- SSOT effective only where redundancy exists (Phase 60 showed limits)
- Branch prediction extremely effective (~0 cycles for well-predicted branches)
- Early-exit pattern valuable even when seemingly redundant
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
3.3 KiB
3.3 KiB
Phase 40 — FAST v4: Remaining Gate Prune(DEPRECATED / Historical)
この指示書は Phase 40 の初期案です。
- Phase 40 は
tiny_header_mode()の BENCH_MINIMAL 定数化が NO-GO となり、revert 済みです。 - 正しい記録は
docs/analysis/PHASE40_GATE_CONSTANTIZATION_RESULTS.mdを参照してください。 - 次は Phase 41(asm-first 監査)へ進むのが正です。
目的: FAST build(HAKMEM_BENCH_MINIMAL=1)の hot path に残る lazy-init / ENV gate をさらに compile-time 定数化して固定税を削る。
前提(運用の正):
- 性能比較は FAST build(
make perf_fast)を正とする。 - 判定は build-level: GO +0.5% / NEUTRAL ±0.5% / NO-GO -0.5%(Mixed 10-run mean)。
- link-out / 物理削除はしない(layout/LTO で符号反転する)。
Step 0(必須): 実行確認 / 安全確認
HAKMEM_MID_V3_ENABLEDが FAST/Mixed で OFF 前提であることを確認する(bench preset / cleanenv)。
scripts/run_mixed_10_cleanenv.shは export 汚染を防ぐが、MID v3 については明示していないため、必要なら OFF を追加。
tiny_header_modeの default が FULL であることを確認する(現状HAKMEM_TINY_HEADER_MODE未設定 → FULL)。
Step 1(優先A): tiny_header_mode() の FAST 定数化(FULL 固定)
ターゲット:
core/tiny_region_id.hのtiny_header_mode()(alloc hot から呼ばれている)
実装方針:
#if HAKMEM_BENCH_MINIMALのときtiny_header_mode()をTINY_HEADER_MODE_FULL固定にする。- Standard/OBSERVE は現状維持(ENV で切替可能)。
推奨(追加で検討):
tiny_region_id_write_header()の “HOTFULL=1” 分岐内でtiny_header_mode()を呼んでいる箇所は、FAST では FULL 固定なので呼ばない形に寄せられる(I-cache/分岐削減)。
期待: +0.3〜0.8%(※ 実測では NO-GO になった)
Step 2(優先B): mid_v3_enabled / mid_v3_debug_enabled の FAST 定数化(OFF 固定)
ターゲット:
core/box/mid_hotbox_v3_env_box.hmid_v3_enabled()mid_v3_debug_enabled()
実装方針:
#if HAKMEM_BENCH_MINIMALでは両方0固定。- Standard/OBSERVE は現状維持(研究箱として ENV opt-in)。
注意:
- free 側の
hak_free_at()や alloc 側のhak_malloc()(core/box/hak_alloc_api.inc.h)でmid_v3_enabled()が頻繁に呼ばれているため、定数化で呼び出し自体を消せる可能性がある。
期待: +0.2〜0.5%(enabled) +0.1〜0.3%(debug)
Step 3: A/B(FAST 10-run)
コマンド:
- baseline(FAST v3):
make perf_fast - optimized(FAST v4):
make perf_fast
判定:
- GO: +0.5% 以上
- NEUTRAL: ±0.5%(code cleanliness で採用可)
- NO-GO: -0.5% 以下(revert)
ログ更新:
docs/analysis/PHASE40_FAST_V4_REMAINING_GATES_RESULTS.mdを新規作成して 10-run mean/median を記録。docs/analysis/PERFORMANCE_TARGETS_SCORECARD.mdの FAST build 履歴を更新。
Rollback(戻せる)
- すべて
#if HAKMEM_BENCH_MINIMALの中だけを触る(Standard/OBSERVE は無傷)。 - revert は対象ファイルの
#if HAKMEM_BENCH_MINIMALブロックを戻すだけ。