From nobody Wed Dec 17 03:00:58 2025 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 61772C7EE43 for ; Thu, 24 Aug 2023 04:15:34 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S240113AbjHXEPH (ORCPT ); Thu, 24 Aug 2023 00:15:07 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:50384 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240153AbjHXEOQ (ORCPT ); Thu, 24 Aug 2023 00:14:16 -0400 Received: from mail-yw1-x1149.google.com (mail-yw1-x1149.google.com [IPv6:2607:f8b0:4864:20::1149]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 45C5710C4 for ; Wed, 23 Aug 2023 21:14:14 -0700 (PDT) Received: by mail-yw1-x1149.google.com with SMTP id 00721157ae682-591138c0978so54859307b3.1 for ; Wed, 23 Aug 2023 21:14:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20221208; t=1692850453; x=1693455253; h=to:from:subject:references:mime-version:message-id:in-reply-to:date :from:to:cc:subject:date:message-id:reply-to; bh=XBwLMLKJCYv4PjzpijbZ5QEB0J7EgzXqXuvGjcNNjMg=; b=YpA22ufBJ40L0tFpmTZUdRNm9nXzndqEhhLcZJDP9SxcVdAABpavpRZFs+93KGCVSG 3JhLpzc0f/2M+z4q7pH0MJnvdFjADtVTxRmBUyq73rvYX1lkhEDNgdcNDKi+bEYwB5At /OWw3ZWzfNaGYz+eAb9Duj0vqqUJjbKv7h+v44nigvQZGBdBK7S7alDIQABMiIfMPwaC 9KQBNPRJIhZ8jaYN9E5s6CQfN5GemAejHQha8ZNyRQghtFsVEJ7F28IExMxMqOOppG9Z CZDBF7KJoybrbUs+lsNN0LyLOGrPyS5J0Mqi7AKysJj+uLBGxPQjub5XnSJz1AzQv0RF q6Ag== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1692850453; x=1693455253; h=to:from:subject:references:mime-version:message-id:in-reply-to:date :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=XBwLMLKJCYv4PjzpijbZ5QEB0J7EgzXqXuvGjcNNjMg=; b=dQPgYMY6aufoDKNW/f3ckrJdklPrN4EFDviuJqMK3r3hEGWmbMsCNjwozlRaN5zrjL c7gcTAzNNxd6lKnXb7mRYdvbqFWKhAhfmdjPtZ7zmCv9RzFb1+klZ6nLX5NA1Nv6d3FD VXj0xNm4dZJyDDOej2SfUMV80wnIDy12FZW1Ompf+n+/wnAvxv8SEQWQMw7y+etYTxl5 yELVZA4qychvi0BsbJCDZl08IDPjoGrSaJ2vrGDaLIuYxMH67eo+9jPAEvrpQsw0DR58 50RhzbOcz2Xj3cFXfck9An22rUT6u6VnjV725GSMbBkPjcoSTk++4z3uNbpUq2+oxXX5 IuoQ== X-Gm-Message-State: AOJu0Yw+lHquBBvPjzMqFgZx6eSYkwBQrpjypesR8Wv0r9eSZG4Bj/Ij cFw7XxtYU4AOiJGv9LWR6zvU4AXrSyOx X-Google-Smtp-Source: AGHT+IF7xRVc2r3KxWkbIkCWv31O+OU7P/dE1Z04f4HUkNLe1WV4gdaTWlFtjAZmDWdkS/JUvcTE3N6W8Xeg X-Received: from irogers.svl.corp.google.com ([2620:15c:2a3:200:fbb9:d9e7:7405:2651]) (user=irogers job=sendgmr) by 2002:a81:4303:0:b0:583:4f82:b9d9 with SMTP id q3-20020a814303000000b005834f82b9d9mr225721ywa.5.1692850453440; Wed, 23 Aug 2023 21:14:13 -0700 (PDT) Date: Wed, 23 Aug 2023 21:13:24 -0700 In-Reply-To: <20230824041330.266337-1-irogers@google.com> Message-Id: <20230824041330.266337-13-irogers@google.com> Mime-Version: 1.0 References: <20230824041330.266337-1-irogers@google.com> X-Mailer: git-send-email 2.42.0.rc1.204.g551eb34607-goog Subject: [PATCH v2 12/18] perf pmu: Cache json events table From: Ian Rogers To: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Mark Rutland , Alexander Shishkin , Jiri Olsa , Namhyung Kim , Ian Rogers , Adrian Hunter , James Clark , Kan Liang , John Garry , Kajol Jain , Jing Zhang , Ravi Bangoria , Rob Herring , Gaosheng Cui , linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Cache the json events table so that finding it isn't done per event/alias. Change the events table find so that when the PMU is given, if the PMU has no json events return null. Update usage to always use the PMU variable. Signed-off-by: Ian Rogers --- tools/perf/pmu-events/jevents.py | 14 ++++++++++++-- tools/perf/tests/pmu-events.c | 2 ++ tools/perf/util/pmu.c | 16 +++++++--------- tools/perf/util/pmu.h | 4 ++++ 4 files changed, 25 insertions(+), 11 deletions(-) diff --git a/tools/perf/pmu-events/jevents.py b/tools/perf/pmu-events/jeven= ts.py index 991fcf6cca64..f07864fabd54 100755 --- a/tools/perf/pmu-events/jevents.py +++ b/tools/perf/pmu-events/jevents.py @@ -948,7 +948,7 @@ const struct pmu_events_table *perf_pmu__find_events_ta= ble(struct perf_pmu *pmu) { const struct pmu_events_table *table =3D NULL; char *cpuid =3D perf_pmu__getcpuid(pmu); - int i; + size_t i; =20 /* on some platforms which uses cpus map, cpuid can be NULL for * PMUs other than CORE PMUs. @@ -968,7 +968,17 @@ const struct pmu_events_table *perf_pmu__find_events_t= able(struct perf_pmu *pmu) } } free(cpuid); - return table; + if (!pmu) + return table; + + for (i =3D 0; i < table->num_pmus; i++) { + const struct pmu_table_entry *table_pmu =3D &table->pmus[i= ]; + const char *pmu_name =3D &big_c_string[table_pmu->pmu_name= .offset]; + + if (pmu__name_match(pmu, pmu_name)) + return table; + } + return NULL; } =20 const struct pmu_metrics_table *perf_pmu__find_metrics_table(struct perf_p= mu *pmu) diff --git a/tools/perf/tests/pmu-events.c b/tools/perf/tests/pmu-events.c index 34f0de182fa9..4fcb84fd1f65 100644 --- a/tools/perf/tests/pmu-events.c +++ b/tools/perf/tests/pmu-events.c @@ -544,6 +544,7 @@ static int __test_core_pmu_event_aliases(char *pmu_name= , int *count) INIT_LIST_HEAD(&pmu->list); pmu->name =3D strdup(pmu_name); =20 + pmu->events_table =3D table; pmu_add_cpu_aliases_table(pmu, table); =20 res =3D pmu_events_table__find_event(table, pmu, "bp_l1_btb_correct", NUL= L, NULL); @@ -583,6 +584,7 @@ static int __test_uncore_pmu_event_aliases(struct perf_= pmu_test_pmu *test_pmu) events_table =3D find_core_events_table("testarch", "testcpu"); if (!events_table) return -1; + pmu->events_table =3D events_table; pmu_add_cpu_aliases_table(pmu, events_table); pmu_add_sys_aliases(pmu); =20 diff --git a/tools/perf/util/pmu.c b/tools/perf/util/pmu.c index bc2dd8f94bcf..685903c1970b 100644 --- a/tools/perf/util/pmu.c +++ b/tools/perf/util/pmu.c @@ -522,10 +522,10 @@ static int perf_pmu__new_alias(struct perf_pmu *pmu, = int dirfd, const char *name } if (!pe) { /* Update an event from sysfs with json data. */ - const struct pmu_events_table *table =3D perf_pmu__find_events_table(pmu= ); - - if (table) - pmu_events_table__find_event(table, pmu, name, update_alias, alias); + if (pmu->events_table) { + pmu_events_table__find_event(pmu->events_table, pmu, name, + update_alias, alias); + } } =20 /* Scan event and remove leading zeroes, spaces, newlines, some @@ -875,13 +875,10 @@ void pmu_add_cpu_aliases_table(struct perf_pmu *pmu, = const struct pmu_events_tab =20 static void pmu_add_cpu_aliases(struct perf_pmu *pmu) { - const struct pmu_events_table *table; - - table =3D perf_pmu__find_events_table(pmu); - if (!table) + if (!pmu->events_table) return; =20 - pmu_add_cpu_aliases_table(pmu, table); + pmu_add_cpu_aliases_table(pmu, pmu->events_table); } =20 static int pmu_add_sys_aliases_iter_fn(const struct pmu_event *pe, @@ -992,6 +989,7 @@ struct perf_pmu *perf_pmu__lookup(struct list_head *pmu= s, int dirfd, const char if (pmu->is_uncore) pmu->id =3D pmu_id(name); pmu->max_precise =3D pmu_max_precise(dirfd, pmu); + pmu->events_table =3D perf_pmu__find_events_table(pmu); pmu_add_cpu_aliases(pmu); pmu_add_sys_aliases(pmu); list_add_tail(&pmu->list, pmus); diff --git a/tools/perf/util/pmu.h b/tools/perf/util/pmu.h index 2b1730152bc0..6bf0fbde4e85 100644 --- a/tools/perf/util/pmu.h +++ b/tools/perf/util/pmu.h @@ -114,6 +114,10 @@ struct perf_pmu { * from json events in pmu-events.c. */ struct list_head aliases; + /** + * @events_table: The events table for json events in pmu-events.c. + */ + const struct pmu_events_table *events_table; /** @caps_initialized: Has the list caps been initialized? */ bool caps_initialized; /** @nr_caps: The length of the list caps. */ --=20 2.42.0.rc1.204.g551eb34607-goog