Files
hakmem/docs/analysis/TINY_C7_ULTRA_DESIGN.md
Moe Charm (CI) 2a13478dc7 Optimize C6 heavy and C7 ultra performance analysis with refined design refinements
- Update environment profile presets and visibility analysis
- Enhance small object and tiny segment v4 box implementations
- Refine C7 ultra and C6 heavy allocation strategies
- Add comprehensive performance metrics and design documentation

🤖 Generated with Claude Code

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2025-12-10 22:57:26 +09:00

3.9 KiB
Raw Blame History

TINY_C7_ULTRA_DESIGN

目的

  • C7 (1024B) 向け mimalloc 型超高速パスULTRAを用意し、Mixed 161024B を mimalloc の 5 割近辺まで寄せる。
  • 学習層や stats の仕組みは残しつつ、C7 同一スレッドのホットパスからは極力それらを排除する。

箱構造

  • Hot: TinyC7UltraBoxTLS freelist + C7 専用セグメントを握る同一スレッド専用箱)
  • Cold: C7UltraSegmentBoxC7 専用セグメント管理。現段階では設計のみで未実装)
  • 既存 Cold: Superslab / WarmPool / Guard / Remote / Stats は既存の箱のまま。ULTRA は原則触らない。

決定事項(芯)

  1. C7 専用ページ源
    • ULTRA は「C7 専用セグメント」からページを取る(将来は mmap で 2〜4MiB 単位)。
    • v3/v4/Tiny v1 が握る C7 ページとは混ざらない前提。
    • UF-1 時点では C7UltraSegmentBox は未実装で、C7 ページ供給は既存 v3 経由の stub とする。
  2. free 時の ptr→page
    • ULTRA が扱う C7 ページは C7 専用セグメント上にのみ存在すると決める。
    • 将来像:
      • seg = p & ~(SEG_SIZE-1) で segment 基底。
      • seg が ULTRA 管理表にあれば offset / page_idx / page_meta から class=7 を取得し、ヘッダなしで freelist push。
      • 管理表に無ければ既存 v3/v4 freeヘッダありにフォールバック。
  3. ULTRA と v3/v4 の責務分離
    • ULTRA ON: C7 アロケーションはすべて ULTRA 管理v3/v4 は C7 ページを新規に取らない)。
    • ULTRA OFF: C7 は v3現行本命か v4 が処理する。
    • free: 「まず ULTRA セグメントか」を判定し、ULTRA 管理外なら常に v3/v4 free へ落とすオーバーレイ構造。
    • Remote/cross-thread free は ULTRA 非対応。ULTRA は同一スレッド C7 専用 TLS box として設計。
  4. Fail-Fast ポリシー
    • ULTRA が扱わないポインタは必ず v3/v4 側でヘッダ検証・範囲チェックを行う。
    • ULTRA 内部不整合(将来フェーズ)は statsワンショットログで可視化し、可能なら v3/v4 へフォールバック。

セグメント前提UF-3 仕様)

  • SEG_SIZE: 2MiB (pow2)。seg_base = ptr & ~(SEG_SIZE-1) で判定可能にする。
  • セグメント構造(イメージ):
    • base, seg_size (=2MiB), page_size (=TINY_PAGE_SIZE 想定), num_pages (=seg_size/page_size)
    • page_meta[num_pages]freelist/used/capacity だけを持つ軽量構造)
  • free 時の判定:
    • seg = p & ~(SEG_SIZE-1) で ULTRA 管理セグメントか確認。
    • 管理外 → v3 freeヘッダ付き経路へフォールバック。
    • 管理内 → page_idx = (p - seg_base) >> PAGE_SHIFT で page_meta を取得し、ヘッダ無しで freelist push。
  • Remote/cross-thread free は UF-3 でも非対応(同一スレッド C7 専用のまま)。

UF-4: C7 ULTRA header light研究箱

  • 目的: C7 ULTRA の alloc/free から tiny_region_id_write_header の毎回実行を外し、carve 時だけに寄せる。
  • 手段: freelist の next をヘッダ直後に格納してヘッダを保持し、ENV HAKMEM_TINY_C7_ULTRA_HEADER_LIGHT (default 0) ON のときだけ carve 時に一括書き込み。alloc はヘッダ済みならスキップ。
  • Fail-Fast: ULTRA 管理外 ptr は従来どおり v3 free 経路へ落とす。

フェーズ

  • UF-1: 箱・ENV・front フックだけ stub で入れる(中身は v3 C7 経由、挙動変化なし)。
  • UF-2: ULTRA TLS freelist を実装C7 ページ 1 枚を TLS で握る。同一スレッドのみ。C7 ページ供給は当面 v3/v4 経由。
  • UF-3: C7UltraSegmentBox を実装し、ptr→segment mask でヘッダレス free に寄せる(セグメント 1 枚のみでも可)。
  • UF-4: C7 ULTRA header light を研究箱として追加し、ON/OFF A/BMixed / C7-only 両方)で評価する。