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>
190 lines
5.6 KiB
Markdown
190 lines
5.6 KiB
Markdown
# Random Mixed ボトルネック分析 - 完全レポート
|
||
|
||
**Analysis Date**: 2025-11-16
|
||
**Status**: Complete & Implementation Ready
|
||
**Priority**: 🔴 HIGHEST
|
||
**Expected Gain**: +13-29% (19.4M → 22-25M ops/s)
|
||
|
||
---
|
||
|
||
## ドキュメント一覧
|
||
|
||
### 1. **RANDOM_MIXED_SUMMARY.md** (推奨・最初に読む)
|
||
**用途**: エグゼクティブサマリー + 優先度付き推奨施策
|
||
**対象**: マネージャー、意思決定者
|
||
**内容**:
|
||
- Cycles 分布(表形式)
|
||
- FrontMetrics 現状
|
||
- Class別プロファイル
|
||
- 優先度付き候補(A/B/C/D)
|
||
- 最終推奨(1-4優先度順)
|
||
|
||
**読む時間**: 5分
|
||
**ファイル**: `/mnt/workdisk/public_share/hakmem/RANDOM_MIXED_SUMMARY.md`
|
||
|
||
---
|
||
|
||
### 2. **RANDOM_MIXED_BOTTLENECK_ANALYSIS.md** (詳細分析)
|
||
**用途**: 深掘りボトルネック分析、技術的根拠の確認
|
||
**対象**: エンジニア、最適化担当者
|
||
**内容**:
|
||
- Executive Summary
|
||
- Cycles 分布分析(詳細)
|
||
- FrontMetrics 状況確認
|
||
- Class別パフォーマンスプロファイル
|
||
- 次の一手候補の詳細分析(A/B/C/D)
|
||
- 優先順位付け結論
|
||
- 推奨施策(スクリプト付き)
|
||
- 長期ロードマップ
|
||
- 技術的根拠(Fixed vs Mixed 比較、Refill Cost 見積もり)
|
||
|
||
**読む時間**: 15-20分
|
||
**ファイル**: `/mnt/workdisk/public_share/hakmem/RANDOM_MIXED_BOTTLENECK_ANALYSIS.md`
|
||
|
||
---
|
||
|
||
### 3. **RING_CACHE_ACTIVATION_GUIDE.md** (即実施ガイド)
|
||
**用途**: Ring Cache C4-C7 有効化の実施手順書
|
||
**対象**: 実装者
|
||
**内容**:
|
||
- 概要(なぜ Ring Cache か)
|
||
- Ring Cache アーキテクチャ解説
|
||
- 実装状況確認方法
|
||
- テスト実施手順(Step 1-5)
|
||
- Baseline 測定
|
||
- C2/C3 Ring テスト
|
||
- **C4-C7 Ring テスト(推奨)** ← これを実施すること
|
||
- Combined テスト
|
||
- ENV変数リファレンス
|
||
- トラブルシューティング
|
||
- 成功基準
|
||
- 次のステップ
|
||
|
||
**読む時間**: 10分
|
||
**実施時間**: 30分~1時間
|
||
**ファイル**: `/mnt/workdisk/public_share/hakmem/RING_CACHE_ACTIVATION_GUIDE.md`
|
||
|
||
---
|
||
|
||
## クイックスタート
|
||
|
||
### 最速で結果を見たい場合(5分)
|
||
|
||
```bash
|
||
# 1. このガイドを読む
|
||
cat /mnt/workdisk/public_share/hakmem/RING_CACHE_ACTIVATION_GUIDE.md
|
||
|
||
# 2. Baseline 測定
|
||
./out/release/bench_random_mixed_hakmem 500000 256 42
|
||
|
||
# 3. Ring Cache C4-C7 有効化してテスト
|
||
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
|
||
./out/release/bench_random_mixed_hakmem 500000 256 42
|
||
|
||
# 期待結果: 19.4M → 22-25M ops/s (+13-29%)
|
||
```
|
||
|
||
---
|
||
|
||
## ボトルネック要約
|
||
|
||
### 根本原因
|
||
Random Mixed が 23% で停滞している理由:
|
||
|
||
1. **Class切り替え多発**:
|
||
- Random Mixed は C2-C7 を均等に使用(16B-1040B)
|
||
- 毎iteration ごとに異なるクラスを処理
|
||
- TLS SLL(per-class)が複数classで頻繁に空になる
|
||
|
||
2. **最適化カバレッジ不足**:
|
||
- C0-C3: HeapV2 で 88-99% ヒット率 ✅
|
||
- **C4-C7: 最適化なし** ❌(Random Mixed の 50%)
|
||
- Ring Cache は実装済みだが **デフォルト OFF**
|
||
- HeapV2 拡張試験で効果薄(+0.3%)
|
||
|
||
3. **支配的ボトルネック**:
|
||
- SuperSlab refill: 50-200 cycles/回
|
||
- TLS SLL ポインタチェイス: 3 mem accesses
|
||
- Metadata 走査: 32 slab iteration
|
||
|
||
### 解決策
|
||
**Ring Cache C4-C7 有効化**:
|
||
- ポインタチェイス: 3 mem → 2 mem (-33%)
|
||
- キャッシュミス削減(配列アクセス)
|
||
- 既実装(有効化のみ)、低リスク
|
||
- **期待: +13-29%** (19.4M → 22-25M ops/s)
|
||
|
||
---
|
||
|
||
## 推奨実施順序
|
||
|
||
### Phase 0: 理解
|
||
1. RANDOM_MIXED_SUMMARY.md を読む(5分)
|
||
2. なぜ C4-C7 が遅いかを理解
|
||
|
||
### Phase 1: Baseline 測定
|
||
1. RING_CACHE_ACTIVATION_GUIDE.md Step 1-2 を実施
|
||
2. 現在の性能 (19.4M ops/s) を確認
|
||
|
||
### Phase 2: Ring Cache 有効化テスト
|
||
1. RING_CACHE_ACTIVATION_GUIDE.md Step 4 を実施
|
||
2. C4-C7 Ring Cache を有効化
|
||
3. 性能向上を測定(目標: 22-25M ops/s)
|
||
|
||
### Phase 3: 詳細分析(必要に応じて)
|
||
1. RANDOM_MIXED_BOTTLENECK_ANALYSIS.md で深掘り
|
||
2. FrontMetrics で Ring hit rate 確認
|
||
3. 次の最適化への道筋を検討
|
||
|
||
---
|
||
|
||
## 予想される性能向上パス
|
||
|
||
```
|
||
Now: 19.4M ops/s (23.4% of system)
|
||
↓
|
||
Phase 21-1 (Ring C4/C7): 22-25M ops/s (25-28%) ← これを実施
|
||
↓
|
||
Phase 21-2 (Hot Slab): 25-30M ops/s (28-33%)
|
||
↓
|
||
Phase 21-3 (Minimal Meta): 28-35M ops/s (31-39%)
|
||
↓
|
||
Phase 12 (Shared SS Pool): 70-90M ops/s (70-90%) 🎯
|
||
```
|
||
|
||
---
|
||
|
||
## 関連ファイル
|
||
|
||
### 実装ファイル
|
||
- `/mnt/workdisk/public_share/hakmem/core/front/tiny_ring_cache.h` - Ring Cache header
|
||
- `/mnt/workdisk/public_share/hakmem/core/front/tiny_ring_cache.c` - Ring Cache impl
|
||
- `/mnt/workdisk/public_share/hakmem/core/tiny_alloc_fast.inc.h` - Alloc fast path
|
||
- `/mnt/workdisk/public_share/hakmem/core/box/tls_sll_box.h` - TLS SLL API
|
||
|
||
### 参考ドキュメント
|
||
- `/mnt/workdisk/public_share/hakmem/CURRENT_TASK.md` - Phase 21-22 計画
|
||
- `/mnt/workdisk/public_share/hakmem/bench_random_mixed.c` - ベンチマーク実装
|
||
|
||
---
|
||
|
||
## チェックリスト
|
||
|
||
- [ ] RANDOM_MIXED_SUMMARY.md を読む
|
||
- [ ] RING_CACHE_ACTIVATION_GUIDE.md を読む
|
||
- [ ] Baseline を測定 (19.4M ops/s 確認)
|
||
- [ ] Ring Cache C4-C7 を有効化
|
||
- [ ] テスト実施 (22-25M ops/s 目標)
|
||
- [ ] 結果が目標値を達成したら ✓ 成功!
|
||
- [ ] 詳細分析が必要ならば RANDOM_MIXED_BOTTLENECK_ANALYSIS.md を参照
|
||
- [ ] Phase 21-2 計画に進む
|
||
|
||
---
|
||
|
||
**準備完了。実施をお待ちしています。**
|
||
|