Files
hakmem/docs/design/POOL_HOTBOX_V2_IMPLEMENTATION_GUIDE.md
2025-12-09 21:50:15 +09:00

53 lines
2.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.

# 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 を試し、回帰が出たら即ゲートで戻せる構造を優先する。***