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:
Moe Charm (CI)
2025-12-14 05:59:43 +09:00
parent 8875132134
commit 75e20b29cc
6 changed files with 106 additions and 9 deletions

View File

@ -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**: ✅ GOMixed 10-run: **+21.83% mean / +22.86% median**)→ ✅ Promoted to `MIXED_TINYV3_C7_SAFE` preset defaultopt-out 可)
- **Effect**: `malloc()` wrapper の tiny fast 判定を TLS snapshot で短絡し、hot path の関数呼び出し/判定を削減(特に `tiny_get_max_size()`
- **Rollback**: `HAKMEM_MALLOC_WRAPPER_ENV_SNAPSHOT=0`
- **Phase 5 E5-1Free Tiny Direct Path** ✅ GO (PROMOTED TO DEFAULT):
```sh
HAKMEM_FREE_TINY_DIRECT=1
```
- **Status**: ✅ GOMixed 10-run: **+3.35% mean / +3.36% median**)→ ✅ Promoted to `MIXED_TINYV3_C7_SAFE` preset defaultopt-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

View File

@ -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.

View File

@ -0,0 +1,86 @@
# Phase 5 E5-1: Free Tiny Direct PathGO後の指示書
## Status2025-12-14
- E5-1 は ✅ GOMixed 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: BaselineE5-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** 優先
---
## NextE5-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 を軽くする

View File

@ -13,6 +13,9 @@
狙い: “形” 最適化は一段落。次は **free 内部****ヘッダ書き込み**、そして **ENV snapshot gate の常時コスト**を削る。
Update:
- E5-1Free 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 行で)

View File

@ -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`