Files
hakmem/docs/analysis/PERF_ANALYSIS_MID_LARGE_PHASE53.md
2025-12-09 21:50:15 +09:00

2.0 KiB
Raw Blame History

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 128.43M ops/s(別 run perf 時 29.02M
  • mimalloc: ./bench_mid_large_mt_mi 1 1000000 400 154.22M ops/s
  • system malloc: ./bench_mid_large_mt_system 1 1000000 400 115.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 (257768B主体) では mimalloc が HAKMEM の約 1.9×。system はさらに低い。
  • page-faults は 7.3k と Tiny (161024B) よりやや多めだが、主因は CPU 側命令量と sys 部分の比率。
  • 次の選択肢:
    • mid/smallmid パスTiny 以外)のホットパスを狙う箱
    • もしくは Tiny 側での残り課題と比較して優先度を決める材料に。

2025-12-XX 追記: madvise(ENOMEM) を握りつぶすガードを追加

  • Superslab OS Box に ss_os_madvise_guarded() を導入し、madvise(DONTNEED/POPULATE) が ENOMEMvm.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 を増やし続けないようにしつつ、アロケータ本体は継続させる。