2025-12-08 21:30:21 +09:00
|
|
|
|
# Phase53: Mid/Smallmid ベンチ簡易計測(シングルスレッド)
|
|
|
|
|
|
|
|
|
|
|
|
- 条件: 1 thread / cycles=1,000,000 / ws=400 / reps=1
|
|
|
|
|
|
- ビルド: `make bench_mid_large_mt_hakmem bench_mid_large_mt_mi bench_mid_large_mt_system -j4`
|
|
|
|
|
|
- プロファイル: TinyHotHeap v2 OFF、C7_SAFE プロファイル、LARSON_FIX=1、その他デフォルト
|
|
|
|
|
|
|
|
|
|
|
|
## スループット比較
|
|
|
|
|
|
|
|
|
|
|
|
- HAKMEM: `./bench_mid_large_mt_hakmem 1 1000000 400 1` → **28.43M ops/s**(別 run perf 時 29.02M)
|
|
|
|
|
|
- mimalloc: `./bench_mid_large_mt_mi 1 1000000 400 1` → **54.22M ops/s**
|
|
|
|
|
|
- system malloc: `./bench_mid_large_mt_system 1 1000000 400 1` → **15.29M ops/s**
|
|
|
|
|
|
|
|
|
|
|
|
## perf stat (HAKMEM, user+sys)
|
|
|
|
|
|
|
|
|
|
|
|
- コマンド: `perf stat -e cycles,instructions,task-clock,page-faults ./bench_mid_large_mt_hakmem 1 1000000 400 1`
|
|
|
|
|
|
- 結果:
|
|
|
|
|
|
- cycles: 211,394,722
|
|
|
|
|
|
- instructions: 513,342,673 (IPC ≈ 2.43)
|
|
|
|
|
|
- task-clock: 57.48 ms (user 33.29 ms / sys 25.22 ms)
|
|
|
|
|
|
- page-faults: 7,374
|
|
|
|
|
|
- スループット: 29.02M ops/s(計測 run の値)
|
|
|
|
|
|
|
|
|
|
|
|
## 所感 / 次の判断材料
|
|
|
|
|
|
|
|
|
|
|
|
- mid/smallmid (257–768B主体) では mimalloc が HAKMEM の約 1.9×。system はさらに低い。
|
|
|
|
|
|
- page-faults は 7.3k と Tiny (16–1024B) よりやや多めだが、主因は CPU 側命令量と sys 部分の比率。
|
|
|
|
|
|
- 次の選択肢:
|
|
|
|
|
|
- mid/smallmid パス(Tiny 以外)のホットパスを狙う箱
|
|
|
|
|
|
- もしくは Tiny 側での残り課題と比較して優先度を決める材料に。
|
2025-12-09 21:50:15 +09:00
|
|
|
|
|
|
|
|
|
|
## 2025-12-XX 追記: madvise(ENOMEM) を握りつぶすガードを追加
|
|
|
|
|
|
- Superslab OS Box に `ss_os_madvise_guarded()` を導入し、madvise(DONTNEED/POPULATE) が ENOMEM(vm.max_map_count)を返したら
|
|
|
|
|
|
`g_ss_madvise_disabled` を立てて以降の madvise をスキップ。EINVAL だけは STRICT=1 で Fail-Fast のまま。
|
|
|
|
|
|
- `[SS_OS_STATS]` に `madvise_enomem/madvise_other/madvise_disabled` を追加(`HAKMEM_SS_OS_STATS=1`)。
|
|
|
|
|
|
- 目的: ENOMEM 多発で VMA を増やし続けないようにしつつ、アロケータ本体は継続させる。
|