147 lines
9.7 KiB
Markdown
147 lines
9.7 KiB
Markdown
|
|
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)付近が最良帯。
|
|||
|
|
- 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`
|
|||
|
|
- 備考: `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=1`
|
|||
|
|
- `HAKMEM_TINY_REFILL_MAX_HOT=192`(既定)
|
|||
|
|
- `HAKMEM_TINY_REFILL_MAX=64`(既定)
|
|||
|
|
- `HAKMEM_TINY_MAG_CAP=128`(64Bは512をA/B)
|