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

399 lines
13 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.

# 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協調開発