85 lines
3.0 KiB
Markdown
85 lines
3.0 KiB
Markdown
|
|
# Allocator Comparison Quick Runbook(長時間 soak なし)
|
|||
|
|
|
|||
|
|
目的: 「まず全体像」を短時間で揃える。最適化判断の SSOT(同一バイナリ A/B)とは別に、外部 allocator の reference を取る。
|
|||
|
|
|
|||
|
|
## 0) 注意(SSOTとreferenceの混同禁止)
|
|||
|
|
|
|||
|
|
- Mixed 16–1024B SSOT: `scripts/run_mixed_10_cleanenv.sh`(hakmem の最適化判断の正)
|
|||
|
|
- allocator比較(jemalloc/tcmalloc/system/mimalloc)は **別バイナリ or LD_PRELOAD** で layout差を含むため **reference**
|
|||
|
|
|
|||
|
|
## 1) 事前準備(1回だけ)
|
|||
|
|
|
|||
|
|
### 1.1 ビルド(比較用バイナリ)
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
make bench_random_mixed_hakmem bench_random_mixed_system bench_random_mixed_mi
|
|||
|
|
make bench
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
オプション(FAST PGO も比較したい場合):
|
|||
|
|
```bash
|
|||
|
|
make pgo-fast-full
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 1.2 jemalloc / tcmalloc の .so パス
|
|||
|
|
|
|||
|
|
環境にある場合:
|
|||
|
|
```bash
|
|||
|
|
export JEMALLOC_SO=/path/to/libjemalloc.so.2
|
|||
|
|
export TCMALLOC_SO=/path/to/libtcmalloc.so
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
tcmalloc が無ければ(gperftoolsからローカルビルド):
|
|||
|
|
```bash
|
|||
|
|
scripts/setup_tcmalloc_gperftools.sh
|
|||
|
|
export TCMALLOC_SO="$PWD/deps/gperftools/install/lib/libtcmalloc.so"
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 2) Quick matrix(Random Mixed, 10-run)
|
|||
|
|
|
|||
|
|
長時間 soak なしで「同じベンチ形」の比較を取る(system/jemalloc/tcmalloc/mimalloc/hakmem)。
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
ITERS=20000000 WS=400 SEED=1 RUNS=10 scripts/run_allocator_quick_matrix.sh
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
出力:
|
|||
|
|
- 各 allocator の `mean/median/CV/min/max`(M ops/s)
|
|||
|
|
|
|||
|
|
注記:
|
|||
|
|
- hakmem は `HAKMEM_PROFILE` が未指定だと “別ルート” を踏み、数値が大きく壊れることがある。
|
|||
|
|
`scripts/run_allocator_quick_matrix.sh` は SSOT と同じく `HAKMEM_PROFILE=MIXED_TINYV3_C7_SAFE` を明示する。
|
|||
|
|
- 「同じマシンなのに数値が変わる」切り分け用に、SSOTベンチでは環境ログを出せる:
|
|||
|
|
- `HAKMEM_BENCH_ENV_LOG=1 RUNS=10 scripts/run_mixed_10_cleanenv.sh`
|
|||
|
|
|
|||
|
|
### 同一バイナリでの比較(推奨)
|
|||
|
|
|
|||
|
|
layout tax を避けたい場合は、`bench_random_mixed_system` を固定して LD_PRELOAD を差す:
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
make bench_random_mixed_system shared
|
|||
|
|
export MIMALLOC_SO=/path/to/libmimalloc.so.2 # optional
|
|||
|
|
export JEMALLOC_SO=/path/to/libjemalloc.so.2 # optional
|
|||
|
|
export TCMALLOC_SO=/path/to/libtcmalloc.so # optional
|
|||
|
|
RUNS=10 scripts/run_allocator_preload_matrix.sh
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 3) Scenario bench(bench_allocators_compare.sh)
|
|||
|
|
|
|||
|
|
シナリオ別(json/mir/vm/mixed)を CSV で揃える。
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
scripts/bench_allocators_compare.sh --scenario mixed --iterations 50
|
|||
|
|
scripts/bench_allocators_compare.sh --scenario json --iterations 50
|
|||
|
|
scripts/bench_allocators_compare.sh --scenario mir --iterations 50
|
|||
|
|
scripts/bench_allocators_compare.sh --scenario vm --iterations 50
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
出力(1行CSV):
|
|||
|
|
`allocator,scenario,iterations,avg_ns,soft_pf,hard_pf,rss_kb,ops_per_sec`
|
|||
|
|
|
|||
|
|
## 4) 結果の記録先(SSOT)
|
|||
|
|
|
|||
|
|
- 比較手順: `docs/analysis/ALLOCATOR_COMPARISON_SSOT.md`
|
|||
|
|
- 参照値の記録: `docs/analysis/PERFORMANCE_TARGETS_SCORECARD.md`(Allocator Comparison セクション)
|