f677ec94f6
This test case fails on s390 virtual machine z/VM which has no PMU support when the perf tool is built with LIBPFM4=1. Using make LIBPFM4=1 builds the perf tool with support for libpfm event notation. The command line flag --pfm-events is valid: # ./perf record --pfm-events cycles -- true [ perf record: Woken up 1 times to write data ] [ perf record: Captured and wrote 0.001 MB perf.data (2 samples) ] # However the command 'perf test -Fv 17' fails on s390 z/VM virtual machine with LIBPFM4=1: # perf test -Fv 17 17: Setup struct perf_event_attr : --- start --- ..... running './tests/attr/test-record-group2' unsupp './tests/attr/test-record-group2' running './tests/attr/test-record-pfm-period' expected exclude_hv=0, got 1 FAILED './tests/attr/test-record-pfm-period' - match failure ---- end ---- Setup struct perf_event_attr: FAILED! When --pfm-event system is not supported, the test returns unsupported and continues. Here is an example using a virtual machine on x86 and Fedora 34: [root@f33 perf]# perf test -Fv 17 17: Setup struct perf_event_attr : --- start --- ..... running './tests/attr/test-record-group2' unsupp './tests/attr/test-record-group2' running './tests/attr/test-record-pfm-period' unsupp './tests/attr/test-record-pfm-period' .... The issue is file ./tests/attr/test-record-pfm-period which requires perf event attribute member exclude_hv to be zero. This is not the case on s390 where the value of exclude_hv is one when executing on a z/VM virtual machine without PMU hardware support. Fix this by allowing value exlucde_hv to be zero or one. Output before: # /usr/bin/python ./tests/attr.py -d ./tests/attr/ -t \ test-record-pfm-period -p ./perf -vvv 2>&1| fgrep match matching [event:base-record] match: [event:base-record] matches [] FAILED './tests/attr//test-record-pfm-period' - match failure # Output after: # /usr/bin/python ./tests/attr.py -d ./tests/attr/ -t \ test-record-pfm-period -p ./perf -vvv 2>&1| fgrep match matching [event:base-record] match: [event:base-record] matches ['event-1-0-6', 'event-1-0-5'] matched Background: Using libpfm library ends up in this function call sequence pfm_get_perf_event_encoding() +-- pfm_get_os_event_encoding() +-- pfmlib_perf_event_encode() is called when no hardware specific PMU unit can be detected as in the s390 z/VM virtual machine case. This uses the "perf_events generic PMU" data structure which sets exclude_hv to 1 per default. Using this PMU that test case always fails. That is the reason why exclude_hv attribute setting varies. Version 2: As suggested by Ian Rogers make perf_event_attribute member exclude_hv more robust and accept value 0 or 1 to handle more test cases which might fail on s390 virtual machine z/VM. Suggested-by: Ian Rogers <irogers@google.com> Signed-off-by: Thomas Richter <tmricht@linux.ibm.com> Reviewed-by: Ian Rogers <irogers@google.com> Cc: Heiko Carstens <hca@linux.ibm.com> Cc: Ian Rogers <irogers@google.com> Cc: Sumanth Korikkar <sumanthk@linux.ibm.com> Cc: Sven Schnelle <svens@linux.ibm.com> Cc: Vasily Gorbik <gor@linux.ibm.com> Link: http://lore.kernel.org/lkml/20210528091050.245838-1-tmricht@linux.ibm.com Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com> |
||
---|---|---|
.. | ||
attr | ||
shell | ||
.gitignore | ||
api-io.c | ||
attr.c | ||
attr.py | ||
backward-ring-buffer.c | ||
bitmap.c | ||
bp_account.c | ||
bp_signal_overflow.c | ||
bp_signal.c | ||
bpf-script-example.c | ||
bpf-script-test-kbuild.c | ||
bpf-script-test-prologue.c | ||
bpf-script-test-relocation.c | ||
bpf.c | ||
Build | ||
builtin-test.c | ||
clang.c | ||
code-reading.c | ||
cpumap.c | ||
demangle-java-test.c | ||
demangle-ocaml-test.c | ||
dso-data.c | ||
dwarf-unwind.c | ||
event_update.c | ||
event-times.c | ||
evsel-roundtrip-name.c | ||
evsel-tp-sched.c | ||
expand-cgroup.c | ||
expr.c | ||
fdarray.c | ||
genelf.c | ||
hists_common.c | ||
hists_common.h | ||
hists_cumulate.c | ||
hists_filter.c | ||
hists_link.c | ||
hists_output.c | ||
is_printable_array.c | ||
keep-tracking.c | ||
kmod-path.c | ||
llvm.c | ||
llvm.h | ||
make | ||
maps.c | ||
mem2node.c | ||
mem.c | ||
mmap-basic.c | ||
mmap-thread-lookup.c | ||
openat-syscall-all-cpus.c | ||
openat-syscall-tp-fields.c | ||
openat-syscall.c | ||
parse-events.c | ||
parse-metric.c | ||
parse-no-sample-id-all.c | ||
pe-file-parsing.c | ||
pe-file.c | ||
pe-file.exe | ||
pe-file.exe.debug | ||
perf-hooks.c | ||
perf-record.c | ||
perf-targz-src-pkg | ||
perf-time-to-tsc.c | ||
pfm.c | ||
pmu-events.c | ||
pmu.c | ||
python-use.c | ||
sample-parsing.c | ||
sdt.c | ||
stat.c | ||
sw-clock.c | ||
switch-tracking.c | ||
task-exit.c | ||
tests.h | ||
thread-map.c | ||
thread-maps-share.c | ||
time-utils-test.c | ||
topology.c | ||
unit_number__scnprintf.c | ||
vmlinux-kallsyms.c | ||
wp.c |