Files
hakmem/docs/status/PHASE_6.21_PLAN_2025_10_24.md

224 lines
5.0 KiB
Markdown
Raw Normal View 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倍) → 無駄ゼロ ✅
```
**実装**:
```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 実装開始
**期待**: メモリ効率大幅改善、速度維持