Files
hakmem/docs/analysis/ALLOCATOR_COMPARISON_SSOT.md
Moe Charm (CI) 89a9212700 Phase 83-1 + Allocator Comparison: Switch dispatch fixed (NO-GO +0.32%), PROFILE correction, SCORECARD update
Key changes:
- Phase 83-1: Switch dispatch fixed mode (tiny_inline_slots_switch_dispatch_fixed_box) - NO-GO (marginal +0.32%, branch reduction negligible)
  Reason: lazy-init pattern already optimal, Phase 78-1 pattern shows diminishing returns

- Allocator comparison baseline update (10-run SSOT, WS=400, ITERS=20M):
  tcmalloc: 115.26M (92.33% of mimalloc)
  jemalloc: 97.39M (77.96% of mimalloc)
  system: 85.20M (68.24% of mimalloc)
  mimalloc: 124.82M (baseline)

- hakmem PROFILE correction: scripts/run_mixed_10_cleanenv.sh + run_allocator_quick_matrix.sh
  PROFILE explicitly set to MIXED_TINYV3_C7_SAFE for hakmem measurements
  Result: baseline stabilized to 55.53M (44.46% of mimalloc)
  Previous unstable measurement (35.57M) was due to profile leak

- Documentation:
  * PERFORMANCE_TARGETS_SCORECARD.md: Reference allocators + M1/M2 milestone status
  * PHASE83_1_SWITCH_DISPATCH_FIXED_RESULTS.md: Phase 83-1 analysis (NO-GO)
  * ALLOCATOR_COMPARISON_QUICK_RUNBOOK.md: Quick comparison procedure
  * ALLOCATOR_COMPARISON_SSOT.md: Detailed SSOT methodology

- M2 milestone status: 44.46% (target 55%, gap -10.54pp) - structural improvements needed

🤖 Generated with Claude Code
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-18 18:50:00 +09:00

4.0 KiB
Raw Blame History

Allocator Comparison SSOTsystem / jemalloc / mimalloc / tcmalloc

目的: hakmem の「速さ以外の勝ち筋」syscall budget / 安定性 / 長時間)を崩さず、外部 allocator との比較を再現可能に行う。

原則

  • **同一バイナリ A/BENVトグル**は性能最適化の SSOTlayout tax 回避)。
  • allocator 間比較mimalloc/jemalloc/tcmalloc/system別バイナリ/LD_PRELOADが混ざるため、referenceとして扱う。
  • 参照値は 環境ドリフトが起きるので、docs/analysis/PERFORMANCE_TARGETS_SCORECARD.md の snapshot を正とし、定期的に rebase する。
  • 短い比較(長時間 soak なし)の手順: docs/analysis/ALLOCATOR_COMPARISON_QUICK_RUNBOOK.md

1) ベンチ(シナリオ型, 単体プロセス)

ビルド

make bench

生成物:

  • ./bench_allocators_hakmemhakmem linked
  • ./bench_allocators_systemsystem malloc, LD_PRELOAD 用)

実行CSV出力

scripts/bench_allocators_compare.sh --scenario mixed --iterations 50

注記:

  • bench_allocators_*--scenario mixed は 8B..1MB の簡易ワークロードsmall-scale reference
  • Mixed 161024B SSOTscripts/run_mixed_10_cleanenv.sh)とは別物なので、数値を混同しないこと。

環境変数(任意):

  • JEMALLOC_SO=/path/to/libjemalloc.so.2
  • MIMALLOC_SO=/path/to/libmimalloc.so.2
  • TCMALLOC_SO=/path/to/libtcmalloc.so または libtcmalloc_minimal.so

出力形式1行CSV: allocator,scenario,iterations,avg_ns,soft_pf,hard_pf,rss_kb,ops_per_sec

補足:

  • rss_kbgetrusage(RUSAGE_SELF).ru_maxrss をそのまま出しているLinux では KB

2) TCMallocgperftoolsをローカルで用意する

システムに tcmalloc が無い場合:

scripts/setup_tcmalloc_gperftools.sh
export TCMALLOC_SO="$PWD/deps/gperftools/install/lib/libtcmalloc.so"

注意:

  • autoconf/automake/libtool が必要な環境があります(ビルド失敗時は不足パッケージを入れる)。
  • これは 比較用の補助であり、hakmem の本線ビルドを変更しない。

3) 運用メトリクスsoak / stability

hakmem の運用勝ち筋を比較する SSOT は以下:

  • docs/analysis/PHASE50_OPERATIONAL_EDGE_STABILITY_SUITE_RESULTS.md
  • docs/analysis/PHASE51_SINGLE_PROCESS_SOAK_AND_TAIL_PLAN_RESULTS.md

短時間5分:

  • scripts/soak_mixed_rss.sh
  • scripts/soak_mixed_single_process.sh

4) Scorecard への反映

  • 参照値jemalloc/mimalloc/system/tcmallocdocs/analysis/PERFORMANCE_TARGETS_SCORECARD.mdReference allocators に追記する。
  • 比較の意味付けは「速さ」だけでなく:
    • syscalls/op
    • RSS drift
    • CV
    • tail proxyp99/p50 を含めて整理する。

5) layout tax 対策(重要)

allocator 間比較で「hakmem だけ遅い/速い」が極端に出た場合、まず 同一バイナリでの比較を行う:

  • bench_random_mixed_system を固定し、LD_PRELOAD で allocator を差し替えるapples-to-apples
  • runner: scripts/run_allocator_preload_matrix.sh

この比較は “reference の中でも最も公平” なので、SCORECARD に記録する場合は優先する。

重要: 「同一バイナリ比較」と「hakmem SSOTlinked」は別物

LD_PRELOAD 比較は「drop-in malloc」としての比較全 allocator が同じ入口を通る)であり、 hakmem の SSOTbench_random_mixed_hakmem*scripts/run_mixed_10_cleanenv.sh で回す)とは経路が異なる。

  • bench_random_mixed_hakmem*: hakmem のプロファイル/箱構造を前提にした SSOT最適化判断の正
  • bench_random_mixed_system + LD_PRELOAD=./libhakmem.so: drop-in wrapper としての referencelayout差を抑えられるが、wrapper税は含む

“hakmemが遅くなった/速くなった” の議論では、どちらの測り方かを必ず明記すること。