Files
hakmem/docs/analysis/RANDOM_MIXED_SUMMARY.md
Moe Charm (CI) a9ddb52ad4 ENV cleanup: Remove BG/HotMag vars & guard fprintf (Larson 52.3M ops/s)
Phase 1 完了:環境変数整理 + fprintf デバッグガード

ENV変数削除(BG/HotMag系):
- core/hakmem_tiny_init.inc: HotMag ENV 削除 (~131 lines)
- core/hakmem_tiny_bg_spill.c: BG spill ENV 削除
- core/tiny_refill.h: BG remote 固定値化
- core/hakmem_tiny_slow.inc: BG refs 削除

fprintf Debug Guards (#if !HAKMEM_BUILD_RELEASE):
- core/hakmem_shared_pool.c: Lock stats (~18 fprintf)
- core/page_arena.c: Init/Shutdown/Stats (~27 fprintf)
- core/hakmem.c: SIGSEGV init message

ドキュメント整理:
- 328 markdown files 削除(旧レポート・重複docs)

性能確認:
- Larson: 52.35M ops/s (前回52.8M、安定動作)
- ENV整理による機能影響なし
- Debug出力は一部残存(次phase で対応)

🤖 Generated with Claude Code

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