Target: Eliminate tiny_route_for_class() overhead in free path - Perf finding: 4.39% self + 24.78% children (free bottleneck) - Approach: Use cached route_kind (like Phase 3 C3 for alloc) Implementation: - core/box/tiny_free_route_cache_env_box.h (new) * ENV gate: HAKMEM_FREE_STATIC_ROUTE=0/1 (default OFF) * Lazy initialization with sentinel value - core/front/malloc_tiny_fast.h (modified) * Two call sites: free_tiny_fast_cold() + legacy_fallback path * Direct route lookup: g_tiny_route_class[class_idx] * Fallback safety: Check g_tiny_route_snapshot_done A/B Test Results (Mixed, 10-run): - Baseline (D1=0): 45.13 M ops/s (avg), 45.76 M ops/s (median) - Optimized (D1=1): 45.61 M ops/s (avg), 45.40 M ops/s (median) - Improvement: +1.06% (avg), -0.77% (median) - DECISION: GO (avg gain meets +1.0% threshold) Cumulative Phase 2-3: - B3: +2.89%, B4: +1.47%, C3: +2.20% - D1: +1.06% - Total: ~7.2% cumulative gain 🤖 Generated with Claude Code Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
1.6 KiB
1.6 KiB
Phase 3 D1: Free Path Route Cache 設計メモ
目的
Free path の tiny_route_for_class() コストを削減(4.39% self + 24.78% children)
観察
- free() → tiny_free_fast() → tiny_route_for_class() → g_tiny_route_snapshot_done check
- Route determination が free path の支配的なボトルネック
- Phase 3 C3 (Static routing for alloc) と同じアプローチを free に適用
実装アプローチ
L0: Env(戻せる)
HAKMEM_FREE_STATIC_ROUTE=0/1(default: 0, OFF)
L1: IntegrationBox(境界: 1箇所)
tiny_route_env_box.h に既存する g_tiny_route を free path で活用:
tiny_route_for_class()を呼ばずに直接 route を決定- Cache invalidate: policy version change on sync
実装指示
File 1: core/box/tiny_free_route_cache_env_box.h (新規)
- Inline function:
tiny_free_static_route_enabled()- Check
HAKMEM_FREE_STATIC_ROUTEENV - Lazy init with -1 sentinel
- Return cached value
- Check
File 2: Modify core/box/tiny_route_env_box.h (既存)
- Add:
SmallRouteKind tiny_route_get_kind(int class_idx)if not exist - Use existing
g_tiny_route.route_kind[class]cache
File 3: Modify core/front/tiny_legacy_fallback_box.h (既存)
- In
tiny_legacy_fallback_free_base()function - Check:
if (tiny_free_static_route_enabled())before callingtiny_route_for_class() - Fallback: call
tiny_route_for_class()if disabled
A/B テスト
- Mixed (10-run): HAKMEM_FREE_STATIC_ROUTE=0 vs =1
- GO: +1.0%+, NO-GO: -1.0%-
期待
- tiny_route_for_class() call 削減 → L1 cache pressure 低下
- +1-2% gain in free path