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>
13 KiB
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提供)
- グローバルロック完全撤廃 + 再入ガード維持
- L2 Pool 細粒度ロック化 + atomic nonempty_mask
- L2.5 Pool シャードロック化 + atomic bits
- Tiny Pool TLSマガジン化 ← 最重要!
- 構造:
TinyMagazineEntry[256]with{ptr, owner_slab} - Lock-free push/pop
- Registry は読み取りロックフリー
- 構造:
- 64KB ページ/バンドル mmap 化
- BigCache 偽共有削減 (64B alignment)
- 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は満杯時のみ)
次の最適化(提案)
- freeホットパスのさらに薄型化(push/returnの一層徹底)
- 共有ライブラリ版(LD_PRELOAD)のPGO・オーバーヘッド削減
- ベンチマークモード(観測・学習完全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: ドキュメント更新(完了)
- Phase 6.14 完了レポート修正
- CURRENT_TASK.md 更新(このファイル)
- 検証完了
✅ Step 2: P0 Safety Lock(完了)
- pthread_mutex グローバルロック実装
- P0.1: printf制御(HAKMEM_LOG macro)
- P0.2: clock_gettime影響調査(Gemini診断)
- P0.3: EVOLUTION復元+環境変数制御
- ベンチマーク検証: 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(実装済み)
# 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
📈 ベンチマーク実行方法
ビルド
cd /home/tomoaki/git/hakorune-selfhost/apps/experiments/hakmem-poc
make clean
make bench_allocators
実行
# 個別ベンチマーク
./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)
# 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 完全計画 ⭐最新 |
| PHASE_6.15_SUMMARY.md | Phase 6.15 サマリー ⭐最新 |
| PHASE_6.14_COMPLETION_REPORT.md | Registry ON/OFF + Thread Safety Issue |
| PHASE_6.13_INITIAL_RESULTS.md | TLS 有効性検証 |
| PHASE_6.12.1_COMPLETION_REPORT.md | Tiny Pool P0最適化 |
| PHASE_6.12_COMPLETION_REPORT.md | Tiny Pool 基本実装 |
| PHASE_6.11.3_COMPLETION_REPORT.md | Profiling Infrastructure |
| PHASE_6.11.2_COMPLETION_REPORT.md | Region Cache |
| PHASE_6.11.1_COMPLETION_REPORT.md | Whale Fast-Path |
| PHASE_6.10.1_COMPLETION_REPORT.md | Site Rules MVP + L2最適化 |
| THREAD_SAFETY_SOLUTION.md | スレッドセーフ化技術調査 ⭐最新 |
設計・論文
| ファイル | 内容 |
|---|---|
| BENCHMARK_DESIGN.md | ベンチマーク設計 |
| PAPER_SUMMARY.md | 論文サマリー |
⏭️ 次のアクション
- ✅ Step 1.1 完了(Phase 6.14 完了レポート修正完了)
- ✅ Step 1.2 完了(CURRENT_TASK.md 更新完了)
- ▶️ Step 1.3 検証(README.md 確認、検証コマンド実行)
- ▶️ Step 2 P0 実装開始(Safety Lock、2-3時間)
最終更新: 2025-10-22 担当: Claude + ChatGPT Pro協調開発