diff --git a/CURRENT_TASK.md b/CURRENT_TASK.md index 456961ac..6b614381 100644 --- a/CURRENT_TASK.md +++ b/CURRENT_TASK.md @@ -1485,3 +1485,38 @@ if (unlikely(tls->seg_base == 0)) { - **Option C**: 新規サイズクラス (C3/C2 ULTRA) → TLS L1 汚染リスク 推奨: 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 は後の検討) diff --git a/docs/analysis/SMALLOBJECT_V7_DESIGN.md b/docs/analysis/SMALLOBJECT_V7_DESIGN.md index c9e3aec9..9db1cc6a 100644 --- a/docs/analysis/SMALLOBJECT_V7_DESIGN.md +++ b/docs/analysis/SMALLOBJECT_V7_DESIGN.md @@ -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 は不変(内部最適化のみ)。 + +--- +