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

97 lines
4.0 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.

# 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) ベンチ(シナリオ型, 単体プロセス)
### ビルド
```bash
make bench
```
生成物:
- `./bench_allocators_hakmem`hakmem linked
- `./bench_allocators_system`system malloc, LD_PRELOAD 用)
### 実行CSV出力
```bash
scripts/bench_allocators_compare.sh --scenario mixed --iterations 50
```
注記:
- `bench_allocators_*``--scenario mixed` は 8B..1MB の簡易ワークロードsmall-scale reference
- Mixed 161024B SSOT`scripts/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_kb``getrusage(RUSAGE_SELF).ru_maxrss` をそのまま出しているLinux では KB
## 2) TCMallocgperftoolsをローカルで用意する
システムに tcmalloc が無い場合:
```bash
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/tcmalloc`docs/analysis/PERFORMANCE_TARGETS_SCORECARD.md`
**Reference 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 の SSOT`bench_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が遅くなった/速くなった” の議論では、どちらの測り方かを必ず明記すること。