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