From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-wm1-f43.google.com (mail-wm1-f43.google.com [209.85.128.43]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 63C2B2F3C37 for ; Mon, 30 Mar 2026 14:44:24 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.43 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774881866; cv=none; b=HYf8H/66xBh6d7BJ5CYgujX/z6ix6twJq+OgNTZaNBuqEQajnPNUFSaCIyl+2yP80PWKqnVCEF7I7cmnCAyFU2FHzGB0x5EZE/d9I3bCK2bD9yf1gO/n0sUdf57lTgZog1nTVlrd8rVVEHu59Z9LY77YvLwtbyvNWdW01tFyxNE= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774881866; c=relaxed/simple; bh=gCrCn0jqzgDlmPX6zwbnJcPde8lUj6hgZ9Pnt1vwXso=; h=Message-ID:Date:MIME-Version:Subject:To:References:Cc:From: In-Reply-To:Content-Type; b=mOST207mrpCHFtzXUpljCPi++v7BgRT9A9UQIKdjfi9VlElksfhs4yfcAYcwfDkHXbOJl0lgdJQWeA/pfA9e4SLFB1h/q6SML5xPX7U2+3c9aktjKFkRHthVj4IBLBx4B5Nkw4ESwRVgz2EIzVNtxn3M1JneI414+S/lh0FkTqQ= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org; spf=pass smtp.mailfrom=linaro.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b=UXcHrPKx; arc=none smtp.client-ip=209.85.128.43 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linaro.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b="UXcHrPKx" Received: by mail-wm1-f43.google.com with SMTP id 5b1f17b1804b1-4838c15e3cbso37562265e9.3 for ; Mon, 30 Mar 2026 07:44:24 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1774881863; x=1775486663; darn=vger.kernel.org; h=content-transfer-encoding:in-reply-to:from:cc:content-language :references:to:subject:user-agent:mime-version:date:message-id:from :to:cc:subject:date:message-id:reply-to; bh=8S8GbrJC0PV0rV1d1lJEMcJXpU04+a2ZuFS/J3C8pXs=; b=UXcHrPKxmjbvIEgX+C8JfZ40BxaKlhYuTeFv6XbbMGYiZUXQT5sVyyUM4wkJDcuRct Y65PEfJOCnCteZOW8SMlIOmvFWQXACNlmdJaouUXvGKkIItnpAncgZqx6Tba0t+kmhgJ 0i2kg1Ktnea9MKTEhGaOHSl8FC0AMpbfXlKOYysDbNLpwh3R6iCBesN2pQgvz8VnQfd3 SDs0iaTz+ME7qvmmtpn3lAXtlRYFzOBkEoj8ev7bD6syX66RoeTmI9SV2enDwLccP+k0 AurDktUs+XxPwTLASQ+2iBZFxiBU2aqyy58dhXfROkqHQaygSGjF8dWulo+e8pY5E0VC bw8Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1774881863; x=1775486663; h=content-transfer-encoding:in-reply-to:from:cc:content-language :references:to:subject:user-agent:mime-version:date:message-id :x-gm-gg:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=8S8GbrJC0PV0rV1d1lJEMcJXpU04+a2ZuFS/J3C8pXs=; b=O8xKarLYkcgQm9o6lTYQxe+dewfvcShXMoaSap4AJeoyjHOo04Szctw09Hf9IkpucV mSkT+e5akglHEvI63v0zam2j8z6PHjCJnvi8QNkNrrawAxpeu3Gz469jxj7/ehFB5O4r cWQXpxSE+3PXJ4POCbC07CL9QZgcrmIJl6dA93RqUj81jjN8ixV2vSQizswJw97thq7+ 67EBwfSaljZUB1r8QJgdORPB3DJc4+2DAY/mWcAjyVniA79XF9W0Dns4/12pJZd3HMhA 6rv0dIqQYp6cTMSbu3+wXWGgR9sMVr4d9+RBGFgWO5hhEVEv5P/bDO1mWzoTuazUFx62 hDyg== X-Forwarded-Encrypted: i=1; AJvYcCXpJ/Iy73FPmCGQS/DU2v151F3lJF2vstNH0oz18TAynw1s5od51xc5nbnSqVvIP/pbVYDAGYf2r13g8ZY=@vger.kernel.org X-Gm-Message-State: AOJu0YyHONHHPBpK2V9VKPrgyM42STL20J0EiEuQESbWZMC3RueM1J7q F2XQHyZcLinnbkgJqa3gRIc8daQXgeQbgh42YiAnQYErkKVIqOQibG/zUDBKbMnIF5w= X-Gm-Gg: ATEYQzz/DUhekM2RHts5yp+jlnQLbcH8wCM6fjg0MKmpbyq0T3Lhw6nUigWJ1SSeufR 9L9pO8k6ihZRU6n5Cpj3jHPwuKsIL+oyVcd1Kdkk3hteDQNY34j34RfdRQPRa6TZiJM1pe2Lhte KADY4gMboFPbNNIwyPcWKL/qT4BhJqbEK0m5GmMg4tTz9GwjiB+vbxrqod6ogVN2HJans32tev9 dbSsUJa0ze7Y9ELqLP4NmU4mxFazaG0+f3KwyJrI+oY65v4BTzlfdzInoZnqR3AZQFyHi0/izBC EWQNeyfEsCYNXek/uQzWB7qZW++g5VhQe/1zkVSyn7/IE6eK1fdc9lH4QUjS/1HN5IoJuT6kC+x riyfUvCkvZbFlFyN+5QgyejZk+sB3CxB44xIJ9nvBcMThK1u6NBkJ5P84c1DqfahrqIMDT0+g7J YVUY9zySlt244SgXwZ0r8lFoVJqin0ixTQ05eId1k= X-Received: by 2002:a05:600c:529b:b0:485:3ec6:e634 with SMTP id 5b1f17b1804b1-48727d84100mr199442355e9.15.1774881862629; Mon, 30 Mar 2026 07:44:22 -0700 (PDT) Received: from [192.168.1.3] ([185.48.77.170]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-48739fac087sm139524085e9.1.2026.03.30.07.44.21 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Mon, 30 Mar 2026 07:44:22 -0700 (PDT) Message-ID: Date: Mon, 30 Mar 2026 15:44:21 +0100 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH v1] perf metricgroup: Avoid scanning unnecessary PMUs for identifier match To: Ian Rogers References: <20260326224454.2101190-1-irogers@google.com> Content-Language: en-US Cc: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Namhyung Kim , Alexander Shishkin , Jiri Olsa , Adrian Hunter , Leo Yan , Thomas Falcon , linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org From: James Clark In-Reply-To: <20260326224454.2101190-1-irogers@google.com> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit On 26/03/2026 10:44 pm, Ian Rogers wrote: > Only uncore PMUs can have an identifier, so add an optimized > perf_pmus__scan routine for that case to avoid all PMU types being > created. > > Signed-off-by: Ian Rogers Reviewed-by: James Clark > --- > tools/perf/util/metricgroup.c | 8 ++------ > tools/perf/util/pmus.c | 18 +++++++++++++++++- > tools/perf/util/pmus.h | 1 + > 3 files changed, 20 insertions(+), 7 deletions(-) > > diff --git a/tools/perf/util/metricgroup.c b/tools/perf/util/metricgroup.c > index 7e39d469111b..769b38400832 100644 > --- a/tools/perf/util/metricgroup.c > +++ b/tools/perf/util/metricgroup.c > @@ -410,13 +410,9 @@ static int metricgroup__sys_event_iter(const struct pmu_metric *pm, > if (!pm->metric_expr || !pm->compat) > return 0; > > - while ((pmu = perf_pmus__scan(pmu))) { > - > - if (!pmu->id || !pmu_uncore_identifier_match(pm->compat, pmu->id)) > - continue; > - > + while ((pmu = perf_pmus__scan_for_uncore_id(pmu, pm->compat))) > return d->fn(pm, table, d->data); > - } > + > return 0; > } > > diff --git a/tools/perf/util/pmus.c b/tools/perf/util/pmus.c > index 98be2eb8f1f0..9859d7056fb7 100644 > --- a/tools/perf/util/pmus.c > +++ b/tools/perf/util/pmus.c > @@ -409,7 +409,7 @@ struct perf_pmu *perf_pmus__scan_matching_wildcard(struct perf_pmu *pmu, const c > if (!pmu) { > /* > * Core PMUs, other sysfs PMUs and tool PMU can have any name or > - * aren't wother optimizing for. > + * aren't worth optimizing for. > */ > unsigned int to_read_pmus = PERF_TOOL_PMU_TYPE_PE_CORE_MASK | > PERF_TOOL_PMU_TYPE_PE_OTHER_MASK | > @@ -486,6 +486,22 @@ static struct perf_pmu *perf_pmus__scan_skip_duplicates(struct perf_pmu *pmu) > return NULL; > } > > +struct perf_pmu *perf_pmus__scan_for_uncore_id(struct perf_pmu *pmu, const char *compat) > +{ > + if (!pmu) { > + /* Only uncore PMUs can have identifiers. */ > + unsigned int to_read_pmus = PERF_TOOL_PMU_TYPE_PE_OTHER_MASK; > + > + pmu_read_sysfs(to_read_pmus); > + pmu = list_prepare_entry(pmu, &other_pmus, list); > + } > + list_for_each_entry_continue(pmu, &other_pmus, list) { > + if (pmu->id && pmu_uncore_identifier_match(compat, pmu->id)) > + return pmu; > + } > + return NULL; > +} > + > const struct perf_pmu *perf_pmus__pmu_for_pmu_filter(const char *str) > { > struct perf_pmu *pmu = NULL; > diff --git a/tools/perf/util/pmus.h b/tools/perf/util/pmus.h > index 7cb36863711a..0d55edb3f2fc 100644 > --- a/tools/perf/util/pmus.h > +++ b/tools/perf/util/pmus.h > @@ -23,6 +23,7 @@ struct perf_pmu *perf_pmus__scan(struct perf_pmu *pmu); > struct perf_pmu *perf_pmus__scan_core(struct perf_pmu *pmu); > struct perf_pmu *perf_pmus__scan_for_event(struct perf_pmu *pmu, const char *event); > struct perf_pmu *perf_pmus__scan_matching_wildcard(struct perf_pmu *pmu, const char *wildcard); > +struct perf_pmu *perf_pmus__scan_for_uncore_id(struct perf_pmu *pmu, const char *compat); > > const struct perf_pmu *perf_pmus__pmu_for_pmu_filter(const char *str); >