Files
hakmem/docs/analysis/PHASE41_ASM_FIRST_GATE_AUDIT_INSTRUCTIONS.md

96 lines
3.1 KiB
Markdown
Raw 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 41 — asm-first gate auditFAST build で “呼ばれてる gate” だけ削る)
Phase 40 の教訓:
- “gate を定数化すれば速い” は常に真ではないlayout tax で符号反転する)。
- perf self% だけで gate 税を推定しないheader work 等の実体が混ざる)。
よって Phase 41 は **asm-first**(実際に branch/call が残っているものだけ)で進める。
---
## ゴール
FAST build`make perf_fast`で、hot path に残る “純粋な gate” を減らして **+0.5% 以上**を狙う。
判定build-level:
- GO: +0.5% 以上Mixed 10-run mean
- NEUTRAL: ±0.5%
- NO-GO: -0.5% 以下revert
---
## Step 0: ベースライン固定
1) `make perf_fast` を回して baselineFAST v3の mean/median を記録。
2) そのログを `docs/analysis/PHASE41_ASM_FIRST_GATE_AUDIT_RESULTS.md` に貼る(まずは baseline だけ)。
---
## Step 1: asm inspection必須
目的: “gate を消したつもりが既に最適化されていた/逆に layout を壊した” を避ける。
### 1-A) 対象 gate の存在確認(例)
対象候補Phase 40 準備の優先順から):
- `mid_v3_enabled()``core/box/mid_hotbox_v3_env_box.h`
- `mid_v3_debug_enabled()`(同上)
確認コマンド例(最小):
```sh
objdump -d ./bench_random_mixed_hakmem_minimal | rg -n "mid_v3_enabled|mid_v3_debug_enabled" -n
```
### 判定
- **asm に gate が見える**call/branch が残っている) → Step 2 へ
- **asm に出ない**(既に消えている) → その候補は skip
---
## Step 2: 低リスクの “呼ばれないようにする” を先に
Phase 40 は「関数自体の定数化」で layout 税を踏んだ。
まずは **呼び出し回数を減らす(条件順序の見直し)**を優先する。
### 2-A) alloc 側: size range を先に見る
例(パターン):
- 悪い: `if (mid_v3_enabled() && size_in_range) ...`(常に gate が呼ばれる)
- 良い: `if (size_in_range && mid_v3_enabled()) ...`(範囲外なら gate を呼ばない)
候補箇所:
- `core/box/hak_alloc_api.inc.h` の MID v3 分岐(`mid_v3_enabled()` を含む if
期待: +0.2〜0.5%
---
## Step 3: BENCH_MINIMAL 定数化(最後の手段)
Step 2 で不足する場合のみ、FAST build 限定で gate を定数化する。
### 3-A) mid_v3_enabled/debug を FAST で固定 OFF
条件:
- Mixed/FAST のプリセットで MID v3 がデフォルト OFF研究箱であることが Step 0 で確認できている。
実装:
- `core/box/mid_hotbox_v3_env_box.h``#include "../hakmem_build_flags.h"` を追加
- `#if HAKMEM_BENCH_MINIMAL` のとき `mid_v3_enabled()` / `mid_v3_debug_enabled()``return 0;`
- Standard/OBSERVE は現状維持
注意:
- layout 税が出る可能性があるので、**必ず 10-run** で判定する。
---
## Step 4: A/BFAST 10-run
毎回これを正とする:
- `make perf_fast`FAST binary を `BENCH_BIN` で指定して 10-run
結果を `docs/analysis/PHASE41_ASM_FIRST_GATE_AUDIT_RESULTS.md` に追記して確定判定する。