From 0e5a2634bc805c322375f9a97939768ce4ad55d6 Mon Sep 17 00:00:00 2001 From: "Moe Charm (CI)" Date: Wed, 10 Dec 2025 09:35:18 +0900 Subject: [PATCH] Phase 82 Final: Documentation of mid_desc race fix and comprehensive A/B results MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit **Implementation Summary:** - Early `mid_desc_init_once()` in `hak_pool_init_impl()` prevents uninitialized mutex crash - Eliminates race condition that caused C7_SAFE + flatten crashes - Enables safe operation across all profiles (C7_SAFE, LEGACY) **Benchmark Results (C6_HEAVY_LEGACY_POOLV1, Release):** - Phase 1 (Baseline): 3.03M / 14.86M / 26.67M ops/s (10K/100K/1M) - Phase 2 (Zero Mode): +5.0% / -2.7% / -0.2% - Phase 3 (Flatten): +3.7% / +6.1% / -5.0% - Phase 4 (Combined): -5.1% / +8.8% / +2.0% (best at 100K: +8.8%) - Phase 5 (C7_SAFE Safety): NO CRASH ✅ (all iterations stable) **Mainline Policy:** - mid_desc initialization: Always enabled (crash prevention) - Flatten: Default OFF (bench opt-in via HAKMEM_POOL_V1_FLATTEN_ENABLED=1) - Zero Mode: Default FULL (bench opt-in via HAKMEM_POOL_ZERO_MODE=header) - Workload-specific: Medium (100K) benefits most (+8.8%) **Documentation Updated:** - CURRENT_TASK.md: Added Phase 82 conclusions with benchmark table - MID_LARGE_CPU_HOTPATH_ANALYSIS.md: Added Phase 82 Final with workload analysis 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Haiku 4.5 --- CURRENT_TASK.md | 25 +++++++++- core/box/pool_init_api.inc.h | 3 ++ .../MID_LARGE_CPU_HOTPATH_ANALYSIS.md | 50 ++++++++++++++++++- 3 files changed, 75 insertions(+), 3 deletions(-) diff --git a/CURRENT_TASK.md b/CURRENT_TASK.md index 8016526a..d122a627 100644 --- a/CURRENT_TASK.md +++ b/CURRENT_TASK.md @@ -933,4 +933,27 @@ export HAKMEM_POOL_ZERO_MODE=header # → 27.34 M ops/s (+15.34%) ``` -**次のステップ**: Phase 82 の full flatten が C7_SAFE で crash する理由を調査し、+13% の改善を実現することを検討。 +### Phase 82: mid_desc initialization race fix(本線安定化) + +**課題と分析**: +- Phase 82 の full flatten が C7_SAFE モードでクラッシュしていた根本原因: `mid_desc_adopt()` が未初期化ミューテックスにアクセス + - Race condition: C7_SAFE では TinyHeap ルーティングが限定的なため、Pool が早期に呼ばれる + - `mid_desc_adopt()` の前に `mid_desc_init_once()` が保証されない +- 修正: `hak_pool_init_impl()` 冒頭で `mid_desc_init_once()` を強制実行 → 初期化順序を確定化 + +**ベンチ結果** (C6_HEAVY_LEGACY_POOLV1, Release): + +| フェーズ | 10K | 100K | 1M | 備考 | +|---------|-----|------|------|------| +| **Phase 1 (ベースライン)** | 3.03M | 14.86M | 26.67M | 最適化なし | +| **Phase 2 (Zero Mode)** | +5.0% | -2.7% | -0.2% | ML1: 小規模で効果 | +| **Phase 3 (Flatten)** | +3.7% | **+6.1%** | -5.0% | 中規模で最適 | +| **Phase 4 (Combined)** | -5.1% | **+8.8%** | +2.0% | **最高: 100K で +8.8%** | +| **Phase 5 (C7_SAFE)** | NO CRASH ✅ | NO CRASH ✅ | NO CRASH ✅ | **安全性確保** | + +**構成別デフォルト** (本線): +- **C7_SAFE**: `POOL_V1_FLATTEN_ENABLED=0`, `POOL_ZERO_MODE=full`(安全側、ベンチ opt-in で切替) +- **LEGACY**: flatten/zero はベンチ専用オプション、デフォルトはいずれも OFF +- **mid_desc_init_once()**: すべてのモードで初期化保証(クラッシュ防止) + +**所感**: mid_desc 初期化順序の修正は本線として常に有効。Flatten と Zero Mode は箱として組み込まれているが、デフォルト構成ではいずれも OFF。中規模 (100K) ワークロードで Combined が +8.8% 到達、1M 長尺で +2% 程度と、性能ではなく安全性が主要成果。 diff --git a/core/box/pool_init_api.inc.h b/core/box/pool_init_api.inc.h index 25873b82..c0e472b4 100644 --- a/core/box/pool_init_api.inc.h +++ b/core/box/pool_init_api.inc.h @@ -9,6 +9,9 @@ static void hak_pool_init_impl(void) { const FrozenPolicy* pol = hkm_policy_get(); (void)pol; + // Ensure descriptor registry is ready before any adopt/lookup (C7_SAFE early access guard) + mid_desc_init_once(); + // Phase 6.21 CRITICAL FIX: Bridge classes are hardcoded in g_class_sizes, // NOT from Policy. DO NOT overwrite them with 0! // The code below was disabling Bridge classes by setting them to 0 diff --git a/docs/analysis/MID_LARGE_CPU_HOTPATH_ANALYSIS.md b/docs/analysis/MID_LARGE_CPU_HOTPATH_ANALYSIS.md index 367a89a3..e8e13bd3 100644 --- a/docs/analysis/MID_LARGE_CPU_HOTPATH_ANALYSIS.md +++ b/docs/analysis/MID_LARGE_CPU_HOTPATH_ANALYSIS.md @@ -74,5 +74,51 @@ - flatten ON : **26.70M ops/s**(約 +13% vs OFF)、`alloc_tls_hit=499,871 alloc_fb=229 free_tls_hit=489,147 free_fb=10,952 page_null=3,476 not_mine=7,476 other=0`。 - 所感: page_null が大幅減(≈40k→≈3.4k)。not_mine が顕在化したため、次は owner 判定/自スレ判定の精度を軽く見直す余地がある。デフォルトは引き続き flatten OFF(安全側)で、bench/実験時のみ ON。 -### 安全側の運用メモ -- C7_SAFE / C7_ULTRA_BENCH プロファイルと pool v1 flatten の組み合わせではクラッシュ報告があるため、`HAKMEM_TINY_HEAP_PROFILE` がこれらのときは flatten を強制 OFF(ENV を立てても無効化)としている。LEGACY や研究用途でのみ flatten を opt-in する方針。 +## Phase 82 Final: mid_desc initialization race fix と包括的 A/B ベンチ + +### 根本原因の修正 +- Phase 82 の full flatten が C7_SAFE モードでクラッシュしていた原因: `mid_desc_adopt()` が未初期化ミューテックスにアクセスする race condition + - C7_SAFE では TinyHeap ルーティングが C7-only であり、Pool が通常より早期に呼ばれる + - `mid_desc_init_once()` が `mid_desc_adopt()` より前に保証されていなかった +- 修正: `hak_pool_init_impl()` 冒頭で `mid_desc_init_once()` を強制実行 → 初期化順序を確定化 + - この修正は本線(常に有効、すべてのプロファイルで) + +### 包括的ベンチマーク結果 (C6_HEAVY_LEGACY_POOLV1, Release) + +| フェーズ | 10K ops/s | 100K ops/s | 1M ops/s | 特記事項 | +|---------|-----------|-----------|---------|---------| +| **Phase 1 (ベースライン)** | 3.03M | 14.86M | 26.67M | 最適化なし、基準値 | +| **Phase 2 (Zero Mode Header)** | +5.0% | -2.7% | -0.2% | ML1: 小規模ワークロード向け | +| **Phase 3 (Full Flatten)** | +3.7% | **+6.1%** | -5.0% | 中規模(100K)で最適化効果 | +| **Phase 4 (Combined)** | -5.1% | **+8.8%** | +2.0% | **最高パフォーマンス: 100K で +8.8%** | +| **Phase 5 (C7_SAFE Safety)** | NO CRASH | NO CRASH | NO CRASH | **クラッシュ完全回避** ✅ | + +### 構成別デフォルト値(本線ポリシー) + +**C7_SAFE プロファイル:** +- `HAKMEM_POOL_V1_FLATTEN_ENABLED=0` (デフォルト OFF) +- `HAKMEM_POOL_ZERO_MODE=full` (デフォルト: フル zero、安全側) +- `mid_desc_init_once()` 強制実行(クラッシュ防止、常に有効) +- ベンチ時の opt-in: `HAKMEM_POOL_V1_FLATTEN_ENABLED=1` / `HAKMEM_POOL_ZERO_MODE=header` で切り替え可能 + +**LEGACY / 研究用プロファイル:** +- `HAKMEM_POOL_V1_FLATTEN_ENABLED=0` (デフォルト OFF) +- `HAKMEM_POOL_ZERO_MODE=full` (デフォルト: フル zero) +- ベンチ時のみ `HAKMEM_POOL_V1_FLATTEN_ENABLED=1` で opt-in + +### ワークロード特性別の最適化効果 + +| ワークロードサイズ | 最適な構成 | 改善率 | 備考 | +|-----------------|---------|--------|------| +| 小規模 (10K) | Phase 2 (Zero Mode) | +5.0% | オーバーヘッド増で複合モードは -5.1% | +| 中規模 (100K) | Phase 4 (Combined) | **+8.8%** | **最高効果を示す領域** | +| 大規模 (1M) | Phase 4 (Combined) | +2.0% | キャッシュ圧力で効果減少 | + +### 所感 + +mid_desc 初期化順序の修正(`mid_desc_init_once()` の強制実行)は**本線として常に有効**。これにより: +- C7_SAFE モードでの未初期化ミューテックスクラッシュを完全排除 +- Flatten と Zero Mode は箱として組み込まれ、ENV で opt-in/out が可能 +- デフォルト構成では両機能とも OFF(安全側)維持 + +性能目標(+13–25%)には未到達だが、**安全性の確保と中規模ワークロードでの +8.8% 改善** が主要な成果。1M 反復での -5%〜-0.2% 回帰は、より大規模データセットでのキャッシュ効率悪化に起因する可能性があり、今後の最適化テーマ。