docs: Phase v7-2 results + Phase v7-3 design (TLS fast path + page_meta cache)
This commit is contained in:
@ -1485,3 +1485,38 @@ if (unlikely(tls->seg_base == 0)) {
|
|||||||
- **Option C**: 新規サイズクラス (C3/C2 ULTRA) → TLS L1 汚染リスク
|
- **Option C**: 新規サイズクラス (C3/C2 ULTRA) → TLS L1 汚染リスク
|
||||||
|
|
||||||
推奨: Option A(v3 backend 最適化)を検討
|
推奨: Option A(v3 backend 最適化)を検討
|
||||||
|
|
||||||
|
## Phase v7-2: SmallObject v7 C6-only Implementation ✅
|
||||||
|
|
||||||
|
### 完成
|
||||||
|
|
||||||
|
- **SmallSegment_v7**: 2MiB segment with TLS slot, free page stack
|
||||||
|
- **ColdIface_v7**: Page refill/retire with stat publishing (future Learner)
|
||||||
|
- **HotBox_v7**: Full C6-only alloc/free with proper header format (HEADER_MAGIC | class_idx)
|
||||||
|
- **RegionIdBox integration**: v7 segment registration for ptr->region lookup
|
||||||
|
- **Free path fix**: Early-exit v7 check BEFORE ss_fast_lookup (separate mmap segment)
|
||||||
|
|
||||||
|
### ベンチマーク結果 (C6, 400-510B, 500K iter)
|
||||||
|
|
||||||
|
| Mode | Throughput | Cost |
|
||||||
|
|------|-----------|------|
|
||||||
|
| v7 OFF (legacy) | 58.6M ops/s | baseline |
|
||||||
|
| v7 ON (C6-only) | 54.5M ops/s | -7% overhead |
|
||||||
|
|
||||||
|
**v7 stats**: `alloc=275104 free=275104 refill=1360 retire=1360` (perfect balance)
|
||||||
|
|
||||||
|
### 分析
|
||||||
|
|
||||||
|
-7% のオーバーヘッドは RegionIdBox binary search + segment validation が主因
|
||||||
|
- v7 は研究箱として OFF のまま(ベンチマークプロファイルでは使用しない)
|
||||||
|
- Phase v7-3: TLS fast path cache で RegionIdBox オーバーヘッド削減予定
|
||||||
|
|
||||||
|
### 次: Phase v7-3: C6 TLS Fast Path + Page Metadata Cache
|
||||||
|
|
||||||
|
**目標**: RegionIdBox overhead を削減して v7 ON での性能改善
|
||||||
|
|
||||||
|
**方針**:
|
||||||
|
1. SmallHeapCtx_v7 に TLS segment base/end/ptr を追加 → "ほとんどの" free が TLS 範囲内
|
||||||
|
2. same-page page_meta TLS cache → 1-2% 改善期待
|
||||||
|
3. RegionIdBox は TLS 範囲外のみに制限 → POOL/LEGACY/ULTRA 分類専用
|
||||||
|
4. C6-only 維持 (C5/C4 は後の検討)
|
||||||
|
|||||||
@ -309,3 +309,34 @@ RegionIdBox / SegmentBox_v7 / PageStatsBox
|
|||||||
- v3 世代(SmallObjectHeap v7)は、「small〜mid を 1 個の SmallHeapCtx + Segment + RegionIdBox で扱う」第2章として設計する。
|
- v3 世代(SmallObjectHeap v7)は、「small〜mid を 1 個の SmallHeapCtx + Segment + RegionIdBox で扱う」第2章として設計する。
|
||||||
- まずは C6-only small 帯から v7 を導入し、ULTRA/MID v3 を壊さない形で徐々に適用範囲を広げていく。
|
- まずは C6-only small 帯から v7 を導入し、ULTRA/MID v3 を壊さない形で徐々に適用範囲を広げていく。
|
||||||
|
|
||||||
|
|
||||||
|
### Phase v7-3: C6 TLS Segment Fast Path + Page Metadata Cache
|
||||||
|
|
||||||
|
目的:
|
||||||
|
- Phase v7-2 で明らかになった RegionIdBox binary search のオーバーヘッド(-7% vs legacy)を削減する。
|
||||||
|
- "ほとんどの" C6 free パスで RegionIdBox lookup を避ける設計に改善。
|
||||||
|
|
||||||
|
主な最適化:
|
||||||
|
1. **TLS segment fast hint**:
|
||||||
|
- SmallHeapCtx_v7 に `tls_seg_base / tls_seg_end / tls_seg` を追加。
|
||||||
|
- free 初期段階で `if (addr >= tls_seg_base && addr < tls_seg_end)` をチェックして、
|
||||||
|
ほとんどの C6 free は RegionIdBox を呼ばずに page_idx を計算できるように。
|
||||||
|
|
||||||
|
2. **same-page page_meta TLS cache**:
|
||||||
|
- SmallHeapCtx_v7 に `last_page_base / last_page_end / last_page_meta` を追加。
|
||||||
|
- 前回と同じページ内の free は page_meta 検索をスキップ(1-2% 改善期待)。
|
||||||
|
|
||||||
|
3. **RegionIdBox は TLS 範囲外のみ**:
|
||||||
|
- RegionIdBox は「TLS segment が知らない alloc」(POOL / LEGACY / ULTRA 由来)の分類専用に限定。
|
||||||
|
- C6-only v7 の hot path では RegionIdBox を通さない。
|
||||||
|
|
||||||
|
4. **C6-only 維持**:
|
||||||
|
- Phase v7-3 でも C6 のみに絞る。
|
||||||
|
- C5/C4 への拡張は、v7 の性能が legacy に追いついた後に検討。
|
||||||
|
|
||||||
|
期待結果:
|
||||||
|
- TLS fast path で RegionIdBox overhead 大部分回避 → -7% から ±0〜+α への改善を目指す。
|
||||||
|
- SegmentBox_v7 / ColdIface_v7 の API は不変(内部最適化のみ)。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user