2.5 KiB
2.5 KiB
POOL_HOTBOX_V2_IMPLEMENTATION_GUIDE (Phase68 スケルトン)
目的
- pool allocator のホットパスを TinyHotHeap v2 と同様に Hot/Cold 分離するための実装ガイド。
- 現行 v1 をデフォルトのまま残しつつ、ENV ゲートで v2 を A/B できる形で段階的に導入する。
前提・ゲート
- デフォルトは v1(
HAKMEM_POOL_V2_ENABLED=0)。v2 は bench/研究用に opt-in。 - クラスマスクを追加する場合は
HAKMEM_POOL_V2_CLASSES(bit per class)を想定。
実装ステップ
-
型整備(Hot Box)
pool_page_v2(freelist/used/capacity/base/meta/token)pool_class_v2(current_page/partial_pages/full_pages/stride)pool_ctx_v2(全クラス配列)
-
TLS 初期化
pool_v2_tls_get()を追加し、calloc + memset で ctx を用意。- 各クラスの block_size/stride を初期化。
max_partial_pages等のポリシー値もここで設定。
-
alloc/free Hot パス
pool_v2_alloc(class_idx):- current → partial → refill の順で freelist pop、page 内 used++。
pool_v2_free(class_idx, ptr):- page_of(ptr) を求め、freelist push / used--。
- used==0 なら retire 判定(partial 上限を超えたら Cold へ返却)。
- Hot パスでは OS/Stats/学習に触れない。
-
Cold IF
PoolColdIfaceを定義 (refill_page,retire_page)。- 初期実装は既存 pool/superslab の refill/retire API をラップして流用し、Hot からは IF だけを見る。
-
Gate/Route
- front 入口は 1 LUT + switch(route)で v1/v2/legacy を選択。
HAKMEM_POOL_V2_ENABLED/ classes mask で v2 を有効化し、fallback は常に v1 へ。
-
Stats/Fail-Fast
- ENV で有効化できる軽量 stats(alloc_fast/slow/refill/fallback, free_fast/retire 等)を用意。
- 不整合(class mismatch/範囲外)は Fail-Fast、フォールバックは明示的にカウントする。
ベンチ計画(目安)
- プロファイル:
./bench_mid_large_mt_hakmem 1 1000000 400 1(Release, C7_SAFE, v2 OFF が基準)。 - 目標: 28–29M ops/s → 30–32M (+5〜10%)。perf stat で cycles を明確に下げる。
メモ
- Superslab/OS/Stats/Learning のロジックは変えない。Cold IF を挟んで境界を明確にするだけ。
- C6-heavy など特定クラスから段階的に v2 を試し、回帰が出たら即ゲートで戻せる構造を優先する。***