# 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倍) → 無駄ゼロ ✅ ``` **実装**: ```c // 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での変更**: ```c // hakmem_policy.c:77 pol->w_max_large = 1.60f; // Phase 2: 緩和 ``` **Phase 6.21での変更**: ```c pol->w_max_large = 1.30f; // 戻す(でもBridge classesでカバー) ``` **効果**: - W_MAX厳しくなる → メモリ無駄減る - でもBridge classesあるから速度低下しない --- ### 3. CAP 削減(4倍 → 1倍) **目的**: メモリフットプリント削減 **Phase 2での変更**: ```c // 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での変更**: ```c 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` ```c pol->w_max_large = 1.30f; // 1.60から戻す ``` ### Step 3: CAP戻し(1分) **ファイル**: `hakmem_policy.c:46-47` ```c // 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分) ```bash make clean make ./test_hakmem # 基本動作確認 ``` ### Step 5: ベンチマーク(5分) ```bash 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 実装開始 **期待**: メモリ効率大幅改善、速度維持