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

9.7 KiB
Raw Blame 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=12864Bは512をA/B