Received: by 2002:a05:6358:3188:b0:123:57c1:9b43 with SMTP id q8csp476266rwd; Sat, 27 May 2023 00:40:26 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ4E7Y6aoSw2+8roiwBibeZnT+f3Iv3BTXHdWvxHgr+QiGtxYG6Nms+g8SSAcgxE4ILS2YY3 X-Received: by 2002:a17:90b:3503:b0:250:78d0:f78c with SMTP id ls3-20020a17090b350300b0025078d0f78cmr1836825pjb.9.1685173226638; Sat, 27 May 2023 00:40:26 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1685173226; cv=none; d=google.com; s=arc-20160816; b=zEggIss+Obv3Yk15iZS1X8Gsa748k1t7nNpkv53AbD244WUiL/KMUs6hM0JhMLGSae NRtm8UaLybQkwa35P99ABoaxY8CwY+Cub64ANmdRTLwLcpuqttw/2o3RaipuGXQHgXNJ 0bp29Ijbd18wt18jO5lSmDe3opRBpjPM35yQPTAnDOmCD9rOCDZpDSS5cPOuH/7RHdlw glA2PuYkZZg79knFHXtjCWo72WmBSr3mTDsAc14AxQS6XeL22XPNlAhp2o3a1uHrts/9 4j4KEKDGqXqEaYYWlHY0uSjFT9MbtDjbkti6NGlzcPRf4jLjKPZ3KX/oah3uMtTkR2Hm /pLg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:to:from:subject:references:mime-version :message-id:in-reply-to:date:dkim-signature; bh=rh9VPjugtBPm6X+hrybIGNZEfoE06aG1Vq+cBf1Euw8=; b=D1DgLgab4Q3GQuSUaAo9XV2eIgNfctBxyaA8sLPi276srzr9BntWh7bNaEopU4PqOn z3YiP7a1LOQPS/aTafjLUZm+MN1ANwqOxL2fjcq3cXpYJEVndf4E25zW7DTXxUqTgNld JaVOyggYkabE8hlEFCp8cfGaltXo0WU4A6PxglNIlpBJbRaOPrOgj4LjQ3Skzh/dMPvq 48njGbBNKaHOcQNnkO2ThwR3FfSL3r2ZKCBEjBcK2Cvu/3gdvk+GdyIJwwAhgS9TzlRx CnrywxchSaq5ZVXFNkMYeQoIjqVwCf+CDDN3tJni+bC/5hHIzNGyipjE9dO24debgJgZ 1oRA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20221208 header.b=r0mpCy0l; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id hg14-20020a17090b300e00b0024e4df1b2e3si1425309pjb.123.2023.05.27.00.40.14; Sat, 27 May 2023 00:40:26 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@google.com header.s=20221208 header.b=r0mpCy0l; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S238159AbjE0H0A (ORCPT + 99 others); Sat, 27 May 2023 03:26:00 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:57414 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S238239AbjE0HZ2 (ORCPT ); Sat, 27 May 2023 03:25:28 -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 799241724 for ; Sat, 27 May 2023 00:24:49 -0700 (PDT) Received: by mail-yw1-x1149.google.com with SMTP id 00721157ae682-561f6e63decso32389577b3.1 for ; Sat, 27 May 2023 00:24:49 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20221208; t=1685172223; x=1687764223; h=to:from:subject:references:mime-version:message-id:in-reply-to:date :from:to:cc:subject:date:message-id:reply-to; bh=rh9VPjugtBPm6X+hrybIGNZEfoE06aG1Vq+cBf1Euw8=; b=r0mpCy0lGZyvfrm4W35bC646coxeGE0T/kSRr50y2P56BGfokwpNidgydSYfk1itmt pLbHWr3LNX5cBVrRV83jBbBh4GgLbyr1sx90KLDZm4s+msqQg5TPc1o4pD5Dhhr7/Mh5 CkRUvPW5ly2q2eWh4mxiEa5EynGdnztPYpWYnHosw4EVqi+lSOGMY3t6C5xFPCZdQqIx yGNcvvnWKTF7X4tz+o4dw+/tVGWO8WiN4LYZrseCKtSVBw/GCF4Mi8iUSQItsjF1/ge1 jsoxhkNjBJ+0eRNabf/nEez5GQxQXlBQ9Ps1/VGam5NqgKVwG/vHa0FoXGbdGjIXDNS6 R5jw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1685172223; x=1687764223; 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=rh9VPjugtBPm6X+hrybIGNZEfoE06aG1Vq+cBf1Euw8=; b=K+/sugXwSo82hzrd2e16/ukza2D8r1gm4IgVbi3mPKYBRs1rAGEylXocMo6TTp2Ar4 OTAWer/gmljGJ58raN39nHAtIr6141pujIXBQkc/MKdZRX/vNAdvaFoQPU3ZDp0p+rfX M1GsbIq62M4951xBab7HWBFhn989W+D4TILHG5juJ8FKZOniprXlafYd1YEDi+MYKlF6 dGfcJWwg1ES+UUMnaLJGLieqtD8YWy+82mfUa0D1neruS1cKheBDWBfhzSLnux8qxuXk hFw+fUCj+9ne4S5kHplt/ux+sCE8wwCLKeLsqHN/4O4sqOhiJR4K+coz1bd9yTYMcmoq nzYA== X-Gm-Message-State: AC+VfDxg/A3ToTkp+yMF4hzpDgAL8ctE16Vgv/1TieJJdxJyT+SGWL3k LduuRMHXPaU14T4ccNPPNfdRsTl93Pr4 X-Received: from irogers.svl.corp.google.com ([2620:15c:2d4:203:3b4e:312c:644:a642]) (user=irogers job=sendgmr) by 2002:a81:ae21:0:b0:565:ce25:2693 with SMTP id m33-20020a81ae21000000b00565ce252693mr761021ywh.3.1685172223260; Sat, 27 May 2023 00:23:43 -0700 (PDT) Date: Sat, 27 May 2023 00:22:06 -0700 In-Reply-To: <20230527072210.2900565-1-irogers@google.com> Message-Id: <20230527072210.2900565-31-irogers@google.com> Mime-Version: 1.0 References: <20230527072210.2900565-1-irogers@google.com> X-Mailer: git-send-email 2.41.0.rc0.172.g3f132b7071-goog Subject: [PATCH v5 30/34] perf pmus: Avoid repeated sysfs scanning From: Ian Rogers To: Suzuki K Poulose , Mike Leach , Leo Yan , John Garry , Will Deacon , James Clark , Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Mark Rutland , Alexander Shishkin , Jiri Olsa , Namhyung Kim , Ian Rogers , Adrian Hunter , Kajol Jain , Jing Zhang , Kan Liang , Zhengjun Xing , Ravi Bangoria , Madhavan Srinivasan , Athira Rajeev , Ming Wang , Huacai Chen , Sandipan Das , Dmitrii Dolgov <9erthalion6@gmail.com>, Sean Christopherson , Ali Saidi , Rob Herring , Thomas Richter , Kang Minchul , linux-kernel@vger.kernel.org, coresight@lists.linaro.org, linux-arm-kernel@lists.infradead.org, linux-perf-users@vger.kernel.org Content-Type: text/plain; charset="UTF-8" X-Spam-Status: No, score=-9.6 required=5.0 tests=BAYES_00,DKIMWL_WL_MED, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_NONE, SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE,USER_IN_DEF_DKIM_WL autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org perf_pmus__scan will process every directory in sysfs to see if it is a PMU, attempting to add it if not already in the pmus list. Add two booleans to record whether this scanning has been done for core or all PMUs. Skip scanning in the event that scanning has already occurred. Signed-off-by: Ian Rogers Reviewed-by: Kan Liang --- tools/perf/util/pmus.c | 33 +++++++++++++++++++++++++++++++-- 1 file changed, 31 insertions(+), 2 deletions(-) diff --git a/tools/perf/util/pmus.c b/tools/perf/util/pmus.c index de7fc36519c9..2c512345191d 100644 --- a/tools/perf/util/pmus.c +++ b/tools/perf/util/pmus.c @@ -14,6 +14,8 @@ static LIST_HEAD(core_pmus); static LIST_HEAD(other_pmus); +static bool read_sysfs_core_pmus; +static bool read_sysfs_all_pmus; void perf_pmus__destroy(void) { @@ -29,6 +31,8 @@ void perf_pmus__destroy(void) perf_pmu__delete(pmu); } + read_sysfs_core_pmus = false; + read_sysfs_all_pmus = false; } static struct perf_pmu *pmu_find(const char *name) @@ -53,6 +57,7 @@ struct perf_pmu *perf_pmus__find(const char *name) { struct perf_pmu *pmu; int dirfd; + bool core_pmu; /* * Once PMU is loaded it stays in the list, @@ -63,8 +68,15 @@ struct perf_pmu *perf_pmus__find(const char *name) if (pmu) return pmu; + if (read_sysfs_all_pmus) + return NULL; + + core_pmu = is_pmu_core(name); + if (core_pmu && read_sysfs_core_pmus) + return NULL; + dirfd = perf_pmu__event_source_devices_fd(); - pmu = perf_pmu__lookup(is_pmu_core(name) ? &core_pmus : &other_pmus, dirfd, name); + pmu = perf_pmu__lookup(core_pmu ? &core_pmus : &other_pmus, dirfd, name); close(dirfd); return pmu; @@ -73,6 +85,7 @@ struct perf_pmu *perf_pmus__find(const char *name) static struct perf_pmu *perf_pmu__find2(int dirfd, const char *name) { struct perf_pmu *pmu; + bool core_pmu; /* * Once PMU is loaded it stays in the list, @@ -83,7 +96,14 @@ static struct perf_pmu *perf_pmu__find2(int dirfd, const char *name) if (pmu) return pmu; - return perf_pmu__lookup(is_pmu_core(name) ? &core_pmus : &other_pmus, dirfd, name); + if (read_sysfs_all_pmus) + return NULL; + + core_pmu = is_pmu_core(name); + if (core_pmu && read_sysfs_core_pmus) + return NULL; + + return perf_pmu__lookup(core_pmu ? &core_pmus : &other_pmus, dirfd, name); } /* Add all pmus in sysfs to pmu list: */ @@ -93,6 +113,9 @@ static void pmu_read_sysfs(bool core_only) DIR *dir; struct dirent *dent; + if (read_sysfs_all_pmus || (core_only && read_sysfs_core_pmus)) + return; + fd = perf_pmu__event_source_devices_fd(); if (fd < 0) return; @@ -111,6 +134,12 @@ static void pmu_read_sysfs(bool core_only) } closedir(dir); + if (core_only) { + read_sysfs_core_pmus = true; + } else { + read_sysfs_core_pmus = true; + read_sysfs_all_pmus = true; + } } struct perf_pmu *perf_pmus__find_by_type(unsigned int type) -- 2.41.0.rc0.172.g3f132b7071-goog