Files
hakmem/docs/archive/RANDOM_MIXED_SUMMARY.md
Moe Charm (CI) 67fb15f35f Wrap debug fprintf in !HAKMEM_BUILD_RELEASE guards (Release build optimization)
## Changes

### 1. core/page_arena.c
- Removed init failure message (lines 25-27) - error is handled by returning early
- All other fprintf statements already wrapped in existing #if !HAKMEM_BUILD_RELEASE blocks

### 2. core/hakmem.c
- Wrapped SIGSEGV handler init message (line 72)
- CRITICAL: Kept SIGSEGV/SIGBUS/SIGABRT error messages (lines 62-64) - production needs crash logs

### 3. core/hakmem_shared_pool.c
- Wrapped all debug fprintf statements in #if !HAKMEM_BUILD_RELEASE:
  - Node pool exhaustion warning (line 252)
  - SP_META_CAPACITY_ERROR warning (line 421)
  - SP_FIX_GEOMETRY debug logging (line 745)
  - SP_ACQUIRE_STAGE0.5_EMPTY debug logging (line 865)
  - SP_ACQUIRE_STAGE0_L0 debug logging (line 803)
  - SP_ACQUIRE_STAGE1_LOCKFREE debug logging (line 922)
  - SP_ACQUIRE_STAGE2_LOCKFREE debug logging (line 996)
  - SP_ACQUIRE_STAGE3 debug logging (line 1116)
  - SP_SLOT_RELEASE debug logging (line 1245)
  - SP_SLOT_FREELIST_LOCKFREE debug logging (line 1305)
  - SP_SLOT_COMPLETELY_EMPTY debug logging (line 1316)
- Fixed lock_stats_init() for release builds (lines 60-65) - ensure g_lock_stats_enabled is initialized

## Performance Validation

Before: 51M ops/s (with debug fprintf overhead)
After:  49.1M ops/s (consistent performance, fprintf removed from hot paths)

## Build & Test

```bash
./build.sh larson_hakmem
./out/release/larson_hakmem 1 5 1 1000 100 10000 42
# Result: 49.1M ops/s
```

Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-26 13:14:18 +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 実装状況