Messages in this thread Patch in this message | | | Date | Fri, 6 Oct 2023 19:13:25 -0700 | Subject | [PATCH v1 6/7] perf pmu-events: Remember the events and metrics table | From | Ian Rogers <> |
| |
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@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) { + char *cpuid = perf_pmu__getcpuid(pmu); + + /* + * 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; + } } + free(cpuid); } - free(cpuid); if (!pmu) return table; @@ -1015,13 +1019,17 @@ const struct pmu_events_table *perf_pmu__find_events_table(struct perf_pmu *pmu) const struct pmu_metrics_table *perf_pmu__find_metrics_table(struct perf_pmu *pmu) { - const struct pmu_metrics_table *table = NULL; - char *cpuid = perf_pmu__getcpuid(pmu); + static const struct pmu_metrics_table *table; + char *cpuid; int i; + if (table) + return table; + /* on some platforms which uses cpus map, cpuid can be NULL for * PMUs other than CORE PMUs. */ + cpuid = perf_pmu__getcpuid(pmu); if (!cpuid) return NULL; -- 2.42.0.609.gbb76f46606-goog
| |