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

5.9 KiB
Raw Blame History

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 分析):

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%)
  • 有効化:
    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 実装状況