Files
hakmem/docs/benchmarks/BENCH_RESULTS_2025_10_28.md

147 lines
9.7 KiB
Markdown
Raw Normal View History

Bench Results Summary (2025-10-28)
Scope
- Direct-link comparisons without LD_PRELOAD bias.
- Bench families: comprehensive (pair), tiny hot (triad), random mixed (triad).
Artifacts
- Comprehensive pair (HAKMEM vs mimalloc): `bench_results/comp_pair_20251028_065205/summary.csv`
- Tiny hot triad (HAKMEM/System/mimalloc): `bench_results/tiny_hot_triad_20251028_065249/results.csv`
- Random mixed triad: `bench_results/random_mixed_20251028_065306/results.csv`
New runs (15:49 JST)
- Tiny hot triad (cycles=80k): `bench_results/tiny_hot_triad_20251028_154941/results.csv`
- 864B: HAKMEM ≈ 241268 M; System ≈ 313344 M; mimalloc ≈ 534631 M
- 128B: HAKMEM ≈ 246263 M; System ≈ 170176 M; mimalloc ≈ 575586 M
- Comprehensive pair (direct-link): `bench_results/comp_pair_20251028_154955/summary.csv`
- 16128B lifo/fifo/interleave: HAKMEM ≈ 231263 M、mimalloc ≈ 0.870.96 B
- random: HAKMEM ≈ 114125 M、mimalloc ≈ 179189 M
- mixed: HAKMEM ≈ 237 M、mimalloc ≈ 874 M
New runs (2025-10-29 00:36 JST)
- perf triad (32B, batch=100, cycles=50k): `bench_results/perf_hot_triad_20251029_003609/`
- HAKMEM: instructions ≈ 1.716e9, cycles ≈ 2.382e8, IPC ≈ 7.21
- System: instructions ≈ 9.186e8, cycles ≈ 1.764e8
- mimalloc: instructions ≈ 2.543e8, cycles ≈ 9.562e7
- 備考: Bump Shadowミス時のみONで HAKMEM の insns が数%低下(常時の悪化なし)。
- Tiny hot triad (cycles=80k, Bump Shadow ON): `bench_results/tiny_hot_triad_20251029_003612/results.csv`
- 8B: HAKMEM 242.92b100/ System 320.09 / mimalloc 556.78
- 16B: HAKMEM 244.25b200/ System 320.63 / mimalloc 590.50
- 32B: HAKMEM 239.63b200/ System 322.54 / mimalloc 601.70
- 傾向: 8/16Bで小幅改善、32/64Bは誤差微増。
- Random mixed triad (cycles=80k, Bump Shadow ON): `bench_results/random_mixed_20251029_003619/results.csv`
- ws=200..800: HAKMEM ≈ 24.825.8 / System ≈ 25.827.0 / mimalloc ≈ 26.726.9
- 傾向: 小差で推移、安定性良好。
- Comprehensive pairPGO取り直し後: `bench_results/comp_pair_20251029_004334/summary.csv`
- HAKMEM直リンク: 16128B ≈ 228242 M、mixed ≈ 231.5 M
- mimalloc直リンク: 16128B ≈ 923979 M、mixed ≈ 883 M
Instruction 削減の現状と次手
- 完了: alloc/freeホットストアの除去macro return/HAK_STAT_FREEでビルド時ゼロ→ insns/opを恒常的に削減。
- 実施: エントリ順序を SLL → 32/64特化(popのみ) → Mag →Bump/Slabに整理SLLヒット時の分岐コストを回避
- A/Bで有効: Bump Shadowミス時のみ→ 混合/ミス経路でinsns/opが数低下。常時の悪化なし。
- 次手(予定):
- UltraFront 供給の強化free時の前段スロットを厚くし、32/64特化popの命中率↑
- 小クラスのmag初期化をスレッド開始時に寄せ、`tiny_mag_init_if_needed` の分岐をホットパスから更に後退。
- 特化入口の間接呼び出しを静的インライン分岐switchに切替関数ポインタ読みを削減
- リフィル連結化は Tiny-HotではOFF維持、mixed系のみ条件A/Bで適用総命令・ストアを抑制
New runs (14:19 JST)
- Tiny hot triad (cycles=40k): `bench_results/tiny_hot_triad_20251028_141853/results.csv`
- 864B: HAKMEM ≈ 212217 M; System ≈ 326342 M; mimalloc ≈ 578640 M
- 128B: CSV参照傾向は HAKMEM ≈ 218225 M
- Comprehensive pair (direct-link): `bench_results/comp_pair_20251028_141905/summary.csv`
- 16128B lifo/fifo/interleave: HAKMEM ≈ 220238 M、mimalloc ≈ 0.810.94 B
- random: HAKMEM ≈ 108115 M、mimalloc ≈ 168188 M
- mixed: HAKMEM ≈ 228 M、mimalloc ≈ 860 M
New runs (10:29 JST)
- Tiny hot triad (cycles=20k): `bench_results/tiny_hot_triad_20251028_102903/results.csv`
- 864B: HAKMEM ≈ 233246 M; System ≈ 315331 M; mimalloc ≈ 545602 M
- 128B: 別行に記録CSV参照
- Random mixed triad (cycles=100k): `bench_results/random_mixed_20251028_102930/results.csv`
- ws={200,400,800}, seeds={42,1337}: HAKMEM ≈ 25.0 M、System ≈ 26.026.3 M、mimalloc ≈ 26.326.8 M
New runs (12:00 JST)
- Tiny hot triad (cycles=30k): `bench_results/tiny_hot_triad_20251028_115956/results.csv`
- 864B: HAKMEM ≈ 228236 M; System ≈ 309321 M; mimalloc ≈ 533631 M
- 128B: CSV参照傾向は230±数M
- Random mixed triad (cycles=80k): `bench_results/random_mixed_20251028_120009/results.csv`
- ws={200,400,800}, seeds={42,1337}: HAKMEM ≈ 24.624.9 M、System ≈ 25.626.1 M、mimalloc ≈ 25.526.4 M
- Comprehensive pair (direct-link): `bench_results/comp_pair_20251028_120031/summary.csv`
- 16128B lifo/fifo/interleave: HAKMEM ≈ 230236 M、mimalloc ≈ 0.890.98 B
- random: HAKMEM ≈ 113115 M、mimalloc ≈ 188190 M
- mixed: HAKMEM ≈ 224 M、mimalloc ≈ 881 M
Highlights
- Comprehensive (direct-link, latest run)
- 1664B: mimalloc ≈ 890950 M ops/sec; HAKMEM ≈ 255268 M ops/sec.
- 128B: mimalloc ≈ 900990 M; HAKMEM ≈ 256268 M.
- mixed: mimalloc ≈ 892893; HAKMEM ≈ 244261.
- Tiny hot triad (cycles=80k)
- 1664B: System ≈ 300335 M; HAKMEM ≈ 242280 M; mimalloc ≈ 535620 M.
- 128B: System ≈ 170176 M; HAKMEM ≈ 245263 M; mimalloc ≈ 575586 M.
Latest micro-optimizations (SLL-first + macro return + refill batch)
- 直リンク triadcycles=80k: `bench_results/tiny_hot_triad_20251028_095135/results.csv`
- 8B: 252.8 Mbatch=50/ 258.0 Mbatch=100
- 16B: 249.3 / 252.8 M
- 32B: 248.6 / 255.8 M
- 64B: 241±α変化小
- リフィルバッチA/B: `HAKMEM_TINY_REFILL_MAX_HOT=256 HAKMEM_TINY_REFILL_MAX=128` は本環境では悪化(~36%低下)。
- 参考CSV: `bench_results/tiny_hot_triad_20251028_095744/results.csv`
- 結論: 既定HOT=192, MAX=64付近が最良帯。
- Ultra (SLL-only, experimental) triad (cycles=80k)
- CSV (latest): bench_results/tiny_hot_triad_20251028_082945/results.csv
- 1664B: HAKMEM ≈ 246269 MUltra検証OFF, bat=50/100/200。従来(220236)から改善、通常パス帯に接近。
- Spot (cycles=60k, batch=200): 16/32/64B ≈ 271/268/266 M。
- Random mixed triadcycles=120k, ws∈{200,400,800}, seeds∈{42,1337}
- 2527 M ops/sec 帯で拮抗。mimallocが僅差で優位、HAKMEMはSystem比で3〜6%程度の帯。
- 追加ランcycles=100kでも傾向同様上記CSV参照
Tiny advanced sweep2025-10-28, cycles=80k
- スクリプト: `scripts/sweep_tiny_advanced.sh 80000 --mag64-512`
- CSV: `bench_results/sweep_tiny_adv_20251028_103702/results.csv`
- ベスト行size, sllmul, rmax, rmaxh, mag_cap, mag_cap_c3 → throughput
- 16B: `16,3,64,224,256,- → 242.80 M`
- 32B: `32,2,96,192,128,- → 244.66 M`
- 64B: `64,1,64,224,256,512 → 245.50 M`
- 備考: `HAKMEM_TINY_PREFETCH=1` は本環境では低下傾向32B: 234.58 → 226.30 M, L1-miss微増。既定OFF継続。
Interpretation
- 最小命令数が効く純ホットパスLIFO/FIFO/インターリーブ)は mimalloc が圧倒的に有利。
- 混合/ランダム系では三者の差は縮む。HAKMEMは常在コストSLL/マガジン/監視/統計)が残りやすいが、設計柔軟性とのトレードオフ。
Whats next
- Ultra TinySLL-only, direct-link専用を安全化 → 再計測comprehensive/tiny hot/random mixed triad
- クラス別capテーブルの微調整16/32B=128, 64B=512 を軸に再スイープ)。
- メモリ効率退出フラッシュ空slab回収実装済を使い、steady-state RSS をA/Bで評価。必要に応じてIdle縮小オプトインを導入。
- FLINTイベント拡張を基に、頻度ベースの軽量適応refillバッチ/フロント目標)を段階導入。
Ultra Tiny 試走メモ(実験的)
- 環境: HAKMEM_TINY_ULTRA=1, MAG_CAP=128, REMOTE_DRAIN_TRYRATE=0
- tiny hot triad の一部ケースで HAKMEM の行が欠落Throughput行が出ずCSV未記録
- 結論: いくつかのサイズ/バッチで不安定。直リンク通常モードを既定とし、Ultraは当面オプトインの実験扱い。
FLINT A/B2025-10-28
- 概要: FLINT = FRONT超軽量FastCacheフロント INT遅延インテリジェンスBG
- TriadFRONT=1, INT=0: 一部サイズでセグフォ56B/64B/128Bなど。走ったケースでも HAKMEM ≈ 9899 M ops/s と大幅低下。
- CSV: bench_results/tiny_hot_triad_20251028_092715/results.csv
- ステータス: FRONTは実験中既定OFF継続。front の `frontend_refill_fc` の安全化・再計測が必要。
- TriadFRONT=0, INT=1: ベースライン相当HAKMEM ≈ 240248 M。INTのオーバーヘッドはほぼ無し。
- CSV: bench_results/tiny_hot_triad_20251028_092746/results.csv
- Random mixedFRONT=0, INT=1: ベースライン相当HAKMEM ≈ 24.925.3 M
- CSV: bench_results/random_mixed_20251028_092758/results.csv
- Comprehensive pairFRONT=0, INT=1: ベースライン相当HAKMEM 16128B ≈ 246251 M, mixed ≈ 239 M
- CSV: bench_results/comp_pair_20251028_092812/summary.csv
結論(現時点)
- INT遅延インテリジェンスは安全に同居可能既定OFF→A/BでON推奨
- FRONTFastCacheフロントはホットパス短縮のポテンシャルがあるが、現実装は未安定。通常はOFF、実験A/Bのみ使用。
Best-known presets直リンク・小サイズ重視
- `HAKMEM_TINY_TLS_SLL=1`
- `HAKMEM_TINY_REFILL_MAX_HOT=192`(既定)
- `HAKMEM_TINY_REFILL_MAX=64`(既定)
- `HAKMEM_TINY_MAG_CAP=128`64Bは512をA/B