You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Summary:
The WDL bench `prod_set` job runs ~25 individual sub-benchmarks
(memcpy_benchmark, openssl, lzbench, ProtocolBench, ...) back-to-back in a
single benchpress run. Today the perf hook spans the whole run, so PMU +
sysstat data ends up smeared across all sub-benchmarks in one set of CSVs.
Distinguishing IPC, topdown breakdown, mpstat etc. per sub-benchmark
requires teasing apart timestamps after the fact, which is brittle.
This change adds an opt-in stage-aware mode to the perf hook so each
sub-benchmark gets its own folder of perf data:
benchmark_metrics_<uuid>/
memcpy_benchmark/
mpstat.csv
mem-stat.csv
perf-stat.csv
topdown-... .csv
(etc -- one set per enabled perf monitor)
hash_hash_benchmark/
...
...
The mechanism:
1. The perf hook accepts a new option `stage_aware: true`. When set,
`before_job` does NOT start any monitors. Instead it creates a FIFO
under benchmark_metrics_<uuid>/perf_stage.fifo, advertises its path
via the env var BENCHPRESS_PERF_STAGE_FIFO, and spawns a
coordinator thread.
2. The coordinator reads commands from the FIFO. Each
"START <stage_name>" allocates a fresh set of perf monitors with
that stage name as a sub-folder; each "STOP" terminates the
monitors and writes their CSVs. Multiple START/STOP cycles are
supported. `after_job` writes a final __EXIT__ to drain the
coordinator.
3. Every existing perf monitor (mpstat, memstat, netstat, perfstat,
vmstat, cpufreq*, power, topdown -- including IntelPerfSpect/3,
BasePerfUtil, AMDPerfUtil, ARMPerfUtil, NVPerfUtil,
NeoVerseV3PerfUtil) gains a `subdir` constructor arg that the base
`Monitor.gen_path` joins under benchmark_metrics_<uuid>/. Existing
callers that don't pass `subdir` keep their flat layout, so default
mode is byte-for-byte unchanged.
4. `packages/wdl_bench/run_prod.sh` emits "START <bench>" before each
sub-benchmark and "STOP" after. The emit is gated on the
BENCHPRESS_PERF_STAGE_FIFO env var, so running prod_set without
stage-aware mode (or without the perf hook at all) is unchanged.
5. A new job entry `prod_set_per_stage_perf` in jobs_wdl.yml
documents the wiring; it has the same shape as `prod_set`. To
activate, run:
./benchpress run prod_set_per_stage_perf \\
-k perf -a '{"perf": {"stage_aware": true}}'
Differential Revision: D108110315
0 commit comments