Files
hakmem/docs/archive/CURRENT_STATUS_SUMMARY.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

406 lines
11 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.

# HAKMEM現状整理 - 何が実装済みで何が未実装か
**日付:** 2025-10-26
**目的:** 混乱を解消、次のステップを明確化
---
## 🏗️ HAKMEMの3層構造
```
┌─────────────────────────────────────────────────────────┐
│ HAKMEM Memory Allocator │
├─────────────────────────────────────────────────────────┤
│ │
│ [Tiny Pool] 8B - 64B │
│ ├─ SuperSlab (2MB aligned, 32 slabs) │
│ ├─ TLS Magazine (fast cache) │
│ └─ Bitmap allocation │
│ │
│ [Mid Pool] 2KB - 64KB │
│ ├─ Buddy allocator │
│ ├─ ACE learning (CAP調整) │
│ └─ Bridge classes (40KB, 52KB) │
│ │
│ [Large Pool] 128KB - 1MB │
│ ├─ Buddy allocator │
│ ├─ ACE learning (CAP調整) │
│ └─ THP support │
│ │
└─────────────────────────────────────────────────────────┘
```
---
## 📊 各Poolの実装状況
### Tiny Pool8-64B
| 機能 | 状態 | 実装フェーズ | 説明 |
|------|------|--------------|------|
| **サイズクラス** | ✅ 固定 | Phase 6.0 | 8種固定8,16,24,32,40,48,56,64B |
| **SuperSlab割当** | ✅ 動的 | Phase 6.22 | 初回アクセス時にmmap(2MB) |
| **Bitmap管理** | ✅ 実装済み | Phase 6.0 | O(1)ブロック検索 |
| **TLS Magazine** | ✅ 実装済み | Phase 4.0 | 固定CAP、高速キャッシュ |
| **Magazine CAP** | ✅ 固定 | Phase 6.0 | クラスごと固定2048/1024/... |
| **SuperSlab解放** | ❌ **未実装** | **Phase 7.6** | **← これを今から実装!** |
**現状の問題:**
```
✅ 割当は動的(必要な時だけ確保)
❌ 解放は固定(永遠保持)
→ メモリ168% overhead
```
**Phase 7.6目標:**
```
✅ 割当は動的
✅ 解放も動的(空なら返却)
→ メモリ30-50% overhead-75%削減!)
```
---
### Mid Pool2KB-64KB
| 機能 | 状態 | 実装フェーズ | 説明 |
|------|------|--------------|------|
| **サイズクラス** | ✅ 固定 | Phase 6.21 | 7種固定2,4,8,16,32KB + 40,52KB Bridge |
| **DYN1動的1枠** | ❌ **無効化** | Phase 6.21 | 「動的1個=固定と同じ」で削除 |
| **Buddy allocator** | ✅ 実装済み | Phase 2.0 | ページベース割当 |
| **ACE CAP学習** | ✅ 実装済み | Phase 6.21 | ヒット率ベースで動的調整 |
| **Bridge classes** | ✅ 実装済み | Phase 6.21 | 32-64KBギャップ埋め固定 |
| **W_MAX丸め** | ✅ 実装済み | Phase 6.0 | UCB1学習 |
**現状:**
```
✅ サイズクラス固定7個
✅ CAP動的ACEで学習
✅ 境界動的W_MAX学習
❌ クラス数固定DYN1無効化済み
```
**Phase 6.21の決定:**
- DYN1を無効化
- 固定Bridgeクラスに置き換え
- 理由「動的1個だけ = 固定と同じ」
---
### Large Pool128KB-1MB
| 機能 | 状態 | 実装フェーズ | 説明 |
|------|------|--------------|------|
| **サイズクラス** | ✅ 固定 | Phase 2.0 | 5種固定64,128,256,512KB,1MB |
| **Buddy allocator** | ✅ 実装済み | Phase 2.0 | ページベース割当 |
| **ACE CAP学習** | ✅ 実装済み | Phase 6.21 | ヒット率ベースで動的調整 |
| **THP support** | ✅ 実装済み | Phase 6.0 | 2MB+ でTransparent Huge Pages |
**現状:**
```
✅ サイズクラス固定5個
✅ CAP動的ACEで学習
✅ THP有効
```
---
## 🎓 ACEの範囲復習
### ACEが最適化するもの
**対象:** Mid Pool & Large Pool のみ
**最適化項目:**
| 項目 | Mid Pool | Large Pool | Tiny Pool |
|------|----------|------------|-----------|
| CAP在庫量 | ✅ 動的 | ✅ 動的 | ❌ 固定 |
| W_MAX丸め | ✅ 動的 | ❌ 固定 | ❌ 固定 |
| しきい値 | ✅ 動的 | ✅ 動的 | ❌ N/A |
| サイズクラス数 | ❌ 固定 | ❌ 固定 | ❌ 固定 |
**学習手法:**
- UCB1バンディットW_MAX
- ヒット率ベースCAP
- Canary方式しきい値
**Tiny Poolは対象外**
- サイズ範囲が狭い8-64B
- 固定最適化で十分ヒット率90%+
- ACE追加の価値なし
---
## 🔍 DYN1無効化の経緯
### Phase 6.21以前DYN1あり
```c
// Mid Pool
2KB, 4KB, 8KB, 16KB, 32KB // 固定5クラス
+ DYN1 (動的1) // 学習で最適位置決定
// 例: DYN1 = 6KB に収束
実質: 2KB, 4KB, 6KB, 8KB, 16KB, 32KB
```
**問題点:**
- 学習しても結局固定値に収束
- 「動的1個」 = 最終的に固定
- 複雑さだけ増える
- 性能向上なし
### Phase 6.21DYN1無効化
```c
// Mid Pool
2KB, 4KB, 8KB, 16KB, 32KB // 固定5クラス
+ 40KB, 52KB // Bridge classes固定追加
```
**理由:**
- 最初から最適な固定値を入れる方が良い
- DYN1の「動的」は見せかけ
- Bridgeで32-64KBギャップ解消
**結論:**
> **「動的1個だけ = 固定と同じ」**
> (あなたの指摘が正しかった!)
---
## 🎯 Phase 7.6の位置づけ
### Phase 7.6 ≠ サイズクラスの動的化
**Phase 7.6は:**
- ❌ Mid/Large のサイズクラス動的化 **ではない**
-**Tiny Pool の SuperSlab解放** のみ
### なぜTiny Poolだけ
**理由1問題が異なる**
```
Mid/Large: サイズクラスの最適化DYN1
→ Phase 6.21で固定Bridgeに変更済み
Tiny Pool: メモリ解放の問題
→ Phase 7.6で動的解放を実装
```
**理由2手法が異なる**
```
Mid/Large: 学習ベースACE
→ CAP、W_MAX を学習
Tiny Pool: 設計ベースBitmap
→ SuperSlabライフサイクルを動的に
```
**理由3効果が異なる**
```
Mid/Large DYN1: 性能向上なし(無効化済み)
Tiny SuperSlab: メモリ75%削減Phase 7.6
```
---
## 📋 現状まとめ
### 実装済み(変更なし)
| Pool | 項目 | 状態 |
|------|------|------|
| Tiny | サイズクラス | ✅ 固定8種 |
| Tiny | Magazine CAP | ✅ 固定 |
| Tiny | SuperSlab割当 | ✅ 動的 |
| Mid | サイズクラス | ✅ 固定7種Bridge含む |
| Mid | DYN1 | ❌ 無効化済み |
| Mid | ACE CAP学習 | ✅ 動的 |
| Large | サイズクラス | ✅ 固定5種 |
| Large | ACE CAP学習 | ✅ 動的 |
### Phase 7.6で実装(未実装)
| Pool | 項目 | 状態 |
|------|------|------|
| **Tiny** | **SuperSlab解放** | ❌ **未実装** ← これをやる! |
---
## 🚀 今からやること
### Phase 7.6: Tiny SuperSlab 動的解放
**目標:** 空SuperSlabをOSに返却
**実装:**
1. ✅ 追跡インフラ(完了)
- `total_active_blocks` カウンタ追加済み
2. ⏸️ Magazine統合これから
- Magazine free時にカウンタ減算
- 空検出可能に
3. ⏸️ 解放ロジック(これから)
- `total_active_blocks == 0``superslab_free()`
- OSに2MB返却
**効果:**
```
現状: 40.8 MB RSS (168% overhead)
Phase 7.6: 17-20 MB RSS (30-50% overhead)
-75% メモリ削減!
```
**実装量:** ~75行、2-3時間
---
## 🎓 やらないこと
### 1. Mid/Large サイズクラスの動的化
**理由:**
- Phase 6.21でDYN1無効化済み
- 「動的1個 = 固定と同じ」
- 価値なし
**もしやるなら:**
- 全クラス動的化必要DYN1-DYN7
- 複雑さ増大
- 性能劣化リスク
- **推奨しない**
### 2. Tiny Magazine CAPの動的化
**理由:**
- 現状で十分高性能ヒット率90%+
- 固定CAPで最適
- ACE追加の価値なし
### 3. SuperSlabサイズの動的化
**理由:**
- 2MBが最適mimalloc準拠
- 変更の価値なし
---
## 🎯 次のステップ
### 推奨Phase 7.6Tiny SuperSlab解放
**理由:**
- ✅ 効果MAXメモリ75%削減)
- ✅ 実装量小(~75行
- ✅ 論文価値高
- ✅ すでに計画済み
**実装順序:**
```
Step 1: Magazine統合 (~15行)
Step 2: Magazine spill対応 (~10行)
Step 3: 空SuperSlab解放 (~30行)
Step 4: 遅延割当明示 (~20行)
```
### 代替案Mid/Large動的化非推奨
**もしやるなら:**
- DYN1-DYN7を全実装
- 実装量 ~300行
- 時間 1-2週間
- 効果 不明Phase 6.21で無効化した理由あり)
**推奨しない理由:**
- Phase 6.21の決定を覆す
- 「動的1個問題」再発
- 複雑さ増大
---
## 📊 図解:何をやるのか
### Phase 7.6(推奨)
```
対象: Tiny Pool (8-64B)
Before:
SuperSlab割当: 動的 ✅
SuperSlab解放: 固定 ❌ ← 問題
メモリ168% overhead
After:
SuperSlab割当: 動的 ✅
SuperSlab解放: 動的 ✅ ← 解決!
メモリ30-50% overhead
```
### Mid/Large動的化非推奨
```
対象: Mid/Large Pool (2KB-1MB)
Before (Phase 6.21):
サイズクラス: 固定 ✅
CAP: 動的ACE
DYN1: 無効化 ✅
性能・メモリ最適
Afterもし実装したら:
サイズクラス: 動的?
CAP: 動的ACE
DYN1-7: 全動的?
複雑化、効果不明
```
---
## 🎯 結論
### やること
**Phase 7.6: Tiny SuperSlab動的解放**
- ✅ 効果明確メモリ75%削減)
- ✅ 実装量小(~75行
- ✅ 論文価値高
- ✅ すでに追跡インフラ完成
### やらないこと
**Mid/Large サイズクラス動的化**
- ❌ Phase 6.21で無効化済み
- ❌ 「動的1個問題」
- ❌ 複雑化リスク
- ❌ 効果不明
---
## 🐱 にゃーん!わかりましたか?
**次の質問:**
1. **Phase 7.6を実装する?**
→ Step 1Magazine統合から開始
2. **Mid/Large動的化をやりたい**
→ Phase 6.21の決定を再検討
→ DYN1復活の是非を議論
3. **もっと説明が必要?**
→ どこが混乱しているか教えてください
**どれにしますか?** 🎯