mirror of
https://git.proxmox.com/git/mirror_ubuntu-kernels.git
synced 2025-11-17 04:36:09 +00:00
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 | ||