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>
90 lines
4.9 KiB
Markdown
90 lines
4.9 KiB
Markdown
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)でOK:`HAKMEM_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=128`(64Bは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=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/環境依存)
|