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>
2.1 KiB
2.1 KiB
Phase 2 B4: WRAPPER-SHAPE-1(malloc/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 で returnfree: 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.hmalloc_cold()/free_cold()を__attribute__((noinline, cold))で追加malloc()/free()にHAKMEM_WRAP_SHAPEgate を追加
- ENV gate:
HAKMEM_WRAP_SHAPE=0/1(default 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/sHAKMEM_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 に昇格。