63 lines
2.6 KiB
Markdown
63 lines
2.6 KiB
Markdown
# Bench Reproducibility SSOT(ころころ防止の最低限)
|
||
|
||
目的: 「数%を詰める開発」で一番きつい **ベンチが再現しない問題**を潰す。
|
||
|
||
補助: buildの使い分けは `docs/analysis/SSOT_BUILD_MODES.md` を正とする。
|
||
|
||
## 1) まず結論(よくある原因)
|
||
|
||
同じマシンでも、以下が変わると 5–15% は普通に動く。
|
||
|
||
- **CPU power/thermal**(governor / EPP / turbo)
|
||
- **HAKMEM_PROFILE 未指定**(route が変わる)
|
||
- **ベンチのサイズレンジ漏れ**(`HAKMEM_BENCH_MIN_SIZE/MAX_SIZE` で class 分布が変わる)
|
||
- **export 漏れ**(過去の ENV が残る)
|
||
- **別バイナリ比較**(layout tax: text 配置が変わる)
|
||
|
||
## 2) SSOT(最適化判断の正)
|
||
|
||
- Runner: `scripts/run_mixed_10_cleanenv.sh`
|
||
- 必須:
|
||
- `HAKMEM_PROFILE=MIXED_TINYV3_C7_SAFE` を明示
|
||
- `RUNS=10`(ノイズを平均化)
|
||
- `WS=400`(SSOT)
|
||
- サイズレンジは SSOT 側で固定(runner が強制):
|
||
- `HAKMEM_BENCH_MIN_SIZE=16`
|
||
- `HAKMEM_BENCH_MAX_SIZE=1040`
|
||
- 任意(切り分け用):
|
||
- `HAKMEM_BENCH_ENV_LOG=1`(CPU governor/EPP/freq をログ)
|
||
|
||
## 3) reference(allocator間比較の正)
|
||
|
||
allocator比較は layout tax が混ざるため **reference**。
|
||
ただし “公平さ” を上げるなら同一バイナリで測る:
|
||
|
||
- Same-binary runner: `scripts/run_allocator_preload_matrix.sh`
|
||
- `bench_random_mixed_system` を固定して `LD_PRELOAD` を差し替える
|
||
|
||
## 4) “ころころ”を止める運用(最低限の儀式)
|
||
|
||
1. SSOT実行は必ず cleanenv:
|
||
- `scripts/run_mixed_10_cleanenv.sh`
|
||
- `SSOT_MIN_SIZE/SSOT_MAX_SIZE` でレンジを明示的に上書きできる(export 漏れの影響を受けない)
|
||
2. 毎回、環境ログを残す:
|
||
- `HAKMEM_BENCH_ENV_LOG=1`
|
||
3. 結果をファイル化(後から追える形):
|
||
- `scripts/bench_ssot_capture.sh` を使う(git sha / env / bench出力をまとめて保存)
|
||
|
||
## 5) 重要メモ(AMD pstate epp)
|
||
|
||
`amd-pstate-epp` 環境で
|
||
- governor=`powersave`
|
||
- energy_perf_preference=`power`
|
||
のままだと、ベンチが“遅い側”に寄ることがある。
|
||
|
||
まずは `HAKMEM_BENCH_ENV_LOG=1` の出力が **同じ**条件同士で比較すること。
|
||
|
||
## 6) 外部レビュー(貼り付けパケット)
|
||
|
||
「コードを圧縮して貼る」用途は、毎回の手作業を減らすためにパケット生成を使う:
|
||
|
||
- 生成スクリプト: `scripts/make_chatgpt_pro_packet_free_path.sh`
|
||
- 生成物(スナップショット): `docs/analysis/FREE_PATH_REVIEW_PACKET_CHATGPT.md`
|