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:
@ -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` → handled(return true)
|
||||
- `0` → not-handled(return 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(各設定)
|
||||
|
||||
### OFF(HAKMEM_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%
|
||||
|
||||
### ON(HAKMEM_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%)
|
||||
**ステータス**: 昇格準備完了
|
||||
Reference in New Issue
Block a user