4.2 KiB
4.2 KiB
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 alloc(C7)
- C6 < 50M, C7 < 45M → 問題は均等分散
- C6 > 52M, C7 > 48M → 問題は別(メモリ効率?)
2️⃣ ケース B:Unified 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 > 50M→ inline slots オーバーヘッド-inline < 48M→ unified cache 自体が遅い
3️⃣ ケース C:フラグメンテーション/再利用効率
疑問: LIFO vs FIFO の差、または tcmalloc の再利用戦略の優位性?
実施:
# LIFO 有効(phase 15)
HAKMEM_TINY_UNIFIED_LIFO=1 RUNS=3 ./scripts/run_mixed_10_cleanenv.sh
# FIFO(default)
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]