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

158 lines
4.2 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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]
```