Files
hakmem/docs/archive/CURRENT_TASK.md

399 lines
13 KiB
Markdown
Raw Normal View History

# Current Task: Phase 6.15 - Multi-threaded Safety + TLS Performance
**Date**: 2025-10-22
**Status**: ✅ **P1.5完了!** string-builder ブレークスルー達成 🎉
**Goal**: mimalloc-bench 実行 → 実力測定直リンク400M越え総合で差をつける
---
## 🚀 **Phase 6.15 P1.5 完了報告** (ChatGPT TLS実装)
### 🎊 **最大の成果: string-builder が実行可能に!**
| Phase | string-builder | 結果 |
|-------|----------------|------|
| **P0** | ❌ タイムアウト | 実行不可 |
| **P1** | ❌ タイムアウト | 実行不可 |
| **P1.5** | **83ns/op (11.9M ops/sec)** ✅ | **動いた!** 🚀 |
**mimalloc 比較**: 14ns/op → **5.9倍遅い** が、実行可能になったことが重要
### 📊 **ベンチマーク結果詳細**
**string-builder (8-64B, 小サイズ)**:
- hakmem P1.5: 83ns/op (11.9M ops/sec)
- mimalloc: 14ns/op (67.8M ops/sec)
- 差: -82.4% ← 遅いが実行可能になった!
**json (64KB, 中サイズ)**:
- hakmem P1.5: 280ns/op (3.56M ops/sec)
- mimalloc: 266ns/op (3.76M ops/sec)
- 差: -5.3% ← ほぼ互角
**mir (256KB, 大サイズ)**:
- hakmem P1.5: 911ns/op (1.10M ops/sec)
- mimalloc: 963ns/op (1.04M ops/sec)
- 差: **+5.7% hakmem が速い!** 🚀
### 🛠️ **P1.5 実装内容** (ChatGPT提供)
1. **グローバルロック完全撤廃** + 再入ガード維持
2. **L2 Pool 細粒度ロック化** + atomic nonempty_mask
3. **L2.5 Pool シャードロック化** + atomic bits
4. **Tiny Pool TLSマガジン化****最重要!**
- 構造: `TinyMagazineEntry[256]` with `{ptr, owner_slab}`
- Lock-free push/pop
- Registry は読み取りロックフリー
5. **64KB ページ/バンドル mmap 化**
6. **BigCache 偽共有削減** (64B alignment)
7. **Site Rules 既定 OFF** (`HAKMEM_SITE_RULES=1`で有効化)
**詳細**: `PHASE_6.15_P1.5_COMPLETION.md`
---
## ✅ Phase 9.3 進捗mimalloc風 Tiny fast-path
### 実績(直リンクベンチ)
- Direct (PGO): best 415.75 → 428.62 M ops/sec環境
- System malloc: best 412.23 M ops/sec
- 結果: 直リンクPGOで System を上回る帯まで押し上げ
### 変更概要(ホットパス極小化)
- TLS Magazine: 在庫あり時は即pop→return空時のみ縮小管理
- SuperSlab試行は magazine 空の時のみ(ホットパスに載せない)
- Tiny fast-pathを hak_alloc_at() の最前段に移動成功時は即return
- Tiny命中時はヒストグラム計測もスキップホットパスゼロ負荷
- free側: Magazine空きありなら即push→returnremote-drainは満杯時のみ
### 次の最適化(提案)
1) freeホットパスのさらに薄型化push/returnの一層徹底
2) 共有ライブラリ版LD_PRELOADのPGO・オーバーヘッド削減
3) ベンチマークモード観測・学習完全OFF、PGO、Tiny特化ドキュメント整備
---
## 📈 **Phase 6.15 P1 完了報告** (ChatGPT シャードロック実装)
### ✅ **達成事項**
**json (64KB)**: P0 291ns → P1 279ns (**+4.1%高速化**)
**mir (256KB)**: P0 888ns → P1 880ns (**+0.9%高速化**, mimalloc を **9.4%上回る!**)
### ❌ **問題点**
**string-builder (8-64B)**: 依然としてタイムアウトP1.5で解決)
**詳細**: `PHASE_6.15_P1_BENCHMARK_RESULTS.md`
---
## 🎉 **Phase 6.15 P0 完了報告**
### ✅ **P0.3 達成内容** (2025-10-22 最新)
**実装**:
- ✅ EVOLUTION block 復元(`#if 0``#if HAKMEM_FEATURE_EVOLUTION`
- ✅ 環境変数制御追加(`HAKMEM_EVO_SAMPLE`、デフォルト=0で無効
- ✅ デフォルト無効化でPool ERRORを回避
**ベンチマーク結果** (bench_allocators, 64KB):
| モード | 平均時間 | ops/sec | vs system |
|--------|----------|---------|-----------|
| **hakmem (EVO無効, default)** | 210ns | 4.76M | **+1.0%** ✅ |
| **system malloc** | 208ns | 4.80M | baseline |
| **hakmem (EVO有効, 1024)** | 215ns | 4.64M | **+3.4%** |
**結論**: ✅ **system malloc とほぼ同等の性能を達成!**
**詳細**: `PHASE_6.15_P0.3_COMPLETION.md`
---
### ✅ **P0.2 発見** (Gemini診断)
**調査**:
- ❌ EVOLUTION無効化で性能悪化1.05M → 0.62M、-41%
- ✅ 軽量ベンチマークで system と同等214ns vs 213ns
**学び**:
- larson は重すぎて調査に不向き26分実行
- bench_allocators で基本性能確認すべき
**詳細**: `PHASE_6.15_P0.2_INVESTIGATION.md`
---
### ✅ **P0.1 達成内容** (printf制御)
**実装**:
- ✅ HAKMEM_LOG macro 実装(コンパイル時+実行時制御)
- ✅ 15箇所の printf/fprintf → HAKMEM_LOG 置換
- ✅ Release build: zero overhead
**結果**: printf recursion 問題解決
**詳細**: `PHASE_6.15_P0.1_COMPLETION.md`
---
### ✅ **P0 Safety Lock 達成内容** (Step 2完了)
**実装**:
- ✅ pthread_mutex グローバルロック追加
- ✅ 再帰ガード(`g_hakmem_lock_depth`)実装
- ✅ malloc/free/calloc/realloc wrapper 修正
**性能問題発見**:
- 期待: 13-15M ops/sec
- 実測: 1.2M ops/sec (-92% 😱)
- 原因: printf() recursion → __libc_malloc fallback
**詳細**: `PHASE_6.15_PLAN.md`
---
## 📊 **Phase 6.14 完了 + 問題発見**
### ✅ **Phase 6.14 達成内容**
- Registry ON/OFF 切り替え実装Pattern 2、環境変数 `HAKMEM_USE_REGISTRY`
- O(N) Sequential が O(1) Hash より 2.9-13.7倍速いことを実証
- デフォルト: `g_use_registry = 0` (O(N)、L1 cache hit 95%+)
### ❌ **重大問題発見**
**hakmem は完全スレッドアンセーフ**pthread_mutex が一切無い)
**影響**:
- 1-thread: 15.1M ops/sec ✅ 正常
- 4-thread: 3.3M ops/sec ❌ -78% 崩壊Race Condition
**Phase 6.14 報告の 67.9M ops/sec**: 再現不可能(測定ミスの可能性)
---
## 🎯 **Phase 6.15 実装計画**
**3段階アプローチ** (12-13時間、6日間):
### ✅ **Step 1: ドキュメント更新**(完了)
- [x] Phase 6.14 完了レポート修正
- [x] CURRENT_TASK.md 更新(このファイル)
- [x] 検証完了
### ✅ **Step 2: P0 Safety Lock**(完了)
- [x] pthread_mutex グローバルロック実装
- [x] P0.1: printf制御HAKMEM_LOG macro
- [x] P0.2: clock_gettime影響調査Gemini診断
- [x] P0.3: EVOLUTION復元環境変数制御
- [x] ベンチマーク検証: system malloc と同等(+1.0%
**結果**: ✅ **基本性能 system と同等を達成!**
### ⏭️ **Step 3: TLS マルチスレッド対応**(次の目標)
- **P1**: Tiny Pool TLS2時間→ 4T = 12-15M ops/sec
- **P2**: L2 Pool TLS3時間→ 4T = 15-18M ops/sec
- **P3**: L2.5 Pool TLS3時間→ 4T = 18-22M ops/sec
**Phase 6.13 実績**: 15.9M ops/sec (+381%) ✅ **実証済み**
---
## 📁 **関連ドキュメント**
- **完全計画**: `PHASE_6.15_PLAN.md` (1,008行)
- **サマリー**: `PHASE_6.15_SUMMARY.md` (152行)
- **クイックリファレンス**: `PHASE_6.15_QUICK_REF.md` (269行)
- **技術調査**: `THREAD_SAFETY_SOLUTION.md`
- **P1.5 完了**: `PHASE_6.15_P1.5_COMPLETION.md` (TLSマガジン化) ⭐最新
- **P1 完了**: `PHASE_6.15_P1_BENCHMARK_RESULTS.md` (シャードロック化)
- **P0.1 完了**: `PHASE_6.15_P0.1_COMPLETION.md` (printf制御)
- **P0.2 調査**: `PHASE_6.15_P0.2_INVESTIGATION.md` (Gemini診断)
- **P0.3 完了**: `PHASE_6.15_P0.3_COMPLETION.md` (EVOLUTION復元)
- **Phase 6.14 完了**: `PHASE_6.14_COMPLETION_REPORT.md` (修正済み)
---
## 🔄 **前回完了タスク**
### Phase 6.14 (2025-10-21)
- Registry ON/OFF 切り替え実装Pattern 2
- 環境変数 `HAKMEM_USE_REGISTRY` で切替可能
- O(N) vs O(1) 性能比較完了
### Phase 6.13 (2025-10-21)
- TLS 有効性検証(+123-146% 改善)
- larson benchmark 実施1/4/16 threads
---
## 📊 **hakmem 現在の状況**
> **📌 責務範囲**: このファイルは hakmem 専用です
> - hakmem 実験アプリの進捗・タスク・ベンチマーク結果のみ記載
> - Hakorune 本体の開発タスクは `/CURRENT_TASK.md` へ
> - 横断的な課題も `/CURRENT_TASK.md` へ
**場所**: `/apps/experiments/hakmem-poc/`
**概要**: C言語ABI対応メモリアロケータmimalloc/jemalloc対抗
---
## ✅ **過去の主要完了フェーズ**
### Phase 6.12.1 完了2025-10-21
**実装完了**: ChatGPT Pro (gpt-5) 推奨 Plan A の Step 1+2 完了
**Step 1: SlabTag完全削除** (15分)
- 期待: 18,832ns → 9,400ns (2倍)
- 実測: 18,832ns → 7,355ns (2.56倍) ✨ **予想より22%良い!**
**Step 2: Slab Registry実装** (1時間)
- 期待: 7,355ns → 1,500ns (5倍)
- 実測: 7,355ns → 10,471ns ❌ **43%悪化**
**技術的発見**: slab数が少ない8-16個→ O(N)探索で十分速い
### Phase 6.11.3 完了2025-10-22
**実装完了**: Profiling Infrastructure (オーバーヘッド可視化)
**測定結果** (vm scenario, 10 iterations):
```
syscall_munmap: 131,666 cycles (41.3%) ← #1 既知のボトルネック
hak_alloc: 126,479 cycles (39.6%) ← #2 新発見! 🔥
hak_free: 48,206 cycles (15.1%)
```
### Phase 6.11.2 完了2025-10-21
**実装完了**: Region Cache (Keep-Map + MADV_DONTNEED) 戦略
**測定結果**:
```
Phase 6.11.1 (Whale only): 19,132 ns/op
Phase 6.11.2 (Region Cache): 15,021 ns/op
追加改善: -4,111 ns (-21.5%)
```
### Phase 6.11.1 完了2025-10-21
**実装完了**: Whale Fast-Path (≥2MB allocations) + Timing Infrastructure
**測定結果**:
```
Before: 48,052 ns/op
After: 19,132 ns/op (-60.2%, -28,920ns)
Whale: 99 hits / 1 miss / 100 puts (99% hit rate!)
```
### Phase 6.10.1 完了2025-10-21
**実装完了**: ChatGPT Pro 推奨の4つの最適化
**ベンチマーク結果** (vs mimalloc):
- **json** (64KB): 298 ns (+0.3%) ← ✅ **ほぼ互角!**
- **mir** (256KB): 1698 ns (+47.8%)
- **vm** (2MB): 41312 ns (+142.8%)
---
## 🔧 環境変数
### Phase 6.4-6.10.1(実装済み)
```bash
# P1: Freeポリシー
HAKMEM_FREE_POLICY=batch|keep|adaptive
# P4: THP
HAKMEM_THP=off|auto|on
# Registry ON/OFF (Phase 6.14)
HAKMEM_USE_REGISTRY=0|1
# Profiling (Phase 6.11.3)
HAKMEM_DEBUG_TIMING=1 # Build-time
HAKMEM_TIMING=1 # Runtime
# デバッグ
HAKMEM_VERBOSE=1
```
---
## 📈 ベンチマーク実行方法
### ビルド
```bash
cd /home/tomoaki/git/hakorune-selfhost/apps/experiments/hakmem-poc
make clean
make bench_allocators
```
### 実行
```bash
# 個別ベンチマーク
./bench_allocators --allocator hakmem-baseline --scenario json
# 全ベンチマーク8種類
for scenario in json mir vm mixed cold-churn burst phase-change realistic; do
./bench_allocators --allocator hakmem-baseline --scenario "$scenario"
done
```
### larson benchmarkMulti-threaded
```bash
# mimalloc-bench から larson をビルド
cd /path/to/mimalloc-bench/bench/larson
make
# hakmem preload で実行
LD_PRELOAD=/home/tomoaki/git/hakorune-selfhost/apps/experiments/hakmem-poc/libhakmem.so \
./larson 1 1000 8 1024 100
# 4-thread
LD_PRELOAD=.../libhakmem.so ./larson 4 1000 8 1024 100
```
---
## 📚 ドキュメント一覧
### Phase 6関連
| ファイル | 内容 |
|---------|------|
| [PHASE_6.15_PLAN.md](PHASE_6.15_PLAN.md) | Phase 6.15 完全計画 ⭐最新 |
| [PHASE_6.15_SUMMARY.md](PHASE_6.15_SUMMARY.md) | Phase 6.15 サマリー ⭐最新 |
| [PHASE_6.14_COMPLETION_REPORT.md](PHASE_6.14_COMPLETION_REPORT.md) | Registry ON/OFF + Thread Safety Issue |
| [PHASE_6.13_INITIAL_RESULTS.md](PHASE_6.13_INITIAL_RESULTS.md) | TLS 有効性検証 |
| [PHASE_6.12.1_COMPLETION_REPORT.md](PHASE_6.12.1_COMPLETION_REPORT.md) | Tiny Pool P0最適化 |
| [PHASE_6.12_COMPLETION_REPORT.md](PHASE_6.12_COMPLETION_REPORT.md) | Tiny Pool 基本実装 |
| [PHASE_6.11.3_COMPLETION_REPORT.md](PHASE_6.11.3_COMPLETION_REPORT.md) | Profiling Infrastructure |
| [PHASE_6.11.2_COMPLETION_REPORT.md](PHASE_6.11.2_COMPLETION_REPORT.md) | Region Cache |
| [PHASE_6.11.1_COMPLETION_REPORT.md](PHASE_6.11.1_COMPLETION_REPORT.md) | Whale Fast-Path |
| [PHASE_6.10.1_COMPLETION_REPORT.md](PHASE_6.10.1_COMPLETION_REPORT.md) | Site Rules MVP + L2最適化 |
| [THREAD_SAFETY_SOLUTION.md](THREAD_SAFETY_SOLUTION.md) | スレッドセーフ化技術調査 ⭐最新 |
### 設計・論文
| ファイル | 内容 |
|---------|------|
| [BENCHMARK_DESIGN.md](BENCHMARK_DESIGN.md) | ベンチマーク設計 |
| [PAPER_SUMMARY.md](PAPER_SUMMARY.md) | 論文サマリー |
---
## ⏭️ **次のアクション**
1. ✅ Step 1.1 完了Phase 6.14 完了レポート修正完了)
2. ✅ Step 1.2 完了CURRENT_TASK.md 更新完了)
3. ▶️ Step 1.3 検証README.md 確認、検証コマンド実行)
4. ▶️ Step 2 P0 実装開始Safety Lock、2-3時間
---
**最終更新**: 2025-10-22
**担当**: Claude + ChatGPT Pro協調開発