- 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>
7.0 KiB
ULTRA+MID v3 Generation Summary (2025-12-12)
概要
この世代(2025-12-10~12-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-0~5: 型定義、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) lookup(TLS 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-0~3: 型定義、RegionIdBox 統合、alloc/free headerless 実装
- V6-HDR-4: Cold refill/retire、sanity test、構造検証完了
- 設計原則: 4層 Box Theory(L0 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_V6(headerless)
- 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_POOLV1(C6-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 の恩恵を受ける
メリット: 新しい最適化領域の開拓 デメリット: 既存の安定領域に影響する可能性
まとめ
この世代で達成したこと
- Tiny/ULTRA 完成: 0-256B で +43.5% (Mixed)、設計凍結
- MID v3 本線採用: 257-768B で +19.8%、Profile デフォルト ON
- C7 ULTRA 凍結: 769-1024B で最適化完了
- 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.mdMID_POOL_V3_DESIGN.mdSMALL_V6_DESIGN.mdENV_PROFILE_PRESETS.mdCURRENT_TASK.md