35 lines
1.6 KiB
Markdown
35 lines
1.6 KiB
Markdown
|
|
# Phase P2: Tiny の完全TLS化とリモートフリー改良
|
|||
|
|
|
|||
|
|
目的: Tiny(≤1KiB)の4Tスケールを改善し、ロック競合とリモートフリーの負債を削減。
|
|||
|
|
|
|||
|
|
## 実装
|
|||
|
|
- 完全TLSアリーナ(クラス別Active Slab)
|
|||
|
|
- `__thread TinySlab* g_tls_active_slab[TINY_NUM_CLASSES]`
|
|||
|
|
- alloc時は Magazine→ActiveSlab(所有スレ)→共有FreeList の順で探索
|
|||
|
|
- ActiveSlab採用ロジックを強化(共有リスト先頭をTLSに引き抜き、以降はロックレス運用)
|
|||
|
|
|
|||
|
|
- MPSCリモートフリーの閾値ドレイン
|
|||
|
|
- TinySlabに `atomic_uint remote_count` を追加し、push/drainで増減
|
|||
|
|
- しきい値以上でオーナー側/クラスロック下でドレインを実施
|
|||
|
|
- ランダム確率でドレイン試行(過剰ドレイン防止)
|
|||
|
|
|
|||
|
|
- ラッパー時の安全リフィル(既存)
|
|||
|
|
- `HAKMEM_WRAP_TINY=1` 時は magazine-first + ActiveSlab ロックレス
|
|||
|
|
- `HAKMEM_WRAP_TINY_REFILL=1` で小規模trylockリフィルを許可
|
|||
|
|
|
|||
|
|
## 環境変数
|
|||
|
|
- `HAKMEM_TINY_REMOTE_DRAIN_THRESHOLD`(既定 32)
|
|||
|
|
- `HAKMEM_TINY_REMOTE_DRAIN_TRYRATE`(既定 16 → 1/16確率で試行)
|
|||
|
|
- `HAKMEM_TINY_MAG_CAP`(TLS magazine上限、既定2048/クラスによる)
|
|||
|
|
- `HAKMEM_WRAP_TINY` / `HAKMEM_WRAP_TINY_REFILL`(既定OFF)
|
|||
|
|
|
|||
|
|
## 初期結果(1秒, 簡易)
|
|||
|
|
- Tiny(8–64B)
|
|||
|
|
- 1T: ~18.6–20.1M ops/s
|
|||
|
|
- 4T: ~40.1–43.4M ops/s(+数% 改善)
|
|||
|
|
|
|||
|
|
## 次ステップ
|
|||
|
|
- 2秒→10秒に段階拡大して、ActiveSlabとドレインしきい値のA/B(4T中心)
|
|||
|
|
- WRAP_TINY(=1)の効果は条件依存のため既定OFFを維持(A/Bで限定的に使用)
|
|||
|
|
|