Files
hakmem/RANDOM_MIXED_SUMMARY.md
Moe Charm (CI) 03ba62df4d 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

149 lines
5.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

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.

# 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 実装状況