diff --git a/docs/analysis/ENV_PROFILE_PRESETS.md b/docs/analysis/ENV_PROFILE_PRESETS.md index bb6c770a..e316aa27 100644 --- a/docs/analysis/ENV_PROFILE_PRESETS.md +++ b/docs/analysis/ENV_PROFILE_PRESETS.md @@ -12,6 +12,7 @@ - C7-only SmallObject v3 + Tiny front v3 + LUT + fast classify ON。 - v4 系(C6/C7 v4、fast classify v4、small segment v4)はすべて OFF。 - Tiny/Pool v2 もすべて OFF。 +- **v7 (C5/C6) は OFF** (Phase v10: Mixed 本線では v7 無効化、C5/C6 専用プリセット参照) - C6 は凍結中(Tiny/SmallObject の特別扱いなし)。mid/pool の通常経路に任せる。 ### ENV 最小セット(Release) @@ -279,6 +280,56 @@ perf record -F 5000 --call-graph dwarf -e cycles:u \ --- +## Research Profile 3: C5_C6_SMALL_HEAP_V7_LEARNER(SmallObject v7 C5/C6 専用プリセット, Phase v10) + +### 目的 +- **C5/C6 サイズ帯専用(Mixed 本線では使わない)** +- SmallObject v7 + Learner で動的ルート最適化を検証。 +- Learner がワークロード比率を監視し、C5 route を v7 ↔ MID_v3 で自動切り替え。 +- Phase v10 で v7 を「C5/C6 専用プリセット」として凍結し、本プリセットで完全に管理。 + +### 性能実績 +- C5/C6 mixed (200-500B, 300K iter): + - **v7 + Learner: 38.7M ops/s** (+127% vs Legacy) + - Learner route switch: C5 ratio 28% < threshold 30% → MID_v3 自動切り替え + +### ENV(v7 C5/C6 opt-in) +```sh +HAKMEM_BENCH_MIN_SIZE=200 +HAKMEM_BENCH_MAX_SIZE=500 +HAKMEM_SMALL_HEAP_V7_ENABLED=1 # ★ v7 ON +HAKMEM_SMALL_HEAP_V7_CLASSES=0x60 # ★ C5(0x20) + C6(0x40) +# Learner は v7 enabled 時にデフォルト ON (Phase v10) +# HAKMEM_SMALL_LEARNER_V7_ENABLED=0 で個別無効化可 +``` + +### テストコマンド +```sh +# C5/C6 混合(50/50) +HAKMEM_BENCH_MIN_SIZE=200 HAKMEM_BENCH_MAX_SIZE=500 \ + HAKMEM_SMALL_HEAP_V7_ENABLED=1 HAKMEM_SMALL_HEAP_V7_CLASSES=0x60 \ + ./bench_random_mixed_hakmem 300000 400 1 + +# C6 heavy(90% C6, 10% C5)→ Learner route switch トリガー +HAKMEM_BENCH_MIN_SIZE=200 HAKMEM_BENCH_MAX_SIZE=500 \ + HAKMEM_SMALL_HEAP_V7_ENABLED=1 HAKMEM_SMALL_HEAP_V7_CLASSES=0x60 \ + ./bench_allocators --allocator hakmem --scenario c6heavy --iterations 10 +``` + +### 期待値 +- Throughput: **38-39M ops/s** (C5/C6 mixed) +- Learner log: `[LEARNER_V7] C5 route switch: V7 → MID_V3` (C5 ratio < 30%) +- Route decision: `[POLICY_V7_INIT] C5: v7, C6: v7` + +### 注意 +- **Mixed 本線(16-1040B)では v7 OFF** (HAKMEM_SMALL_HEAP_V7_ENABLED=0) +- v7 は C5/C6 専用、他のサイズ帯には影響なし +- Learner は C5 の動的最適化のみ(C6 は固定 v7) +- Phase v10 で v3/v4/v5 削除済み(古い ENV は無視される) + +--- + ### 共通注意 - プリセットから外れて単発の ENV を積み足すと再現が難しくなるので、まずは上記いずれかからスタートし、変更点を必ずメモしてください。 - v2 系(Pool v2 / Tiny v2)はベンチごとに opt-in。不要なら常に 0。 +- **Phase v10**: v3/v4/v5 は削除されました(古い ENV は無視されます)。C5/C6 最適化には本プリセット(v7+Learner)を使用してください。 diff --git a/docs/analysis/HAKMEM_V2_GENERATION_SUMMARY.md b/docs/analysis/HAKMEM_V2_GENERATION_SUMMARY.md index 979dacca..83661b72 100644 --- a/docs/analysis/HAKMEM_V2_GENERATION_SUMMARY.md +++ b/docs/analysis/HAKMEM_V2_GENERATION_SUMMARY.md @@ -22,31 +22,49 @@ Phase v7-4(Policy Box 導入)をもって、v2 世代は設計上の完成 ### L1: SmallObject 新世代(v7 / MID v3 / Legacy) -#### L1-a: SmallObject v7(C6-only 研究箱) +#### L1-a: SmallObject v7(C5/C6 専用研究箱) **狙い**: small~mid を 1 個の SmallHeapCtx + Segment で扱う土台作り +**位置づけ(Phase v10 確定)**: +- **基準線**: Mixed 本線では `HAKMEM_SMALL_HEAP_V7_ENABLED=0` (OFF) +- **用途**: C5/C6 ベンチマーク専用プリセット(Learner ON) +- **Status**: 研究実装(設計パターン確立済み) + **実装状況**: - Phase v7-2: C6-only 本実装完了(refill/retire 動作確認) - Phase v7-3: TLS segment fast path 最適化(overhead -7.0% → -4.3%) - Phase v7-4: Policy Box 統合(route 決定一元化) +- Phase v7-5b: C5 対応(256B blocks) +- Phase v7-7: Learner 統合(動的ルート切り替え) +- Phase v10: Learner デフォルト ON、v3/v4/v5 削除 -**性能**: +**性能(最新)**: - C6-only (400-510B, 500K iter): - Legacy baseline: 58.6M ops/s - - v7 Phase v7-2: 54.5M ops/s (-7.0%) - v7 Phase v7-3: 56.3M ops/s (-4.3%) -- 改善トレンド: 38% overhead 削減済み +- C5/C6 mixed (200-500B, 300K iter): + - v7 + Learner: 38.7M ops/s (+127% vs Legacy) + - Learner route switch: C5 ratio 28% < threshold 30% → MID_v3 **設計完了事項**: - SmallSegment_v7: 2MiB segment, free page stack - SmallHeapCtx_v7: TLS context, TLS segment hints (v7-3) - ColdIface_v7: page refill/retire - RegionIdBox: v7 segment registration + fast lookup +- SmallPolicyV7: route 決定一元化 +- SmallLearnerV7: 動的ワークロード検出 + +**C5/C6 プリセット**(ドキュメント参照): +```bash +# C5/C6 ベンチマーク用(Learner ON) +HAKMEM_SMALL_HEAP_V7_ENABLED=1 \ +HAKMEM_SMALL_HEAP_V7_CLASSES=0x60 \ +./bench_random_mixed_hakmem 300000 400 1 +``` **残課題**: -- -4.3% overhead → ±0% へ(multi-class 拡張で分摊予定) -- C5/C4 対応(Phase v7-5 候補) +- Mixed 本線性能との差分解消(v3 backend 最適化、headerless v6 拡張) #### L1-b: MID v3(257-768B 本線) @@ -92,18 +110,18 @@ Phase v7-4(Policy Box 導入)をもって、v2 世代は設計上の完成 - SmallPageStatsV7: page retire 時に publish - PolicyLearner(v7-5 候補): stats から最適 route を学習 -## 3. サイズ帯の担当整理 +## 3. サイズ帯の担当整理(Phase v10 確定) -| サイズ | Class | Primary | Secondary | Status | -|--------|-------|---------|-----------|--------| -| 1KB | C7 | ULTRA | - | FROZEN | -| 512B | C6 | v7 / MID_v3 | ULTRA | Research | -| 256B | C5 | MID_v3 | ULTRA | Stable | -| 128B | C4 | ULTRA | MID_v3 | Partial | -| 64B | C3 | Legacy | - | Fallback | -| 32B | C2 | Legacy | - | Fallback | -| 16B | C1 | Legacy | - | Fallback | -| 8B | C0 | Legacy | - | Fallback | +| サイズ | Class | Mixed 本線 | C5/C6 専用 | Status | +|--------|-------|-----------|-----------|--------| +| 1KB | C7 | ULTRA | ULTRA | FROZEN | +| 512B | C6 | MID_v3 | v7+Learner | Research preset | +| 256B | C5 | MID_v3 | v7+Learner | Research preset | +| 128B | C4 | ULTRA | ULTRA | Stable | +| 64B | C3 | Legacy | Legacy | Fallback | +| 32B | C2 | Legacy | Legacy | Fallback | +| 16B | C1 | Legacy | Legacy | Fallback | +| 8B | C0 | Legacy | Legacy | Fallback | ## 4. 最適化達成状況