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 ` - 例: `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/環境依存)