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:
Moe Charm (CI)
2025-11-28 14:11:37 +09:00
parent 6b86c60a20
commit a6e681aae7
8 changed files with 154 additions and 17 deletions

View File

@ -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 ONP2.1 で default 化)。
- Header から class_idx を読む従来動作に戻すHeader/Next 競合リスクあり)。
- HAKMEM_TINY_RESTORE_HEADER=1
- tiny_next_store() で Header 復元を強制legacy mode
- 既定: Header 復元 OFFP2.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