Counts expected fields for various commands. No testing added for
summary mode since it is broken.
An example of the summary output is:
summary,263831,,instructions:u,1435072,100.0,0.46,insn per cycle
,,,,,1.37,stalled cycles per insn
This should be:
summary,263831,,instructions:u,1435072,100.0,0.46,insn per cycle
summary,,,,,,1.37,stalled cycles per insn
The output has 7 fields when it should have 8. Additionally, the newline
spacing is wrong, so it was excluded from testing until a fix is made.
Committer testing:
$ perf test "perf stat CSV output"
88: perf stat CSV output linter : Ok
$
$ perf test -v "perf stat CSV output"
Couldn't bump rlimit(MEMLOCK), failures may take place when creating BPF maps, etc
88: perf stat CSV output linter :
--- start ---
test child forked, pid 2622839
Checking CSV output: no args [Success]
Checking CSV output: system wide [Skip] paranoid and not root
Checking CSV output: system wide [Skip] paranoid and not root
Checking CSV output: interval [Success]
Checking CSV output: event [Success]
Checking CSV output: per core [Skip] paranoid and not root
Checking CSV output: per thread [Skip] paranoid and not root
Checking CSV output: per die [Skip] paranoid and not root
Checking CSV output: per node [Skip] paranoid and not root
Checking CSV output: per socket [Skip] paranoid and not root
test child finished with 0
---- end ----
perf stat CSV output linter: Ok
$
I did a s/parnoia/paranoid/g on the [Skip] lines.
Signed-off-by: Claire Jensen <cjense@google.com>
Tested-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Cc: Alyssa Ross <hi@alyssa.is>
Cc: Claire Jensen <clairej735@gmail.com>
Cc: Florian Fischer <florian.fischer@muhq.space>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: James Clark <james.clark@arm.com>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: Kan Liang <kan.liang@linux.intel.com>
Cc: Like Xu <likexu@tencent.com>
Cc: Mark Rutland <mark.rutland@arm.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Sandipan Das <sandipan.das@amd.com>
Cc: Stephane Eranian <eranian@google.com>
Cc: Xing Zhengjun <zhengjun.xing@linux.intel.com>
Link: https://lore.kernel.org/r/20220525053814.3265216-2-irogers@google.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
49 lines
1.6 KiB
Python
49 lines
1.6 KiB
Python
#!/usr/bin/python
|
|
# SPDX-License-Identifier: GPL-2.0
|
|
|
|
import argparse
|
|
import sys
|
|
|
|
# Basic sanity check of perf CSV output as specified in the man page.
|
|
# Currently just checks the number of fields per line in output.
|
|
|
|
ap = argparse.ArgumentParser()
|
|
ap.add_argument('--no-args', action='store_true')
|
|
ap.add_argument('--interval', action='store_true')
|
|
ap.add_argument('--system-wide-no-aggr', action='store_true')
|
|
ap.add_argument('--system-wide', action='store_true')
|
|
ap.add_argument('--event', action='store_true')
|
|
ap.add_argument('--per-core', action='store_true')
|
|
ap.add_argument('--per-thread', action='store_true')
|
|
ap.add_argument('--per-die', action='store_true')
|
|
ap.add_argument('--per-node', action='store_true')
|
|
ap.add_argument('--per-socket', action='store_true')
|
|
ap.add_argument('--separator', default=',', nargs='?')
|
|
args = ap.parse_args()
|
|
|
|
Lines = sys.stdin.readlines()
|
|
|
|
def check_csv_output(exp):
|
|
for line in Lines:
|
|
if 'failed' not in line:
|
|
count = line.count(args.separator)
|
|
if count != exp:
|
|
sys.stdout.write(''.join(Lines))
|
|
raise RuntimeError(f'wrong number of fields. expected {exp} in {line}')
|
|
|
|
try:
|
|
if args.no_args or args.system_wide or args.event:
|
|
expected_items = 6
|
|
elif args.interval or args.per_thread or args.system_wide_no_aggr:
|
|
expected_items = 7
|
|
elif args.per_core or args.per_socket or args.per_node or args.per_die:
|
|
expected_items = 8
|
|
else:
|
|
ap.print_help()
|
|
raise RuntimeError('No checking option specified')
|
|
check_csv_output(expected_items)
|
|
|
|
except:
|
|
sys.stdout.write('Test failed for input: ' + ''.join(Lines))
|
|
raise
|