• Thomas Richter's avatar
    perf test: Test 17 fails with make LIBPFM4=1 on s390 z/VM · f677ec94
    Thomas Richter authored
    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: default avatarIan Rogers <irogers@google.com>
    Signed-off-by: default avatarThomas Richter <tmricht@linux.ibm.com>
    Reviewed-by: default avatarIan 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.comSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
    f677ec94
base-record 567 Bytes