Phase 5 E5-1: Promote to preset + next target instructions
E5-1 Promotion: - Added HAKMEM_FREE_TINY_DIRECT=1 to MIXED_TINYV3_C7_SAFE preset - Updated ENV_PROFILE_PRESETS.md with rollback instructions - Rollback: HAKMEM_FREE_TINY_DIRECT=0 A/B Test Clarification: - Documented bench_setenv_default vs export ENV=0 interaction - bench_setenv_default only sets if ENV is unset - To force OFF in A/B: use value that differs from default Next Target Selection (E5-2 vs E5-3): - E5-2: Header write reduction (tiny_region_id_write_header) - E5-3: ENV snapshot gate shape optimization - Decision requires fresh perf profile on new baseline Deliverables: - docs/analysis/PHASE5_E5_1_FREE_TINY_DIRECT_NEXT_INSTRUCTIONS.md - docs/analysis/PHASE5_E5_NEXT_INSTRUCTIONS.md (updated) - docs/analysis/ENV_PROFILE_PRESETS.md (E5-1 added) - docs/analysis/PHASE5_E5_1_FREE_TINY_DIRECT_1_AB_TEST_RESULTS.md (clarified) - CURRENT_TASK.md (progress links) - docs/analysis/PHASE5_POST_E1_NEXT_INSTRUCTIONS.md (progress links) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
@ -45,6 +45,7 @@ HAKMEM_BENCH_MAX_SIZE=1024
|
||||
- `HAKMEM_MID_V3_ENABLED=0`(Mixed 本線では OFF。C6-heavy のみ推奨ON)
|
||||
- `HAKMEM_MID_V3_CLASSES=0x0`(Mixed 本線では未使用)
|
||||
- `HAKMEM_MID_V35_ENABLED=0`(Phase v11a-5: Mixed では MID v3.5 OFF が最速)
|
||||
- `HAKMEM_FREE_TINY_DIRECT=1`(Phase 5 E5-1: free() で Tiny を直通、重複排除)
|
||||
|
||||
### 任意オプション
|
||||
- stats を見たいとき:
|
||||
@ -131,6 +132,13 @@ HAKMEM_MALLOC_WRAPPER_ENV_SNAPSHOT=1
|
||||
- **Status**: ✅ GO(Mixed 10-run: **+21.83% mean / +22.86% median**)→ ✅ Promoted to `MIXED_TINYV3_C7_SAFE` preset default(opt-out 可)
|
||||
- **Effect**: `malloc()` wrapper の tiny fast 判定を TLS snapshot で短絡し、hot path の関数呼び出し/判定を削減(特に `tiny_get_max_size()`)
|
||||
- **Rollback**: `HAKMEM_MALLOC_WRAPPER_ENV_SNAPSHOT=0`
|
||||
- **Phase 5 E5-1(Free Tiny Direct Path)** ✅ GO (PROMOTED TO DEFAULT):
|
||||
```sh
|
||||
HAKMEM_FREE_TINY_DIRECT=1
|
||||
```
|
||||
- **Status**: ✅ GO(Mixed 10-run: **+3.35% mean / +3.36% median**)→ ✅ Promoted to `MIXED_TINYV3_C7_SAFE` preset default(opt-out 可)
|
||||
- **Effect**: free wrapper で Tiny header を 1 回だけ検証し、Tiny free を直通(重複/コールド分岐を回避)
|
||||
- **Rollback**: `HAKMEM_FREE_TINY_DIRECT=0`
|
||||
- v2 系は触らない(C7_SAFE では Pool v2 / Tiny v2 は常時 OFF)。
|
||||
- FREE_POLICY/THP を触る実験例(現在の HEAD では必須ではなく、組み合わせによっては微マイナスになる場合もある):
|
||||
```sh
|
||||
|
||||
@ -11,7 +11,7 @@
|
||||
## Test Configuration
|
||||
|
||||
**Workload**: Mixed (16-1024B, ws=400, 20M iterations)
|
||||
**Baseline Profile**: `MIXED_TINYV3_C7_SAFE` (E4-1+E4-2 ON)
|
||||
**Baseline Profile**: `MIXED_TINYV3_C7_SAFE`(E4-1+E4-2 を含む既定設定)
|
||||
**Test Runs**: 10-run A/B test (same binary, ENV toggle)
|
||||
**Platform**: Linux 6.8.0-87-generic
|
||||
|
||||
@ -129,10 +129,9 @@ Run 10: 45799630 ops/s
|
||||
- **E5-1 baseline differs**: 44.38M ops/s (note: slightly lower, session variance)
|
||||
- E5-1 ON: 45.87M ops/s (+3.35% from its baseline)
|
||||
|
||||
**Note**: E5-1 was tested on a different baseline (44.38M vs 47.34M). This variance is due to:
|
||||
- Different test session (cache/TLB state)
|
||||
- Thermal throttling
|
||||
- Kernel scheduler variance
|
||||
**Note**: `bench_setenv_default()` は “未設定の ENV だけ” を注入するため、
|
||||
過去の実験で `HAKMEM_FREE_WRAPPER_ENV_SNAPSHOT=0` / `HAKMEM_MALLOC_WRAPPER_ENV_SNAPSHOT=0` を export したままだと、
|
||||
プリセットの既定 ON が効かずベースラインが下がることがあります。
|
||||
|
||||
**To measure true cumulative effect**, we should test E4+E5-1 together vs E4 alone in the same session.
|
||||
|
||||
|
||||
@ -0,0 +1,86 @@
|
||||
# Phase 5 E5-1: Free Tiny Direct Path(GO後の指示書)
|
||||
|
||||
## Status(2025-12-14)
|
||||
|
||||
- E5-1 は ✅ GO(Mixed 10-run: **+3.35% mean / +3.36% median**)
|
||||
- 次は「昇格(preset default)→ 再 baseline → E5-2/E5-3 の順」で進める
|
||||
|
||||
参照:
|
||||
- Design: `docs/analysis/PHASE5_E5_1_FREE_TINY_DIRECT_1_DESIGN.md`
|
||||
- Results: `docs/analysis/PHASE5_E5_1_FREE_TINY_DIRECT_1_AB_TEST_RESULTS.md`
|
||||
|
||||
---
|
||||
|
||||
## Step 1: プリセット昇格(MIXED の default ON)
|
||||
|
||||
対象:
|
||||
- `core/bench_profile.h` の `MIXED_TINYV3_C7_SAFE`
|
||||
|
||||
設定(opt-out 可):
|
||||
- `bench_setenv_default("HAKMEM_FREE_TINY_DIRECT", "1");`
|
||||
|
||||
Rollback:
|
||||
- `HAKMEM_FREE_TINY_DIRECT=0`
|
||||
|
||||
---
|
||||
|
||||
## Step 2: ドキュメント反映(プリセット定義)
|
||||
|
||||
- `docs/analysis/ENV_PROFILE_PRESETS.md`
|
||||
- `MIXED_TINYV3_C7_SAFE` の “自動設定される主な ENV” に `HAKMEM_FREE_TINY_DIRECT=1` を追記
|
||||
- Phase 5 E5-1 の項目を追加(A/B と rollback)
|
||||
|
||||
---
|
||||
|
||||
## Step 3: 同一バイナリでの A/B(昇格確認)
|
||||
|
||||
注意: `bench_setenv_default()` は “未設定の ENV だけ” を注入するため、
|
||||
過去の A/B で `HAKMEM_*_WRAPPER_ENV_SNAPSHOT=0` を export したままだと、プリセット ON が効かない。
|
||||
|
||||
### A: Baseline(E5-1 を明示 OFF)
|
||||
```sh
|
||||
HAKMEM_PROFILE=MIXED_TINYV3_C7_SAFE \
|
||||
HAKMEM_FREE_TINY_DIRECT=0 \
|
||||
./bench_random_mixed_hakmem 20000000 400 1
|
||||
```
|
||||
|
||||
### B: Optimized(プリセット default ON を使用)
|
||||
```sh
|
||||
HAKMEM_PROFILE=MIXED_TINYV3_C7_SAFE \
|
||||
./bench_random_mixed_hakmem 20000000 400 1
|
||||
```
|
||||
|
||||
GO/NO-GO:
|
||||
- Mean +1.0% 以上で OK(既に +3.35% 実績なので基本は通る)
|
||||
|
||||
---
|
||||
|
||||
## Step 4: 健康診断(必須)
|
||||
|
||||
```sh
|
||||
scripts/verify_health_profiles.sh
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Step 5: 新 baseline で perf(次の芯を選ぶ)
|
||||
|
||||
```sh
|
||||
HAKMEM_PROFILE=MIXED_TINYV3_C7_SAFE perf record -F 99 -- \
|
||||
./bench_random_mixed_hakmem 20000000 400 1
|
||||
perf report --stdio --no-children
|
||||
```
|
||||
|
||||
判断基準(self% ≥ 5%):
|
||||
- `tiny_region_id_write_header` が依然 5% 以上 → **E5-2** 優先
|
||||
- `hakmem_env_snapshot_enabled` / `tiny_get_max_size` が 5% 付近まで上がる → **E5-3** 優先
|
||||
|
||||
---
|
||||
|
||||
## Next(E5-2 / E5-3)
|
||||
|
||||
- E5-2: Header write を refill 境界へ(prefill box)
|
||||
- 目標: `tiny_region_id_write_header` の hot path stores を減らす(A3 の “always_inline” は NO-GO 済み)
|
||||
- E5-3: `hakmem_env_snapshot_enabled()` の分岐形/配置を “enabled 前提” に寄せる
|
||||
- 目標: mispredict を避け、`malloc_tiny_fast.h` 内の繰り返し gate を軽くする
|
||||
|
||||
@ -13,6 +13,9 @@
|
||||
|
||||
狙い: “形” 最適化は一段落。次は **free 内部** と **ヘッダ書き込み**、そして **ENV snapshot gate の常時コスト**を削る。
|
||||
|
||||
Update:
|
||||
- E5-1(Free Tiny Direct Path)✅ GO(+3.35% mean / +3.36% median)→ 指示書: `docs/analysis/PHASE5_E5_1_FREE_TINY_DIRECT_NEXT_INSTRUCTIONS.md`
|
||||
|
||||
---
|
||||
|
||||
## Step 0: Baseline 固定(Mixed)
|
||||
@ -60,7 +63,7 @@ perf report --stdio --no-children --symbol free
|
||||
|
||||
### 実装ルール
|
||||
- 境界は 1 箇所(`free()` wrapper の先頭分岐で確定)
|
||||
- `ENV gate`: `HAKMEM_FREE_TINY_DIRECT=0/1`(default 0)
|
||||
- `ENV gate`: `HAKMEM_FREE_TINY_DIRECT=0/1`(default 0 / preset(MIXED)=1)
|
||||
- 可視化はカウンタのみ(`direct_hit`, `direct_miss`, `invalid_header`)
|
||||
|
||||
### GO/NO-GO
|
||||
@ -127,4 +130,3 @@ scripts/verify_health_profiles.sh
|
||||
- `core/bench_profile.h` の `MIXED_TINYV3_C7_SAFE` に default 化(opt-out 可能)
|
||||
- `docs/analysis/ENV_PROFILE_PRESETS.md` に A/B と rollback を追記
|
||||
- `CURRENT_TASK.md` を更新(結果と “次の芯” を 1 行で)
|
||||
|
||||
|
||||
@ -72,3 +72,4 @@ scripts/verify_health_profiles.sh
|
||||
- E4-2 設計/実装: `docs/analysis/PHASE5_E4_2_MALLOC_WRAPPER_ENV_SNAPSHOT_NEXT_INSTRUCTIONS.md`
|
||||
- E4 合算 A/B: `docs/analysis/PHASE5_E4_COMBINED_AB_TEST_NEXT_INSTRUCTIONS.md`
|
||||
- E5 次の芯: `docs/analysis/PHASE5_E5_NEXT_INSTRUCTIONS.md`
|
||||
- E5-1 昇格: `docs/analysis/PHASE5_E5_1_FREE_TINY_DIRECT_NEXT_INSTRUCTIONS.md`
|
||||
|
||||
Reference in New Issue
Block a user