219 lines
7.0 KiB
Markdown
219 lines
7.0 KiB
Markdown
|
|
# ULTRA+MID v3 Generation Summary (2025-12-12)
|
|||
|
|
|
|||
|
|
## 概要
|
|||
|
|
|
|||
|
|
この世代(2025-12-10~12-12)で、Tiny/ULTRA 層の完成と MID v3 の本線採用により、0-1024B 範囲の性能最適化が完了しました。
|
|||
|
|
|
|||
|
|
## 層別状態まとめ
|
|||
|
|
|
|||
|
|
### 0-256B: Tiny/ULTRA(完成・凍結)
|
|||
|
|
|
|||
|
|
**状態**: Production (frozen)
|
|||
|
|
**性能**: Mixed 16-1024B = **43.9M ops/s** (baseline 30.6M → +43.5%)
|
|||
|
|
|
|||
|
|
**完成内容**:
|
|||
|
|
- C4-C7 ULTRA: 寄生型 TLS cache で legacy 経路を 49% → 4.8% に削減
|
|||
|
|
- v3 backend: alloc_current_hit=100%, free_retire=0.1% で堅牢に
|
|||
|
|
- Dispatcher/gate snapshot: ENV/route を hot path から排除
|
|||
|
|
- C7 ULTRA refill: division → bit shift で +11%
|
|||
|
|
|
|||
|
|
**設計原則**:
|
|||
|
|
- Small object (C2-C7) = ULTRA 最適化済み(fast path/slow path 共に)
|
|||
|
|
- v3 backend = ロジック完全最適化(残り 5% は header write/memcpy 等の内部コスト)
|
|||
|
|
- 研究箱(v4/v5)は OFF で標準プロファイルに影響なし
|
|||
|
|
|
|||
|
|
**詳細**: `PERF_EXEC_SUMMARY_ULTRA_PHASE_20251211.md`
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### 257-768B: MID v3(本線採用)
|
|||
|
|
|
|||
|
|
**状態**: Production (mainline)
|
|||
|
|
**性能**: C6-heavy = +11.1%, Mixed (257-768B) = **+19.8%**
|
|||
|
|
|
|||
|
|
**完成内容**:
|
|||
|
|
- MID-V3-0~5: 型定義、RegionIdBox 統合、alloc/free 実装
|
|||
|
|
- MID-V3-6: hakmem.c メイン経路統合(箱化モジュール化)
|
|||
|
|
- Role separation: 257-768B 専用(C7 は ULTRA に任せる)
|
|||
|
|
- Profile 採用: C6_HEAVY_LEGACY_POOLV1 と MIXED_TINYV3_C7_SAFE でデフォルト ON
|
|||
|
|
|
|||
|
|
**設計原則**:
|
|||
|
|
- Lane = TLS cache, Page = authoritative freelist(二重管理回避)
|
|||
|
|
- RegionIdBox: ptr→page_meta O(1) lookup(TLS cached binary search)
|
|||
|
|
- Batch refill: 16 items/batch(デフォルト、ENV 調整可能)
|
|||
|
|
|
|||
|
|
**ENV**:
|
|||
|
|
```bash
|
|||
|
|
HAKMEM_PROFILE=C6_HEAVY_LEGACY_POOLV1 # または MIXED_TINYV3_C7_SAFE
|
|||
|
|
# Auto-enables:
|
|||
|
|
# HAKMEM_MID_V3_ENABLED=1
|
|||
|
|
# HAKMEM_MID_V3_CLASSES=0x40 # C6 only
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**詳細**: `MID_POOL_V3_DESIGN.md`
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### 769-1024B: C7 ULTRA(完成・凍結)
|
|||
|
|
|
|||
|
|
**状態**: Production (frozen)
|
|||
|
|
**性能**: Optimized for 1KB allocations (ULTRA 層に統合済み)
|
|||
|
|
|
|||
|
|
**設計原則**:
|
|||
|
|
- MID v3 から意図的に除外(C7 は ULTRA が最適)
|
|||
|
|
- v4/v5/v6 研究箱も C7 には適用せず、ULTRA 経路を維持
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### V6 C6-only Headerless(研究箱、V6-HDR-4 完成)
|
|||
|
|
|
|||
|
|
**状態**: Research box (frozen at V6-HDR-4)
|
|||
|
|
**性能**: Cost almost neutral / slight positive (~1-2%)
|
|||
|
|
|
|||
|
|
**完成内容**:
|
|||
|
|
- V6-HDR-0~3: 型定義、RegionIdBox 統合、alloc/free headerless 実装
|
|||
|
|
- V6-HDR-4: Cold refill/retire、sanity test、構造検証完了
|
|||
|
|
- 設計原則: 4層 Box Theory(L0 ULTRA / L1 TLS / L2 Segment / L3 Policy)
|
|||
|
|
|
|||
|
|
**結論**:
|
|||
|
|
- Headerless 設計の実証完了
|
|||
|
|
- コストほぼ相殺〜微プラス(1-2% 程度)
|
|||
|
|
- 本線採用せず、研究箱として保持(将来の参考実装)
|
|||
|
|
|
|||
|
|
**詳細**: `SMALL_V6_DESIGN.md`
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 役割分担の完成形
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
Size Range | Allocator | Status | Performance
|
|||
|
|
---------------|---------------|---------------------|------------------
|
|||
|
|
0-256B | Tiny/ULTRA | Production (frozen) | +43.5% (Mixed)
|
|||
|
|
257-768B | MID v3 | Production | +19.8% (257-768B)
|
|||
|
|
769-1024B | C7 ULTRA | Production (frozen) | Optimized
|
|||
|
|
1025B-52KB | Pool | Existing path | Stable
|
|||
|
|
52KB-2MB | ACE | Existing path | Stable
|
|||
|
|
2MB+ | Large mmap | Existing path | Stable
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 設計原則の統一
|
|||
|
|
|
|||
|
|
### Box Modularization Pattern
|
|||
|
|
|
|||
|
|
全層で統一された箱化設計:
|
|||
|
|
- **Type Box**: 型定義(`*_box.h`)
|
|||
|
|
- **ENV Box**: 環境変数ゲート(`*_env_box.h`)
|
|||
|
|
- **Implementation**: 実装(`*.c`)
|
|||
|
|
- **Cold Iface**: L1/L2 境界インターフェース(`*_cold_iface*.h`)
|
|||
|
|
|
|||
|
|
### RegionIdBox Integration
|
|||
|
|
|
|||
|
|
全層で統合された ptr→meta lookup:
|
|||
|
|
- Tiny/ULTRA: REGION_KIND_SMALL_V6 / REGION_KIND_C7_ULTRA
|
|||
|
|
- MID v3: REGION_KIND_MID_V3
|
|||
|
|
- v6: REGION_KIND_SMALL_V6(headerless)
|
|||
|
|
- TLS cached binary search で O(1) lookup
|
|||
|
|
|
|||
|
|
### ENV-Controlled Routing
|
|||
|
|
|
|||
|
|
研究箱は明示 opt-in:
|
|||
|
|
- v4/v5: `HAKMEM_SMALL_HEAP_V[4|5]_ENABLED=1` + `HAKMEM_SMALL_HEAP_V[4|5]_CLASSES=0x??`
|
|||
|
|
- v6: `HAKMEM_SMALL_HEAP_V6_ENABLED=1` + `HAKMEM_SMALL_HEAP_V6_CLASSES=0x40`
|
|||
|
|
- MID v3: `HAKMEM_MID_V3_ENABLED=1` + `HAKMEM_MID_V3_CLASSES=0x40`(本線では Profile 経由で自動)
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 本線プロファイル構成(2025-12-12 現在)
|
|||
|
|
|
|||
|
|
### MIXED_TINYV3_C7_SAFE(標準 Mixed 16-1024B)
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
HAKMEM_PROFILE=MIXED_TINYV3_C7_SAFE
|
|||
|
|
# Auto-enables:
|
|||
|
|
# - Tiny/ULTRA (C7_SAFE profile)
|
|||
|
|
# - MID v3 (257-768B, C6 only)
|
|||
|
|
# - SmallObject v3 (C7-only backend)
|
|||
|
|
# - Tiny front v3 + LUT + fast classify
|
|||
|
|
# - v4/v5/v6 OFF (研究箱)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**期待性能**: 42-44M ops/s (Mixed 16-1024B, 1M iter, ws=400)
|
|||
|
|
|
|||
|
|
### C6_HEAVY_LEGACY_POOLV1(C6-heavy 257-768B)
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
HAKMEM_PROFILE=C6_HEAVY_LEGACY_POOLV1
|
|||
|
|
# Auto-enables:
|
|||
|
|
# - Tiny/ULTRA (C7_SAFE profile)
|
|||
|
|
# - MID v3 (257-768B, C6 only)
|
|||
|
|
# - SmallObject v3 (C7-only backend)
|
|||
|
|
# - Pool v1 (flatten OFF)
|
|||
|
|
# - v4/v5/v6 OFF (研究箱)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**期待性能**: 22-23M ops/s (C6-heavy 257-768B, 1M iter, ws=400)
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 次世代テーマ候補
|
|||
|
|
|
|||
|
|
### Option A: 小さめテーマ(+数%狙い)
|
|||
|
|
|
|||
|
|
**so_alloc/so_free 枝削り**:
|
|||
|
|
- 現状の v3 backend で残っている条件分岐を削減
|
|||
|
|
- alloc_current_hit=100% だが、内部に header write/check が残存
|
|||
|
|
- 狙い: +1-3% 程度の微改善
|
|||
|
|
|
|||
|
|
**メリット**: 安全、既存設計の洗練
|
|||
|
|
**デメリット**: 大きなジャンプはない
|
|||
|
|
|
|||
|
|
### Option B: 次世代テーマ(大きめ変更)
|
|||
|
|
|
|||
|
|
**MID/Pool v3 拡張**:
|
|||
|
|
- 現在 257-768B (C6 only) を C5 (128B) や C4 (64B) に拡張
|
|||
|
|
- 狙い: 128-256B 範囲の改善(現在 Tiny/ULTRA が最適だが、さらなる実験)
|
|||
|
|
|
|||
|
|
**C2/C3 ULTRA 実験**:
|
|||
|
|
- 16-64B 範囲に ULTRA 適用(現在 legacy 経路が主流)
|
|||
|
|
- 狙い: 小サイズでも ULTRA の恩恵を受ける
|
|||
|
|
|
|||
|
|
**メリット**: 新しい最適化領域の開拓
|
|||
|
|
**デメリット**: 既存の安定領域に影響する可能性
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## まとめ
|
|||
|
|
|
|||
|
|
### この世代で達成したこと
|
|||
|
|
|
|||
|
|
1. **Tiny/ULTRA 完成**: 0-256B で +43.5% (Mixed)、設計凍結
|
|||
|
|
2. **MID v3 本線採用**: 257-768B で +19.8%、Profile デフォルト ON
|
|||
|
|
3. **C7 ULTRA 凍結**: 769-1024B で最適化完了
|
|||
|
|
4. **v6 研究箱完成**: C6-only headerless 実証(V6-HDR-4)
|
|||
|
|
|
|||
|
|
### 設計的な完成度
|
|||
|
|
|
|||
|
|
- **役割分担**: 各サイズ範囲に最適化された allocator が明確
|
|||
|
|
- **Box 化**: 全層で統一された箱化設計
|
|||
|
|
- **RegionIdBox**: 全層で統合された ptr→meta lookup
|
|||
|
|
- **ENV 制御**: 研究箱は明示 opt-in、本線は Profile 経由で安定
|
|||
|
|
|
|||
|
|
### この世代の「形」
|
|||
|
|
|
|||
|
|
0-1024B の性能最適化が完了し、役割分担が明確になりました。この構成を「固定」として、次世代テーマは:
|
|||
|
|
- 既存設計の洗練(枝削り)
|
|||
|
|
- 新しい最適化領域の開拓(拡張実験)
|
|||
|
|
|
|||
|
|
のいずれかから選択できます。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
**作成日**: 2025-12-12
|
|||
|
|
**関連ドキュメント**:
|
|||
|
|
- `PERF_EXEC_SUMMARY_ULTRA_PHASE_20251211.md`
|
|||
|
|
- `MID_POOL_V3_DESIGN.md`
|
|||
|
|
- `SMALL_V6_DESIGN.md`
|
|||
|
|
- `ENV_PROFILE_PRESETS.md`
|
|||
|
|
- `CURRENT_TASK.md`
|