[wperf] [WPERF-572] Print FEAT_PMU and FEAT_SPE in `wperf test` command

Introduction

We want to print FEAT_PMU and FEAT_SPE in wperf test command so users can inspect its values. Now users can only see:

PMU_CTL_QUERY_HW_CFG [id_aa64dfr0_value]            0x00000000000110305408

In this patch I've added two new human readable fields pmu_device.version_name and spe_device.version_name, see example below from neoverse-n1 CPU:

pmu_device.version_name                             FEAT_PMUv3p1
spe_device.version_name                             FEAT_SPE

Expected output for wperf test

>wperf test
        Test Name                                           Result
        =========                                           ======
        request.ioctl_events [EVT_CORE]                     False
        request.ioctl_events [EVT_DSU]                      False
        request.ioctl_events [EVT_DMC_CLK/EVT_DMC_CLKDIV2]  False
        pmu_device.vendor_name                              Arm Limited
        pmu_device.product_name                             neoverse-n1
        pmu_device.product_name(extended)                   Neoverse N1 (neoverse-n1), armv8.1, pmu_v3
        pmu_device.product []                               armv8-a,armv9-a,neoverse-n1,neoverse-n2,neoverse-n2-r0p0,neoverse-n2-r0p1,neoverse-n2-r0p3,neoverse-v1
        pmu_device.m_product_alias                          (neoverse-n2-r0p0:neoverse-n2),(neoverse-n2-r0p1:neoverse-n2)
...
        pmu_device.version_name                             FEAT_PMUv3p1
...
        config.count.period                                 100
        config.count.period_max                             100
        config.count.period_min                             10
        spe_device.version_name                             FEAT_SPE

In this patch:

  • wperf: fix extra header vs project error
  • wperf-scripts: add test for PMU version name
  • wperf: make pmu_device::get_pmu_version_name() static
  • wperf-common: move ID_AA64DFR0_EL1_x macros to common
  • wperf: add get_pmu_version_name() API
  • wperf: add basic spe_device class

Testing

>pytest wperf_cli_test_test.py -v
==================================================== test session starts ====================================================
platform win32 -- Python 3.11.1, pytest-7.2.0, pluggy-1.0.0 -- C:\Users\przemek\AppData\Local\Programs\Python\Python311-arm64\python.exe
cachedir: .pytest_cache
rootdir: C:\Users\$USER\Desktop\wperf\merge-request\3.2.2, configfile: pytest.ini
collected 8 items

wperf_cli_test_test.py::test_wperf_test_json PASSED                                                                    [ 12%]
wperf_cli_test_test.py::test_wperf_test_json_file_output_exists PASSED                                                 [ 25%]
wperf_cli_test_test.py::test_wperf_test_json_file_output_valid PASSED                                                  [ 37%]
wperf_cli_test_test.py::test_wperf_test_MIDR_reg PASSED                                                                [ 50%]
wperf_cli_test_test.py::test_wperf_test_MIDR_vendor_id PASSED                                                          [ 62%]
wperf_cli_test_test.py::test_wperf_test_ID_AA64DFR0_EL1_reg PASSED                                                     [ 75%]
wperf_cli_test_test.py::test_wperf_test_INTERVAL_DEFAULT PASSED                                                        [ 87%]
wperf_cli_test_test.py::test_wperf_test_pmu_version_name PASSED                                                        [100%]

===================================================== 8 passed in 0.66s =====================================================
Edited by Przemyslaw Wirkus

Merge request reports

Loading