Files
hakmem/docs/analysis/PHASE2_B4_WRAPPER_SHAPE_1_DESIGN.md
Moe Charm (CI) d54893ea1d Phase 3 C3: Static Routing A/B Test ADOPT (+2.20% Mixed gain)
Step 2 & 3 Complete:
- A/B test (Mixed 10-run): STATIC_ROUTE=0 (38.91M) → =1 (39.77M) = +2.20% avg
  - Median gain: +1.98%
  - Result:  GO (exceeds +1.0% threshold)

- Decision:  ADOPT into MIXED_TINYV3_C7_SAFE preset
  - bench_profile.h line 77: HAKMEM_TINY_STATIC_ROUTE=1 default
  - Learner auto-disables static route when HAKMEM_SMALL_LEARNER_V7_ENABLED=1

Implementation Summary:
- core/box/tiny_static_route_box.{h,c}: Research box (Step 1A)
- core/front/malloc_tiny_fast.h: Route lookup integration (Step 1B, lines 249-256)
- core/bench_profile.h: Bench sync + preset adoption

Cumulative Phase 2-3 Gains:
- B3 (Routing shape): +2.89%
- B4 (Wrapper split): +1.47%
- C3 (Static routing): +2.20%
- Total: ~6.8% (35.2M → ~39.8M ops/s)

Next: Phase 3 C1 (TLS Prefetch, expected +2-4%)

🤖 Generated with Claude Code

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2025-12-13 18:46:11 +09:00

2.1 KiB
Raw Blame History

Phase 2 B4: WRAPPER-SHAPE-1malloc/free wrapper のホット/コールド分割)

目的

Phase 2 B3 で malloc_tiny_fast_for_class() の route dispatch 形は勝ち形に寄せられた。 次の “芯” は wrapper 層(malloc/free)の I-cache / 分岐形で、稀なチェックを noinline,cold に押し出してホットを最短化する。

狙いは アルゴリズム変更ではなく「形」:

  • 既存の安全チェックは削らない(移動/集約のみ)
  • ホットは return で即抜け(重複 work を作らない)
  • 失敗/特殊条件は cold に委譲(境界は 1 箇所)

Box Theory箱割り

L0: WrapperHotBox

責務: 通常ケースを最短で Tiny fast に到達させ、成功なら即 return。

  • malloc: init wait → init → Tiny fast → hit で return
  • free: BenchFast → Tiny free fast → hit で return

L1: WrapperColdBox

責務: それ以外LD/jemalloc/force_libc/分類/所有権/フォールバック/診断)を 1 箱に集約。

境界: HAKMEM_WRAP_SHAPE=1 のとき、入口で 1 回だけ hot/cold を分岐する。

実装指示(ファイル / 形)

  • core/box/hak_wrappers.inc.h
    • malloc_cold() / free_cold()__attribute__((noinline, cold)) で追加
    • malloc() / free()HAKMEM_WRAP_SHAPE gate を追加
  • ENV gate:
    • HAKMEM_WRAP_SHAPE=0/1default 0
    • ただしプリセットで default=1 に昇格可能bench_profile

可視化(最小)

常時ログは禁止。必要なら:

  • ワンショット(数回のみ)
  • HAKMEM_DEBUG_COUNTERS=1 ビルド時だけのカウンタ

Fail-Fast / 安全

  • g_hakmem_lock_depth の ++/-- はどの return 経路でも対称に保つ
  • safety check の削除は禁止(移動のみ)

A/B 結果2025-12-13

Mixed 10-run:

  • HAKMEM_WRAP_SHAPE=0: 34,750,578 ops/s
  • HAKMEM_WRAP_SHAPE=1: 35,262,596 ops/s
  • mean: +1.47% / median: +1.39%GO

決定:

  • HAKMEM_WRAP_SHAPE は ENV gate のまま維持しつつ、MIXED_TINYV3_C7_SAFE プリセットで default=1 に昇格。