Phase 82 Final: Documentation of mid_desc race fix and comprehensive A/B results
**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 <noreply@anthropic.com>
This commit is contained in:
@ -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% 程度と、性能ではなく安全性が主要成果。
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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% 回帰は、より大規模データセットでのキャッシュ効率悪化に起因する可能性があり、今後の最適化テーマ。
|
||||
|
||||
Reference in New Issue
Block a user