Files
hakmem/docs/design/POOL_HOTBOX_V2_IMPLEMENTATION_GUIDE.md

53 lines
2.5 KiB
Markdown
Raw Normal View History

# 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を想定。
実装ステップ
------------
1. 型整備Hot Box
- `pool_page_v2`freelist/used/capacity/base/meta/token
- `pool_class_v2`current_page/partial_pages/full_pages/stride
- `pool_ctx_v2`(全クラス配列)
2. TLS 初期化
- `pool_v2_tls_get()` を追加し、calloc + memset で ctx を用意。
- 各クラスの block_size/stride を初期化。`max_partial_pages` 等のポリシー値もここで設定。
3. 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/学習に触れない。
4. Cold IF
- `PoolColdIface` を定義 (`refill_page`, `retire_page`)。
- 初期実装は既存 pool/superslab の refill/retire API をラップして流用し、Hot からは IF だけを見る。
5. Gate/Route
- front 入口は 1 LUT + switchrouteで v1/v2/legacy を選択。
- `HAKMEM_POOL_V2_ENABLED` / classes mask で v2 を有効化し、fallback は常に v1 へ。
6. Stats/Fail-Fast
- ENV で有効化できる軽量 statsalloc_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 が基準)。
- 目標: 2829M ops/s → 3032M (+5〜10%)。perf stat で cycles を明確に下げる。
メモ
----
- Superslab/OS/Stats/Learning のロジックは変えない。Cold IF を挟んで境界を明確にするだけ。
- C6-heavy など特定クラスから段階的に v2 を試し、回帰が出たら即ゲートで戻せる構造を優先する。***