• Ian Rogers's avatar
    perf jevents: Add support for metricgroup descriptions · 66c6e0c1
    Ian Rogers authored
    Metrics have a field where the groups they belong to are listed like
    the following from
    tools/perf/pmu-events/arch/x86/skylakex/skx-metrics.json:
    
            "MetricGroup": "PGO;TmaL1;TopdownL1;tma_L1_group",
            "MetricName": "tma_frontend_bound",
    
    The metric groups are shown in 'perf list' like the following where
    TopdownL1 is a metric group:
    
    TopdownL1:
      tma_backend_bound
           [This category represents fraction of slots where no uops are being
            delivered due to a lack of required resources for accepting new uops
            in the Backend]
      tma_bad_speculation
           [This category represents fraction of slots wasted due to incorrect
            speculations]
      tma_frontend_bound
           [This category represents fraction of slots where the processor's
            Frontend undersupplies its Backend]
      tma_retiring
           [This category represents fraction of slots utilized by useful work
            i.e. issued uops that eventually get retired]
    
    This patch adds support for a new json file in each model directory
    called metricgroups.json that comprises a dictionary containing
    entries that map from a metric group to a description:
    
    {
    ...
        "TopdownL1": "Metrics for top-down breakdown at level 1",
    ...
    }
    
    perf list is then updated to support this changing the above output
    to:
    
      TopdownL1: [Metrics for top-down breakdown at level 1]
    
    Committer notes:
    
    Added a (int) cast to the ARRAY_SIZE() introduced in this patch to
    address:
    
      /tmp/build/perf-tools-next/pmu-events/pmu-events.c: In function ‘describe_metricgroup’:
      /var/home/acme/git/perf-tools-next/tools/include/linux/kernel.h:102:25: error: overflow in conversion from ‘long unsigned int’ to ‘int’ changes value from ‘18446744073709551615’ to ‘-1’ [-Werror=overflow]
        102 | #define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0]) + __must_be_array(arr))
            |                         ^
      /tmp/build/perf-tools-next/pmu-events/pmu-events.c:61603:29: note: in expansion of macro ‘ARRAY_SIZE’
      61603 |         int low = 0, high = ARRAY_SIZE(metricgroups) - 1;
            |                             ^~~~~~~~~~
      cc1: all warnings being treated as errors
    Reviewed-by: default avatarKan Liang <kan.liang@linux.intel.com>
    Signed-off-by: default avatarIan Rogers <irogers@google.com>
    Cc: Adrian Hunter <adrian.hunter@intel.com>
    Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
    Cc: Ingo Molnar <mingo@redhat.com>
    Cc: Jiri Olsa <jolsa@kernel.org>
    Cc: John Garry <john.g.garry@oracle.com>
    Cc: Kajol Jain <kjain@linux.ibm.com>
    Cc: Mark Rutland <mark.rutland@arm.com>
    Cc: Namhyung Kim <namhyung@kernel.org>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Thomas Richter <tmricht@linux.ibm.com>
    Cc: Xing Zhengjun <zhengjun.xing@linux.intel.com>
    Link: https://lore.kernel.org/r/20230517173805.602113-15-irogers@google.comSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
    66c6e0c1
jevents.py 34.1 KB