80 lines
3.3 KiB
Markdown
80 lines
3.3 KiB
Markdown
|
|
# Performance Targets(mimalloc 追跡の“数値目標”)
|
|||
|
|
|
|||
|
|
目的: 速さだけでなく **syscall / メモリ安定性 / 長時間安定性**を含めて「勝ち筋」を固定する。
|
|||
|
|
|
|||
|
|
## Current snapshot(2025-12-16, local)
|
|||
|
|
|
|||
|
|
計測条件(再現の正):
|
|||
|
|
|
|||
|
|
- hakmem: `scripts/run_mixed_10_cleanenv.sh`(`ITERS=20000000 WS=400`、profile=`MIXED_TINYV3_C7_SAFE`)
|
|||
|
|
- system/mimalloc: `./bench_random_mixed_system 20000000 400 1` / `./bench_random_mixed_mi 20000000 400 1`(各10-run)
|
|||
|
|
- same-binary libc: `HAKMEM_FORCE_LIBC_ALLOC=1 scripts/run_mixed_10_cleanenv.sh`(10-run)
|
|||
|
|
- Git: `HEAD=4d9429e14`
|
|||
|
|
|
|||
|
|
結果(10-run mean/median):
|
|||
|
|
|
|||
|
|
| allocator | mean (M ops/s) | median (M ops/s) | ratio vs mimalloc (mean) |
|
|||
|
|
|----------|-----------------|------------------|--------------------------|
|
|||
|
|
| hakmem | 54.646 | 54.671 | 46.2% |
|
|||
|
|
| libc (same binary) | 76.257 | 76.661 | 64.5% |
|
|||
|
|
| system (separate) | 81.540 | 81.801 | 69.0% |
|
|||
|
|
| mimalloc (separate)| 118.176| 118.497 | 100% |
|
|||
|
|
|
|||
|
|
Notes:
|
|||
|
|
- `system/mimalloc` は別バイナリ計測のため **layout(text size/I-cache)差分を含む reference**。
|
|||
|
|
- `libc (same binary)` は `HAKMEM_FORCE_LIBC_ALLOC=1` により、同一レイアウト上での比較の目安。
|
|||
|
|
|
|||
|
|
## 1) Speed(相対目標)
|
|||
|
|
|
|||
|
|
前提: **同一バイナリ**で hakmem vs mimalloc を比較する(別バイナリ比較は layout 差で壊れる)。
|
|||
|
|
|
|||
|
|
推奨マイルストーン(Mixed 16–1024B):
|
|||
|
|
|
|||
|
|
- M1: mimalloc の **55%**(現状レンジの安定化)
|
|||
|
|
- M2: mimalloc の **60%**(短期の現実目標)
|
|||
|
|
- M3: mimalloc の **65–70%**(大きめの構造改造が必要になりやすい境界)
|
|||
|
|
|
|||
|
|
## 2) Syscall budget(OS churn)
|
|||
|
|
|
|||
|
|
Tiny hot path の理想:
|
|||
|
|
- steady-state(warmup 後)で **mmap/munmap/madvise = 0**(または “ほぼ 0”)
|
|||
|
|
|
|||
|
|
目安(許容):
|
|||
|
|
- `mmap+munmap+madvise` 合計が **1e8 ops あたり 1 回以下**(= 1e-8 / op)
|
|||
|
|
|
|||
|
|
Current:
|
|||
|
|
- `HAKMEM_SS_OS_STATS=1`(Mixed, `iters=200000000 ws=400`):
|
|||
|
|
- `[SS_OS_STATS] alloc=9 free=11 madvise=9 madvise_disabled=0 mmap_total=9 fallback_mmap=0 huge_alloc=0`
|
|||
|
|
|
|||
|
|
観測方法(どちらか):
|
|||
|
|
- 内部: `HAKMEM_SS_OS_STATS=1` の `[SS_OS_STATS]`(madvise/disabled 等)
|
|||
|
|
- 外部: `perf stat` の syscall events か `strace -c`(短い実行で回数だけ見る)
|
|||
|
|
|
|||
|
|
## 3) Memory stability(RSS / fragmentation)
|
|||
|
|
|
|||
|
|
最低条件(Mixed / ws 固定の soak):
|
|||
|
|
- RSS が **時間とともに単調増加しない**
|
|||
|
|
- 1時間の soak で RSS drift が **+5% 以内**(目安)
|
|||
|
|
|
|||
|
|
Current:
|
|||
|
|
- TBD(soak のテンプレは今後スクリプト化)
|
|||
|
|
|
|||
|
|
推奨指標:
|
|||
|
|
- RSS(peak / steady)
|
|||
|
|
- page faults(増え続けないこと)
|
|||
|
|
- allocator 内部の “inuse / committed” 比(取れるなら)
|
|||
|
|
|
|||
|
|
## 4) Long-run stability(性能・一貫性)
|
|||
|
|
|
|||
|
|
最低条件:
|
|||
|
|
- 30–60 分の soak で ops/s が **-5% 以上落ちない**
|
|||
|
|
- CV(変動係数)が **~1–2%** に収まる(現状の運用と整合)
|
|||
|
|
|
|||
|
|
Current:
|
|||
|
|
- Mixed 10-run(上の snapshot): CV ≈ 0.91%(mean 54.646M / min 53.608M / max 55.311M)
|
|||
|
|
|
|||
|
|
## 5) 判定ルール(運用)
|
|||
|
|
|
|||
|
|
- runtime 変更(ENVのみ): GO 閾値 +1.0%(Mixed 10-run mean)
|
|||
|
|
- build-level 変更(compile-out 系): GO 閾値 +0.5%(layout の揺れを考慮)
|