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>
9.7 KiB
9.7 KiB
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- 8–64B: HAKMEM ≈ 241–268 M; System ≈ 313–344 M; mimalloc ≈ 534–631 M
- 128B: HAKMEM ≈ 246–263 M; System ≈ 170–176 M; mimalloc ≈ 575–586 M
- Comprehensive pair (direct-link):
bench_results/comp_pair_20251028_154955/summary.csv- 16–128B lifo/fifo/interleave: HAKMEM ≈ 231–263 M、mimalloc ≈ 0.87–0.96 B
- random: HAKMEM ≈ 114–125 M、mimalloc ≈ 179–189 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.92(b100)/ System 320.09 / mimalloc 556.78
- 16B: HAKMEM 244.25(b200)/ System 320.63 / mimalloc 590.50
- 32B: HAKMEM 239.63(b200)/ 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.8–25.8 / System ≈ 25.8–27.0 / mimalloc ≈ 26.7–26.9
- 傾向: 小差で推移、安定性良好。
- Comprehensive pair(PGO取り直し後):
bench_results/comp_pair_20251029_004334/summary.csv- HAKMEM(直リンク): 16–128B ≈ 228–242 M、mixed ≈ 231.5 M
- mimalloc(直リンク): 16–128B ≈ 923–979 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- 8–64B: HAKMEM ≈ 212–217 M; System ≈ 326–342 M; mimalloc ≈ 578–640 M
- 128B: CSV参照(傾向は HAKMEM ≈ 218–225 M)
- Comprehensive pair (direct-link):
bench_results/comp_pair_20251028_141905/summary.csv- 16–128B lifo/fifo/interleave: HAKMEM ≈ 220–238 M、mimalloc ≈ 0.81–0.94 B
- random: HAKMEM ≈ 108–115 M、mimalloc ≈ 168–188 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- 8–64B: HAKMEM ≈ 233–246 M; System ≈ 315–331 M; mimalloc ≈ 545–602 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.0–26.3 M、mimalloc ≈ 26.3–26.8 M
New runs (12:00 JST)
- Tiny hot triad (cycles=30k):
bench_results/tiny_hot_triad_20251028_115956/results.csv- 8–64B: HAKMEM ≈ 228–236 M; System ≈ 309–321 M; mimalloc ≈ 533–631 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.6–24.9 M、System ≈ 25.6–26.1 M、mimalloc ≈ 25.5–26.4 M
- Comprehensive pair (direct-link):
bench_results/comp_pair_20251028_120031/summary.csv- 16–128B lifo/fifo/interleave: HAKMEM ≈ 230–236 M、mimalloc ≈ 0.89–0.98 B
- random: HAKMEM ≈ 113–115 M、mimalloc ≈ 188–190 M
- mixed: HAKMEM ≈ 224 M、mimalloc ≈ 881 M
Highlights
- Comprehensive (direct-link, latest run)
- 16–64B: mimalloc ≈ 890–950 M ops/sec; HAKMEM ≈ 255–268 M ops/sec.
- 128B: mimalloc ≈ 900–990 M; HAKMEM ≈ 256–268 M.
- mixed: mimalloc ≈ 892–893; HAKMEM ≈ 244–261.
- Tiny hot triad (cycles=80k)
- 16–64B: System ≈ 300–335 M; HAKMEM ≈ 242–280 M; mimalloc ≈ 535–620 M.
- 128B: System ≈ 170–176 M; HAKMEM ≈ 245–263 M; mimalloc ≈ 575–586 M.
Latest micro-optimizations (SLL-first + macro return + refill batch)
- 直リンク triad(cycles=80k):
bench_results/tiny_hot_triad_20251028_095135/results.csv- 8B: 252.8 M(batch=50)/ 258.0 M(batch=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は本環境では悪化(~3–6%低下)。- 参考CSV:
bench_results/tiny_hot_triad_20251028_095744/results.csv - 結論: 既定(HOT=192, MAX=64)付近が最良帯。
- 参考CSV:
- Ultra (SLL-only, experimental) triad (cycles=80k)
- CSV (latest): bench_results/tiny_hot_triad_20251028_082945/results.csv
- 16–64B: HAKMEM ≈ 246–269 M(Ultra検証OFF, bat=50/100/200)。従来(220–236)から改善、通常パス帯に接近。
- Spot (cycles=60k, batch=200): 16/32/64B ≈ 271/268/266 M。
- Random mixed triad(cycles=120k, ws∈{200,400,800}, seeds∈{42,1337})
- 25–27 M ops/sec 帯で拮抗。mimallocが僅差で優位、HAKMEMはSystem比で–3〜–6%程度の帯。
- 追加ラン(cycles=100k)でも傾向同様(上記CSV参照)。
Tiny advanced sweep(2025-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
- 16B:
- 備考:
HAKMEM_TINY_PREFETCH=1は本環境では低下傾向(32B: 234.58 → 226.30 M, L1-miss微増)。既定OFF継続。
Interpretation
- 最小命令数が効く純ホットパス(LIFO/FIFO/インターリーブ)は mimalloc が圧倒的に有利。
- 混合/ランダム系では三者の差は縮む。HAKMEMは常在コスト(SLL/マガジン/監視/統計)が残りやすいが、設計柔軟性とのトレードオフ。
What’s next
- Ultra Tiny(SLL-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/B(2025-10-28)
- 概要: FLINT = FRONT(超軽量FastCacheフロント)+ INT(遅延インテリジェンスBG)
- Triad(FRONT=1, INT=0): 一部サイズでセグフォ(56B/64B/128Bなど)。走ったケースでも HAKMEM ≈ 98–99 M ops/s と大幅低下。
- CSV: bench_results/tiny_hot_triad_20251028_092715/results.csv
- ステータス: FRONTは実験中(既定OFF継続)。front の
frontend_refill_fcの安全化・再計測が必要。
- Triad(FRONT=0, INT=1): ベースライン相当(HAKMEM ≈ 240–248 M)。INTのオーバーヘッドはほぼ無し。
- CSV: bench_results/tiny_hot_triad_20251028_092746/results.csv
- Random mixed(FRONT=0, INT=1): ベースライン相当(HAKMEM ≈ 24.9–25.3 M)。
- CSV: bench_results/random_mixed_20251028_092758/results.csv
- Comprehensive pair(FRONT=0, INT=1): ベースライン相当(HAKMEM 16–128B ≈ 246–251 M, mixed ≈ 239 M)
- CSV: bench_results/comp_pair_20251028_092812/summary.csv
結論(現時点)
- INT(遅延インテリジェンス)は安全に同居可能(既定OFF→A/BでON推奨)。
- FRONT(FastCacheフロント)はホットパス短縮のポテンシャルがあるが、現実装は未安定。通常はOFF、実験A/Bのみ使用。
Best-known presets(直リンク・小サイズ重視)
HAKMEM_TINY_TLS_SLL=1HAKMEM_TINY_REFILL_MAX_HOT=192(既定)HAKMEM_TINY_REFILL_MAX=64(既定)HAKMEM_TINY_MAG_CAP=128(64Bは512をA/B)