# Phase 44 — Cache-miss / writeback profiling(次の芯を “測ってから” 決める) Phase 42 の結論: gate は打ち止め(Top50 圏外)。 Phase 43 の結論: header write を branch で削るのは負け筋(straight-line が強い)。 次は “どこで stall しているか” を定量化してから攻める。 --- ## 目的 FAST build(`make perf_fast`)の Mixed で、 - `tiny_region_id_write_header`(alloc) - `unified_cache_push` / `tiny_c7_ultra_free`(free) が **L1/L2/LLC/DTLB/ストアバッファ**のどれで詰まっているかを特定する。 この Phase は **計測のみ**(コード変更ゼロ)でOK。 --- ## Step 0: 固定条件 - バイナリ: `./bench_random_mixed_hakmem_minimal` - 条件: `ITERS=200000000 WS=400`(短すぎるとノイズが増える) - clean env: `scripts/run_mixed_10_cleanenv.sh` は A/B 用。ここでは単発 perf 用に直接叩いてよい。 --- ## Step 1: perf stat(メモリ系カウンタ) 例(環境によってイベント名が違うので、まずは一般的なものを試す): ```sh perf stat -e \ cycles,instructions,branches,branch-misses, \ cache-references,cache-misses, \ L1-dcache-loads,L1-dcache-load-misses, \ LLC-loads,LLC-load-misses, \ dTLB-loads,dTLB-load-misses, \ iTLB-loads,iTLB-load-misses \ -- ./bench_random_mixed_hakmem_minimal 200000000 400 1 ``` 記録するもの(最低限): - IPC(instructions / cycles) - cache-misses / cache-references - L1-dcache-load-misses - LLC-load-misses - dTLB-load-misses / iTLB-load-misses --- ## Step 2: perf record(どの関数が miss を起こしているか) ```sh perf record -F 99 -g -- ./bench_random_mixed_hakmem_minimal 200000000 400 1 perf report --no-children | head -120 ``` 可能なら(環境が許す場合): ```sh perf record -e cache-misses -F 99 -g -- ./bench_random_mixed_hakmem_minimal 200000000 400 1 perf report --no-children | head -120 ``` 目的: - “時間が掛かっている関数” と “cache-miss を出している関数” が一致しているか確認。 --- ## Step 3: 次の Phase を決める(分岐) ### Case A: `tiny_region_id_write_header` が store-bound 兆候: - cache-miss は少ないのに IPC が低い - `perf record` で header write が支配的 次: - Phase 45: “branch を増やさずに store を減らす”案だけ検討(例: まとめ書き、別境界への移動) ### Case B: `unified_cache_push` / `tiny_c7_ultra_free` が miss-bound 兆候: - L1/LLC/DTLB miss が支配的 - cache-misses のホットが free 側に寄る 次: - Phase 45: prefetch / データ配置(struct packing / align)を検討 ### Case C: iTLB/i-cache が支配的 兆候: - iTLB-load-misses が相対的に多い 次: - “削除”ではなく **hot text の clustering**(ただし Phase 18 v1 の section-splitting は禁止) --- ## ログ - `docs/analysis/PHASE44_CACHE_MISS_AND_WRITEBACK_PROFILE_RESULTS.md` を作り、 - perf stat(数値) - perf report Top(時間と miss の Top) - 判定(Case A/B/C) を書いて次の Phase を確定する。