149 lines
5.9 KiB
Markdown
149 lines
5.9 KiB
Markdown
|
|
# Random Mixed ボトルネック分析 - 返答フォーマット
|
|||
|
|
|
|||
|
|
## Random Mixed ボトルネック分析
|
|||
|
|
|
|||
|
|
### 1. Cycles 分布
|
|||
|
|
|
|||
|
|
| Layer | Target Classes | Hit Rate | Cycles | Status |
|
|||
|
|
|-------|---|---|---|---|
|
|||
|
|
| Ring Cache | C2-C3 only | 0% (OFF) | N/A | Not enabled |
|
|||
|
|
| HeapV2 | C0-C3 | 88-99% | Low (2-3) | Working ✅ |
|
|||
|
|
| TLS SLL | C0-C7 | 0.7-2.7% | Medium (8-12) | Fallback only |
|
|||
|
|
| **SuperSlab refill** | **All classes** | **~2-5% miss** | **High (50-200)** | **BOTTLENECK** 🔥 |
|
|||
|
|
| UltraHot | C1-C2 | N/A | Medium | OFF (Phase 19) |
|
|||
|
|
|
|||
|
|
- **Ring Cache**: Low (2-3 cycles) - ポインタチェイス削減(未使用)
|
|||
|
|
- **HeapV2**: Low (2-3 cycles) - Magazine供給(C0-C3のみ有効)
|
|||
|
|
- **TLS SLL**: Medium (8-12 cycles) - Fallback層、複数classで枯渇
|
|||
|
|
- **SuperSlab refill**: High (50-200 cycles) - Metadata走査+carving(支配的)
|
|||
|
|
- **UltraHot**: Medium - デフォルトOFF(Phase 19で削除)
|
|||
|
|
|
|||
|
|
**ボトルネック**: **SuperSlab refill** (50-200 cycles/refill) - Random Mixed では class切り替え多発により TLS SLL が頻繁に空になり、refill多発
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### 2. FrontMetrics 状況
|
|||
|
|
|
|||
|
|
- **実装**: ✅ ある (`core/box/front_metrics_box.{h,c}`)
|
|||
|
|
- **HeapV2**: 88-99% ヒット率 → C0-C3 では本命層として機能中
|
|||
|
|
- **UltraHot**: デフォルト OFF (Phase 19-4で +12.9% 改善のため削除)
|
|||
|
|
- **FC/SFC**: 実質無効化
|
|||
|
|
|
|||
|
|
**Fixed vs Mixed の違い**:
|
|||
|
|
| 側面 | Fixed 256B | Random Mixed |
|
|||
|
|
|------|---|---|
|
|||
|
|
| 使用クラス | C5 のみ | C3, C5, C6, C7 (混在) |
|
|||
|
|
| Class切り替え | 0 (固定) | 頻繁 (毎iteration) |
|
|||
|
|
| HeapV2適用 | 非適用 | C0-C3のみ(部分)|
|
|||
|
|
| TLS SLL hit率 | High | Low(複数class枯渇)|
|
|||
|
|
| Refill頻度 | **低い(C5 warm保持)** | **高い(class毎に空)** |
|
|||
|
|
|
|||
|
|
**死んでいる層**: **C4-C7 (128B-1KB) が全く最適化されていない**
|
|||
|
|
- C0-C3: HeapV2 ✅
|
|||
|
|
- C4: Ring ❌, HeapV2 ❌, UltraHot ❌ → 素のTLS SLL + refill
|
|||
|
|
- C5: Ring ❌, HeapV2 ❌, UltraHot ❌ → 素のTLS SLL + refill
|
|||
|
|
- C6: Ring ❌, HeapV2 ❌, UltraHot ❌ → 素のTLS SLL + refill
|
|||
|
|
- C7: Ring ❌, HeapV2 ❌, UltraHot ❌ → 素のTLS SLL + refill
|
|||
|
|
|
|||
|
|
Random Mixed で使用されるクラスの **50%以上** が完全未最適化!
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### 3. Class別プロファイル
|
|||
|
|
|
|||
|
|
**使用クラス** (bench_random_mixed.c:77 分析):
|
|||
|
|
```c
|
|||
|
|
size_t sz = 16u + (r & 0x3FFu); // 16B-1040B
|
|||
|
|
→ C2 (16-31B), C3 (32-63B), C4 (64-127B), C5 (128-255B), C6 (256-511B), C7 (512-1024B)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**最適化カバレッジ**:
|
|||
|
|
- Ring Cache: 4個クラス対応済み(C0-C7)だが **デフォルト OFF**
|
|||
|
|
- `HAKMEM_TINY_HOT_RING_ENABLE=0` (有効化されていない)
|
|||
|
|
- HeapV2: 4個クラス対応(C0-C3)
|
|||
|
|
- C4-C7 に拡張可能だが Phase 17-1 実験で +0.3% のみ効果
|
|||
|
|
- 素のTLS SLL: 全クラス(fallback)
|
|||
|
|
|
|||
|
|
**素のTLS SLL 経路の割合**:
|
|||
|
|
- C0-C3: ~88-99% HeapV2(TLS SLL は2-12% fallback)
|
|||
|
|
- **C4-C7: ~100% TLS SLL + SuperSlab refill**(最適化なし)
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### 4. 推奨施策(優先度順)
|
|||
|
|
|
|||
|
|
#### 1. **最優先**: Ring Cache C4/C7 拡張
|
|||
|
|
- **効果推定**: **High (+13-29%)**
|
|||
|
|
- **理由**:
|
|||
|
|
- Phase 21-1 で実装済み(`core/front/tiny_ring_cache.h`)
|
|||
|
|
- C2-C3 未使用(デフォルト OFF)
|
|||
|
|
- **ポインタチェイス削減**: TLS SLL 3mem → Ring 2mem (-33%)
|
|||
|
|
- Random Mixed の C4-C7 (50%) をカバー可能
|
|||
|
|
- **実装期間**: **低** (ENV 有効化のみ、≦1日)
|
|||
|
|
- **リスク**: **低** (既実装、有効化のみ)
|
|||
|
|
- **期待値**: 19.4M → 22-25M ops/s (25-28%)
|
|||
|
|
- **有効化**:
|
|||
|
|
```bash
|
|||
|
|
export HAKMEM_TINY_HOT_RING_ENABLE=1
|
|||
|
|
export HAKMEM_TINY_HOT_RING_C4=128
|
|||
|
|
export HAKMEM_TINY_HOT_RING_C5=128
|
|||
|
|
export HAKMEM_TINY_HOT_RING_C6=64
|
|||
|
|
export HAKMEM_TINY_HOT_RING_C7=64
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
#### 2. **次点**: HeapV2 を C4/C5 に拡張
|
|||
|
|
- **効果推定**: **Low to Medium (+2-5%)**
|
|||
|
|
- **理由**:
|
|||
|
|
- Phase 13-A で実装済み(`core/front/tiny_heap_v2.h`)
|
|||
|
|
- Magazine supply で TLS SLL hit rate 向上
|
|||
|
|
- **制限**: Phase 17-1 実験で +0.3% のみ(delegation overhead = TLS savings)
|
|||
|
|
- **実装期間**: **低** (ENV 変更のみ)
|
|||
|
|
- **リスク**: **低**
|
|||
|
|
- **期待値**: 19.4M → 19.8-20.4M ops/s (+2-5%)
|
|||
|
|
- **判断**: Ring Cache の方が効果的(Ring を優先)
|
|||
|
|
|
|||
|
|
#### 3. **長期**: C7 (1KB) 専用 HotPath
|
|||
|
|
- **効果推定**: **Medium (+5-10%)**
|
|||
|
|
- **理由**: C7 は Random Mixed の ~16% を占める
|
|||
|
|
- **実装期間**: **高**(新規実装)
|
|||
|
|
- **判断**: 後回し(Ring Cache + Phase 21-2 後に検討)
|
|||
|
|
|
|||
|
|
#### 4. **超長期**: SuperSlab Shared Pool (Phase 12)
|
|||
|
|
- **効果推定**: **VERY HIGH (+300-400%)**
|
|||
|
|
- **理由**: 877 SuperSlab → 100-200 削減(根本解決)
|
|||
|
|
- **実装期間**: **Very High**(アーキテクチャ変更)
|
|||
|
|
- **期待値**: 70-90M ops/s(System の 70-90%)
|
|||
|
|
- **判断**: Phase 21 完了後に着手
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 最終推奨(フォーマット通り)
|
|||
|
|
|
|||
|
|
### 優先度付き推奨施策
|
|||
|
|
|
|||
|
|
1. **最優先**: **Ring Cache C4/C7 有効化**
|
|||
|
|
- 理由: ポインタチェイス削減で +13-29% 期待、実装済み(有効化のみ)
|
|||
|
|
- 期待: 19.4M → 22-25M ops/s (25-28% of system)
|
|||
|
|
|
|||
|
|
2. **次点**: **HeapV2 C4/C5 拡張**
|
|||
|
|
- 理由: TLS refill 削減で +2-5% 期待、ただし Ring より効果薄
|
|||
|
|
- 期待: 19.4M → 19.8-20.4M ops/s (+2-5%)
|
|||
|
|
|
|||
|
|
3. **長期**: **C7 専用 HotPath 実装**
|
|||
|
|
- 理由: 1KB 単体の最適化、実装コスト大
|
|||
|
|
- 期待: +5-10%
|
|||
|
|
|
|||
|
|
4. **超長期**: **Phase 12 (Shared SuperSlab Pool)**
|
|||
|
|
- 理由: 根本的なメタデータ圧縮(構造的ボトルネック攻撃)
|
|||
|
|
- 期待: +300-400% (70-90M ops/s)
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
**本分析の根拠ファイル**:
|
|||
|
|
- `/mnt/workdisk/public_share/hakmem/core/front/tiny_ring_cache.h` - Ring Cache 実装
|
|||
|
|
- `/mnt/workdisk/public_share/hakmem/core/front/tiny_heap_v2.h` - HeapV2 実装
|
|||
|
|
- `/mnt/workdisk/public_share/hakmem/core/tiny_alloc_fast.inc.h` - Allocation fast path
|
|||
|
|
- `/mnt/workdisk/public_share/hakmem/core/box/tls_sll_box.h` - TLS SLL 実装
|
|||
|
|
- `/mnt/workdisk/public_share/hakmem/CURRENT_TASK.md` - Phase 19-22 実装状況
|
|||
|
|
|