# Performance History: 62M → 80M ops/s (Random Mixed 256B) **Date**: 2025-11-20 ~ 2025-11-24 **Branch**: master (before Larson bug) **Baseline**: 62M ops/s (larson-fix @ 5c8567562) **Peak**: ~80M ops/s (master @ d26519f67) --- ## 主要な性能改善コミット ### 1. Phase UNIFIED-HEADER (+17%, 最大の改善) **Commit**: `472b6a60b` - Phase UNIFIED-HEADER: C7 header unification **内容**: - C7 (1KB class) のヘッダーを他のクラス(C0-C6)と統一 - Offset=1 に統一(C0/C7 は offset=0 から offset=1 へ変更) - Fast path の分岐を削減 **改善幅**: **+17%** (73% → 88% of System malloc) **関連ファイル**: - `core/box/ptr_conversion_box.h` - Pointer conversion unified - `core/tiny_nextptr.h` - Next pointer offset unified --- ### 2. UNIFIED-HEADER Bug Fixes (+15-41%) **Commit**: `d26519f67` - Fix Phase UNIFIED-HEADER critical bugs **内容**: - UNIFIED-HEADER 実装のバグ修正 - Header restoration の不具合修正 - Alignment エラー解消 **改善幅**: **+15-41%** (ケースによる) **関連ファイル**: - `core/box/ptr_conversion_box.h` - Bug fixes - `core/tiny_region_id.h` - Header handling fixes --- ### 3. tiny_get_max_size Inline化 (+2M ops/s) **Commit**: `e81fe783d` - Optimize tiny_get_max_size inline **内容**: - `tiny_get_max_size()` を header に移動して inline 化 - Cached static variable で ENV lookup 削減 **改善幅**: **+2M ops/s** **関連ファイル**: - `core/hakmem_tiny.h` - Function moved to header - `core/hakmem_tiny_config_box.inc` - Simplified --- ### 4. Superslab Min-Keep Policy (+1M ops/s) **Commit**: `04a60c316` - Tune Superslab Min-Keep and Shared Pool Soft Caps **内容**: - `tiny_min_keep` policy 導入(クラス別 Superslab reserve) - mmap/munmap churn 削減 - Soft cap 緩和(C4-C6) **改善幅**: **+1M ops/s** **⚠️ 注意**: larson-master-rebuild では Larson クラッシュのため Revert 済み **関連ファイル**: - `core/hakmem_policy.c` - Min-Keep values - `core/hakmem_policy.h` - FrozenPolicy struct --- ### 5. Unified Cache Tuning (+1M ops/s) **Commit**: `392d29018` - Tune Unified Cache capacity/batch & Fix build deps **内容**: - Unified Cache の容量調整 - Batch size 最適化 - Build dependency 修正 **改善幅**: **+1M ops/s** **関連ファイル**: - `core/front/tiny_unified_cache.h` - Capacity tuning - `core/front/tiny_unified_cache.c` - Batch size --- ### 6. Stage 1 Lock-Free (+0.3M ops/s) **Commit**: `dcd89ee88` - Stage 1 lock-free + Unified Cache stats **内容**: - Stage 1 を lock-free 化 - Unified Cache stats 追加 - Stage 0.5 を default OFF **改善幅**: **+0.3M ops/s** **関連ファイル**: - `core/hakmem_shared_pool.c` - Lock-free Stage 1 --- ### 7. Shared Pool Optimizations **Commits**: - `d9c17ea77` - Preallocate Superslab outside alloc_lock - `590fe3e3f` - Enable L0 hot slot (ENV gated) - `5fe0b7762` - Cache slab per class **内容**: - Shared Pool の Stage3 contention 削減 - L0 hot slot キャッシュ - Per-class slab キャッシュ **改善幅**: 累積で +2-3M ops/s (推定) **関連ファイル**: - `core/hakmem_shared_pool.c` - Stage optimizations - `core/box/sp_*.inc` - Box refactoring --- ## ⚠️ クリティカルバグ(Larson クラッシュ) ### Step 2.5 Bug **Commits**: - `19c1abfe7` - Fix Unified Cache TLS SLL bypass (⚠️ Larson クラッシュの原因) - `1a301c1a2` - Add header restoration for TLS SLL pop **問題**: - Unified Cache refill 時に TLS SLL から pop する実装 - Cross-thread TLS SLL corruption が発生 - Larson benchmark で 100% クラッシュ **影響**: - Random Mixed: 動作正常 - Larson: `free(): invalid pointer` → Segmentation fault **対処**: - larson-fix ブランチ (5c8567562) で Step 2.5 前の状態を保持 - larson-master-rebuild で Step 2.5 を含まない stable 版を構築 **詳細**: `LEARNING_SYSTEM_BUGS_P0.md` --- ## 累積改善の内訳 | コミット | 内容 | 改善幅 | 累積 | |---------|------|--------|------| | Baseline | larson-fix | - | 62M ops/s | | 472b6a60b | UNIFIED-HEADER | **+17%** | ~72M ops/s | | d26519f67 | UH bug fixes | +15-41% | ~80M ops/s | | e81fe783d | Inline optimization | +2M | ~82M ops/s | | 04a60c316 | Min-Keep policy | +1M | ~83M ops/s | | 392d29018 | Cache tuning | +1M | ~84M ops/s | | dcd89ee88 | Lock-free | +0.3M | ~84.3M ops/s | | Shared Pool | Various | +2-3M | **~86M ops/s** (理論値) | **⚠️ 注意**: - 80M ops/s 時点では Step 2.5 バグによりLarson クラッシュ - larson-master-rebuild (67M ops/s) は UNIFIED-HEADER を含まない安定版 --- ## larson-master-rebuild の構成 **現在のブランチ**: `larson-master-rebuild` @ bea839add **ポート済みコミット**: 1. ✅ `e81fe783d` - tiny_get_max_size inline (+2M) 2. ❌ `04a60c316` - Min-Keep policy (Revert済み、Larsonクラッシュ) 3. ❌ `472b6a60b` - UNIFIED-HEADER (E1-CORRECTと互換性なし、未ポート) 4. ❌ `d26519f67` - UH bug fixes (上記と同様) 5. ❌ `392d29018` - Cache tuning (Conflict多数、未ポート) **性能**: - Random Mixed: 66.82M ops/s (Baseline 62M比 +7.8%) - Larson: 51.95M ops/s (安定、0% クラッシュ) **アーキテクチャ差異**: - master: UNIFIED-HEADER (C0-C7 offset=1) - larson-master-rebuild: E1-CORRECT (C0,C7 offset=0; C1-C6 offset=1) --- ## 次のステップ候補 ### Option 1: larson-master-rebuild を新 master に(推奨) - ✅ 安定(Larson 動作) - ✅ 67M ops/s (Baseline比 +7.8%) - ❌ 80M には届かない ### Option 2: master で Step 2.5 を Revert(困難) - ✅ 80M ops/s 達成可能 - ❌ Revert conflict が複雑(`unified_cache_refill()` 33行の変更) - ❌ 35+ 回の修正試行が失敗済み ### Option 3: UNIFIED-HEADER を larson にポート(時間かかる) - ✅ 80M ops/s 達成可能 - ❌ E1-CORRECT との互換性問題 - ❌ 大規模な書き換えが必要 --- ## 関連ドキュメント - `LEARNING_SYSTEM_BUGS_P0.md` - Step 2.5 バグ詳細 - `CURRENT_TASK.md` - larson-master-rebuild 作業計画 - `docs/status/CURRENT_TASK.md` - 最新タスク状況 - `docs/specs/ENV_VARS.md` - 環境変数リファレンス --- ## まとめ 62M → 80M の改善は**UNIFIED-HEADER (+17%)** と **Bug fixes (+15-41%)** が主要因。 しかし、**Step 2.5 バグ**により Larson が 100% クラッシュするため、現時点では: - **Random Mixed のみ**: master (80M ops/s, Larson クラッシュ) - **Larson 含む**: larson-master-rebuild (67M ops/s, 安定) の2つのブランチで運用するのが現実的。