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

6.5 KiB
Raw Blame History

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