Files
hakmem/docs/status/PHASE_6.21_PLAN_2025_10_24.md
Moe Charm (CI) 52386401b3 Debug Counters Implementation - Clean History
Major Features:
- Debug counter infrastructure for Refill Stage tracking
- Free Pipeline counters (ss_local, ss_remote, tls_sll)
- Diagnostic counters for early return analysis
- Unified larson.sh benchmark runner with profiles
- Phase 6-3 regression analysis documentation

Bug Fixes:
- Fix SuperSlab disabled by default (HAKMEM_TINY_USE_SUPERSLAB)
- Fix profile variable naming consistency
- Add .gitignore patterns for large files

Performance:
- Phase 6-3: 4.79 M ops/s (has OOM risk)
- With SuperSlab: 3.13 M ops/s (+19% improvement)

This is a clean repository without large log files.

🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-05 12:31:14 +09:00

5.0 KiB
Raw Blame History

Phase 6.21: ChatGPT Pro 省メモリ案実装

日付: 2025-10-24 目標: メモリ効率最適化(速度維持) 実装時間: 20分予定


🎯 実装方針

ChatGPT Pro提案の採用理由

Phase 6.20の結果分析:

  • CAP 4倍化: メモリ78MB使用、でも速度改善なし
    • Mid 1T: 29% vs mimalloc変わらず
    • Mid 4T: 64% vs mimalloc変わらず

結論: CAP大きくしても速度に影響しない → ならメモリ節約しよう!


📋 実装内容

1. Bridge Classes追加40KB, 52KB Key!

目的: 32-64KB ギャップ解消

現状の問題:

Size classes: 32KB → 64KB (2倍のギャップ)

要求 40KB:
  - W_MAX=1.30 → 64KB使用不可1.6倍>1.30 → malloc fallback
  - W_MAX=1.60 → 64KB使用1.6倍≤1.60 → 24KB無駄60%

解決策:

Size classes: 32KB → 40KB → 52KB → 64KB

要求 40KB:
  - 40KB class使用1.0倍) → 無駄ゼロ ✅

実装:

// hakmem_pool.c

// BEFORE: 5 classes
static const size_t g_mid_sizes[5] = {
    2048, 4096, 8192, 16384, 32768
};

// AFTER: 7 classes (40KB, 52KB追加)
static const size_t g_mid_sizes[7] = {
    2048,    // 2KB
    4096,    // 4KB
    8192,    // 8KB
    16384,   // 16KB
    32768,   // 32KB
    40960,   // 40KB  ← NEW!
    53248,   // 52KB  ← NEW!
};

2. W_MAX_LARGE 緊縮1.60 → 1.30

目的: メモリ無駄削減

Phase 2での変更:

// hakmem_policy.c:77
pol->w_max_large = 1.60f;  // Phase 2: 緩和

Phase 6.21での変更:

pol->w_max_large = 1.30f;  // 戻すでもBridge classesでカバー

効果:

  • W_MAX厳しくなる → メモリ無駄減る
  • でもBridge classesあるから速度低下しない

3. CAP 削減4倍 → 1倍

目的: メモリフットプリント削減

Phase 2での変更:

// hakmem_policy.c:46-47
uint16_t mid_defaults[5]   = { 256, 256, 256, 128, 64 };  // 60MB
uint16_t large_defaults[5] = { 32, 32, 16, 8, 4 };        // 18MB
// 合計: 78MB

Phase 6.21での変更:

uint16_t mid_defaults[7]   = { 64, 64, 64, 32, 16, 32, 32 };  // 17.25MB
uint16_t large_defaults[5] = { 8, 8, 4, 2, 1 };               // 4.5MB
// 合計: 21.75MB (Bridge 2個分追加で少し増えるが、元より大幅減)

効果: 78MB → 22MB約1/3.5削減)


📊 期待される効果

指標 Phase 6.20 (現状) Phase 6.21 (予測) 変化
メモリ使用量 78 MB 22 MB 1/3.5削減
Mid Pool無駄 ~60% <10% 大幅改善
速度 (Mid 1T) 4.3M (29%) ~4.3M (29%) ➡️ 変わらず
速度 (Mid 4T) 9.6M (64%) ~9.6M (64%) ➡️ 変わらず
Tiny 4T 51.3M (120%) 51.3M (120%) ➡️ 維持

根拠: Phase 6.20でCAP↑でも速度変わらず証明済み


🔧 実装手順

Step 1: Bridge Classes追加10分

ファイル: hakmem_pool.c

  1. POOL_NUM_CLASSES 5→7に変更
  2. g_mid_sizes[] 配列に40KB, 52KB追加
  3. 配列サイズ依存箇所を確認・修正

Step 2: W_MAX戻し1分

ファイル: hakmem_policy.c:77

pol->w_max_large = 1.30f;  // 1.60から戻す

Step 3: CAP戻し1分

ファイル: hakmem_policy.c:46-47

// Mid: 7クラス分Bridge含む
uint16_t mid_defaults[7] = { 64, 64, 64, 32, 16, 32, 32 };

// Large: 元に戻す
uint16_t large_defaults[5] = { 8, 8, 4, 2, 1 };

Step 4: ビルドテスト5分

make clean
make
./test_hakmem  # 基本動作確認

Step 5: ベンチマーク5分

cd mimalloc-bench/bench/larson
./bench.sh  # Mid Pool重点測定

成功基準

Must Have:

  • ビルド成功
  • test_hakmem通過
  • メモリ使用量削減確認78MB→22MB

Should Have:

  • Mid Pool速度維持29-64%維持)
  • Tiny Pool速度維持120%維持)

Nice to Have:

  • 🎯 Mid Pool速度改善29%→35%+
    • Bridge classesのメモリ効率が速度にプラス影響する可能性

📁 変更ファイル

hakmem/
├── hakmem_pool.c       # Bridge classes追加
├── hakmem_pool.h       # POOL_NUM_CLASSES変更
├── hakmem_policy.c     # W_MAX/CAP戻し
└── docs/status/
    ├── PHASE_6.21_PLAN_2025_10_24.md     ← このファイル
    └── PHASE_6.21_RESULTS_2025_10_24.md  ← 後で作成

🎓 設計思想

Phase 2 vs Phase 6.21

Phase 2 (失敗):

  • アプローチ: CAP↑で速度改善狙い
  • 結果: メモリ↑、速度変わらず
  • 学び: CAPは速度に影響しない

Phase 6.21 (賢い):

  • アプローチ: メモリ↓、速度維持
  • 根拠: Phase 2の学び活用
  • 戦略: Bridge classesで機能カバー

計画作成: 2025-10-24 19:50 JST 実装開始: Phase 6.21 実装開始 期待: メモリ効率大幅改善、速度維持