Files
hakmem/docs/analysis/ULTRA_MID_V3_GENERATION_SUMMARY.md
Moe Charm (CI) 39a3c53dbc Phase v7-2: SmallObject v7 C6-only implementation with RegionIdBox integration
- SmallSegment_v7: 2MiB segment with TLS slot and free page stack
- ColdIface_v7: Page refill/retire between HotBox and SegmentBox
- HotBox_v7: Full C6-only alloc/free with header writing (HEADER_MAGIC|class_idx)
- Free path early-exit: Check v7 route BEFORE ss_fast_lookup (separate mmap segment)
- RegionIdBox: Register v7 segment for ptr->region lookup
- Benchmark: v7 ON ~54.5M ops/s (-7% overhead vs 58.6M legacy baseline)

v7 correctly balances alloc/free counts and page lifecycle.
RegionIdBox overhead identified as primary cost driver.

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

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2025-12-12 03:12:28 +09:00

7.0 KiB
Raw Blame History

ULTRA+MID v3 Generation Summary (2025-12-12)

概要

この世代2025-12-1012-12で、Tiny/ULTRA 層の完成と MID v3 の本線採用により、0-1024B 範囲の性能最適化が完了しました。

層別状態まとめ

0-256B: Tiny/ULTRA完成・凍結

状態: Production (frozen) 性能: Mixed 16-1024B = 43.9M ops/s (baseline 30.6M → +43.5%)

完成内容:

  • C4-C7 ULTRA: 寄生型 TLS cache で legacy 経路を 49% → 4.8% に削減
  • v3 backend: alloc_current_hit=100%, free_retire=0.1% で堅牢に
  • Dispatcher/gate snapshot: ENV/route を hot path から排除
  • C7 ULTRA refill: division → bit shift で +11%

設計原則:

  • Small object (C2-C7) = ULTRA 最適化済みfast path/slow path 共に)
  • v3 backend = ロジック完全最適化(残り 5% は header write/memcpy 等の内部コスト)
  • 研究箱v4/v5は OFF で標準プロファイルに影響なし

詳細: PERF_EXEC_SUMMARY_ULTRA_PHASE_20251211.md


257-768B: MID v3本線採用

状態: Production (mainline) 性能: C6-heavy = +11.1%, Mixed (257-768B) = +19.8%

完成内容:

  • MID-V3-05: 型定義、RegionIdBox 統合、alloc/free 実装
  • MID-V3-6: hakmem.c メイン経路統合(箱化モジュール化)
  • Role separation: 257-768B 専用C7 は ULTRA に任せる)
  • Profile 採用: C6_HEAVY_LEGACY_POOLV1 と MIXED_TINYV3_C7_SAFE でデフォルト ON

設計原則:

  • Lane = TLS cache, Page = authoritative freelist二重管理回避
  • RegionIdBox: ptr→page_meta O(1) lookupTLS cached binary search
  • Batch refill: 16 items/batchデフォルト、ENV 調整可能)

ENV:

HAKMEM_PROFILE=C6_HEAVY_LEGACY_POOLV1  # または MIXED_TINYV3_C7_SAFE
# Auto-enables:
# HAKMEM_MID_V3_ENABLED=1
# HAKMEM_MID_V3_CLASSES=0x40  # C6 only

詳細: MID_POOL_V3_DESIGN.md


769-1024B: C7 ULTRA完成・凍結

状態: Production (frozen) 性能: Optimized for 1KB allocations (ULTRA 層に統合済み)

設計原則:

  • MID v3 から意図的に除外C7 は ULTRA が最適)
  • v4/v5/v6 研究箱も C7 には適用せず、ULTRA 経路を維持

V6 C6-only Headerless研究箱、V6-HDR-4 完成)

状態: Research box (frozen at V6-HDR-4) 性能: Cost almost neutral / slight positive (~1-2%)

完成内容:

  • V6-HDR-03: 型定義、RegionIdBox 統合、alloc/free headerless 実装
  • V6-HDR-4: Cold refill/retire、sanity test、構造検証完了
  • 設計原則: 4層 Box TheoryL0 ULTRA / L1 TLS / L2 Segment / L3 Policy

結論:

  • Headerless 設計の実証完了
  • コストほぼ相殺〜微プラス1-2% 程度)
  • 本線採用せず、研究箱として保持(将来の参考実装)

詳細: SMALL_V6_DESIGN.md


役割分担の完成形

Size Range     | Allocator     | Status              | Performance
---------------|---------------|---------------------|------------------
0-256B         | Tiny/ULTRA    | Production (frozen) | +43.5% (Mixed)
257-768B       | MID v3        | Production          | +19.8% (257-768B)
769-1024B      | C7 ULTRA      | Production (frozen) | Optimized
1025B-52KB     | Pool          | Existing path       | Stable
52KB-2MB       | ACE           | Existing path       | Stable
2MB+           | Large mmap    | Existing path       | Stable

設計原則の統一

Box Modularization Pattern

全層で統一された箱化設計:

  • Type Box: 型定義(*_box.h
  • ENV Box: 環境変数ゲート(*_env_box.h
  • Implementation: 実装(*.c
  • Cold Iface: L1/L2 境界インターフェース(*_cold_iface*.h

RegionIdBox Integration

全層で統合された ptr→meta lookup

  • Tiny/ULTRA: REGION_KIND_SMALL_V6 / REGION_KIND_C7_ULTRA
  • MID v3: REGION_KIND_MID_V3
  • v6: REGION_KIND_SMALL_V6headerless
  • TLS cached binary search で O(1) lookup

ENV-Controlled Routing

研究箱は明示 opt-in

  • v4/v5: HAKMEM_SMALL_HEAP_V[4|5]_ENABLED=1 + HAKMEM_SMALL_HEAP_V[4|5]_CLASSES=0x??
  • v6: HAKMEM_SMALL_HEAP_V6_ENABLED=1 + HAKMEM_SMALL_HEAP_V6_CLASSES=0x40
  • MID v3: HAKMEM_MID_V3_ENABLED=1 + HAKMEM_MID_V3_CLASSES=0x40(本線では Profile 経由で自動)

本線プロファイル構成2025-12-12 現在)

MIXED_TINYV3_C7_SAFE標準 Mixed 16-1024B

HAKMEM_PROFILE=MIXED_TINYV3_C7_SAFE
# Auto-enables:
# - Tiny/ULTRA (C7_SAFE profile)
# - MID v3 (257-768B, C6 only)
# - SmallObject v3 (C7-only backend)
# - Tiny front v3 + LUT + fast classify
# - v4/v5/v6 OFF (研究箱)

期待性能: 42-44M ops/s (Mixed 16-1024B, 1M iter, ws=400)

C6_HEAVY_LEGACY_POOLV1C6-heavy 257-768B

HAKMEM_PROFILE=C6_HEAVY_LEGACY_POOLV1
# Auto-enables:
# - Tiny/ULTRA (C7_SAFE profile)
# - MID v3 (257-768B, C6 only)
# - SmallObject v3 (C7-only backend)
# - Pool v1 (flatten OFF)
# - v4/v5/v6 OFF (研究箱)

期待性能: 22-23M ops/s (C6-heavy 257-768B, 1M iter, ws=400)


次世代テーマ候補

Option A: 小さめテーマ(+数%狙い)

so_alloc/so_free 枝削り:

  • 現状の v3 backend で残っている条件分岐を削減
  • alloc_current_hit=100% だが、内部に header write/check が残存
  • 狙い: +1-3% 程度の微改善

メリット: 安全、既存設計の洗練 デメリット: 大きなジャンプはない

Option B: 次世代テーマ(大きめ変更)

MID/Pool v3 拡張:

  • 現在 257-768B (C6 only) を C5 (128B) や C4 (64B) に拡張
  • 狙い: 128-256B 範囲の改善(現在 Tiny/ULTRA が最適だが、さらなる実験)

C2/C3 ULTRA 実験:

  • 16-64B 範囲に ULTRA 適用(現在 legacy 経路が主流)
  • 狙い: 小サイズでも ULTRA の恩恵を受ける

メリット: 新しい最適化領域の開拓 デメリット: 既存の安定領域に影響する可能性


まとめ

この世代で達成したこと

  1. Tiny/ULTRA 完成: 0-256B で +43.5% (Mixed)、設計凍結
  2. MID v3 本線採用: 257-768B で +19.8%、Profile デフォルト ON
  3. C7 ULTRA 凍結: 769-1024B で最適化完了
  4. v6 研究箱完成: C6-only headerless 実証V6-HDR-4

設計的な完成度

  • 役割分担: 各サイズ範囲に最適化された allocator が明確
  • Box 化: 全層で統一された箱化設計
  • RegionIdBox: 全層で統合された ptr→meta lookup
  • ENV 制御: 研究箱は明示 opt-in、本線は Profile 経由で安定

この世代の「形」

0-1024B の性能最適化が完了し、役割分担が明確になりました。この構成を「固定」として、次世代テーマは:

  • 既存設計の洗練(枝削り)
  • 新しい最適化領域の開拓(拡張実験)

のいずれかから選択できます。


作成日: 2025-12-12 関連ドキュメント:

  • PERF_EXEC_SUMMARY_ULTRA_PHASE_20251211.md
  • MID_POOL_V3_DESIGN.md
  • SMALL_V6_DESIGN.md
  • ENV_PROFILE_PRESETS.md
  • CURRENT_TASK.md