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>
4.9 KiB
4.9 KiB
Bench Mode (Tiny-focused, mimalloc-inspired)
Purpose
- Tinyホットパスに全振りして、syntheticな小物ベンチ(bench_comprehensive_hakmem)で上限性能を測るプリセット
- 直リンクPGOで 400M+ 帯、System malloc と互角以上を狙う
Recommended Setup
- Build: PGO(直リンク)
./build_pgo.sh allHAKMEM_WRAP_TINY=1 ./bench_comprehensive_hakmem
- Flags/Env(既定で余計な観測はOFFになっています)
export HAKMEM_WRAP_TINY=1# Tiny Pool 有効- 学習/観測は未設定(OFF)でOK:
HAKMEM_LEARN/HAKMEM_PROF/HAKMEM_SITE_RULES - サイズヒストグラム: 設定時のみ有効
HAKMEM_HIST_SAMPLE=N(ベンチ時は未設定推奨)
- 共有ライブラリ(LD_PRELOAD)も試す場合(PGO):
make pgo-profile-shared && make pgo-build-sharedHAKMEM_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
- mimalloc直リンク:
- 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=1000000HAKMEM_TINY_TLS_SLL=1(既定ON)HAKMEM_TINY_MAG_CAP=128(64Bは512をA/B)
Ultra Tunables (per-class overrides)
- バッチとSLL capをクラスごとに上書きできます(Ultraのみ):
HAKMEM_TINY_ULTRA_BATCH_C{0..7}=NHAKMEM_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
- 16B (class=1):
- スイープ:
bash scripts/sweep_ultra_params.sh 40000 150
Experimental: FLINT (Frontend + Intelligence)
- FRONT:
HAKMEM_TINY_FRONTEND=1(FastCache最前段、実験) - 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: Tiny‑Hot 400M(bench‑only)
- 目的: ≤64B帯のsyntheticベンチ(直リンク)でピークを出す専用プリセット(メインラインには影響なし)
- 実行(PGO, SLL‑only + 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)
- 期待: 8–24Bで400M超、32Bは400–430M(PGO/環境依存)