Files
hakmem/docs/archive/BENCH_MODE.md

90 lines
4.9 KiB
Markdown
Raw Normal View 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で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: 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/環境依存)