Skip to content

Add generic stage-aware perf hook infrastructure (#683)#683

Open
charles-typ wants to merge 1 commit into
facebookresearch:v2-betafrom
charles-typ:export-D108110315-to-v2-beta
Open

Add generic stage-aware perf hook infrastructure (#683)#683
charles-typ wants to merge 1 commit into
facebookresearch:v2-betafrom
charles-typ:export-D108110315-to-v2-beta

Conversation

@charles-typ

@charles-typ charles-typ commented Jun 10, 2026

Copy link
Copy Markdown
Contributor

Summary:

Benchpress's perf hook spans an entire benchmark run today, so PMU + sysstat
data ends up smeared across every sub-benchmark in one set of CSVs. For
benchmarks that run many workloads back-to-back (WDL prod_set, SPEC2017
intrate, ...), distinguishing IPC, topdown breakdown, mpstat etc. per
sub-benchmark requires teasing apart timestamps after the fact, which is
brittle.

This diff adds a generic, opt-in stage-aware mode to the perf hook. It is not
tied to any specific benchmark -- consumers (WDL, SPEC, ...) land on top of
this and just emit stage markers.

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_/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_/. Existing
    callers that don't pass subdir keep their flat layout, so default
    mode is byte-for-byte unchanged.

The resulting per-stage layout, e.g.:

benchmark_metrics_/
<stage_name>/
mpstat.csv
mem-stat.csv
perf-stat.csv
topdown-... .csv

Benchmark-specific wiring (WDL prod_set, SPEC2017 intrate) lands in later
diffs in this stack.

Reviewed By: YifanYuan3

Differential Revision: D108110315

@meta-cla meta-cla Bot added the CLA Signed This label is managed by the Facebook bot. Authors need to sign the CLA before a PR can be reviewed. label Jun 10, 2026
@meta-codesync

meta-codesync Bot commented Jun 10, 2026

Copy link
Copy Markdown

@charles-typ has exported this pull request. If you are a Meta employee, you can view the originating Diff in D108110315.

@meta-codesync meta-codesync Bot changed the title Per-sub-benchmark PMU + sysstat for WDL prod_set Per-sub-benchmark PMU + sysstat for WDL prod_set (#683) Jul 8, 2026
charles-typ added a commit to charles-typ/DCPerf that referenced this pull request Jul 8, 2026
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
@charles-typ charles-typ force-pushed the export-D108110315-to-v2-beta branch from c0c3410 to 0f91b6c Compare July 8, 2026 19:29
charles-typ added a commit to charles-typ/DCPerf that referenced this pull request Jul 8, 2026
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
charles-typ added a commit to charles-typ/DCPerf that referenced this pull request Jul 8, 2026
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
@meta-codesync meta-codesync Bot changed the title Per-sub-benchmark PMU + sysstat for WDL prod_set (#683) Add generic stage-aware perf hook infrastructure Jul 8, 2026
@charles-typ charles-typ force-pushed the export-D108110315-to-v2-beta branch from 0f91b6c to b4a8596 Compare July 8, 2026 19:50
charles-typ added a commit to charles-typ/DCPerf that referenced this pull request Jul 8, 2026
Summary:

Benchpress's perf hook spans an entire benchmark run today, so PMU + sysstat
data ends up smeared across every sub-benchmark in one set of CSVs. For
benchmarks that run many workloads back-to-back (WDL prod_set, SPEC2017
intrate, ...), distinguishing IPC, topdown breakdown, mpstat etc. per
sub-benchmark requires teasing apart timestamps after the fact, which is
brittle.

This diff adds a generic, opt-in stage-aware mode to the perf hook. It is not
tied to any specific benchmark -- consumers (WDL, SPEC, ...) land on top of
this and just emit stage markers.

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.

The resulting per-stage layout, e.g.:

  benchmark_metrics_<uuid>/
      <stage_name>/
          mpstat.csv
          mem-stat.csv
          perf-stat.csv
          topdown-... .csv

Benchmark-specific wiring (WDL prod_set, SPEC2017 intrate) lands in later
diffs in this stack.

Differential Revision: D108110315
@meta-codesync meta-codesync Bot changed the title Add generic stage-aware perf hook infrastructure Add generic stage-aware perf hook infrastructure (#683) Jul 9, 2026
charles-typ added a commit to charles-typ/DCPerf that referenced this pull request Jul 9, 2026
Summary:

Benchpress's perf hook spans an entire benchmark run today, so PMU + sysstat
data ends up smeared across every sub-benchmark in one set of CSVs. For
benchmarks that run many workloads back-to-back (WDL prod_set, SPEC2017
intrate, ...), distinguishing IPC, topdown breakdown, mpstat etc. per
sub-benchmark requires teasing apart timestamps after the fact, which is
brittle.

This diff adds a generic, opt-in stage-aware mode to the perf hook. It is not
tied to any specific benchmark -- consumers (WDL, SPEC, ...) land on top of
this and just emit stage markers.

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.

The resulting per-stage layout, e.g.:

  benchmark_metrics_<uuid>/
      <stage_name>/
          mpstat.csv
          mem-stat.csv
          perf-stat.csv
          topdown-... .csv

Benchmark-specific wiring (WDL prod_set, SPEC2017 intrate) lands in later
diffs in this stack.

Reviewed By: YifanYuan3

Differential Revision: D108110315
@charles-typ charles-typ force-pushed the export-D108110315-to-v2-beta branch from b4a8596 to 66e91a1 Compare July 9, 2026 05:58
charles-typ added a commit to charles-typ/DCPerf that referenced this pull request Jul 9, 2026
Summary:

Benchpress's perf hook spans an entire benchmark run today, so PMU + sysstat
data ends up smeared across every sub-benchmark in one set of CSVs. For
benchmarks that run many workloads back-to-back (WDL prod_set, SPEC2017
intrate, ...), distinguishing IPC, topdown breakdown, mpstat etc. per
sub-benchmark requires teasing apart timestamps after the fact, which is
brittle.

This diff adds a generic, opt-in stage-aware mode to the perf hook. It is not
tied to any specific benchmark -- consumers (WDL, SPEC, ...) land on top of
this and just emit stage markers.

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.

The resulting per-stage layout, e.g.:

  benchmark_metrics_<uuid>/
      <stage_name>/
          mpstat.csv
          mem-stat.csv
          perf-stat.csv
          topdown-... .csv

Benchmark-specific wiring (WDL prod_set, SPEC2017 intrate) lands in later
diffs in this stack.

Reviewed By: YifanYuan3

Differential Revision: D108110315
@charles-typ charles-typ force-pushed the export-D108110315-to-v2-beta branch from 66e91a1 to 45e225f Compare July 9, 2026 06:24
charles-typ added a commit to charles-typ/DCPerf that referenced this pull request Jul 9, 2026
Summary:

Benchpress's perf hook spans an entire benchmark run today, so PMU + sysstat
data ends up smeared across every sub-benchmark in one set of CSVs. For
benchmarks that run many workloads back-to-back (WDL prod_set, SPEC2017
intrate, ...), distinguishing IPC, topdown breakdown, mpstat etc. per
sub-benchmark requires teasing apart timestamps after the fact, which is
brittle.

This diff adds a generic, opt-in stage-aware mode to the perf hook. It is not
tied to any specific benchmark -- consumers (WDL, SPEC, ...) land on top of
this and just emit stage markers.

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.

The resulting per-stage layout, e.g.:

  benchmark_metrics_<uuid>/
      <stage_name>/
          mpstat.csv
          mem-stat.csv
          perf-stat.csv
          topdown-... .csv

Benchmark-specific wiring (WDL prod_set, SPEC2017 intrate) lands in later
diffs in this stack.

Reviewed By: YifanYuan3

Differential Revision: D108110315
Summary:

Benchpress's perf hook spans an entire benchmark run today, so PMU + sysstat
data ends up smeared across every sub-benchmark in one set of CSVs. For
benchmarks that run many workloads back-to-back (WDL prod_set, SPEC2017
intrate, ...), distinguishing IPC, topdown breakdown, mpstat etc. per
sub-benchmark requires teasing apart timestamps after the fact, which is
brittle.

This diff adds a generic, opt-in stage-aware mode to the perf hook. It is not
tied to any specific benchmark -- consumers (WDL, SPEC, ...) land on top of
this and just emit stage markers.

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.

The resulting per-stage layout, e.g.:

  benchmark_metrics_<uuid>/
      <stage_name>/
          mpstat.csv
          mem-stat.csv
          perf-stat.csv
          topdown-... .csv

Benchmark-specific wiring (WDL prod_set, SPEC2017 intrate) lands in later
diffs in this stack.

Reviewed By: YifanYuan3

Differential Revision: D108110315
@charles-typ charles-typ force-pushed the export-D108110315-to-v2-beta branch from 45e225f to 52d755d Compare July 9, 2026 06:36
meta-codesync Bot pushed a commit that referenced this pull request Jul 9, 2026
Summary:
Pull Request resolved: #683

Benchpress's perf hook spans an entire benchmark run today, so PMU + sysstat
data ends up smeared across every sub-benchmark in one set of CSVs. For
benchmarks that run many workloads back-to-back (WDL prod_set, SPEC2017
intrate, ...), distinguishing IPC, topdown breakdown, mpstat etc. per
sub-benchmark requires teasing apart timestamps after the fact, which is
brittle.

This diff adds a generic, opt-in stage-aware mode to the perf hook. It is not
tied to any specific benchmark -- consumers (WDL, SPEC, ...) land on top of
this and just emit stage markers.

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.

The resulting per-stage layout, e.g.:

  benchmark_metrics_<uuid>/
      <stage_name>/
          mpstat.csv
          mem-stat.csv
          perf-stat.csv
          topdown-... .csv

Benchmark-specific wiring (WDL prod_set, SPEC2017 intrate) lands in later
diffs in this stack.

Reviewed By: YifanYuan3

Differential Revision: D108110315

fbshipit-source-id: 0885ec912cc8b91359900b187ef3df83030bf9a1
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

CLA Signed This label is managed by the Facebook bot. Authors need to sign the CLA before a PR can be reviewed. meta-exported

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant