Files
hakmem/docs/analysis/RANDOM_MIXED_SUMMARY.md

149 lines
5.9 KiB
Markdown
Raw Normal View History

Phase 23 Unified Cache + PageFaultTelemetry generalization: Mid/VM page-fault bottleneck identified Summary: - Phase 23 Unified Cache: +30% improvement (Random Mixed 256B: 18.18M → 23.68M ops/s) - PageFaultTelemetry: Extended to generic buckets (C0-C7, MID, L25, SSM) - Measurement-driven decision: Mid/VM page-faults (80-100K) >> Tiny (6K) → prioritize Mid/VM optimization Phase 23 Changes: 1. Unified Cache implementation (core/front/tiny_unified_cache.{c,h}) - Direct SuperSlab carve (TLS SLL bypass) - Self-contained pop-or-refill pattern - ENV: HAKMEM_TINY_UNIFIED_CACHE=1, HAKMEM_TINY_UNIFIED_C{0-7}=128 2. Fast path pruning (tiny_alloc_fast.inc.h, tiny_free_fast_v2.inc.h) - Unified ON → direct cache access (skip all intermediate layers) - Alloc: unified_cache_pop_or_refill() → immediate fail to slow - Free: unified_cache_push() → fallback to SLL only if full PageFaultTelemetry Changes: 3. Generic bucket architecture (core/box/pagefault_telemetry_box.{c,h}) - PF_BUCKET_{C0-C7, MID, L25, SSM} for domain-specific measurement - Integration: hak_pool_try_alloc(), l25_alloc_new_run(), shared_pool_allocate_superslab_unlocked() 4. Measurement results (Random Mixed 500K / 256B): - Tiny C2-C7: 2-33 pages, high reuse (64-3.8 touches/page) - SSM: 512 pages (initialization footprint) - MID/L25: 0 (unused in this workload) - Mid/Large VM benchmarks: 80-100K page-faults (13-16x higher than Tiny) Ring Cache Enhancements: 5. Hot Ring Cache (core/front/tiny_ring_cache.{c,h}) - ENV: HAKMEM_TINY_HOT_RING_ENABLE=1, HAKMEM_TINY_HOT_RING_C{0-7}=size - Conditional compilation cleanup Documentation: 6. Analysis reports - RANDOM_MIXED_BOTTLENECK_ANALYSIS.md: Page-fault breakdown - RANDOM_MIXED_SUMMARY.md: Phase 23 summary - RING_CACHE_ACTIVATION_GUIDE.md: Ring cache usage - CURRENT_TASK.md: Updated with Phase 23 results and Phase 24 plan Next Steps (Phase 24): - Target: Mid/VM PageArena/HotSpanBox (page-fault reduction 80-100K → 30-40K) - Tiny SSM optimization deferred (low ROI, ~6K page-faults already optimal) - Expected improvement: +30-50% for Mid/Large workloads Generated with Claude Code Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-17 02:47:58 +09:00
# 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 - デフォルトOFFPhase 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% HeapV2TLS 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/sSystem の 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 実装状況