Files
hakmem/PERFORMANCE_HISTORY_62M_TO_80M.md
Moe Charm (CI) d26dd092bb Document performance improvements from 62M → 80M ops/s
Created comprehensive record of all optimization commits that led to
80M ops/s Random Mixed performance on master branch:

- UNIFIED-HEADER (472b6a60b): +17% improvement
- Bug fixes (d26519f67): +15-41% improvement
- tiny_get_max_size inline (e81fe783d): +2M ops/s
- Min-Keep policy (04a60c316): +1M ops/s
- Unified Cache tuning (392d29018): +1M ops/s
- Stage 1 lock-free (dcd89ee88): +0.3M ops/s
- Shared Pool optimizations: +2-3M ops/s

Also documents:
- Step 2.5 bug (19c1abfe7) causing 100% Larson crash
- Architecture differences (E1-CORRECT vs UNIFIED-HEADER)
- Current state comparison between master and larson-master-rebuild
- Three future options with trade-offs

This documentation preserves knowledge of the 80M optimization path
for future reference when larson-master-rebuild becomes new master.

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-26 16:52:18 +09:00

228 lines
6.5 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.

# 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つのブランチで運用するのが現実的。