Files
hakmem/SOURCE_MAP.md

300 lines
11 KiB
Markdown
Raw Normal View History

# hakmem ソースコードマップ
**最終更新**: 2025-11-01 (Mid Range MT 実装完了)
このガイドは、hakmem アロケータのソースコード構成を説明します。
**📢 最新情報**:
-**Mid Range MT 完了**: mimalloc風 per-thread allocator 実装95-99 M ops/sec
-**P0実装完了**: Tiny Pool リフィル最適化で +5.16% 改善
- 🎯 **ハイブリッド案**: 8-32KB (Mid MT) + 64KB以上 (学習ベース)
- 📋 **詳細**: `MID_MT_COMPLETION_REPORT.md`, `P0_SUCCESS_REPORT.md` 参照
---
## 📂 ディレクトリ構造概要
```
hakmem/
├── core/ # 🔥 メインソースコード (アロケータ実装)
├── docs/ # 📚 ドキュメント
│ ├── analysis/ # 性能分析、ボトルネック調査
│ ├── benchmarks/ # ベンチマーク結果
│ ├── design/ # 設計ドキュメント、アーキテクチャ
│ └── archive/ # 古いドキュメント、フェーズレポート
├── perf_data/ # 📊 perf プロファイリングデータ
├── scripts/ # 🔧 ベンチマーク実行スクリプト
├── bench_*.c # 🧪 ベンチマークプログラム (ルート)
└── *.md # 重要なプロジェクトドキュメント (ルート)
```
---
## 🔥 コアソースコード (`core/`)
### 主要アロケータ実装 (3つのメインプール)
#### 1. Tiny Pool (≤1KB) - 最も重要 ✅ P0最適化完了
**メインファイル**: `core/hakmem_tiny.c` (1,081行, Phase 2D後)
- 超小型オブジェクト用高速アロケータ
- 6-7層キャッシュ階層 (TLS Magazine, Mini-Mag, Bitmap Scan, etc.)
- **✅ P0最適化**: リフィルバッチ化で +5.16% 改善(`hakmem_tiny_refill_p0.inc.h`
- **インクルードモジュール** (Phase 2D-4 で分離):
- `hakmem_tiny_alloc.inc` - 高速アロケーション (ホットパス)
- `hakmem_tiny_free.inc` - 高速フリー (ホットパス)
- `hakmem_tiny_refill.inc.h` - Magazine/Slab リフィル
- `hakmem_tiny_slab_mgmt.inc` - Slab ライフサイクル管理
- `hakmem_tiny_init.inc` - 初期化・構成
- `hakmem_tiny_lifecycle.inc` - スレッド終了処理
- `hakmem_tiny_background.inc` - バックグラウンド処理
- `hakmem_tiny_intel.inc` - 統計・デバッグ
- `hakmem_tiny_fastcache.inc.h` - Fast Head (SLL)
- `hakmem_tiny_hot_pop.inc.h` - Magazine pop (インライン)
- `hakmem_tiny_hotmag.inc.h` - Hot Magazine (インライン)
- `hakmem_tiny_ultra_front.inc.h` - Ultra Bump Shadow
- `hakmem_tiny_remote.inc` - リモートフリー
- `hakmem_tiny_slow.inc` - スロー・フォールバック
**補助モジュール**:
- `hakmem_tiny_magazine.c/.h` - TLS Magazine (2048 items)
- `hakmem_tiny_superslab.c/.h` - SuperSlab 管理
- `hakmem_tiny_tls_ops.h` - TLS 操作ヘルパー
- `hakmem_tiny_mini_mag.h` - Mini-Magazine (32-64 items)
- `hakmem_tiny_stats.c/.h` - 統計収集
- `hakmem_tiny_bg_spill.c/.h` - バックグラウンド Spill
- `hakmem_tiny_remote_target.c/.h` - リモートフリー処理
- `hakmem_tiny_registry.c` - レジストリ (O(1) Slab 検索)
- `hakmem_tiny_query.c` - クエリ API
#### 2. Mid Range MT Pool (8-32KB) - 中型アロケーション ✅ 実装完了
**メインファイル**: `core/hakmem_mid_mt.c/.h` (533行 + 276行)
- mimalloc風 per-thread segment アロケータ
- 3サイズクラス (8KB, 16KB, 32KB)
- 4MB chunksmimalloc 同様)
- TLS lock-free allocation
- **✅ 性能達成**: 95-99 M ops/sec目標100-120Mの80-96%
- **vs System**: 1.87倍高速
- **詳細**: `MID_MT_COMPLETION_REPORT.md`, `docs/design/MID_RANGE_MT_DESIGN.md`
- **ベンチマーク**: `scripts/run_mid_mt_bench.sh`, `scripts/MID_MT_BENCH_README.md`
**旧実装(アーカイブ)**: `core/hakmem_pool.c` (2,486行)
- 4層構造 (TLS Ring, TLS Active Pages, Global Freelist, Page Allocation)
- MT性能で mimalloc の 38%-62%)← Mid MT で解決済み
#### 3. L2.5 Pool (64KB-1MB) - 超大型アロケーション
**メインファイル**: `core/hakmem_l25_pool.c` (1,195行)
- 超大型オブジェクト用アロケータ
- **設定**: `POOL_L25_RING_CAP=16`
---
### 学習層・適応層(ハイブリッド案での位置づけ)
hakmem の独自機能 (mimalloc にはない):
- `hakmem_ace.c/.h` - ACE (Adaptive Cache Engine)
- `hakmem_elo.c/.h` - ELO レーティングシステム (12戦略)
- `hakmem_ucb1.c` - UCB1 Multi-Armed Bandit
- `hakmem_learner.c/.h` - 学習エンジン
- `hakmem_evo.c/.h` - 進化的アルゴリズム
- `hakmem_policy.c/.h` - ポリシー管理
**🎯 ハイブリッド案での役割**:
- **≤1KB (Tiny)**: 学習不要P0で静的最適化完了
- **8-32KB (Mid)**: mimalloc風に移行学習層バイパス
- **≥64KB (Large)**: 学習層が主役ELO戦略選択が効果的
→ 学習層は Large Pool64KB以上に集中、MT性能と学習を両立
---
### コア機能・ヘルパー
- `hakmem.c/.h` - メインエントリーポイント (malloc/free/realloc API)
- `hakmem_config.c/.h` - 環境変数設定
- `hakmem_internal.h` - 内部共通定義
- `hakmem_debug.c/.h` - デバッグ機能
- `hakmem_prof.c/.h` - プロファイリング
- `hakmem_sys.c/.h` - システムコール
- `hakmem_syscall.c/.h` - システムコールラッパー
- `hakmem_batch.c/.h` - バッチ操作
- `hakmem_bigcache.c/.h` - ビッグキャッシュ
- `hakmem_whale.c/.h` - Whale (超大型) アロケーション
- `hakmem_super_registry.c/.h` - SuperSlab レジストリ
- `hakmem_p2.c/.h` - P2 アルゴリズム
- `hakmem_site_rules.c/.h` - サイトルール
- `hakmem_sizeclass_dist.c/.h` - サイズクラス分布
- `hakmem_size_hist.c/.h` - サイズヒストグラム
---
## 🧪 ベンチマークプログラム (ルート)
### 主要ベンチマーク
| ファイル | 対象プール | 目的 | サイズ範囲 |
|---------|-----------|------|-----------|
| `bench_tiny_hot.c` | Tiny Pool | 超高速パス (ホットマガジン) | 8-64B |
| `bench_random_mixed.c` | Tiny Pool | ランダムミックス (現実的) | 8-128B |
| `bench_mid_large.c` | L2 Pool | 中型・大型 (シングルスレッド) | 8-32KB |
| `bench_mid_large_mt.c` | L2 Pool | 中型・大型 (マルチスレッド) | 8-32KB |
### その他のベンチマーク
- `bench_tiny.c` - Tiny Pool 基本ベンチ
- `bench_tiny_mt.c` - Tiny Pool マルチスレッド
- `bench_comprehensive.c` - 総合ベンチ
- `bench_fragment_stress.c` - フラグメンテーションストレス
- `bench_realloc_cycle.c` - realloc サイクル
- `bench_allocators.c` - アロケータ比較
**実行方法**: `scripts/run_*.sh` を使用
---
## 📊 性能プロファイリングデータ (`perf_data/`)
- `perf_mid_large_baseline.data` - L2 Pool ベースライン
- `perf_mid_large_qw.data` - Quick Wins 後
- `perf_random_mixed_*.data` - Tiny Pool プロファイル
- `perf_tiny_hot_*.data` - Tiny Hot プロファイル
**使い方**:
```bash
# プロファイル実行
perf record -o perf_data/output.data ./bench_*
# 結果表示
perf report -i perf_data/output.data
```
---
## 📚 ドキュメント (`docs/`)
### `docs/analysis/` - 性能分析
- `CHATGPT_PRO_ULTRATHINK_RESPONSE.md` - ⭐ ChatGPT Pro からの設計レビュー回答 (2025-11-01)
- `*ANALYSIS*.md` - 性能分析レポート
- `BOTTLENECK*.md` - ボトルネック調査
- `CHATGPT*.md` - ChatGPT との議論
### `docs/benchmarks/` - ベンチマーク結果
- `BENCH_RESULTS_*.md` - 日次ベンチマーク結果
- 最新: `BENCH_RESULTS_2025_10_29.md`
### `docs/design/` - 設計ドキュメント
- `*ARCHITECTURE*.md` - アーキテクチャ設計
- `*DESIGN*.md` - 設計ドキュメント
- `*PLAN*.md` - 実装計画
- 例: `MEM_EFFICIENCY_PLAN.md`, `MIMALLOC_STYLE_HOTPATH_PLAN.md`
### `docs/archive/` - アーカイブ
- 古いフェーズレポート、過去の設計書
- Phase 2A-2C のレポート等
---
## 🔧 スクリプト (`scripts/`)
### ベンチマーク実行
- `run_tiny_hot_sweep.sh` - Tiny Hot パラメータスイープ
- `run_mid_large_triad.sh` - Mid/Large 3種比較
- `run_random_mixed_*.sh` - Random Mixed ベンチ
### プロファイリング
- `prof_sweep.sh` - プロファイリングスイープ
- `hakmem-profile-run.sh` - hakmem プロファイル実行
### その他
- `bench_*.sh` - 各種ベンチマークスクリプト
- `kill_bench.sh` - ベンチマーク強制終了
---
## 📄 重要なルートドキュメント
| ファイル | 内容 |
|---------|------|
| `README.md` | プロジェクト概要 |
| `SOURCE_MAP.md` | 📍 **このファイル** - ソースコード構成ガイド |
| `IMPLEMENTATION_ROADMAP.md` | ⭐ **実装ロードマップ** (ChatGPT Pro推奨) |
| `QUESTION_FOR_CHATGPT_PRO.md` | ✅ アーキテクチャレビュー質問 (回答済み) |
| `ENV_VARS.md` | 環境変数リファレンス |
| `QUICK_REFERENCE.md` | クイックリファレンス |
| `DOCS_INDEX.md` | ドキュメント索引 |
---
## 🔍 コードを読む順序 (推奨)
### 初めて読む人向け
1. **README.md** - プロジェクト全体を理解
2. **core/hakmem.c** - エントリーポイント (malloc/free API)
3. **core/hakmem_tiny.c** - Tiny Pool のメインロジック
- `hakmem_tiny_alloc.inc` - アロケーションホットパス
- `hakmem_tiny_free.inc` - フリーホットパス
4. **core/hakmem_pool.c** - L2 Pool (中型・大型)
5. **QUESTION_FOR_CHATGPT_PRO.md** - 現在の課題と設計方針
### ホットパス最適化を理解したい人向け
1. **core/hakmem_tiny_alloc.inc** - Tiny アロケーション (7層キャッシュ)
2. **core/hakmem_tiny_hotmag.inc.h** - Hot Magazine (インライン)
3. **core/hakmem_tiny_fastcache.inc.h** - Fast Head SLL
4. **core/hakmem_tiny_ultra_front.inc.h** - Ultra Bump Shadow
5. **core/hakmem_pool.c** - L2 Pool TLS Ring
---
## 🚧 現在の状態 (2025-11-01)
### ✅ 最近の完了項目
- ✅ Phase 2D-4: hakmem_tiny.c を 4555行 → 1081行に削減 (76%減)
- ✅ モジュール分離によるコード整理
- ✅ ルートディレクトリ整理 (docs/, perf_data/ 等)
-**P0実装完了**: Tiny Pool リフィルバッチ化(+5.16%
- `core/hakmem_tiny_refill_p0.inc.h` 新規作成
- IPC: 4.71 → 5.35 (+13.6%)
- L1キャッシュミス: -80%
### 📊 ベンチマーク結果P0実装後
-**Tiny Hot 32B**: 215M vs mimalloc 182M (+18% 勝利 🎉)
- ⚠️ **Random Mixed**: 22.5M vs mimalloc 25.1M (-10% 負け)
-**mid_large_mt**: 46-47M vs mimalloc 122M (-62% 惨敗 ← 最大の課題)
### 🎯 次のステップ(ハイブリッド案)
**Phase 1: Mid Range MT最適化**最優先、1週間
- 8-32KB: per-thread segmentmimalloc風実装
- 目標: 100-120 M ops/s現状46Mの2.6倍)
- 学習層への影響: なし64KB以上は無変更
**Phase 2: ChatGPT Pro P1-P2**中優先、3-5日
- Quick補充粒度可変化
- Remote Freeしきい値最適化
- 期待: Random Mixed で +3-5%
詳細: `NEXT_STEP_ANALYSIS.md`, `P0_SUCCESS_REPORT.md`, `3LAYER_FAILURE_ANALYSIS.md`
---
## 🛠️ ビルド方法
```bash
# 基本ビルド
make
# PGO ビルド (推奨)
./build_pgo.sh
# 共有ライブラリ (LD_PRELOAD用)
./build_pgo_shared.sh
# ベンチマーク実行
./scripts/run_tiny_hot_sweep.sh
```
---
**質問・フィードバック**: このドキュメントで分からないことがあれば、お気軽に聞いてください!