P2: TLS SLL Redesign - class_map default, tls_cached tracking, conditional header restore
This commit completes the P2 phase of the Tiny Pool TLS SLL redesign to fix the Header/Next pointer conflict that was causing ~30% crash rates. Changes: - P2.1: Make class_map lookup the default (ENV: HAKMEM_TINY_NO_CLASS_MAP=1 for legacy) - P2.2: Add meta->tls_cached field to track blocks cached in TLS SLL - P2.3: Make Header restoration conditional in tiny_next_store() (default: skip) - P2.4: Add invariant verification functions (active + tls_cached ≈ used) - P0.4: Document new ENV variables in ENV_VARS.md New ENV variables: - HAKMEM_TINY_ACTIVE_TRACK=1: Enable active/tls_cached tracking (~1% overhead) - HAKMEM_TINY_NO_CLASS_MAP=1: Disable class_map (legacy mode) - HAKMEM_TINY_RESTORE_HEADER=1: Force header restoration (legacy mode) - HAKMEM_TINY_INVARIANT_CHECK=1: Enable invariant verification (debug) - HAKMEM_TINY_INVARIANT_DUMP=1: Enable periodic state dumps (debug) Benchmark results (bench_tiny_hot_hakmem 64B): - Default (class_map ON): 84.49 M ops/sec - ACTIVE_TRACK=1: 83.62 M ops/sec (-1%) - NO_CLASS_MAP=1 (legacy): 85.06 M ops/sec - MT performance: +21-28% vs system allocator No crashes observed. All tests passed. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@ -141,6 +141,30 @@ Safety (free の検証)
|
||||
- free 境界で追加の検証を有効化(SuperSlab 範囲・クラス不一致・危険な二重 free の検出)。
|
||||
- デバッグ時の既定推奨。perf 計測時は 0 を推奨。
|
||||
|
||||
P2 TLS SLL Redesign (Header/Next conflict fix)
|
||||
- HAKMEM_TINY_ACTIVE_TRACK=1
|
||||
- meta->active / meta->tls_cached tracking を有効化。
|
||||
- active: ユーザが保持中のブロック数
|
||||
- tls_cached: TLS SLL にキャッシュされたブロック数
|
||||
- Invariant: active + tls_cached ≈ used
|
||||
- 有効時、ss_is_slab_empty() は active==0 で EMPTY 判定(TLS SLL のキャッシュも考慮)。
|
||||
- オーバーヘッド: 約1%(atomic inc/dec per alloc/free)。
|
||||
- HAKMEM_TINY_NO_CLASS_MAP=1
|
||||
- class_map ルックアップを無効化(legacy mode)。
|
||||
- 既定: class_map ON(P2.1 で default 化)。
|
||||
- Header から class_idx を読む従来動作に戻す(Header/Next 競合リスクあり)。
|
||||
- HAKMEM_TINY_RESTORE_HEADER=1
|
||||
- tiny_next_store() で Header 復元を強制(legacy mode)。
|
||||
- 既定: Header 復元 OFF(P2.3 で無効化)。
|
||||
- class_map 使用時は Header 復元不要(alloc 時に HAK_RET_ALLOC で書き直される)。
|
||||
- HAKMEM_TINY_INVARIANT_CHECK=1
|
||||
- active + tls_cached ≈ used の不変条件検証を有効化(debug builds)。
|
||||
- 違反時は stderr に警告出力(NDEBUG 未定義時のみ)。
|
||||
- オーバーヘッド: 約2%(ss_verify_superslab_invariants() 呼び出し時のみ)。
|
||||
- HAKMEM_TINY_INVARIANT_DUMP=1
|
||||
- スラブ状態の定期ダンプを有効化(debug builds, NDEBUG 未定義時のみ)。
|
||||
- used/active/tls_cached/capacity/class の内訳を stderr に出力。
|
||||
|
||||
Frontend (mimalloc-inspired, experimental)
|
||||
- HAKMEM_INT_ADAPT_REFILL=0/1
|
||||
- INTで refill 上限(`HAKMEM_TINY_REFILL_MAX(_HOT)`)をウィンドウ毎に±16で調整(既定ON)
|
||||
|
||||
Reference in New Issue
Block a user