Files
hakmem/docs/analysis/SMALLOBJECT_V4_BOX_DESIGN.md
2025-12-10 17:58:42 +09:00

41 lines
3.5 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.

# 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 161024B がまだ 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**: C5〜C7 を含む全 small-object クラスを v4 に段階移行。route LUT から v4 を返せるようにする。
- **v4-5**: 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` を追加し、ENV `HAKMEM_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。
## A/B と運用
- Phase v4-3.1 時点の健康診断:
- C7-only A/B (ws=400, iters=1M, size=1024 固定):
- v3: 41.67M ops/s, prepare_calls=5,077
- v4: 42.13M ops/s, prepare_calls=4,701current/partial 再利用で 3.4x→約1.0x に改善)
- Mixed 161024B (MIXED_TINYV3_C7_SAFE, ws=400, iters=1M):
- v3 route: 40.66M ops/s
- v4 route: 40.01M ops/s-1.6% 以内、回帰なし)
- どちらも segv/assert なし。C7 v4 の prepare 増加は解消済み。Mixed ではまだ v3 がわずかに優勢だが許容範囲。