# Phase 4 E3-4: ENV Constructor Init(次の指示書) ## Status(2025-12-14) - ❌ NO-GO / FROZEN(default OFF) - 再検証 A/B(Mixed, 10-run, iter=20M, ws=400, E1=1): **-1.44% mean / -1.03% median** - ENV: - E1: `HAKMEM_ENV_SNAPSHOT=0/1`(default 0) - E3-4: `HAKMEM_ENV_SNAPSHOT_CTOR=0/1`(default 0、E1=1 前提) ## ゴール E3-4 は freeze したので、実行指示は “再現検証” ではなく “凍結維持/rollback”。 --- ## Step 0: 前提(E1 を ON にして測る) E3-4 は `hakmem_env_snapshot_enabled()` の gate 判定を短絡する最適化なので、E1 が ON であることが前提。 --- ## Step 1: Build & 健康診断(先に通す) ```sh make bench_random_mixed_hakmem -j scripts/verify_health_profiles.sh ``` --- ## Step 2: 再現検証(必要な場合のみ) Mixed 10-run(iter=20M, ws=400): ```sh # Baseline: ctor=0 HAKMEM_PROFILE=MIXED_TINYV3_C7_SAFE \ HAKMEM_ENV_SNAPSHOT=1 \ HAKMEM_ENV_SNAPSHOT_CTOR=0 \ ./bench_random_mixed_hakmem 20000000 400 1 # Optimized: ctor=1 HAKMEM_PROFILE=MIXED_TINYV3_C7_SAFE \ HAKMEM_ENV_SNAPSHOT=1 \ HAKMEM_ENV_SNAPSHOT_CTOR=1 \ ./bench_random_mixed_hakmem 20000000 400 1 ``` 判定(10-run mean): - -1% 以下 → freeze 維持(現状) 注意: - “constructor の pre-main init” を効かせたい場合は、起動前に ENV を設定する(bench_profile putenv だけでは遅い)。 --- ## Step 3: perf で “消えたか” を確認(E3-4=1) ```sh HAKMEM_PROFILE=MIXED_TINYV3_C7_SAFE \ HAKMEM_ENV_SNAPSHOT=1 \ HAKMEM_ENV_SNAPSHOT_CTOR=1 \ perf record -F 99 -- ./bench_random_mixed_hakmem 20000000 400 1 perf report --stdio --no-children ``` 確認ポイント: - `hakmem_env_snapshot_enabled` の self% が有意に下がる/Top から落ちる - 代わりに “snapshot 参照” が 1 箇所に集約されている --- ## Step 4: 本線化(E1 のみ) - `HAKMEM_ENV_SNAPSHOT_CTOR=1` は本線化しない(freeze) - E1(`HAKMEM_ENV_SNAPSHOT=1`)は勝ち箱なのでプリセット昇格を優先 --- ## Step 5: Rollback(いつでも戻せる) ```sh HAKMEM_ENV_SNAPSHOT=0 HAKMEM_ENV_SNAPSHOT_CTOR=0 ``` --- ## Next(Phase 4 Close) - Phase 4 は “勝ち箱=E1” を固めて CLOSE。次は perf で次の芯を選ぶ。