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

13 KiB
Raw Blame 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: ドキュメント更新(完了)

  • 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 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(実装済み)

# 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 benchmarkMulti-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 論文サマリー

⏭️ 次のアクション

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