Files
hakmem/docs/analysis/PHASE92_TCMALLOC_GAP_TRIAGE_SSOT.md

158 lines
4.2 KiB
Markdown
Raw Normal View 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 の優位は「小サイズに特化」か「大サイズに強い」か?
**実施**:
```bash
# 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 優位は「キャッシュ管理」か「インライン最適化」か?
**実施**:
```bash
# 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 の再利用戦略の優位性?
**実施**:
```bash
# 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 の違い?
**実施**:
```bash
# 大プール(確保多く、断片化少なく)
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]
```