From: sashiko-bot@kernel.org
To: "Ian Rogers" <irogers@google.com>
Cc: linux-perf-users@vger.kernel.org
Subject: Re: [RFC PATCH v1 08/14] perf stat: Extend CSV output linter to test core aggregation checks
Date: Fri, 22 May 2026 22:59:02 +0000 [thread overview]
Message-ID: <20260522225902.774281F000E9@smtp.kernel.org> (raw)
In-Reply-To: <20260522223342.2393553-9-irogers@google.com>
Thank you for your contribution! Sashiko AI review found 2 potential issue(s) to consider:
- [Medium] The metric-only CSV formatter uses literal hardware IDs (via print_aggr_id_csv) instead of static labels for CSV column headers.
- [Medium] The metric-only CSV formatter unconditionally prints column headers on every invocation, breaking interval mode CSV structure.
--
commit c6d9dbeb2224e7612eda5e12a83ebd10d5ea2210
Author: Ian Rogers <irogers@google.com>
perf stat: Extend CSV output linter to test core aggregation checks
This patch extends tools/perf/tests/shell/stat+csv_output.sh to run all
basic and core aggregation linter checks a second time under the --new
CSV print flag. This guarantees that CSV outputs produced by the decoupled
printing engine are formally verified and column-valid.
> diff --git a/tools/perf/tests/shell/stat+csv_output.sh b/tools/perf/tests/shell/stat+csv_output.sh
> index cd6fff5970911..e4153a03d7164 100755
> --- a/tools/perf/tests/shell/stat+csv_output.sh
> +++ b/tools/perf/tests/shell/stat+csv_output.sh
> @@ -88,5 +88,21 @@ then
> else
> echo "[Skip] Skipping tests for system_wide_no_aggr, per_core, per_die and per_socket since socket id exposed via topology is invalid"
> fi
> +# New API CSV checks
> +perf_cmd="--new -x$csv_sep -o ${stat_output}"
> +check_no_args "CSV (New API)" "$perf_cmd"
> +check_system_wide "CSV (New API)" "$perf_cmd"
[Severity: Medium]
Will this script also test the metric-only mode for CSV output?
When running the new CSV formatter with --metric-only, the column header
literally contains the data values of the first hardware group instead of
static column labels like 'core,cpus'.
In csv_metric_only_print_end(), the code calls print_aggr_id_csv() to generate
the aggregation prefix for the header row:
tools/perf/util/stat-print-csv.c:csv_metric_only_print_end() {
...
/* Print aggregation prefix header in CSV metric-only mode */
if (config->aggr_map && first_aggr >= 0) {
struct aggr_cpu_id id = config->aggr_map->map[first_aggr];
...
print_aggr_id_csv(config, output, mock_evsel, id, aggr_nr);
}
...
}
Because print_aggr_id_csv() resolves and prints the runtime value of the
first aggregation group (e.g., S0-D0-C0), this produces a malformed CSV
where the header row contains specific hardware IDs rather than labels.
Should we use static labels for the metric-only CSV header?
> +check_interval "CSV (New API)" "$perf_cmd"
[Severity: Medium]
Does the interval mode work correctly when --metric-only is used?
When running perf stat in interval mode with --metric-only,
perf_stat__print_csv() is invoked periodically. Each invocation instantiates
a fresh csv_metric_only_print_state context and calls
csv_metric_only_print_end():
tools/perf/util/stat-print-csv.c:perf_stat__print_csv() {
if (config->metric_only) {
struct csv_metric_only_print_state ps = {
.fp = config->output,
...
};
...
return perf_stat__print_cb(evlist, config, target, ts, argc, argv,
&csv_metric_only_print_callbacks, &ps);
...
}
Inside csv_metric_only_print_end(), it unconditionally iterates over
ps->queued_metrics to print the column headers before printing the values.
Because there is no state tracking across intervals, the CSV output will
contain interleaved header and data rows across intervals, breaking the CSV
structure which requires exactly one header row.
Is it intended to print headers repeatedly in interval mode, or should we
add state tracking to print the header only once?
> +check_event "CSV (New API)" "$perf_cmd"
> +check_per_thread "CSV (New API)" "$perf_cmd"
> +check_per_node "CSV (New API)" "$perf_cmd"
> +if [ $skip_test -ne 1 ]
> +then
> + check_system_wide_no_aggr "CSV (New API)" "$perf_cmd"
> + check_per_core "CSV (New API)" "$perf_cmd"
> + check_per_die "CSV (New API)" "$perf_cmd"
> + check_per_socket "CSV (New API)" "$perf_cmd"
> +fi
> +
> cleanup
> exit 0
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260522223342.2393553-1-irogers@google.com?part=8
next prev parent reply other threads:[~2026-05-22 22:59 UTC|newest]
Thread overview: 45+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-05-22 22:33 [RFC PATCH v1 00/14] perf stat: Decouple and modularize metrics/events output printing API Ian Rogers
2026-05-22 22:33 ` [RFC PATCH v1 01/14] perf stat: Introduce core generic print traversal engine and header stubs Ian Rogers
2026-05-22 23:47 ` sashiko-bot
2026-05-22 22:33 ` [RFC PATCH v1 02/14] perf stat: Implement standard console (STD) formatting callbacks Ian Rogers
2026-05-22 22:54 ` sashiko-bot
2026-05-22 22:33 ` [RFC PATCH v1 03/14] perf stat: Extend STD output linter to test basic New API checks Ian Rogers
2026-05-22 22:33 ` [RFC PATCH v1 04/14] perf stat: Extend STD output linter to test core aggregation checks Ian Rogers
2026-05-22 22:33 ` [RFC PATCH v1 05/14] perf stat: Extend STD output linter to test advanced PMU checks Ian Rogers
2026-05-22 22:33 ` [RFC PATCH v1 06/14] perf stat: Extend STD output linter to test metric-only checks Ian Rogers
2026-05-22 22:33 ` [RFC PATCH v1 07/14] perf stat: Implement CSV formatting callbacks Ian Rogers
2026-05-22 23:01 ` sashiko-bot
2026-05-22 22:33 ` [RFC PATCH v1 08/14] perf stat: Extend CSV output linter to test core aggregation checks Ian Rogers
2026-05-22 22:59 ` sashiko-bot [this message]
2026-05-22 22:33 ` [RFC PATCH v1 09/14] perf stat: Extend CSV output linter to test advanced PMU and metric-only checks Ian Rogers
2026-05-22 22:48 ` sashiko-bot
2026-05-22 22:33 ` [RFC PATCH v1 10/14] perf stat: Implement streaming JSON formatting callbacks Ian Rogers
2026-05-22 23:02 ` sashiko-bot
2026-05-22 22:33 ` [RFC PATCH v1 11/14] perf stat: Extend JSON output linter to test core aggregation checks Ian Rogers
2026-05-22 22:53 ` sashiko-bot
2026-05-22 22:33 ` [RFC PATCH v1 12/14] perf stat: Extend JSON output linter to test advanced PMU and metric-only checks Ian Rogers
2026-05-22 22:33 ` [RFC PATCH v1 13/14] perf stat: Add --new support to PMU metrics Python validator Ian Rogers
2026-05-22 22:33 ` [RFC PATCH v1 14/14] perf stat: Extend PMU metrics value linter to validate --new outputs Ian Rogers
2026-05-25 23:18 ` [RFC PATCH v2 00/14] perf stat: Decouple and modularize metrics/events output printing API Ian Rogers
2026-05-25 23:18 ` [RFC PATCH v2 01/14] perf stat: Introduce core generic print traversal engine and header stubs Ian Rogers
2026-05-25 23:38 ` Arnaldo Carvalho de Melo
2026-05-25 23:48 ` Ian Rogers
2026-05-26 0:20 ` Arnaldo Carvalho de Melo
2026-05-25 23:18 ` [RFC PATCH v2 02/14] perf stat: Implement standard console (STD) formatting callbacks Ian Rogers
2026-05-25 23:49 ` Arnaldo Carvalho de Melo
2026-05-26 0:09 ` Ian Rogers
2026-05-25 23:53 ` sashiko-bot
2026-05-25 23:18 ` [RFC PATCH v2 03/14] perf stat: Extend STD output linter to test basic New API checks Ian Rogers
2026-05-25 23:39 ` Arnaldo Carvalho de Melo
2026-05-25 23:18 ` [RFC PATCH v2 04/14] perf stat: Extend STD output linter to test core aggregation checks Ian Rogers
2026-05-25 23:18 ` [RFC PATCH v2 05/14] perf stat: Extend STD output linter to test advanced PMU checks Ian Rogers
2026-05-25 23:18 ` [RFC PATCH v2 06/14] perf stat: Extend STD output linter to test metric-only checks Ian Rogers
2026-05-25 23:18 ` [RFC PATCH v2 07/14] perf stat: Implement CSV formatting callbacks Ian Rogers
2026-05-25 23:18 ` [RFC PATCH v2 08/14] perf stat: Extend CSV output linter to test core aggregation checks Ian Rogers
2026-05-25 23:18 ` [RFC PATCH v2 09/14] perf stat: Extend CSV output linter to test advanced PMU and metric-only checks Ian Rogers
2026-05-25 23:18 ` [RFC PATCH v2 10/14] perf stat: Implement streaming JSON formatting callbacks Ian Rogers
2026-05-25 23:18 ` [RFC PATCH v2 11/14] perf stat: Extend JSON output linter to test core aggregation checks Ian Rogers
2026-05-25 23:18 ` [RFC PATCH v2 12/14] perf stat: Extend JSON output linter to test advanced PMU and metric-only checks Ian Rogers
2026-05-25 23:18 ` [RFC PATCH v2 13/14] perf stat: Add --new support to PMU metrics Python validator Ian Rogers
2026-05-25 23:19 ` [RFC PATCH v2 14/14] perf stat: Extend PMU metrics value linter to validate --new outputs Ian Rogers
2026-05-25 23:53 ` sashiko-bot
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260522225902.774281F000E9@smtp.kernel.org \
--to=sashiko-bot@kernel.org \
--cc=irogers@google.com \
--cc=linux-perf-users@vger.kernel.org \
--cc=sashiko-reviews@lists.linux.dev \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox