Files
hakmem/docs/analysis/PHASE40_FAST_V4_REMAINING_GATES_INSTRUCTIONS.md

82 lines
3.3 KiB
Markdown
Raw Permalink Normal View History

Phase 54-60: Memory-Lean mode, Balanced mode stabilization, M1 (50%) achievement ## 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>
2025-12-17 06:24:01 +09:00
# Phase 40 — FAST v4: Remaining Gate PruneDEPRECATED / Historical
この指示書は Phase 40 の初期案です。
- Phase 40 は **`tiny_header_mode()` の BENCH_MINIMAL 定数化が NO-GO** となり、revert 済みです。
- 正しい記録は `docs/analysis/PHASE40_GATE_CONSTANTIZATION_RESULTS.md` を参照してください。
- 次は Phase 41asm-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必須: 実行確認 / 安全確認
1) `HAKMEM_MID_V3_ENABLED` が FAST/Mixed で **OFF 前提**であることを確認するbench preset / cleanenv
- `scripts/run_mixed_10_cleanenv.sh` は export 汚染を防ぐが、MID v3 については明示していないため、必要なら OFF を追加。
2) `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.h`
- `mid_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/BFAST 10-run
コマンド:
- baselineFAST v3: `make perf_fast`
- optimizedFAST 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` ブロックを戻すだけ。