[PATCH v1 6/7] perf pmu-events: Remember the events and metrics table

Yang Jihong yangjihong1 at huawei.com
Sat Oct 7 20:39:20 PDT 2023


Hello,

On 2023/10/7 10:13, Ian Rogers wrote:
> strcmp_cpuid_str performs regular expression comparisons. Avoid
> repeated computation of the table by remembering the table in a
> static.
> 
> Signed-off-by: Ian Rogers <irogers at google.com>
> ---
>   tools/perf/pmu-events/jevents.py | 48 +++++++++++++++++++-------------
>   1 file changed, 28 insertions(+), 20 deletions(-)
> 
> diff --git a/tools/perf/pmu-events/jevents.py b/tools/perf/pmu-events/jevents.py
> index fd009752b427..8d8d5088c53c 100755
> --- a/tools/perf/pmu-events/jevents.py
> +++ b/tools/perf/pmu-events/jevents.py
> @@ -978,28 +978,32 @@ int pmu_metrics_table__for_each_metric(const struct pmu_metrics_table *table,
>   
>   const struct pmu_events_table *perf_pmu__find_events_table(struct perf_pmu *pmu)
>   {
> -        const struct pmu_events_table *table = NULL;
> -        char *cpuid = perf_pmu__getcpuid(pmu);
> +        static const struct pmu_events_table *table;
>           size_t i;
>   
> -        /* on some platforms which uses cpus map, cpuid can be NULL for
> -         * PMUs other than CORE PMUs.
> -         */
> -        if (!cpuid)
> -                return NULL;
> -
> -        i = 0;
> -        for (;;) {
> -                const struct pmu_events_map *map = &pmu_events_map[i++];
> -                if (!map->arch)
> -                        break;
> -
> -                if (!strcmp_cpuid_str(map->cpuid, cpuid)) {
> -                        table = &map->event_table;
> -                        break;
> +        if (!table) {
If there is no matched table in pmu_events_map, 
perf_pmu__find_events_table() will enter this branch for repeated search 
each time.
Or do we need to use another variable to indicate whether the search has 
been performed?

Thanks,
Yang



More information about the linux-arm-kernel mailing list