From mboxrd@z Thu Jan 1 00:00:00 1970 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 bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 7F667C77B75 for ; Wed, 17 May 2023 14:59:59 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:To:From:Subject:References:Mime-Version :Message-Id:In-Reply-To:Date:Reply-To:Cc:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=xwiBI/kAXCvM2V64ohX0LIHv1Ich0qEGe/50XubuMYA=; b=Zw2yTQCjkzdHWT iFUvu6ko2nh5de5XW7ecMuxqU2TbMLet441zlXoJyTF1ASRWzhBlfBk6ZANdGKGa1d+Z2N0kL7SQ6 FgahdHAJ1dqfH3E0XXrsmvqUlKEZ21DnOPMEnI4fLXFrIF9e+wGsjj6/p3PHKz77TlsMpy+bPzAia ewDgQ++9QqJpKjsATpYceL55/vRCxko7eIp3m+45XopObkDIomsgKhr9ez40VqLY1ELSwJ3ibbHRx 4pwVcvMMNv14bS5FFYAT7AqJdIknNvi0g/Sahv1pGoVfcdCIbdAHBxBd4rWZfuFdtkNZX6MYCR/8a w7P/EAt+IS7Mw3OmkiyQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1pzIcp-00ADmY-1b; Wed, 17 May 2023 14:59:35 +0000 Received: from mail-pf1-x44a.google.com ([2607:f8b0:4864:20::44a]) by bombadil.infradead.org with esmtps (Exim 4.96 #2 (Red Hat Linux)) id 1pzIci-00ADhu-1d for linux-arm-kernel@lists.infradead.org; Wed, 17 May 2023 14:59:30 +0000 Received: by mail-pf1-x44a.google.com with SMTP id d2e1a72fcca58-64350db8497so52472b3a.0 for ; Wed, 17 May 2023 07:59:27 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20221208; t=1684335567; x=1686927567; h=to:from:subject:references:mime-version:message-id:in-reply-to:date :from:to:cc:subject:date:message-id:reply-to; bh=YDiC9RY1zs37JQzy/xyTqLqcVVdBqmzj5pMMgSLBC2k=; b=qAH8dA1MBDw//W5b+cN/DyreQ6vmZocG/5dFnQOttiCARmjK0YdCXVii5SB34CphxF t0EWRnE0ucijXh15k5s8O0tia1jN2x38X9PcYH3Y4zVveSxPafkqFQPA98q+y5/vfYNo FazWN+SzEkBfdi/4u3XgdYANIAsdEDicFwG0/5hwBoolAhev1nR3DqPyK3VDyKCAU35d O3EifEaOZY32H7blE5VyS+nybpP21nHrS4hRx2lYtPmDC+FgDsJVbP4NbQ2r+xhn+UaX aTVJNI9fVWPjQeSkEw4Py4XHBB3s27d5AJq0V7LVs36Sh2kfOP5eWe9tmGamPDySW5mz 9Z3w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1684335567; x=1686927567; 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=YDiC9RY1zs37JQzy/xyTqLqcVVdBqmzj5pMMgSLBC2k=; b=jUdi5UcsYzSgzHrZgqw3Alv8i36vcYIRzBn8/cRo69HoqOWkjF4ohiTTo9LKkYUBga xuIvkq+M+fB6Rao42DytqqX3ebNLl8Q3cgiVKNov1QzBqXrgbsmERptWrucNb6XCjbWA W6br9eUsPd3hUAPOGjdsxtIoTWHUeeYPuMqAtpq+Dp6KVn/3JmylN993FWjbWrRW0fgD lAqFSh6g036KaMSOWfXIgFTd5dh23YcDRlMaQIZ8c5Uastf6OdYdHTP6c/el3kD4fqgA NetZGeBI3qyy/4/dWhAskJq0tyW0mybJbiE3b3m6xipgL+9Y3+gQolQytQF0YsqdQ/Ow ffhA== X-Gm-Message-State: AC+VfDy6eZuQdSiXcY/AmTOIshUTrFoNNLz2h6f9WTRpDTFBZyPOs9gr L1gfZfCcUh1W8wPyWICnoCUuTTli2y3x X-Google-Smtp-Source: ACHHUZ7R1CC0OSVS8g/0P1vzZZ3gyexPDHVj5wxcC6YMu764P99A+vF1FR2cVD8xlr3Hp979O/PgNurnppuJ X-Received: from irogers.svl.corp.google.com ([2620:15c:2d4:203:628b:7e78:d09b:39b]) (user=irogers job=sendgmr) by 2002:a05:6a00:2daa:b0:63b:8571:8109 with SMTP id fb42-20020a056a002daa00b0063b85718109mr429383pfb.3.1684335567322; Wed, 17 May 2023 07:59:27 -0700 (PDT) Date: Wed, 17 May 2023 07:58:02 -0700 In-Reply-To: <20230517145803.559429-1-irogers@google.com> Message-Id: <20230517145803.559429-23-irogers@google.com> Mime-Version: 1.0 References: <20230517145803.559429-1-irogers@google.com> X-Mailer: git-send-email 2.40.1.606.ga4b1b128d6-goog Subject: [PATCH v1 22/23] 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 , Raul Silvera , 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 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20230517_075928_564617_79785F3D X-CRM114-Status: GOOD ( 18.39 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.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 --- 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 fcd61bddffc3..331c6ad40504 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(uncore_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 : &uncore_pmus, dirfd, name); + pmu = perf_pmu__lookup(core_pmu ? &core_pmus : &uncore_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 : &uncore_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 : &uncore_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.40.1.606.ga4b1b128d6-goog _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel