Files
hakmem/docs/benchmarks/BENCH_RESULTS_2025_10_28.md
Moe Charm (CI) 52386401b3 Debug Counters Implementation - Clean History
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>
2025-11-05 12:31:14 +09:00

147 lines
9.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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