lkml.org 
[lkml]   [2023]   [Oct]   [6]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    Subject[PATCH v1 6/7] perf pmu-events: Remember the events and metrics table
    From
    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
    \
     
     \ /
      Last update: 2023-10-07 04:25    [W:4.606 / U:0.008 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site