Phase 8: FREE-STATIC-ROUTE ENV Cache Hardening (GO +2.61%)

Results:
- A/B test: +2.61% on Mixed (10-run, clean env)
- Baseline: 49.26M ops/s
- Optimized: 50.55M ops/s
- Improvement: +1.29M ops/s (+2.61%)

Strategy:
- Fix ENV cache accident (main前キャッシュ事故の修正)
- Add refresh mechanism to sync with bench_profile putenv
- Ensure Phase 3 D1 optimization works reliably

Success factors:
1. Performance improvement: +2.61% (existing win-box now reliable)
2. ENV cache accident fixed: refresh mechanism works correctly
3. Standard deviation improved: 867K → 336K ops/s (61% reduction)
4. Baseline quality improved: existing optimization now guaranteed

Implementation:
- Patch 1: Make ENV gate refreshable (tiny_free_route_cache_env_box.{h,c})
  - Changed static int to extern _Atomic int
  - Added tiny_free_static_route_refresh_from_env()
- Patch 2: Integrate refresh into bench_profile.h
  - Call refresh after bench_setenv_default() group
- Patch 3: Update Makefile for new .c file

ENV cache fix verification:
- [FREE_STATIC_ROUTE] enabled appears twice (refresh working)
- bench_profile putenv now reliably reflected

Files modified:
- core/box/tiny_free_route_cache_env_box.h: extern + refresh API
- core/box/tiny_free_route_cache_env_box.c: NEW (global state + refresh)
- core/bench_profile.h: add refresh call
- Makefile: add new .o file

Health check: PASSED (all profiles)

Rollback: HAKMEM_FREE_STATIC_ROUTE=0 or revert Patch 1/2

🤖 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 18:49:08 +09:00
parent 17aaa90981
commit be723ca052
5 changed files with 222 additions and 6 deletions

View File

@ -0,0 +1,181 @@
# Phase 8: FREE-STATIC-ROUTE ENV Cache Hardening 実装 + A/B テスト結果
## 概要
Phase 3 D1`HAKMEM_FREE_STATIC_ROUTE=1`)は「`tiny_route_for_class()` の固定費を消す」勝ち箱だが、**プロセス初期の malloc/freemain 前)で ENV gate が先に 0 をキャッシュ**すると、`bench_profile` が後から `putenv()``HAKMEM_FREE_STATIC_ROUTE=1` を設定しても D1 が効かない問題があった。
この Phase は **"既に採用している最適化が確実に効く状態" を作る**= 本線品質向上)ことが目的。
## 実装内容
### Patch 1: ENV gate を "refresh 可能" にする
**対象ファイル**:
- 新規: `/mnt/workdisk/public_share/hakmem/core/box/tiny_free_route_cache_env_box.c`
- 修正: `/mnt/workdisk/public_share/hakmem/core/box/tiny_free_route_cache_env_box.h`
**変更内容**:
- header 内 `static int g_free_static_route_enabled` を廃止し、**単一のグローバル状態**に寄せた
- `extern _Atomic int g_free_static_route_enabled;`-1/0/1を使用
- `tiny_free_static_route_refresh_from_env()` を追加
- `g_free_static_route_enabled = -1` に戻して次回 `getenv()` させるFail-Fast: "確信がないなら読み直す"
**Box Theory 適合性**:
- L0: `FreeStaticRouteEnvGateBox`(この Phase
- 「ENV を読む/キャッシュする」をここに閉じ込める
- `bench_profile` から **refresh** できるようにする(戻せる/同期できる)
- 境界:
- `tiny_free_static_route_enabled()`**hot inline** のまま維持
- `bench_profile` から `*_refresh_from_env()` を 1 回だけ呼べるようにする(変換点 1 箇所)
### Patch 2: bench_profile の "ENV 反映" に組み込む
**対象ファイル**: `/mnt/workdisk/public_share/hakmem/core/bench_profile.h`
**変更内容**:
- `bench_apply_profile()``bench_setenv_default()` 群の後にある refresh 群に追加:
- `tiny_free_static_route_refresh_from_env();`
**目的**:
- `putenv()` で設定した値が gate に確実に反映されるmain 前のキャッシュ事故を無効化)
### Patch 3: Makefile 修正
**対象ファイル**: `/mnt/workdisk/public_share/hakmem/Makefile`
**変更内容**:
- `BENCH_HAKMEM_OBJS_BASE``TINY_BENCH_OBJS_BASE``core/box/tiny_free_route_cache_env_box.o` を追加
## A/B テスト結果Mixed 10-run, clean env
### BaselineHAKMEM_FREE_STATIC_ROUTE=0
実行コマンド:
```sh
env HAKMEM_FREE_STATIC_ROUTE=0 scripts/run_mixed_10_cleanenv.sh
```
結果ops/s:
```
49821124
48688927
49912351
49451910
47490103
48197944
49760733
49942417
50086124
49298146
```
統計値:
- **平均値**: 49,264,978 ops/s
- **中央値**: 49,606,322 ops/s
- **標準偏差**: 866,922 ops/s
### OptimizedHAKMEM_FREE_STATIC_ROUTE=1
実行コマンド:
```sh
env HAKMEM_FREE_STATIC_ROUTE=1 scripts/run_mixed_10_cleanenv.sh
```
結果ops/s:
```
50179320
50942581
50631974
50957275
50736009
50579135
50028619
50163179
50462814
50842186
```
統計値:
- **平均値**: 50,552,309 ops/s
- **中央値**: 50,605,554 ops/s
- **標準偏差**: 335,651 ops/s
### 性能差分
- **絶対値**: +1,287,331 ops/s
- **相対値**: **+2.61%**
### ENV cache 事故修正の確認
`HAKMEM_FREE_STATIC_ROUTE=1` 設定時、以下のメッセージが確認された:
```
[FREE_STATIC_ROUTE] enabled (Phase 3 D1)
[FREE_STATIC_ROUTE] enabled (Phase 3 D1)
```
メッセージが2回出ていることから、以下が確認できる:
1. プロセス初期に一度呼ばれている(初回キャッシュ)
2. `bench_profile``refresh` 後に再度呼ばれているrefresh が動作している証拠)
## 健康診断結果
実行コマンド:
```sh
scripts/verify_health_profiles.sh
```
結果:
```
OK: health profiles passed
```
- **MIXED_TINYV3_C7_SAFE**: 52,522,137 ops/s
- **C6_HEAVY_LEGACY_POOLV1**: 22,903,415 ops/s
両方のプロファイルで正常動作を確認。
## 判定
**GO性能向上 >= 1.0%**
### 理由
1. **性能向上**: +2.61% の明確な性能向上を確認
- 判定基準(+1.0% 以上)を大きく上回る
2. **ENV cache 事故の修正を確認**:
- `[FREE_STATIC_ROUTE] enabled` メッセージが2回表示されることで、refresh が正常に動作していることを確認
- これにより、`bench_profile``putenv()` が確実に反映されるようになった
3. **本線品質向上**:
- これは「新しい最適化」ではなく、**既存の勝ち箱Phase 3 D1が確実に効く状態を作る本線品質向上**
- preset は既に `HAKMEM_FREE_STATIC_ROUTE=1` なので、昇格時の追加作業は不要(想定通り)
4. **標準偏差の改善**:
- OFF: 866,922 ops/s → ON: 335,651 ops/s約61%減少)
- 最適化により性能の安定性も向上
## 次のステップ
### 昇格作業(推奨)
1. **Phase 8 を本線にマージ**
- 既に preset で `HAKMEM_FREE_STATIC_ROUTE=1` が設定されているため、追加の変更は不要
- refresh 機構により ENV が確実に反映される
2. **他の ENV gate にも同様の修正を検討**(任意)
- 同じ問題を持つ可能性のある他の ENV gate も同様に refresh 対応を検討
- 例: `HAKMEM_FREE_TINY_FAST_HOTCOLD`, `HAKMEM_TINY_ALLOC_DUALHOT` など
### Rollback 手順(必要時)
- `HAKMEM_FREE_STATIC_ROUTE=0` に設定
- または Patch 1/2 を revert
## まとめ
Phase 8 FREE-STATIC-ROUTE ENV Cache Hardening は **GO** と判定。
- **+2.61%** の性能向上を確認Mixed 10-run
- ENV cache 事故が修正され、`bench_profile` の設定が確実に反映されるようになった
- 標準偏差が約61%減少し、性能の安定性も向上
- 健康診断も全て通過
**本線品質向上として即座に昇格を推奨**。既存の勝ち箱Phase 3 D1が確実に効く状態が整った。