From 969170c0fb0bd3092855f7f17eba867922ca41d7 Mon Sep 17 00:00:00 2001 From: "Moe Charm (CI)" Date: Thu, 11 Dec 2025 23:52:39 +0900 Subject: [PATCH] Doc: Update CURRENT_TASK.md with Phase V6-HDR-3 completion summary --- CURRENT_TASK.md | 73 ++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 69 insertions(+), 4 deletions(-) diff --git a/CURRENT_TASK.md b/CURRENT_TASK.md index c9ef235f..fa9a2854 100644 --- a/CURRENT_TASK.md +++ b/CURRENT_TASK.md @@ -166,11 +166,76 @@ C6-heavy 257-768B: 26.7M ops/s C6-heavy 257-768B: 26.1M ops/s (MISMATCH なし) ``` -### 次のフェーズ (V6-HDR-3 提案) +--- -- v6 segment 実割り当て(現状は RegionIdBox lookup が常に UNKNOWN を返す) -- C6 route を v6 専用にして header 依存を完全除去 -- Mixed benchmark でも v6 headerless を安全確認 +## Phase V6-HDR-3: SmallSegmentV6 実割り当て(完了) + +### 目的 + +V6-HDR-2 で connectionした headerless free/alloc を実際に機能させるため、SmallSegmentV6 の TLS-scope segment registration を実装する。RegionIdBox lookup が SMALL_V6 を返すようにして、headerless design のフルチェーンを完成させる。 + +### 実装タスク + +| No | タスク | 状態 | +|----|--------|------| +| 1 | SmallSegmentV6 実割り当てロジック確認 | ✅ | +| 2 | small_v6_get_ctx() で segment 取得確認 | ✅ | +| 3 | RegionIdBox へ segment 登録実装 | ✅ | +| 4 | v6 alloc で segment 作成時の header 書き込み確認 | ✅ | +| 5 | RegionIdBox lookup が SMALL_V6 を返す確認 | ✅ | +| 6 | Mixed でも v6 部分 headerless 有効化 | ✅ | +| 7 | ベンチマーク 測定(headerless 効領確認)| ✅ | + +### 実装詳細 + +1. **SmallSegmentV6 allocation** (既に v6-0 で実装済み) + - `smallsegment_v6.c`: `small_segment_v6_acquire_for_thread()` で mmap allocation + 2MiB alignment + +2. **Segment registration** (`core/region_id_v6.c` 新規) + - TLS-scoped registration: 4つの static __thread 変数でセグメント情報をキャッシュ + - `region_id_register_v6_segment(seg)`: segment base/end を TLS に記録 + - `region_id_lookup_v6(ptr)`: TLS segment range check を最初に実行 → O(1) hit + +3. **Region type include** (`core/box/region_id_v6_box.h`) + - `#include "smallsegment_v6_box.h"` 追加(SmallSegmentV6 type 参照用) + - Function declaration: `region_id_register_v6_segment(SmallSegmentV6* seg)` + +4. **Segment registration call** (`core/smallobject_core_v6.c` 変更) + - `small_heap_ctx_v6()` で segment 取得後に `region_id_register_v6_segment(seg)` 呼び出し + - region_id_observe_lookup() を small_v6_region_observe_validate() で呼び出し追加 + +### ENV 変数 + +| ENV | Default | Description | +|-----|---------|-------------| +| `HAKMEM_SMALL_HEAP_V6_ENABLED` | 0 | v6 route 有効化 | +| `HAKMEM_SMALL_HEAP_V6_CLASSES` | 0 | v6 対象クラスマスク (0x40=C6, 0x70=C4+C5+C6) | +| `HAKMEM_SMALL_HEAP_V6_HEADERLESS` | 0 | headerless mode 有効化 | +| `HAKMEM_SMALL_V6_REGION_OBSERVE` | 0 | RegionIdBox class_idx 検証ログ | +| `HAKMEM_REGION_ID_V6_OBSERVE` | 0 | RegionIdBox lookup ログ | + +### ベンチマーク結果 + +``` +# Baseline (v6 OFF) +Size 257-768B: 9.68M ops/s + +# C6-only v6 (0x40) +Size 257-768B: 8.88M ops/s (-8.3%) + +# C4+C5+C6 v6 Mixed (0x70) +Size 64-768B: 9.34M ops/s (-3.5%) +``` + +### 検証項目 + +- ✅ SmallSegmentV6 は mmap allocation で既に実装済み(v6-0) +- ✅ small_heap_ctx_v6() で segment 取得時に registration 呼び出し +- ✅ RegionIdBox lookup が TLS segment をチェック +- ✅ Header write は refill/carve time のみ(alloc/free で無し) +- ✅ region_id_lookup_v6() が SMALL_V6 を返すようになった +- ✅ Mixed mode でも v6 headerless が安全に動作 +- ✅ ベンチマーク実行で挙動確認 ---