Files
hakmem/docs/analysis/PHASE5_E7_FROZEN_BOX_PRUNE_NEXT_INSTRUCTIONS.md

2.8 KiB
Raw Blame History

Phase 5 E7: Frozen Box Prune結果: NO-GO / 差し戻し)

Status2025-12-14

  • 結果: NO-GO(削除後 -3% 台
  • 結論: 現状は “diet” を採用しない(凍結箱はコードとして保持)
  • 詳細: docs/analysis/PHASE5_E7_FROZEN_BOX_PRUNE_AB_TEST_RESULTS.md

背景E5-2/E5-4 NEUTRAL + E6 NO-GO

E5-2 / E5-4 / E6 の学び:

  • “実験箱” を ENV gate で差し込むだけでも branch + code size の税が発生する
  • それが勝ち箱の gains を相殺しやすい(特に Zen 系で miss rate が既に低い場合)

狙い(当初案):

  • 凍結済みの研究箱を hot path から外し、baseline を “痩せさせる”

結果:

  • ビルド差分 A/B で 有意な回帰が出たため、この方針は撤回する。
    • (配置/最適化の二次効果が支配的で、単純な “branch 税回収” にならなかった)

Step 0: 対象(消してよい研究箱)

優先順:

  1. E6ENV snapshot shape: NO-GO、hot path を肥大化させる
  2. E5-4Malloc Tiny Direct: NEUTRAL、malloc wrapper に余計な分岐を足す
  3. E5-2Header write-once: NEUTRAL、alloc hot path 側に分岐を足すなら同様に外す

Step 1: E6 の実装を削除doc だけ残す)

  • core/box/env_snapshot_shape_env_box.h を削除
  • core/front/malloc_tiny_fast.h / core/box/tiny_metadata_cache_hot_box.h / core/box/tiny_legacy_fallback_box.h の E6 分岐を削除(元に戻す)
  • docs/analysis/PHASE5_E6_ENV_SNAPSHOT_SHAPE_AB_TEST_RESULTS.md は残す(失敗の記録)

Step 2: E5-4 の実装を削除doc だけ残す)

  • core/box/malloc_tiny_direct_env_box.h / core/box/malloc_tiny_direct_stats_box.h を削除
  • core/box/hak_wrappers.inc.h の E5-4 追加分岐(malloc_tiny_direct_enabled())を削除
  • docs/analysis/PHASE5_E5_4_MALLOC_TINY_DIRECT_AB_TEST_RESULTS.md は残す

Step 3: A/B削除前/削除後)

削除は ENV で切れないため “ビルド差分 A/B” になる。

  1. 削除前(現 HEADで 10-run:
HAKMEM_PROFILE=MIXED_TINYV3_C7_SAFE ./bench_random_mixed_hakmem 20000000 400 1
  1. 削除後で 10-run:
HAKMEM_PROFILE=MIXED_TINYV3_C7_SAFE ./bench_random_mixed_hakmem 20000000 400 1

判定:

  • GO: mean +0.8% 以上“diet” は小粒になりがちなので閾値を下げる)
  • ±0.8%: NEUTRAL消しても OK、保守性メリットで採用可
  • -0.8% 以下: 差し戻し(予想外の最適化阻害がある)

Step 4: 健康診断(必須)

scripts/verify_health_profiles.sh

Step 5: ドキュメント更新

  • CURRENT_TASK.md: E6/E5-4 を “凍結 → 実装削除doc のみ保持)” と明記
  • docs/analysis/PHASE5_E5_NEXT_INSTRUCTIONS.md: 次の芯を E7dietに更新