docs: Phase v7-2 results + Phase v7-3 design (TLS fast path + page_meta cache)

This commit is contained in:
Moe Charm (CI)
2025-12-12 03:13:13 +09:00
parent 39a3c53dbc
commit 0af409260d
2 changed files with 66 additions and 0 deletions

View File

@ -1485,3 +1485,38 @@ if (unlikely(tls->seg_base == 0)) {
- **Option C**: 新規サイズクラス (C3/C2 ULTRA) → TLS L1 汚染リスク
推奨: Option Av3 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 は後の検討)

View File

@ -309,3 +309,34 @@ RegionIdBox / SegmentBox_v7 / PageStatsBox
- v3 世代SmallObjectHeap v7は、「small〜mid を 1 個の SmallHeapCtx + Segment + RegionIdBox で扱う」第2章として設計する。
- まずは 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 は不変(内部最適化のみ)。
---