Phase 6-2: Promote Front FastLane Free DeDup (default ON)

Results:
- A/B test: +5.18% on Mixed (10-run, clean env)
- Baseline: 46.68M ops/s
- Optimized: 49.10M ops/s
- Improvement: +2.42M ops/s (+5.18%)

Strategy:
- Eliminate duplicate header validation in front_fastlane_try_free()
- Direct call to free_tiny_fast() when dedup enabled
- Single validation path (no redundant checks)

Success factors:
1. Complete duplicate elimination (free path optimization)
2. Free path importance (50% of Mixed workload)
3. Improved execution stability (CV: 1.00% → 0.58%)

Phase 6 cumulative:
- Phase 6-1 FastLane: +11.13%
- Phase 6-2 Free DeDup: +5.18%
- Total: ~+16-17% from baseline (multiplicative effect)

Promotion:
- Default: HAKMEM_FRONT_FASTLANE_FREE_DEDUP=1 (opt-out)
- Added to MIXED_TINYV3_C7_SAFE preset
- Added to C6_HEAVY_LEGACY_POOLV1 preset
- Rollback: HAKMEM_FRONT_FASTLANE_FREE_DEDUP=0

Files modified:
- core/box/front_fastlane_env_box.h: default 0 → 1
- core/bench_profile.h: added to presets
- CURRENT_TASK.md: Phase 6-2 GO result

Health check: PASSED (all profiles)

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

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
Moe Charm (CI)
2025-12-14 17:38:21 +09:00
parent c0d2f47f7d
commit dcc1d42e7f
5 changed files with 281 additions and 10 deletions

View File

@ -0,0 +1,209 @@
# Phase 6-2: Front FastLane Free DeDup A/B テスト結果
## 概要
Phase 6-1 で FastLane+11.13% GOにより入口固定費を削減した後、Phase 6-2 では **free 側の FastLane 内重複検証を排除** することで、さらなる性能向上を狙った。
## 実装内容
### Patch 1: Free DeDup ENV gate
**対象ファイル**: `core/box/front_fastlane_env_box.h`
追加 API:
- `front_fastlane_free_dedup_enabled(void)`
- ENV: `HAKMEM_FRONT_FASTLANE_FREE_DEDUP=0/1`
- default: **0**A/B テスト用)
- キャッシュ方式: `static _Atomic int cached=-1` + `getenv`1回だけ
### Patch 2: `front_fastlane_try_free()` を重複なしにする
**対象ファイル**: `core/box/front_fastlane_box.h`
戦略:
1. `front_fastlane_free_dedup_enabled()==1` かつ `front_fastlane_class_mask()==0xFF` のとき:
- `free_tiny_fast(ptr)`**直接呼ぶ**(ヘッダ検証の重複を排除)
- 返り値 `1` → handledreturn true
- `0` → not-handledreturn false
2. それ以外dedup OFF / class mask を絞っている)では、従来どおり "class mask 判定付き" の経路に残す
重要な変更:
- `front_fastlane_try_free()` の中にあった `extern int free_tiny_fast(void*)` 宣言を削除
- `malloc_tiny_fast.h``static inline free_tiny_fast()` をそのまま呼ぶ(リンク/インラインの整合)
- `!g_initialized` の Fail-Fast は現状維持
## A/B テスト結果
### 環境
- プロファイル: `MIXED_TINYV3_C7_SAFE`
- イテレーション: 20,000,000
- ワーキングセット: 400
- 実行回数: 10 runs各設定
### OFFHAKMEM_FRONT_FASTLANE_FREE_DEDUP=0
```
Run 1: 47365474 ops/s
Run 2: 46469536 ops/s
Run 3: 45532401 ops/s
Run 4: 46777467 ops/s
Run 5: 46884997 ops/s
Run 6: 46760221 ops/s
Run 7: 47011298 ops/s
Run 8: 46594185 ops/s
Run 9: 46802184 ops/s
Run 10: 46602521 ops/s
```
統計:
- **平均値**: 46,680,028 ops/s
- **中央値**: 46,769,344 ops/s
- **標準偏差**: 467,456 ops/s
- **変動係数**: 1.00%
### ONHAKMEM_FRONT_FASTLANE_FREE_DEDUP=1
```
Run 1: 49614395 ops/s
Run 2: 49380243 ops/s
Run 3: 49085005 ops/s
Run 4: 48691723 ops/s
Run 5: 48957465 ops/s
Run 6: 49151771 ops/s
Run 7: 48770929 ops/s
Run 8: 48906449 ops/s
Run 9: 49278301 ops/s
Run 10: 49158759 ops/s
```
統計:
- **平均値**: 49,099,504 ops/s
- **中央値**: 49,119,765 ops/s
- **標準偏差**: 287,163 ops/s
- **変動係数**: 0.58%
## 性能差分
### 絶対値
- **差分**: +2,419,476 ops/s
- **改善率**: **+5.18%**
### パーセンテージ
- OFF 平均: 46,680,028 ops/s
- ON 平均: 49,099,504 ops/s
- **改善**: **+5.18%** ← **GO 判定**
## 判定
### 判定基準Mixed 10-run mean
- GO: **+1.0% 以上** ✅
- NEUTRAL: **±1.0%**
- NO-GO: **-1.0% 以下**
### 結果
**判定: GO (+5.18%)**
Phase 6-2 Free DeDup は **明確な性能向上(+5.18%** を達成し、GO 判定となった。
## 分析
### 成功要因
1. **重複検証の排除**:
- `front_fastlane_try_free()` が自前でヘッダ検証をしていた
- `free_tiny_fast()` も同じ検証を実行していた
- DeDup ON で `free_tiny_fast()` を直接呼ぶことで、重複を完全に排除
2. **free パスの重要性**:
- Mixed workload では free が支配的50%
- free 側の最適化は malloc 側よりも効果が大きい傾向
- 今回の +5.18% は free 重複排除による直接的な効果
3. **ブランチヒントの効果**:
- `__builtin_expect(front_fastlane_free_dedup_enabled() && front_fastlane_class_mask() == 0xFF, 1)`
- DeDup ON のときは高速パスが LIKELY となり、CPU 分岐予測が最適化される
### 低い変動係数
- OFF: 1.00%
- ON: 0.58%
ON の方が変動が少ない理由:
- ブランチが減ることで、実行パスが単純化
- I-cache/分岐予測の一貫性が向上
- タイミングの安定性が増加
## 健康診断
```bash
scripts/verify_health_profiles.sh
```
結果: **OK: health profiles passed**
- `MIXED_TINYV3_C7_SAFE`: 47,762,207 ops/s
- `C6_HEAVY_LEGACY_POOLV1`: 22,884,419 ops/s
両方のプロファイルで正常動作を確認。
## 次のステップ(昇格)
### 1. default を ON に変更
`core/box/front_fastlane_env_box.h`:
```c
int enabled = 1; // default: ON (opt-out)
```
### 2. 主要プロファイルで ENV 設定
`core/bench_profile.h` の主要プロファイルで:
```c
bench_setenv_default("HAKMEM_FRONT_FASTLANE_FREE_DEDUP","1")
```
### 3. CURRENT_TASK.md に記録
```markdown
## Phase 6-2: Front FastLane Free DeDup (GO, +5.18%)
- **日時**: 2025-XX-XX
- **A/B 結果**: OFF=46.68M ops/s → ON=49.10M ops/s (+5.18%)
- **判定**: GO
- **昇格**: default=1, opt-out via `HAKMEM_FRONT_FASTLANE_FREE_DEDUP=0`
- **Rollback**: `HAKMEM_FRONT_FASTLANE_FREE_DEDUP=0`
```
## Rollback 手順(即戻せる)
Phase 6-2 だけ戻す:
```bash
export HAKMEM_FRONT_FASTLANE_FREE_DEDUP=0
```
FastLane 全体を戻すPhase 6-1 も含む):
```bash
export HAKMEM_FRONT_FASTLANE=0
```
## まとめ
Phase 6-2 Free DeDup は **+5.18%** の明確な性能向上を達成し、GO 判定となった。
累積効果:
- Phase 6-1 FastLane: +11.13%
- Phase 6-2 Free DeDup: +5.18%
- **累積**: ベースラインから約 **+16-17%** の性能向上(乗算効果)
次のステップ:
1. default を ON に昇格
2. 主要プロファイルで ENV 設定
3. CURRENT_TASK.md に記録
4. 次の最適化フェーズへ進む
---
**作成日**: 2025-12-14
**Phase**: 6-2
**判定**: GO (+5.18%)
**ステータス**: 昇格準備完了