Files
hakmem/docs/analysis/PHASE92_TCMALLOC_GAP_TRIAGE_SSOT.md
2025-12-19 03:45:01 +09:00

4.2 KiB
Raw Blame History

Phase 92: tcmalloc Gap Triage SSOT

目的

Phase 89 で検出した tcmalloc との性能ギャップhakmem: 52M vs tcmalloc: 58M短時間で原因分類する。


既知事実Phase 89 から継承)

  • hakmem baseline: 51.36M ops/s (SSOT standard)
  • tcmalloc: 58M ops/s 付近(参考値)
  • 差分: -12.8% hakmem が遅い)

Phase 92 Triage フロー(最短 1-2h

1 ケース A小オブジェクトC4-C6 vs 大オブジェクトC7+

疑問: tcmalloc の優位は「小サイズに特化」か「大サイズに強い」か?

実施:

# C6 のみSmall, 16-256B
HAKMEM_BENCH_C6_ONLY=1 RUNS=3 ./scripts/run_mixed_10_cleanenv.sh

# C7 のみLarge, 1024B+
HAKMEM_BENCH_C7_ONLY=1 RUNS=3 ./scripts/run_mixed_10_cleanenv.sh

判定:

  • C6 > 52M, C7 < 45M → 問題は Large allocC7
  • C6 < 50M, C7 < 45M → 問題は均等分散
  • C6 > 52M, C7 > 48M → 問題は別(メモリ効率?)

2 ケース BUnified Cache vs Inline Slots

疑問: tcmalloc 優位は「キャッシュ管理」か「インライン最適化」か?

実施:

# Inline Slots 全無効
HAKMEM_TINY_C6_INLINE_SLOTS=0 HAKMEM_TINY_C5_INLINE_SLOTS=0 \
  HAKMEM_TINY_C4_INLINE_SLOTS=0 RUNS=3 ./scripts/run_mixed_10_cleanenv.sh

# Unified Cache のみinline slots 全 OFF
HAKMEM_UNIFIED_CACHE_ONLY=1 RUNS=3 ./scripts/run_mixed_10_cleanenv.sh

判定:

  • -inline > 50Minline slots オーバーヘッド
  • -inline < 48Munified cache 自体が遅い

3 ケース Cフラグメンテーション/再利用効率

疑問: LIFO vs FIFO の差、または tcmalloc の再利用戦略の優位性?

実施:

# LIFO 有効phase 15
HAKMEM_TINY_UNIFIED_LIFO=1 RUNS=3 ./scripts/run_mixed_10_cleanenv.sh

# FIFOdefault
RUNS=3 ./scripts/run_mixed_10_cleanenv.sh

判定:

  • LIFO > +1% → FIFO が問題候補
  • LIFO = FIFO ± 0.5% → LIFO/FIFO は neutral

4 ケース Dページサイズ/プールサイズ

疑問: tcmalloc と hakmem のメモリレイアウト / warm pool size の違い?

実施:

# 大プール(確保多く、断片化少なく)
HAKMEM_WARM_POOL_SIZE=100000 RUNS=3 ./scripts/run_mixed_10_cleanenv.sh

# 小プール(確保少なく、効率見直し)
HAKMEM_WARM_POOL_SIZE=1000 RUNS=3 ./scripts/run_mixed_10_cleanenv.sh

# デフォルト
RUNS=3 ./scripts/run_mixed_10_cleanenv.sh

判定:

  • pool big > baseline → プール不足(確保過多)
  • pool small < baseline → プール不足(メモリ不足)
  • pool default = baseline → pool size neutral

測定時間見積もり

ケース 実施数 時間/実施 合計
A (C6/C7) 2×3=6 2 min 12 min
B (inline) 2×3=6 2 min 12 min
C (LIFO) 2×3=6 2 min 12 min
D (pool) 3×3=9 2 min 18 min
合計 - - 54 min

判定マトリクス

ケース 結果 判定 次アクション
A C6 > 52M, C7 低 C7 が制限 Phase 93: C7 最適化
B -inline > 50M Inline 段階的 OFF Phase 94: Inline review
C LIFO > +1% LIFO 推奨 Phase 92b: LIFO 展開
D pool_big > +2% 確保が重い Phase 95: Pool tuning

記録フォーマット

結果は下記フォーマットで PHASE92_TCMALLOC_GAP_RESULTS.txt に記録:

=== Phase 92 Triage Results ===
Baseline (51.36M): [ENTER CONTROL VALUE]

ケース A (C6 vs C7):
  C6-only:  [VALUE] ops/s
  C7-only:  [VALUE] ops/s
  判定:     [CONCLUSION]

ケース B (Inline vs Unified):
  No-inline: [VALUE] ops/s
  Unified-only: [VALUE] ops/s
  判定:     [CONCLUSION]

ケース C (LIFO vs FIFO):
  LIFO:     [VALUE] ops/s
  FIFO:     [VALUE] ops/s
  判定:     [CONCLUSION]

ケース D (Pool sizing):
  Pool-big:   [VALUE] ops/s
  Pool-small: [VALUE] ops/s
  Pool-default: [VALUE] ops/s
  判定:     [CONCLUSION]

=== FINAL VERDICT ===
Primary bottleneck: [A|B|C|D|MIXED]
Next phase: Phase 9x [recommendation]