- 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>
4.2 KiB
4.2 KiB
SmallObject HotBox v4 Box Design (Phase v4-1 スケルトン)
Overview
- 目的: 16〜1024B〜2KiB の small-object を統合する v4 の箱を用意し、v3 の成功パターン(C7-only)を一般化する足場を作る。
- 中期目標: mimalloc の 70〜80% に迫ること。現状は C7-only v3 + front v3 + fast classify で Mixed 16–1024B がまだ 30〜40% 程度。
- 位置付け: v3 = prototype、v2 = archive(インターフェース参考のみ)。v4 は構造を整理しつつホット/コールド境界を明確にする。
Box 構造
- HotBox_v4: per-thread
SmallHeapCtxにSmallClassHeap[current/partial/full]とSmallPageMetaを持つ。ホットパスはここに閉じ込める。 - ColdIface_v4:
refill_page/retire_page/remote_push/remote_drainを 1 箱に集約し、内部で Superslab / Warm / Remote を呼ぶ薄いラッパ。 - SuperslabBox / RemoteBox: 既存の Superslab/WarmPool/Remote を Cold 側の箱として再利用(Hot から直接触らない)。
- PolicyBox / LearningBox: small-object 用の
SmallPolicySnapshot(block_size/route_kind 等)を上位で更新し、Hot は snapshot を読むだけにする。
Phase ロードマップ
- v4-1: 型と入口だけ追加。挙動は v3/v1 のままで、コンパイルが通る足場を用意。
- v4-2: C7-only を v4 に寄せ、v3 互換の挙動で動かす(ENV ゲート付き、v4 が優先)。
- v4-3: C7-only を v4 自前の freelist/current/partial で動かす(Cold は Tiny v1 経由)。v3 はベンチ用に残し ENV で A/B。
- v4-3.1 (今回): C7 v4 で current/partial 再利用を強化し、prepare_calls を v3 並みに抑制。C7-only ベンチで v4 が v3 比 +1% 程度まで回復。
- v4-4: C6 v4 パイロット(C6-heavy 専用 opt-in)。C7 v4 を維持しつつ C6 を v4 に載せる。
- v4-5: C5 v4 パイロット(C5-heavy 専用 opt-in)。Mixed 標準は C5 v1 のまま。
- PF2 (今回): v4 状態での pf/OS ベースライン取得と small-object Segment Box の箱だけ追加(挙動不変)。
- v4-6 / PF3 以降: Segment/Page/Block レイアウトと pf 削減、WarmPool チューニングを v4 用に調整。
現行 v3/v2 の扱い
- v3: C7-only front v3 の prototype として構造だけ再利用する。性能・安定のベースライン。
- v2: archive として残し、インターフェース案のみ参照。ホットパスには混ぜない。
次ステップの入口
core/box/smallobject_hotbox_v4_box.h: v4 のページ/クラス/TLS 型と TLS アクセサ宣言。core/box/smallobject_cold_iface_v4.h: ColdIface の関数ポインタ箱(C7 専用 refill/retire を v1 Tiny に繋ぐ)。core/box/tiny_route_env_box.h:TINY_ROUTE_SMALLHEAP_V4を追加し、ENVHAKMEM_SMALL_HEAP_V4_ENABLED/HAKMEM_SMALL_HEAP_V4_CLASSESから C7 を v4 route に載せられる(未指定なら OFF)。core/front/malloc_tiny_fast.h: route switch に v4 の case を足し、C7 v4 が ON のときは v4 経路(現在は C7 自前 freelist, それ以外は v1/v3 へフォールバック)、OFF 時は従来の v3/v1。core/box/smallsegment_v4_box.h/core/box/smallsegment_v4_env_box.h: PF2 で追加した small-object Segment Box の足場(型と ENV だけ、挙動不変)。設計メモはdocs/analysis/SMALLOBJECT_SEGMENT_V4_DESIGN.mdにまとめる。
A/B と運用(2025-12 時点の整理)
- v4 C7/C6/C5 はいずれも 研究箱。Mixed の標準ラインは C7-only v3 + C7 ULTRA(UF-3 セグメント)で固定し、v4 系は ENV opt-in のみで利用する。
- C6/FREEZE 方針により、C6 v4 / C5 v4 は mid/pool 再設計が進むまで本線に載せない(C6 は「普通の mid クラス」として pool/mid 側で扱う)。
- 今後 small-object v4 を攻めるときは:
- まず C7 ULTRA で固めた設計(Segment + Page + TLS freelist + mask free)を「small-object 全体の共通パターン」として整理し、
- その上で 16〜2KiB 帯を SmallHeapCtx v4 に寄せる(ヘッダレス化・lookup 削減を C7 と mid で統合)、 という順番で進める。