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

4.9 KiB
Raw Blame History

Bench Mode (Tiny-focused, mimalloc-inspired)

Purpose

  • Tinyホットパスに全振りして、syntheticな小物ベンチbench_comprehensive_hakmemで上限性能を測るプリセット
  • 直リンクPGOで 400M+ 帯、System malloc と互角以上を狙う

Recommended Setup

  • Build: PGO直リンク
    • ./build_pgo.sh all
    • HAKMEM_WRAP_TINY=1 ./bench_comprehensive_hakmem
  • Flags/Env既定で余計な観測はOFFになっています
    • export HAKMEM_WRAP_TINY=1 # Tiny Pool 有効
    • 学習/観測は未設定OFFでOKHAKMEM_LEARN/HAKMEM_PROF/HAKMEM_SITE_RULES
    • サイズヒストグラム: 設定時のみ有効 HAKMEM_HIST_SAMPLE=N(ベンチ時は未設定推奨)
  • 共有ライブラリLD_PRELOADも試す場合PGO
    • make pgo-profile-shared && make pgo-build-shared
    • HAKMEM_WRAP_TINY=1 LD_PRELOAD=./libhakmem.so ./bench_comprehensive_system

What This Mode Does

  • Tiny fast-path 最優先hak_alloc_at()の最前段)
  • Magazine pop/push を可能な限り短絡化
  • 観測/学習/ヒストグラムをホットパスから外す必要時のみON

Notes

  • このモードは「このベンチで最大値を出すため」の最適化を優先します。
  • 実アプリでは観測・学習ACE/Learner等をONにしてバランスを取ってください。

Direct-Link Comparison (mimalloc)

  • 直リンクで公平に比較するためのターゲットを追加しています。
    • mimalloc直リンク: make bench_comprehensive_mi
    • 実行前に共有libパスを通す: export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$(pwd)/mimalloc-bench/extern/mi/out/release
    • 実行: ./bench_comprehensive_mi
  • HAKMEM直リンク: ./bench_comprehensive_hakmem
  • LD_PRELOADに依存せず、コアの速さを安定に比較できます。

Tiny Param Sweep / RSS

  • パラメタスイープ: bash scripts/sweep_tiny_params.sh 100000
  • RSS計測steady-state: bash scripts/measure_rss_tiny.sh <size> <live> <iters>
    • 例: bash scripts/measure_rss_tiny.sh 64 20000 1000
    • 退出時フラッシュを有効化: HAKMEM_TINY_FLUSH_ON_EXIT=1 ./bench_...
  • リフィルバッチ A/B小サイズ向け:
    • HAKMEM_TINY_REFILL_MAX_HOT既定192/ HAKMEM_TINY_REFILL_MAX既定64
    • 例: HAKMEM_TINY_REFILL_MAX_HOT=256 HAKMEM_TINY_REFILL_MAX=128 bash scripts/run_tiny_hot_triad.sh 80000

Ultra Tiny Mode (SLL-only)

  • ベンチ向けにホットパスを極限まで単純化するモードmimalloc風
  • 有効化: export HAKMEM_TINY_ULTRA=1
  • 効果:
    • alloc/freeのホットパスから remote 監視・mini-mag・統計を外し、SLL pop/push 中心に。
    • SLLが空のときだけクラスロック下でバッチ補充SuperSlab/TinySlabから取り出してSLLへ積む
  • 併用推奨ノブ:
    • HAKMEM_TINY_REMOTE_DRAIN_TRYRATE=0, HAKMEM_TINY_REMOTE_DRAIN_THRESHOLD=1000000
    • HAKMEM_TINY_TLS_SLL=1既定ON
    • HAKMEM_TINY_MAG_CAP=12864Bは512をA/B

Ultra Tunables (per-class overrides)

  • バッチとSLL capをクラスごとに上書きできますUltraのみ:
    • HAKMEM_TINY_ULTRA_BATCH_C{0..7}=N
    • HAKMEM_TINY_ULTRA_SLL_CAP_C{0..7}=N
  • 推奨初期値(直リンク):
    • 16B (class=1): ULTRA_BATCH_C1=96, ULTRA_SLL_CAP_C1=384
    • 32B (class=2): ULTRA_BATCH_C2=96, ULTRA_SLL_CAP_C2=384
    • 64B (class=3): ULTRA_BATCH_C3=224, ULTRA_SLL_CAP_C3=768
  • スイープ: bash scripts/sweep_ultra_params.sh 40000 150

Experimental: FLINT (Frontend + Intelligence)

  • FRONT: HAKMEM_TINY_FRONTEND=1FastCache最前段、実験
  • INT: HAKMEM_INT_ENGINE=1イベント収集BG適応、オーバーヘッド極小
  • Note:
    • 現時点のFRONTは一部ケースで不安定triadの56/64/128でセグフォ報告。既定はOFF、A/B実験のみ推奨。
    • INTのみFRONTなしは安定・低オーバーヘッド。学習の準備としてA/BでON可。

Quick Runners (CSV outputs)

  • Comprehensive pair (direct-link HAKMEM vs mimalloc):
    • bash scripts/run_comprehensive_pair.sh
    • CSV: bench_results/comp_pair_YYYYMMDD_HHMMSS/summary.csv
  • Tiny hot triad (HAKMEM/System/mimalloc):
    • bash scripts/run_tiny_hot_triad.sh 80000
    • CSV: bench_results/tiny_hot_triad_YYYYMMDD_HHMMSS/results.csv
  • Random mixed triad (various working sets):
    • bash scripts/run_random_mixed_matrix.sh 120000
    • CSV: bench_results/random_mixed_YYYYMMDD_HHMMSS/results.csv
  • Bench Preset: TinyHot 400Mbenchonly
    • 目的: ≤64B帯のsyntheticベンチ直リンクでピークを出す専用プリセットメインラインには影響なし
    • 実行PGO, SLLonly + warmup, 32B調整版:
      • bash scripts/run_tiny_sllonly_r12w192_triad.sh 30000
    • ウォームアップ: 8=64, 16=96, 32=192, 64=192初回のみ
    • REFILLクラス別: 32B=12他は既定8〜12をA/B
    • 期待: 824Bで400M超、32Bは400430MPGO/環境依存)