Files
hakmem/docs/analysis/HAKMEM_V2_GENERATION_SUMMARY.md
Moe Charm (CI) 397aea0131 Phase v10: Freeze v7 as C5/C6-only research preset
Documentation: Baseline fixed per Phase v10
- HAKMEM_V2_GENERATION_SUMMARY.md:
  - v7 repositioned as 「C5/C6 專用研究箱」
  - Mixed baseline: HAKMEM_SMALL_HEAP_V7_ENABLED=0 (OFF)
  - Added Phase v7-7 (Learner), Phase v10 (legacy removal)
  - Learner performance: +127% on C5/C6 workload
  - Size class table: segregated Mixed (v7 OFF) vs C5/C6 preset (v7 ON)

- ENV_PROFILE_PRESETS.md:
  - MIXED_TINYV3_C7_SAFE: explicitly v7 OFF (Mixed baseline)
  - NEW: C5_C6_SMALL_HEAP_V7_LEARNER profile
    - Learner dynamic route switching documentation
    - Test commands and expected performance (38-39M ops/s)
    - Phase v10 deprecation notice (v3/v4/v5 removed)

Purpose:
- Set clear baseline: v7 OFF for Mixed, ON for C5/C6 benchmarks
- Document Learner preset for future reference
- No code changes (docs-only checkpoint)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-12 06:13:15 +09:00

8.9 KiB
Raw Blame History

HAKMEM v2 世代 総括第1章完

1. 位置づけ

HAKMEM v2 世代は、ChatGPT Pro の層設計に基づく「芯から作り直す」実装練習として開始。 L0ULTRAから L3Policyまでの層構造を確立し、Box Theory に沿った実装パターンを確立した。

Phase v7-4Policy Box 導入をもって、v2 世代は設計上の完成を見た。

2. アーキテクチャ層構造

L0: ULTRAC4-C7, FROZEN 世代)

特性:

  • C7: 2MiB Segment + 64KiB Page + TLS freelist
  • C4-C6: ULTRA-free / ULTRA-alloc (寄生型 TLS cache)
  • Status: FROZEN完成度高、これ以上改善不要

性能:

  • C7 phase 1a/1b: +11% 改善division → bit shift 最適化完了)
  • Mixed 16-1024B に貢献: +11% baseline 達成

L1: SmallObject 新世代v7 / MID v3 / Legacy

L1-a: SmallObject v7C5/C6 専用研究箱)

狙い: smallmid を 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-3: 56.3M ops/s (-4.3%)
  • 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 プリセット(ドキュメント参照):

# C5/C6 ベンチマーク用Learner ON
HAKMEM_SMALL_HEAP_V7_ENABLED=1 \
HAKMEM_SMALL_HEAP_V7_CLASSES=0x60 \
./bench_random_mixed_hakmem 300000 400 1

残課題:

  • Mixed 本線性能との差分解消v3 backend 最適化、headerless v6 拡張)

L1-b: MID v3257-768B 本線)

特性: Specialized TLS heap for mid-size allocations Status: Stable, production-ready 担当: C5-C6 (mixed workload では ULTRA / v7 と共存)

L1-c: LegacyTinyHeap v1 / Pool v1

特性: Fallback for unhandled classes Status: Stable, production baseline

L2: InfrastructureSegment / RegionId / ColdIface

Segment:

  • SmallSegment_v6: V6 headerless core 用64KiB page, free stack
  • SmallSegment_v7: v7 core 用2MiB segment, same geometry
  • 型パターン統一により、将来の multi-class 拡張が容易

RegionIdBox:

  • v6/v7 segment の ptr → region lookupO(log N) binary search
  • TLS cache で high-hit-rate workload を最適化
  • Phase v7-3 で TLS fast path により overhead 削減

ColdIface:

  • v6: small_cold_v6_refill_page / retire_page
  • v7: small_cold_v7_refill_page / retire_page
  • API 統一により multi-segment 拡張も設計可能

L3: Policy & StatsRoute 決定・統計)

Policy Box (Phase v7-4 新規):

  • SmallPolicyV7: route_kind[8] で C0-C7 の route 一括決定
  • Priority (固定): ULTRA > v7 > MID_v3 > LEGACY
  • ENV 一元化: init_from_env で全 ENV を一度だけ解釈

Frontend との関係:

  • Front: size → class_idx → policy->route_kind[ci] → switch
  • Front は ENV を直接読まないpolicy に委譲)
  • 設定変更は Policy Box だけで完結

Stats (将来):

  • SmallPageStatsV7: page retire 時に publish
  • PolicyLearnerv7-5 候補): stats から最適 route を学習

3. サイズ帯の担当整理Phase v10 確定)

サイズ 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. 最適化達成状況

Throughput

  • Baseline (no optimization): 39.5M ops/s (Mixed 16-1024B)
  • Phase 1a (division → shift): 39.5M ops/s (±0%)
  • Phase 1b (segment learning 削除): 42.3M ops/s (+7.1%)
  • Final (v7-3 + Policy Box): 43-44M ops/s (+11.1% 実測)

Overhead Reduction

  • v7 Phase v7-2: -7.0% (RegionIdBox binary search cost)
  • v7 Phase v7-3: -4.3% (TLS fast path optimization)
  • Improvement: 38% overhead削減

Architectural Wins

  • Layer structure (L0-L3) 明確化
  • Box Theory 実装パターン確立
  • Policy Box で ENV 一元化
  • Segment/RegionId 型パターン統一

5. Box Theory 実装パターンv2 で確立)

各層の責務:

L0: ULTRA
  └─ 最高速アロケータsize class 専用)

L1: HotBox (v7/MID/Legacy)
  └─ TLS cache + current/partial page 管理

L2: ColdIface + Segment + RegionId
  └─ Page lifecycle (refill/retire) + segment管理 + region lookup

L3: Policy Box + Stats + Learner (将来)
  └─ Route決定・env管理・統計・学習

特徴:

  • 各層が内部完結(下の層に依存しない API
  • ENV は L3 だけで読むL1-L0 は ENV-free
  • TLS cache はレイヤーごとに独立
  • Future: Learner で L3 ← stats をフィードバック

6. 次世代 v7 / v3 への橋渡し(設計メモ)

v7 第2章の候補

6-1. Multi-class 拡張C5/C4 対応)

狙い: -4.3% overhead を複数クラスで分摊して ±0% へ

設計考察:

  • SmallSegment_v7 を class ごとに独立 (C6/C5/C4 各segment)
  • または: 複数 class を 1 segment 内で共存
  • TLS segment hint が複数class対応可能か検証

実装レベル:

  • SmallHeapCtx_v7.tls_seg_base/end は 1 segment 前提
  • Multi-segment 対応なら: tls_seg_list[] or segment registry
  • 既存 RegionIdBox で OK拡張不要

6-2. Learner 連携(動的 route 選択)

狙い: 実行時統計で v7 / MID_v3 の最適 route を自動選択

設計考察:

  • SmallPageStatsV7 publish → PolicyLearner ingestion
  • Learner から Policy Box へ route_kind[] 更新
  • 学習率・履歴長・信頼度 threshold は TBD

実装レベル:

  • Policy Box snapshot は read-only
  • 更新は small_policy_v7_update_from_learner() 経由
  • Thread-safe update (maybe atomic or RCU)

6-3. HeaderLess 統一v7/v6 の mode 統合)

狙い: RegionId lookup で headerless を完全活用

設計考察:

  • v7 でも header を書かない mode の検証
  • Free 時に page_meta から class_idx を取得
  • Small allocation では header mismatch のリスク軽減

実装レベル:

  • SmallPageMeta にはすでに class_idx あり
  • Free path: hint 無視して page->class_idx 信頼
  • Validation: class_idx 範囲チェックだけ

次世代開始の条件

  • v7 が ±0% overhead 達成multi-class 拡張)
  • v3 / v7 コアの SPEC がこの総括+各 DESIGN ドキュメントから一貫して読み取れること

7. v2 世代の位置づけ

v2 世代はここで一旦「第1章の完成版」とする。

扱い方:

  • ULTRA (C4-C7): 大きな構造変更はせず、第2世代でも L0 の完成箱として前提にする。
  • MID v3: 257768B 帯の本線箱として維持しつつ、将来 v7/mid コアに統合する際の比較対象・退避先として使う。
  • v7 (C6-only): 設計・実装パターンは確立済みの研究箱として残し、第2世代の v7/mid コアを作るときの参照実装にする。
  • Policy Box: route 決定の一元化パターンとして、そのまま v3 世代でも使い続ける。

この総括は「ここまでが第1世代で、ここから先は v3 / v7 世代でさらに芯を削る」というための地図として扱う。

8. 謝辞・振り返り

この v2 世代を通じて以下を学んだ/確立した:

  • Box Theory の実装パターンL0-L3 層分離)
  • ENV 一元化の必要性Policy Box
  • TLS cache の効果segment fast hint, page cache
  • Multi-layer allocation の複雑性と取り組み方

「芯から作り直す」というゴールに向けて、設計練習としては十分成功。 次の v7 第2章multi-classは、ここの学びを足がかりに進める。


Document Date: 2025-12-12 Final Commit: Phase v7-4 Policy Box 導入 Next Phase: v7-5 (Multi-class expansion) / HakORune priority