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

53 lines
3.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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 両方)で評価する。