# 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→return(remote-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 TLS(2時間)→ 4T = 12-15M ops/sec - **P2**: L2 Pool TLS(3時間)→ 4T = 15-18M ops/sec - **P3**: L2.5 Pool TLS(3時間)→ 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 benchmark(Multi-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協調開発