From nobody Sat Feb 7 09:20:46 2026 Received: from mail-dy1-f202.google.com (mail-dy1-f202.google.com [74.125.82.202]) (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 B7F3B1DE3A4 for ; Tue, 27 Jan 2026 18:45:28 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.82.202 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769539530; cv=none; b=OPtYlW3hgX1Conn2QBQs+sBgp7pGLu4L7M4Q+NpS6g7yRLpCc/OAQK4+xMZFT0xuZbxVwcP946hUYgVqOCO6Mw2TCWxyho7ZXkZmOhP2AohyHPhC+AmoIviwujKay54QwWHpwlLlcxPb28iVOBBDRxQSLynXOnmynJtSTHQ23mE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769539530; c=relaxed/simple; bh=LWyXHg1/6L2/WGjiMiMdFwDJJPEHEzKOc78/gRx7f0o=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=ZdbB0Wf63RavcuDXL3gRzpgh49W/yNMv5uQ7RQoxO5Y2CmODBVS9Q1dveXBf8mF0C7Ti04HPbMDamNeZ1ZO+j3MD+pKr9PhvodCLf9n/rHO0GWTR7Yk3DQRFpX0JuCeEu1ixwQlOZhCQuzEdzL0wvC5RgN4V7ApqjGjfGAzf+Us= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--irogers.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=j+L5eka6; arc=none smtp.client-ip=74.125.82.202 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--irogers.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="j+L5eka6" Received: by mail-dy1-f202.google.com with SMTP id 5a478bee46e88-2b70d8095daso5753451eec.1 for ; Tue, 27 Jan 2026 10:45:28 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1769539528; x=1770144328; darn=vger.kernel.org; h=to:from:subject:message-id:references:mime-version:in-reply-to:date :from:to:cc:subject:date:message-id:reply-to; bh=JwmGp6g/MKzw6N7iSeG1R53h0Yy2ZWPAUIOjpExNYSY=; b=j+L5eka6L56jS5/veXJulwQyrvOQwLhISCq9vHpMnRLcrqB2w5CeEpZnBzHMFC3a2K jO+1Kx0tLriPUlVfRccVotguuG3Zs8PPHNW6Oq1C93S6su3wxDykVvoJwZG0TX+g+LFt LOTJhUOvvs47ZlonEVmzeekMunKzLLc8VwdCjaYiTQEea7LcW7eNK2WacO595fNr47nS TpTJgwZtdNXxIND0GuIO9MpHUgMjS/h2r4Ewvk0hRz+H6qAcAmpZU64ceLgGvURQm+Zf 5DIRnekJvZ3bOXKvgMHlwKr1oxAtBXV8h6ZkhWbFUxXFxLfl7CZ0pxRKPdctOrdjNPwq h/Cg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1769539528; x=1770144328; h=to:from:subject:message-id:references:mime-version:in-reply-to:date :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=JwmGp6g/MKzw6N7iSeG1R53h0Yy2ZWPAUIOjpExNYSY=; b=eRt63StmxD40RqtPGYdDfeIea6Lptf67yNB67gg7pojgjzOu1wOlJK/CPulQsfX/Ai CrJqKg9oaptCJZIA+RIng70Ar8DVqE3EIes08cLKveAsNsDZsv8mGJCQwtYmV88nuan7 YhXRAdRrk5TaBnKXdBjxLXGL5FHIqPE2M/kTfC0DMC5rzpxXwuh6lbyYR6W2oXVCI8r2 W6OeO6b6uw1p5IDPvAq7FLqZE30+lqvv3fRENibudr8FzoaZHS7gQUnxjmnEMGxv4DB/ zwzQ99s2wbsshet+vAExTpap3CHC8RPGgXoqQUn+PlUW1vgzyHJQC7VhhZwcfwEgb30l ugeQ== X-Forwarded-Encrypted: i=1; AJvYcCVvQ7k8UNUOc+qBpCB1mKW709S/mK0q8hdhC96Ieez525SgzD9tEED+jTa2lGhG9X5hvVw3ZqC9n/Xz/qE=@vger.kernel.org X-Gm-Message-State: AOJu0YzSOa0t384zmlesZX9PtM3yVJpShwG6K9Iip53iVF5WVo9ywSkS IgLKm2Y9qR8qzz4LYBZfzKaIEUpR7C4i1ZoXR3Z+O8jQXa/m/fcOQhtaiv7Bz896K+CUs6x7hiI dAKSBFbAc0w== X-Received: from dybkl23.prod.google.com ([2002:a05:7301:d17:b0:2b6:b833:a98d]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a05:7300:8605:b0:2b7:2a17:af32 with SMTP id 5a478bee46e88-2b78da04efbmr1735066eec.27.1769539527890; Tue, 27 Jan 2026 10:45:27 -0800 (PST) Date: Tue, 27 Jan 2026 10:44:32 -0800 In-Reply-To: <20260127184506.3059493-1-irogers@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260127184506.3059493-1-irogers@google.com> X-Mailer: git-send-email 2.52.0.457.g6b5491de43-goog Message-ID: <20260127184506.3059493-2-irogers@google.com> Subject: [PATCH v11 01/35] perf jevents: Build support for generating metrics from python From: Ian Rogers To: Adrian Hunter , Alexander Shishkin , Arnaldo Carvalho de Melo , Benjamin Gray , Caleb Biggers , Edward Baker , Ian Rogers , Ingo Molnar , James Clark , Jing Zhang , Jiri Olsa , John Garry , Leo Yan , Namhyung Kim , Perry Taylor , Peter Zijlstra , Sandipan Das , Thomas Falcon , Weilin Wang , Xu Yang , linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Generate extra-metrics.json and extra-metricgroups.json from python architecture specific scripts. The metrics themselves will be added in later patches. If a build takes place in tools/perf/ then extra-metrics.json and extra-metricgroups.json are generated in that directory and so added to .gitignore. If there is an OUTPUT directory then the tools/perf/pmu-events/arch files are copied to it so the generated extra-metrics.json and extra-metricgroups.json can be added/generated there. Tested-by: Thomas Falcon Signed-off-by: Ian Rogers --- tools/perf/.gitignore | 5 +++ tools/perf/Makefile.perf | 2 + tools/perf/pmu-events/Build | 51 +++++++++++++++++++++++++- tools/perf/pmu-events/amd_metrics.py | 42 +++++++++++++++++++++ tools/perf/pmu-events/arm64_metrics.py | 43 ++++++++++++++++++++++ tools/perf/pmu-events/intel_metrics.py | 42 +++++++++++++++++++++ 6 files changed, 184 insertions(+), 1 deletion(-) create mode 100755 tools/perf/pmu-events/amd_metrics.py create mode 100755 tools/perf/pmu-events/arm64_metrics.py create mode 100755 tools/perf/pmu-events/intel_metrics.py diff --git a/tools/perf/.gitignore b/tools/perf/.gitignore index 5c59f954f52a..0f9451a6e39c 100644 --- a/tools/perf/.gitignore +++ b/tools/perf/.gitignore @@ -43,6 +43,11 @@ pmu-events/metric_test.log pmu-events/empty-pmu-events.log pmu-events/test-empty-pmu-events.c *.shellcheck_log +pmu-events/arch/**/extra-metrics.json +pmu-events/arch/**/extra-metricgroups.json +tests/shell/*.shellcheck_log +tests/shell/coresight/*.shellcheck_log +tests/shell/lib/*.shellcheck_log feature/ libapi/ libbpf/ diff --git a/tools/perf/Makefile.perf b/tools/perf/Makefile.perf index 45d5a59a02cb..b6edc8100c8e 100644 --- a/tools/perf/Makefile.perf +++ b/tools/perf/Makefile.perf @@ -1273,6 +1273,8 @@ ifeq ($(OUTPUT),) pmu-events/metric_test.log \ pmu-events/test-empty-pmu-events.c \ pmu-events/empty-pmu-events.log + $(Q)find pmu-events/arch -name 'extra-metrics.json' -delete -o \ + -name 'extra-metricgroups.json' -delete else # When an OUTPUT directory is present, clean up the copied pmu-events= /arch directory. $(call QUIET_CLEAN, pmu-events) $(RM) -r $(OUTPUT)pmu-events/arch \ $(OUTPUT)pmu-events/pmu-events.c \ diff --git a/tools/perf/pmu-events/Build b/tools/perf/pmu-events/Build index a46ab7b612df..3f2b26e5c6d5 100644 --- a/tools/perf/pmu-events/Build +++ b/tools/perf/pmu-events/Build @@ -29,6 +29,10 @@ $(PMU_EVENTS_C): $(EMPTY_PMU_EVENTS_C) $(call rule_mkdir) $(Q)$(call echo-cmd,gen)cp $< $@ else +# Functions to extract the model from a extra-metrics.json or extra-metric= groups.json path. +model_name =3D $(shell echo $(1)|sed -e 's@.\+/\(.*\)/extra-metric.*\.json= @\1@') +vendor_name =3D $(shell echo $(1)|sed -e 's@.\+/\(.*\)/[^/]*/extra-metric.= *\.json@\1@') + # Copy checked-in json to OUTPUT for generation if it's an out of source b= uild ifneq ($(OUTPUT),) $(OUTPUT)pmu-events/arch/%: pmu-events/arch/% @@ -40,7 +44,52 @@ $(LEGACY_CACHE_JSON): $(LEGACY_CACHE_PY) $(call rule_mkdir) $(Q)$(call echo-cmd,gen)$(PYTHON) $(LEGACY_CACHE_PY) > $@ =20 -GEN_JSON =3D $(patsubst %,$(OUTPUT)%,$(JSON)) $(LEGACY_CACHE_JSON) +GEN_METRIC_DEPS :=3D pmu-events/metric.py + +# Generate AMD Json +ZENS =3D $(shell ls -d pmu-events/arch/x86/amdzen*) +ZEN_METRICS =3D $(foreach x,$(ZENS),$(OUTPUT)$(x)/extra-metrics.json) +ZEN_METRICGROUPS =3D $(foreach x,$(ZENS),$(OUTPUT)$(x)/extra-metricgroups.= json) + +$(ZEN_METRICS): pmu-events/amd_metrics.py $(GEN_METRIC_DEPS) + $(call rule_mkdir) + $(Q)$(call echo-cmd,gen)$(PYTHON) $< $(call model_name,$@) arch > $@ + +$(ZEN_METRICGROUPS): pmu-events/amd_metrics.py $(GEN_METRIC_DEPS) + $(call rule_mkdir) + $(Q)$(call echo-cmd,gen)$(PYTHON) $< -metricgroups $(call model_name,$@) = arch > $@ + +# Generate ARM Json +ARMS =3D $(shell ls -d pmu-events/arch/arm64/arm/*|grep -v cmn) +ARM_METRICS =3D $(foreach x,$(ARMS),$(OUTPUT)$(x)/extra-metrics.json) +ARM_METRICGROUPS =3D $(foreach x,$(ARMS),$(OUTPUT)$(x)/extra-metricgroups.= json) + +$(ARM_METRICS): pmu-events/arm64_metrics.py $(GEN_METRIC_DEPS) + $(call rule_mkdir) + $(Q)$(call echo-cmd,gen)$(PYTHON) $< $(call vendor_name,$@) $(call model_= name,$@) arch > $@ + +$(ARM_METRICGROUPS): pmu-events/arm64_metrics.py $(GEN_METRIC_DEPS) + $(call rule_mkdir) + $(Q)$(call echo-cmd,gen)$(PYTHON) $< -metricgroups $(call vendor_name,$@)= $(call model_name,$@) arch > $@ + +# Generate Intel Json +INTELS =3D $(shell ls -d pmu-events/arch/x86/*|grep -v amdzen|grep -v mapf= ile.csv) +INTEL_METRICS =3D $(foreach x,$(INTELS),$(OUTPUT)$(x)/extra-metrics.json) +INTEL_METRICGROUPS =3D $(foreach x,$(INTELS),$(OUTPUT)$(x)/extra-metricgro= ups.json) + +$(INTEL_METRICS): pmu-events/intel_metrics.py $(GEN_METRIC_DEPS) + $(call rule_mkdir) + $(Q)$(call echo-cmd,gen)$(PYTHON) $< $(call model_name,$@) arch > $@ + +$(INTEL_METRICGROUPS): pmu-events/intel_metrics.py $(GEN_METRIC_DEPS) + $(call rule_mkdir) + $(Q)$(call echo-cmd,gen)$(PYTHON) $< -metricgroups $(call model_name,$@) = arch > $@ + +GEN_JSON =3D $(patsubst %,$(OUTPUT)%,$(JSON)) \ + $(LEGACY_CACHE_JSON) \ + $(ZEN_METRICS) $(ZEN_METRICGROUPS) \ + $(ARM_METRICS) $(ARM_METRICGROUPS) \ + $(INTEL_METRICS) $(INTEL_METRICGROUPS) =20 $(METRIC_TEST_LOG): $(METRIC_TEST_PY) $(METRIC_PY) $(call rule_mkdir) diff --git a/tools/perf/pmu-events/amd_metrics.py b/tools/perf/pmu-events/a= md_metrics.py new file mode 100755 index 000000000000..5f44687d8d20 --- /dev/null +++ b/tools/perf/pmu-events/amd_metrics.py @@ -0,0 +1,42 @@ +#!/usr/bin/env python3 +# SPDX-License-Identifier: (LGPL-2.1 OR BSD-2-Clause) +import argparse +import os +from metric import ( + JsonEncodeMetric, JsonEncodeMetricGroupDescriptions, MetricGroup) + +# Global command line arguments. +_args =3D None + + +def main() -> None: + global _args + + def dir_path(path: str) -> str: + """Validate path is a directory for argparse.""" + if os.path.isdir(path): + return path + raise argparse.ArgumentTypeError( + f'\'{path}\' is not a valid directory') + + parser =3D argparse.ArgumentParser(description=3D"AMD perf json genera= tor") + parser.add_argument( + "-metricgroups", help=3D"Generate metricgroups data", action=3D'st= ore_true') + parser.add_argument("model", help=3D"e.g. amdzen[123]") + parser.add_argument( + 'events_path', + type=3Ddir_path, + help=3D'Root of tree containing architecture directories containin= g json files' + ) + _args =3D parser.parse_args() + + all_metrics =3D MetricGroup("", []) + + if _args.metricgroups: + print(JsonEncodeMetricGroupDescriptions(all_metrics)) + else: + print(JsonEncodeMetric(all_metrics)) + + +if __name__ =3D=3D '__main__': + main() diff --git a/tools/perf/pmu-events/arm64_metrics.py b/tools/perf/pmu-events= /arm64_metrics.py new file mode 100755 index 000000000000..204b3b08c680 --- /dev/null +++ b/tools/perf/pmu-events/arm64_metrics.py @@ -0,0 +1,43 @@ +#!/usr/bin/env python3 +# SPDX-License-Identifier: (LGPL-2.1 OR BSD-2-Clause) +import argparse +import os +from metric import ( + JsonEncodeMetric, JsonEncodeMetricGroupDescriptions, MetricGroup) + +# Global command line arguments. +_args =3D None + + +def main() -> None: + global _args + + def dir_path(path: str) -> str: + """Validate path is a directory for argparse.""" + if os.path.isdir(path): + return path + raise argparse.ArgumentTypeError( + f'\'{path}\' is not a valid directory') + + parser =3D argparse.ArgumentParser(description=3D"ARM perf json genera= tor") + parser.add_argument( + "-metricgroups", help=3D"Generate metricgroups data", action=3D'st= ore_true') + parser.add_argument("vendor", help=3D"e.g. arm") + parser.add_argument("model", help=3D"e.g. neoverse-n1") + parser.add_argument( + 'events_path', + type=3Ddir_path, + help=3D'Root of tree containing architecture directories containin= g json files' + ) + _args =3D parser.parse_args() + + all_metrics =3D MetricGroup("", []) + + if _args.metricgroups: + print(JsonEncodeMetricGroupDescriptions(all_metrics)) + else: + print(JsonEncodeMetric(all_metrics)) + + +if __name__ =3D=3D '__main__': + main() diff --git a/tools/perf/pmu-events/intel_metrics.py b/tools/perf/pmu-events= /intel_metrics.py new file mode 100755 index 000000000000..65ada006d05a --- /dev/null +++ b/tools/perf/pmu-events/intel_metrics.py @@ -0,0 +1,42 @@ +#!/usr/bin/env python3 +# SPDX-License-Identifier: (LGPL-2.1 OR BSD-2-Clause) +import argparse +import os +from metric import ( + JsonEncodeMetric, JsonEncodeMetricGroupDescriptions, MetricGroup) + +# Global command line arguments. +_args =3D None + + +def main() -> None: + global _args + + def dir_path(path: str) -> str: + """Validate path is a directory for argparse.""" + if os.path.isdir(path): + return path + raise argparse.ArgumentTypeError( + f'\'{path}\' is not a valid directory') + + parser =3D argparse.ArgumentParser(description=3D"Intel perf json gene= rator") + parser.add_argument( + "-metricgroups", help=3D"Generate metricgroups data", action=3D'st= ore_true') + parser.add_argument("model", help=3D"e.g. skylakex") + parser.add_argument( + 'events_path', + type=3Ddir_path, + help=3D'Root of tree containing architecture directories containin= g json files' + ) + _args =3D parser.parse_args() + + all_metrics =3D MetricGroup("", []) + + if _args.metricgroups: + print(JsonEncodeMetricGroupDescriptions(all_metrics)) + else: + print(JsonEncodeMetric(all_metrics)) + + +if __name__ =3D=3D '__main__': + main() --=20 2.52.0.457.g6b5491de43-goog From nobody Sat Feb 7 09:20:46 2026 Received: from mail-dl1-f73.google.com (mail-dl1-f73.google.com [74.125.82.73]) (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 BE600328B70 for ; Tue, 27 Jan 2026 18:45:30 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.82.73 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769539532; cv=none; b=X6fE9puEVoau+it0CjXW0QwNuEuSreVLNfTEcA+Npq86FSMyi8F/xQg6iXk50U6TSk96jKZiB6fIa/BbuFgwC7EZ0JD6QoSwYueiycv1JK/Sutst7HS7AxCKJqv+luUVRm2drbVgoI7UgkPFFfqY9N615EarcG2j8/FBBiMA8FE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769539532; c=relaxed/simple; bh=1vZESDUQIUEjDxJVh7J4k16LRLOQkyT8gAwiI0WIf9s=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=eyZ/Odk6PyDHkKQ6ml+GEAmA1yIo5JXGTwj1QobqNgorhg2KC5A3DpF3481nwKR8Hb/aE+zVLKGUA5sIhpInSIg4HN9Rf5K3TY3z5hn9sY3KXYxiQ4X6hgerZ7f+mYBfZJJoUuw6sfHujL0XuQBviT/TsIdqyNudNWWk4D99Z+g= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--irogers.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=dbLRp1AS; arc=none smtp.client-ip=74.125.82.73 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--irogers.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="dbLRp1AS" Received: by mail-dl1-f73.google.com with SMTP id a92af1059eb24-124a2d3d1b7so935667c88.0 for ; Tue, 27 Jan 2026 10:45:30 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1769539530; x=1770144330; darn=vger.kernel.org; h=to:from:subject:message-id:references:mime-version:in-reply-to:date :from:to:cc:subject:date:message-id:reply-to; bh=7nf5yOpaWFgwkL2L53uXTvwWf0qlTtHzBTCtpqyJsvQ=; b=dbLRp1AS44R9LBN8JGvLDVKt6MUBJQnEzsGaVZRsrE6sg3WGShHVniNZbOY1qzDmgu Prq58DQ1icoZdXLu6Ge5V7Mc29M0jApjLsuM0VwxTbbKeeNYYhwn0F3WAeJWJbI1kI3Q o9xZQrztLoaIMW+6W5XT9jyKhLQMKterjK4zip9tNAVQrqoNbYtZKm9hb8iXm1d8lV0u ZIU18W/QKszEtvjyKkVQXU2TdhJiWdkJzzJD86y152uK8KRpHNQCPY7a1zqfB8+zOJIt PWc5lnpxh9Yt29DLcIfceYQZi72QVhrgjriVPE3H8DzISy7vfxYZQnI77AifptWycF0g KuHQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1769539530; x=1770144330; h=to:from:subject:message-id:references:mime-version:in-reply-to:date :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=7nf5yOpaWFgwkL2L53uXTvwWf0qlTtHzBTCtpqyJsvQ=; b=kXRoMO18S4Z2yXX/ZlBWS8M2nc+SRVJEvdq9PMLSL9W5bzkM8hHCQ6DgLuy9MLb8G3 oWhdrD8Iw0wQNJmjV1PvzLZcLcgnvBFTdyyJ0xN/v+aU7nSFAxyPpBna92itnE1R3A7H zs7EoHpKj0E+YWR5mArP+PPj+5ym+N4C7YwTugL83Dt5PYRjwlFMQ07f78K10cflOmXm 2HtLKkP3dbNbMIXBHsQzjDd8Q2Mj1f0ovTDydx/HLKes9FgLSPAV9jXuUB05vu4UgH/w om/5cw4rHAXSliWphjMq+V/p+1LJhI6m1ek4AYfHP5PyFSHJThGUkcxZmZSsi+e4OXN6 h98g== X-Forwarded-Encrypted: i=1; AJvYcCVSvsFRCMWR0EaFn5XGjljr6vcp4K3DLW+jkMZ6b2bkLp4VRO6XE6VsfWlb5J9rLPWvMcHKY+0oapqmLaQ=@vger.kernel.org X-Gm-Message-State: AOJu0YxIbBLhZ9GKkC3NDQaLWOgXprRUG85RiPLFcVEXTbZM5yIi4n0m F+XCfrN2DZo7OdWUDgQOCy+PhqWCfU/99RclfPeL8YnIL0G12ZSb3gK4Pvci9PA12ofOEvoR/J0 ankGu0fTs3g== X-Received: from dlii13.prod.google.com ([2002:a05:7022:418d:b0:121:7afb:490]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a05:7022:6b94:b0:123:3488:8969 with SMTP id a92af1059eb24-124a00e576bmr1587671c88.45.1769539529822; Tue, 27 Jan 2026 10:45:29 -0800 (PST) Date: Tue, 27 Jan 2026 10:44:33 -0800 In-Reply-To: <20260127184506.3059493-1-irogers@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260127184506.3059493-1-irogers@google.com> X-Mailer: git-send-email 2.52.0.457.g6b5491de43-goog Message-ID: <20260127184506.3059493-3-irogers@google.com> Subject: [PATCH v11 02/35] perf jevents: Add load event json to verify and allow fallbacks From: Ian Rogers To: Adrian Hunter , Alexander Shishkin , Arnaldo Carvalho de Melo , Benjamin Gray , Caleb Biggers , Edward Baker , Ian Rogers , Ingo Molnar , James Clark , Jing Zhang , Jiri Olsa , John Garry , Leo Yan , Namhyung Kim , Perry Taylor , Peter Zijlstra , Sandipan Das , Thomas Falcon , Weilin Wang , Xu Yang , linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Add a LoadEvents function that loads all event json files in a directory. In the Event constructor ensure all events are defined in the event json except for legacy events like "cycles". If the initial event isn't found then legacy_event1 is used, and if that isn't found legacy_event2 is used. This allows a single Event to have multiple event names as models will often rename the same event over time. If the event doesn't exist an exception is raised. So that references to metrics can be added, add the MetricRef class. This doesn't validate as an event name and so provides an escape hatch for metrics to refer to each other. Tested-by: Thomas Falcon Signed-off-by: Ian Rogers --- tools/perf/pmu-events/Build | 12 ++-- tools/perf/pmu-events/amd_metrics.py | 7 ++- tools/perf/pmu-events/arm64_metrics.py | 7 ++- tools/perf/pmu-events/intel_metrics.py | 7 ++- tools/perf/pmu-events/metric.py | 83 +++++++++++++++++++++++++- 5 files changed, 101 insertions(+), 15 deletions(-) diff --git a/tools/perf/pmu-events/Build b/tools/perf/pmu-events/Build index 3f2b26e5c6d5..4878d922a732 100644 --- a/tools/perf/pmu-events/Build +++ b/tools/perf/pmu-events/Build @@ -53,11 +53,11 @@ ZEN_METRICGROUPS =3D $(foreach x,$(ZENS),$(OUTPUT)$(x)/= extra-metricgroups.json) =20 $(ZEN_METRICS): pmu-events/amd_metrics.py $(GEN_METRIC_DEPS) $(call rule_mkdir) - $(Q)$(call echo-cmd,gen)$(PYTHON) $< $(call model_name,$@) arch > $@ + $(Q)$(call echo-cmd,gen)$(PYTHON) $< $(call model_name,$@) pmu-events/arc= h > $@ =20 $(ZEN_METRICGROUPS): pmu-events/amd_metrics.py $(GEN_METRIC_DEPS) $(call rule_mkdir) - $(Q)$(call echo-cmd,gen)$(PYTHON) $< -metricgroups $(call model_name,$@) = arch > $@ + $(Q)$(call echo-cmd,gen)$(PYTHON) $< -metricgroups $(call model_name,$@) = pmu-events/arch > $@ =20 # Generate ARM Json ARMS =3D $(shell ls -d pmu-events/arch/arm64/arm/*|grep -v cmn) @@ -66,11 +66,11 @@ ARM_METRICGROUPS =3D $(foreach x,$(ARMS),$(OUTPUT)$(x)/= extra-metricgroups.json) =20 $(ARM_METRICS): pmu-events/arm64_metrics.py $(GEN_METRIC_DEPS) $(call rule_mkdir) - $(Q)$(call echo-cmd,gen)$(PYTHON) $< $(call vendor_name,$@) $(call model_= name,$@) arch > $@ + $(Q)$(call echo-cmd,gen)$(PYTHON) $< $(call vendor_name,$@) $(call model_= name,$@) pmu-events/arch > $@ =20 $(ARM_METRICGROUPS): pmu-events/arm64_metrics.py $(GEN_METRIC_DEPS) $(call rule_mkdir) - $(Q)$(call echo-cmd,gen)$(PYTHON) $< -metricgroups $(call vendor_name,$@)= $(call model_name,$@) arch > $@ + $(Q)$(call echo-cmd,gen)$(PYTHON) $< -metricgroups $(call vendor_name,$@)= $(call model_name,$@) pmu-events/arch > $@ =20 # Generate Intel Json INTELS =3D $(shell ls -d pmu-events/arch/x86/*|grep -v amdzen|grep -v mapf= ile.csv) @@ -79,11 +79,11 @@ INTEL_METRICGROUPS =3D $(foreach x,$(INTELS),$(OUTPUT)$= (x)/extra-metricgroups.json =20 $(INTEL_METRICS): pmu-events/intel_metrics.py $(GEN_METRIC_DEPS) $(call rule_mkdir) - $(Q)$(call echo-cmd,gen)$(PYTHON) $< $(call model_name,$@) arch > $@ + $(Q)$(call echo-cmd,gen)$(PYTHON) $< $(call model_name,$@) pmu-events/arc= h > $@ =20 $(INTEL_METRICGROUPS): pmu-events/intel_metrics.py $(GEN_METRIC_DEPS) $(call rule_mkdir) - $(Q)$(call echo-cmd,gen)$(PYTHON) $< -metricgroups $(call model_name,$@) = arch > $@ + $(Q)$(call echo-cmd,gen)$(PYTHON) $< -metricgroups $(call model_name,$@) = pmu-events/arch > $@ =20 GEN_JSON =3D $(patsubst %,$(OUTPUT)%,$(JSON)) \ $(LEGACY_CACHE_JSON) \ diff --git a/tools/perf/pmu-events/amd_metrics.py b/tools/perf/pmu-events/a= md_metrics.py index 5f44687d8d20..bc91d9c120fa 100755 --- a/tools/perf/pmu-events/amd_metrics.py +++ b/tools/perf/pmu-events/amd_metrics.py @@ -2,8 +2,8 @@ # SPDX-License-Identifier: (LGPL-2.1 OR BSD-2-Clause) import argparse import os -from metric import ( - JsonEncodeMetric, JsonEncodeMetricGroupDescriptions, MetricGroup) +from metric import (JsonEncodeMetric, JsonEncodeMetricGroupDescriptions, L= oadEvents, + MetricGroup) =20 # Global command line arguments. _args =3D None @@ -30,6 +30,9 @@ def main() -> None: ) _args =3D parser.parse_args() =20 + directory =3D f"{_args.events_path}/x86/{_args.model}/" + LoadEvents(directory) + all_metrics =3D MetricGroup("", []) =20 if _args.metricgroups: diff --git a/tools/perf/pmu-events/arm64_metrics.py b/tools/perf/pmu-events= /arm64_metrics.py index 204b3b08c680..ac717ca3513a 100755 --- a/tools/perf/pmu-events/arm64_metrics.py +++ b/tools/perf/pmu-events/arm64_metrics.py @@ -2,8 +2,8 @@ # SPDX-License-Identifier: (LGPL-2.1 OR BSD-2-Clause) import argparse import os -from metric import ( - JsonEncodeMetric, JsonEncodeMetricGroupDescriptions, MetricGroup) +from metric import (JsonEncodeMetric, JsonEncodeMetricGroupDescriptions, L= oadEvents, + MetricGroup) =20 # Global command line arguments. _args =3D None @@ -31,6 +31,9 @@ def main() -> None: ) _args =3D parser.parse_args() =20 + directory =3D f"{_args.events_path}/arm64/{_args.vendor}/{_args.model}= /" + LoadEvents(directory) + all_metrics =3D MetricGroup("", []) =20 if _args.metricgroups: diff --git a/tools/perf/pmu-events/intel_metrics.py b/tools/perf/pmu-events= /intel_metrics.py index 65ada006d05a..b287ef115193 100755 --- a/tools/perf/pmu-events/intel_metrics.py +++ b/tools/perf/pmu-events/intel_metrics.py @@ -2,8 +2,8 @@ # SPDX-License-Identifier: (LGPL-2.1 OR BSD-2-Clause) import argparse import os -from metric import ( - JsonEncodeMetric, JsonEncodeMetricGroupDescriptions, MetricGroup) +from metric import (JsonEncodeMetric, JsonEncodeMetricGroupDescriptions, L= oadEvents, + MetricGroup) =20 # Global command line arguments. _args =3D None @@ -30,6 +30,9 @@ def main() -> None: ) _args =3D parser.parse_args() =20 + directory =3D f"{_args.events_path}/x86/{_args.model}/" + LoadEvents(directory) + all_metrics =3D MetricGroup("", []) =20 if _args.metricgroups: diff --git a/tools/perf/pmu-events/metric.py b/tools/perf/pmu-events/metric= .py index dd8fd06940e6..e33e163b2815 100644 --- a/tools/perf/pmu-events/metric.py +++ b/tools/perf/pmu-events/metric.py @@ -3,10 +3,56 @@ import ast import decimal import json +import os import re from enum import Enum from typing import Dict, List, Optional, Set, Tuple, Union =20 +all_events =3D set() + +def LoadEvents(directory: str) -> None: + """Populate a global set of all known events for the purpose of validati= ng Event names""" + global all_events + all_events =3D { + "context\\-switches", + "cpu\\-cycles", + "cycles", + "duration_time", + "instructions", + "l2_itlb_misses", + } + for file in os.listdir(os.fsencode(directory)): + filename =3D os.fsdecode(file) + if filename.endswith(".json"): + try: + for x in json.load(open(f"{directory}/{filename}")): + if "EventName" in x: + all_events.add(x["EventName"]) + elif "ArchStdEvent" in x: + all_events.add(x["ArchStdEvent"]) + except json.decoder.JSONDecodeError: + # The generated directory may be the same as the input, which + # causes partial json files. Ignore errors. + pass + + +def CheckEvent(name: str) -> bool: + """Check the event name exists in the set of all loaded events""" + global all_events + if len(all_events) =3D=3D 0: + # No events loaded so assume any event is good. + return True + + if ':' in name: + # Remove trailing modifier. + name =3D name[:name.find(':')] + elif '/' in name: + # Name could begin with a PMU or an event, for now assume it is good. + return True + + return name in all_events + + class MetricConstraint(Enum): GROUPED_EVENTS =3D 0 NO_GROUP_EVENTS =3D 1 @@ -317,9 +363,18 @@ def _FixEscapes(s: str) -> str: class Event(Expression): """An event in an expression.""" =20 - def __init__(self, name: str, legacy_name: str =3D ''): - self.name =3D _FixEscapes(name) - self.legacy_name =3D _FixEscapes(legacy_name) + def __init__(self, *args: str): + error =3D "" + for name in args: + if CheckEvent(name): + self.name =3D _FixEscapes(name) + return + if error: + error +=3D " or " + name + else: + error =3D name + global all_events + raise Exception(f"No event {error} in:\n{all_events}") =20 def ToPerfJson(self): result =3D re.sub('/', '@', self.name) @@ -338,6 +393,28 @@ class Event(Expression): return self =20 =20 +class MetricRef(Expression): + """A metric reference in an expression.""" + + def __init__(self, name: str): + self.name =3D _FixEscapes(name) + + def ToPerfJson(self): + return self.name + + def ToPython(self): + return f'MetricRef(r"{self.name}")' + + def Simplify(self) -> Expression: + return self + + def Equals(self, other: Expression) -> bool: + return isinstance(other, MetricRef) and self.name =3D=3D other.name + + def Substitute(self, name: str, expression: Expression) -> Expression: + return self + + class Constant(Expression): """A constant within the expression tree.""" =20 --=20 2.52.0.457.g6b5491de43-goog From nobody Sat Feb 7 09:20:46 2026 Received: from mail-dy1-f201.google.com (mail-dy1-f201.google.com [74.125.82.201]) (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 9450132AAC0 for ; Tue, 27 Jan 2026 18:45:32 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.82.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769539534; cv=none; b=XLoB3C4eRYF76HBLqX7lrIe85tZBVzH4HUjatEaiNET/+JGVf/EXqgBkt/YUQzskRvWZ0EdV5bC2BJajcD2DmTw0Oyk1rJdC4LXS6g6wIoZQyKbW227D8qsKsCjWBhmEVf5cY7vM823nPxwGu71VqSxmTOyYWNGWKW6XwaOSTfc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769539534; c=relaxed/simple; bh=3dzH9klhwyq4bIO5RZyfc4K/bXsuFAcPH6T9odgWY5E=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=hlsSIo8f1yk3g9WxL0ZF0mG8i/aVXOg7/dJpn7JTe33F5Y4G2jMtox3A5PeLUdjBShF1IPVsyphhVThEO9ULmqW3VHstNMz08eNN7r7GvIWRgdsSHOyx5pZ2PvxwNBREb3FtbY6MWAysJUQIz7YaZzRGPtXqdv5FgduF9NW36s0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--irogers.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=CSKC6wjN; arc=none smtp.client-ip=74.125.82.201 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--irogers.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="CSKC6wjN" Received: by mail-dy1-f201.google.com with SMTP id 5a478bee46e88-2b72b6fc371so4681778eec.0 for ; Tue, 27 Jan 2026 10:45:32 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1769539532; x=1770144332; darn=vger.kernel.org; h=to:from:subject:message-id:references:mime-version:in-reply-to:date :from:to:cc:subject:date:message-id:reply-to; bh=yVpNkInAkg5hK1ZT/Ec1Y6M//ts4yyfB9sxqK5ohOKU=; b=CSKC6wjNaU5PWr9Ys50aKWyBT4xMrkouEKDetTIEtOndcyL4PV9HKfSzezlTNhdR5Y k1cu8r1+AL9lphcLa89PYEQCa71c3NGjK85gvwpJ2+RhYMxbapBwfm5WXrxBNK0cQtIk H00JQdXZwqJjKtV8+2DtsdWuteN3drRcrkyy6cVAzQvciYyR81tOm8s6IzgApacMziIq 7oNIREdARUNs8ju+BEHWlQsit3+oRXUr4bX8nY2nqWKfWLBregE3BjPJuWQj+8uW0rg4 5xY6d2Vpk1RImmVeVz4BHO4sCc16caU/UciN8jJgPEUDOy6PR2yyUHPZRkuvRytcG/Rq CExg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1769539532; x=1770144332; h=to:from:subject:message-id:references:mime-version:in-reply-to:date :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=yVpNkInAkg5hK1ZT/Ec1Y6M//ts4yyfB9sxqK5ohOKU=; b=rElv68CPw3CmDpdO9rJxneTkNCcUPMi4IWtynYXjbWP+hPZjhRNBZivFdNmJSs+cCy 27IyGBdVKROZaayufa9MnNw8ICYgq0R8TSN0PT132Kpyh8JDqbUyRN0eFgM6dUJgNsVS BJGCkRduQT04c5ByIhsvv45xUJqFakA7RsqvJSNcLqGoVUhOmBNy57T4OrfMQ8FxCF2X va3C5aVm1MGnJAMdbJn+CribU6Fm7fnG2ZaSGHi5TggdKo0NNuEe06AbePxQah1ecxUS p9j4yZOUCfxW1XjvATR3RoO6lihrKGlqxkrks5fSxex7hARAyMysO0TVt3saA9iYUDPV nIzQ== X-Forwarded-Encrypted: i=1; AJvYcCUOW7+/LxfKTelzTOliPSZ8tujf1LDYy2HkQn18cg/CoCk+KLJmO5LRH/UXBifiCAMs4P2T9Ew23ZRGD0s=@vger.kernel.org X-Gm-Message-State: AOJu0Yw1cMpfyWj2LdKNbvM1VLSeCGQ5oKCQjtyeeAFVj3ON4UDT2NX9 KNIQ2JJ0gcmojD0WmXbYUp4Y2NxI271uPeGNcROmXqLNMHUQ50ebOYJN4gAwe1qDw5wViRT/Mwa oca5m9oRp1w== X-Received: from dlg25.prod.google.com ([2002:a05:7022:799:b0:124:9b94:b216]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a05:7301:1926:b0:2b4:7205:c385 with SMTP id 5a478bee46e88-2b78d55db67mr1510838eec.0.1769539531682; Tue, 27 Jan 2026 10:45:31 -0800 (PST) Date: Tue, 27 Jan 2026 10:44:34 -0800 In-Reply-To: <20260127184506.3059493-1-irogers@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260127184506.3059493-1-irogers@google.com> X-Mailer: git-send-email 2.52.0.457.g6b5491de43-goog Message-ID: <20260127184506.3059493-4-irogers@google.com> Subject: [PATCH v11 03/35] perf jevents: Add RAPL event metric for AMD zen models From: Ian Rogers To: Adrian Hunter , Alexander Shishkin , Arnaldo Carvalho de Melo , Benjamin Gray , Caleb Biggers , Edward Baker , Ian Rogers , Ingo Molnar , James Clark , Jing Zhang , Jiri Olsa , John Garry , Leo Yan , Namhyung Kim , Perry Taylor , Peter Zijlstra , Sandipan Das , Thomas Falcon , Weilin Wang , Xu Yang , linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Add power per second metrics based on RAPL. Reviewed-by: Sandipan Das Signed-off-by: Ian Rogers --- tools/perf/pmu-events/amd_metrics.py | 31 +++++++++++++++++++++++++--- 1 file changed, 28 insertions(+), 3 deletions(-) diff --git a/tools/perf/pmu-events/amd_metrics.py b/tools/perf/pmu-events/a= md_metrics.py index bc91d9c120fa..b6cdeb4f09fe 100755 --- a/tools/perf/pmu-events/amd_metrics.py +++ b/tools/perf/pmu-events/amd_metrics.py @@ -1,13 +1,36 @@ #!/usr/bin/env python3 # SPDX-License-Identifier: (LGPL-2.1 OR BSD-2-Clause) import argparse +import math import os -from metric import (JsonEncodeMetric, JsonEncodeMetricGroupDescriptions, L= oadEvents, - MetricGroup) +from metric import (d_ratio, has_event, Event, JsonEncodeMetric, JsonEncod= eMetricGroupDescriptions, + LoadEvents, Metric, MetricGroup, Select) =20 # Global command line arguments. _args =3D None =20 +interval_sec =3D Event("duration_time") + + +def Rapl() -> MetricGroup: + """Processor socket power consumption estimate. + + Use events from the running average power limit (RAPL) driver. + """ + # Watts =3D joules/second + # Currently only energy-pkg is supported by AMD: + # https://lore.kernel.org/lkml/20220105185659.643355-1-eranian@google.= com/ + pkg =3D Event("power/energy\\-pkg/") + cond_pkg =3D Select(pkg, has_event(pkg), math.nan) + scale =3D 2.3283064365386962890625e-10 + metrics =3D [ + Metric("lpm_cpu_power_pkg", "", + d_ratio(cond_pkg * scale, interval_sec), "Watts"), + ] + + return MetricGroup("lpm_cpu_power", metrics, + description=3D"Processor socket power consumption e= stimates") + =20 def main() -> None: global _args @@ -33,7 +56,9 @@ def main() -> None: directory =3D f"{_args.events_path}/x86/{_args.model}/" LoadEvents(directory) =20 - all_metrics =3D MetricGroup("", []) + all_metrics =3D MetricGroup("", [ + Rapl(), + ]) =20 if _args.metricgroups: print(JsonEncodeMetricGroupDescriptions(all_metrics)) --=20 2.52.0.457.g6b5491de43-goog From nobody Sat Feb 7 09:20:46 2026 Received: from mail-dy1-f202.google.com (mail-dy1-f202.google.com [74.125.82.202]) (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 99900346AC3 for ; Tue, 27 Jan 2026 18:45:34 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.82.202 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769539536; cv=none; b=jASWGk4+xwT+dLq6xbl2X8Y1n4XqP2xxphhW7+JPMqo/8Jf0MBTnGVIcm9hDcdM6vjkijwISEYvzkdpDeb4VIiNwnaArxr8P0AQZ22Sa8/TTsALyCHXh6DJj6QDWdrVkOONCQjk8x/fv1SvfApSx96UvwYibUXNGGaivN09SmCE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769539536; c=relaxed/simple; bh=y6hlwpTyHyOifmLqzqFarB+CugLw8uac40XfiztNF7E=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=eXn5yNc3TiD+wOUhUQN659xgOo/GsGMl9zcDzAXRcXH4DYFJ0VGx4QDvHuX+PuYpJSxk0TYwiLy5jNJpMAYIN1SFtPFIFVRwsTmJutuRZAgCp6VbiU3joA+oL2z6DOEuzlH0RVd8of00ecVyI4bRg/XgQL5Kl0ucivhzhlydgIo= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--irogers.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=gl860AFn; arc=none smtp.client-ip=74.125.82.202 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--irogers.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="gl860AFn" Received: by mail-dy1-f202.google.com with SMTP id 5a478bee46e88-2b6f0b345e3so32180575eec.0 for ; Tue, 27 Jan 2026 10:45:34 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1769539534; x=1770144334; darn=vger.kernel.org; h=to:from:subject:message-id:references:mime-version:in-reply-to:date :from:to:cc:subject:date:message-id:reply-to; bh=Vi5rn8mItqo/t2QexpWzl0At3V2hkxYPVO28WOkSCSo=; b=gl860AFnD7poKzs1aaF9TeU63uSr+tYofAQ0Ma2NVPvyeJ38xX8FLqMciTzDgzlceA jrk/yUveVLmU7W8L9blPttrK506IBbUWpk1/r/eLJBdkhlfOPt7Kv2cdZKY2J3p68ebr e6FGo24DYNJC9w7RDjFHZf0tr+QYzTE1KUXL8ki1K/UNsrG7OMcmLSGpyLW+8k58g/oB NR/65jALrrdHqGZjEALVY42l9Aen+sLZz8T0wYtFiuQrd2h6WeCGUcBghdueKkC+wHeZ 77Hz5euL6cCrwi6hy3XVHQpWcAa42kr/J5qTtGMswiRJFCL7S/aG3UAGaQD27w0h7c7B YmaA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1769539534; x=1770144334; h=to:from:subject:message-id:references:mime-version:in-reply-to:date :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=Vi5rn8mItqo/t2QexpWzl0At3V2hkxYPVO28WOkSCSo=; b=e+FpLuFIeUFweVHzlQMsU3LFVB05eRr3HieZA7R02lCkAkMpgfouJ62G2dSeotdtKa 7cDspmMhZRARXWsUcHYExzQ+crZD2P+ope6SVG3A5aEpQCWTxAykFF8/LdyC+uMHBIBC whPhfbCan+3YIxjm8cu6kwmA2E3wJn1MlhgzY+18Yzu/zOAr+hY1LgE3TrjW6ca7SJMh 8LCzh+Xt7zvlpGluOjJHHqNurWGg3D8CpIv0R99V7dlDiY97voR40fr5vba23+dP/Tvc Q+Ngm9l7xYeC1bEoeazwfkiexBE+rsLS2rc2RadgJVV03F3SWup0GRSmBAmIXuxJ09jk opAw== X-Forwarded-Encrypted: i=1; AJvYcCUjt0TwIH7l8gs2aA4BB2t1X1HEokqdo9vfzBtViav1RYQf3QgWvEtoWJ+U/qJiG6/Duz1X31FAQjJ0DJI=@vger.kernel.org X-Gm-Message-State: AOJu0Yxdu1BlUwnHcNJ2s7L9Iz3EJfehj32IP8t+8QoIMVrBD+LvUqzt dTV4xBs0OdHxKGCFCbeSjwFwm92aIdXIz0gBMc8eX+AguASkDx6Ynff6kGolyOaysawRIT90Hfp +pHryiEzS4Q== X-Received: from dlbui15.prod.google.com ([2002:a05:7022:3d0f:b0:124:a6fb:f902]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a05:7022:1283:b0:11a:962:99c2 with SMTP id a92af1059eb24-124a00c5619mr1796958c88.38.1769539533625; Tue, 27 Jan 2026 10:45:33 -0800 (PST) Date: Tue, 27 Jan 2026 10:44:35 -0800 In-Reply-To: <20260127184506.3059493-1-irogers@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260127184506.3059493-1-irogers@google.com> X-Mailer: git-send-email 2.52.0.457.g6b5491de43-goog Message-ID: <20260127184506.3059493-5-irogers@google.com> Subject: [PATCH v11 04/35] perf jevents: Add idle metric for AMD zen models From: Ian Rogers To: Adrian Hunter , Alexander Shishkin , Arnaldo Carvalho de Melo , Benjamin Gray , Caleb Biggers , Edward Baker , Ian Rogers , Ingo Molnar , James Clark , Jing Zhang , Jiri Olsa , John Garry , Leo Yan , Namhyung Kim , Perry Taylor , Peter Zijlstra , Sandipan Das , Thomas Falcon , Weilin Wang , Xu Yang , linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Compute using the msr PMU the percentage of wallclock cycles where the CPUs are in a low power state. Reviewed-by: Sandipan Das Signed-off-by: Ian Rogers --- tools/perf/pmu-events/amd_metrics.py | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/tools/perf/pmu-events/amd_metrics.py b/tools/perf/pmu-events/a= md_metrics.py index b6cdeb4f09fe..f51a044b8005 100755 --- a/tools/perf/pmu-events/amd_metrics.py +++ b/tools/perf/pmu-events/amd_metrics.py @@ -3,8 +3,9 @@ import argparse import math import os -from metric import (d_ratio, has_event, Event, JsonEncodeMetric, JsonEncod= eMetricGroupDescriptions, - LoadEvents, Metric, MetricGroup, Select) +from metric import (d_ratio, has_event, max, Event, JsonEncodeMetric, + JsonEncodeMetricGroupDescriptions, LoadEvents, Metric, + MetricGroup, Select) =20 # Global command line arguments. _args =3D None @@ -12,6 +13,16 @@ _args =3D None interval_sec =3D Event("duration_time") =20 =20 +def Idle() -> Metric: + cyc =3D Event("msr/mperf/") + tsc =3D Event("msr/tsc/") + low =3D max(tsc - cyc, 0) + return Metric( + "lpm_idle", + "Percentage of total wallclock cycles where CPUs are in low power = state (C1 or deeper sleep state)", + d_ratio(low, tsc), "100%") + + def Rapl() -> MetricGroup: """Processor socket power consumption estimate. =20 @@ -57,6 +68,7 @@ def main() -> None: LoadEvents(directory) =20 all_metrics =3D MetricGroup("", [ + Idle(), Rapl(), ]) =20 --=20 2.52.0.457.g6b5491de43-goog From nobody Sat Feb 7 09:20:46 2026 Received: from mail-dy1-f202.google.com (mail-dy1-f202.google.com [74.125.82.202]) (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 632B232AAD3 for ; Tue, 27 Jan 2026 18:45:36 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.82.202 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769539537; cv=none; b=kY1pQ3XQKw2Xgm4+G5vjRJlbMBT8m/A7PIQcmRJE7lEuIm6bnEzM5ii/xZXUYny2sjLBn51UshF5Morf5MlR8XqgOSXqqfX14lQ7/QtnDKY2rrPhy2ylM/0vAJgSblzlWSbPflMlsRFEhgcvxNomYCUumcH5JzeuVchclnh3eak= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769539537; c=relaxed/simple; bh=sYwyZW0LBQ597YLyTQ69dNu9phNlPd6GGL+UFrt/Z8M=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=Q7MMVIai60Xx+IFs0dqTl5PyoswcrFYR9pVIkCtSFK7GFd9xQ2keiJ5Q3Xzk+x6FmlaP0df5DcEP//UPbNGZKt7oc27SdOjNR97mmU/DQMJjoCKAlmogsbhqJSLgGqYSUkEzpw0rhW8Nw/t8YYsJgy7qz3UD0okXKzpiyxABRL4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--irogers.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=ahzeF/SO; arc=none smtp.client-ip=74.125.82.202 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--irogers.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="ahzeF/SO" Received: by mail-dy1-f202.google.com with SMTP id 5a478bee46e88-2b71c5826fbso6470346eec.1 for ; Tue, 27 Jan 2026 10:45:36 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1769539536; x=1770144336; darn=vger.kernel.org; h=to:from:subject:message-id:references:mime-version:in-reply-to:date :from:to:cc:subject:date:message-id:reply-to; bh=5xiZgUA9BZXnU+zboVf8da2/7HRlOa+405JXsBRB3eM=; b=ahzeF/SOLyKd6UHNDcRrRNmqpuQ/Z7bvgJfUM0lCO44PepWK5OkgDr8xFBoJG1G72W v5g2/f1YLRsfucPWPScFOQdMkOMCTk/LCgwl8XDt2KCyvOeyhPfog03y2yvyHGgfdQos SIQhqr2BG4R5fiNNXxCxevXMb7vfJAYzEZsQANMhcQy4F2GFWSc194t6rHWNvd+V17nz Ccqan1bdFcOIMhusXLu9N+f5yqTonxrhfAqxoPIVXp1kE1L2knBJogr1St0f9JbT7g49 dOUZyAahBNYAGwiJxGnMI8nU1BSwt+2ZC/ryErz0wlHprht17F167Z38xzn/0k/J81id L9PQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1769539536; x=1770144336; h=to:from:subject:message-id:references:mime-version:in-reply-to:date :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=5xiZgUA9BZXnU+zboVf8da2/7HRlOa+405JXsBRB3eM=; b=CdYgHxU9Omlfqsyi7li9GkxmwIeUi8NOsRIrLymB8HtHXrIk+1V6nQh6yAy5ETis+E S6RwDHFDfhfPm6OA1pI3ZD0gwnCJz7/Wr85/M7pijTlNLsc3LPdHYhWBG45mUw6L86Tz P5iPpaACbYxdvCcwr9V7zgqESjX0+GfYW+1laBtevH5XqTM7pnfkGBDmhpbCOzHwVuwk I606dkOim2w5UdVCxWKOI82iNRZ6PcaJUiDn6wSGEhdDICHoWNbNJwUvt+dvmN0ikIDH 7P+j+TQM10CW+boxZHlc9m9weqP1SzCeYvK1RsCRRKJYJznrX0mKwf1CGnOu0OM3qo08 b3zQ== X-Forwarded-Encrypted: i=1; AJvYcCVc36tZOCLGNOfIT4TEUKZ9CSGmxFMLyWm+MV8XDcPGcpH8F+jXRjYYED2RQE6D4xP9gKRDkvCpinaSjKE=@vger.kernel.org X-Gm-Message-State: AOJu0Yz/XBcP8nhtvSozflhBcme1isHCnMQRXdrBZGWIJvxVMqC/oB3V ObYZEiXL7oDw3yj+yhpgF8nLSEfm+FYPeIw+wdQ1ECjr+tgcK9zlh8+aVGdO+EhrsSL5oD+rthx 0VClunnHyhQ== X-Received: from dycqw12-n2.prod.google.com ([2002:a05:7300:c00c:20b0:2b7:96fd:3374]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a05:7300:ac90:b0:2a4:3594:72ed with SMTP id 5a478bee46e88-2b78d9d6c90mr1415898eec.28.1769539535565; Tue, 27 Jan 2026 10:45:35 -0800 (PST) Date: Tue, 27 Jan 2026 10:44:36 -0800 In-Reply-To: <20260127184506.3059493-1-irogers@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260127184506.3059493-1-irogers@google.com> X-Mailer: git-send-email 2.52.0.457.g6b5491de43-goog Message-ID: <20260127184506.3059493-6-irogers@google.com> Subject: [PATCH v11 05/35] perf jevents: Add upc metric for uops per cycle for AMD From: Ian Rogers To: Adrian Hunter , Alexander Shishkin , Arnaldo Carvalho de Melo , Benjamin Gray , Caleb Biggers , Edward Baker , Ian Rogers , Ingo Molnar , James Clark , Jing Zhang , Jiri Olsa , John Garry , Leo Yan , Namhyung Kim , Perry Taylor , Peter Zijlstra , Sandipan Das , Thomas Falcon , Weilin Wang , Xu Yang , linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The metric adjusts for whether or not SMT is on. Reviewed-by: Sandipan Das Signed-off-by: Ian Rogers --- tools/perf/pmu-events/amd_metrics.py | 22 +++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/tools/perf/pmu-events/amd_metrics.py b/tools/perf/pmu-events/a= md_metrics.py index f51a044b8005..42e46b33334d 100755 --- a/tools/perf/pmu-events/amd_metrics.py +++ b/tools/perf/pmu-events/amd_metrics.py @@ -3,14 +3,26 @@ import argparse import math import os +from typing import Optional from metric import (d_ratio, has_event, max, Event, JsonEncodeMetric, - JsonEncodeMetricGroupDescriptions, LoadEvents, Metric, - MetricGroup, Select) + JsonEncodeMetricGroupDescriptions, Literal, LoadEvents, + Metric, MetricGroup, Select) =20 # Global command line arguments. _args =3D None - +_zen_model: int =3D 1 interval_sec =3D Event("duration_time") +ins =3D Event("instructions") +cycles =3D Event("cycles") +# Number of CPU cycles scaled for SMT. +smt_cycles =3D Select(cycles / 2, Literal("#smt_on"), cycles) + + +def AmdUpc() -> Metric: + ops =3D Event("ex_ret_ops", "ex_ret_cops") + upc =3D d_ratio(ops, smt_cycles) + return Metric("lpm_upc", "Micro-ops retired per core cycle (higher is = better)", + upc, "uops/cycle") =20 =20 def Idle() -> Metric: @@ -45,6 +57,7 @@ def Rapl() -> MetricGroup: =20 def main() -> None: global _args + global _zen_model =20 def dir_path(path: str) -> str: """Validate path is a directory for argparse.""" @@ -67,7 +80,10 @@ def main() -> None: directory =3D f"{_args.events_path}/x86/{_args.model}/" LoadEvents(directory) =20 + _zen_model =3D int(_args.model[6:]) + all_metrics =3D MetricGroup("", [ + AmdUpc(), Idle(), Rapl(), ]) --=20 2.52.0.457.g6b5491de43-goog From nobody Sat Feb 7 09:20:46 2026 Received: from mail-dy1-f202.google.com (mail-dy1-f202.google.com [74.125.82.202]) (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 CF30A35FF52 for ; Tue, 27 Jan 2026 18:45:38 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.82.202 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769539540; cv=none; b=r4t1K6pezIS5eHLA5gCO5TmthcaJ6n0NYsvEjhbc7+oUPj/agza5M0vF2Vpzj74TqJPGj/Z6QOPn5zJV8tIIa/yCeRc/06VSlpMrxOzMAJi8bSgtl1QFQFM58+YNYGfXWiq1HxA6Hab/mDs8n7joYXTOoPxotT2Iy4e9jF598Rs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769539540; c=relaxed/simple; bh=6ngkG0km3yB5xxyOrjatuk4rtbR7Z+mDw14r54hwsFQ=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=u77n3muQ6F4XK05/LeMPD9SEDO8HI7gL+YLZhHhpQ4wd7GB8+FqGLnC1AuZEWZE47/maQ3Kh7aTuMzOHKJoW4XHf+Gy0isUCb7/6hCicsj3tUrynQsdW6lFUePkR0aJ9jKKZScfbewIWlbt0Npwye0bNQyFoIgoaD22IOfZoQyo= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--irogers.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=ignUx1/z; arc=none smtp.client-ip=74.125.82.202 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--irogers.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="ignUx1/z" Received: by mail-dy1-f202.google.com with SMTP id 5a478bee46e88-2b74aff34efso4921704eec.1 for ; Tue, 27 Jan 2026 10:45:38 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1769539538; x=1770144338; darn=vger.kernel.org; h=to:from:subject:message-id:references:mime-version:in-reply-to:date :from:to:cc:subject:date:message-id:reply-to; bh=8CoVpu9C7kwqCyjP7uTz46EcKVk9Lj7iUFKEqIBdIZM=; b=ignUx1/zsO9C19k9Pd/ywY9PKaqtYeKxvn0TNGsjfZRQHpqAsOIHz1lfjwxfHMIggi o9EIJWUybBAJpYFUWslOWDoBOfbL6ftxgsGtSFcUJ8RdcDmyeVi3z5GEqKfg6ugohxtF SlZUPuzItNUqLx79Rl+o2Rfc3yV54Go8qovdV2XqS+K1hh3nrA1udMTFEJoklSEGwnHq C/kzsNUHhimsDcFrLPcxhV/5EHZD2k0m03qYNI8milY2R6HQAPJlVydbEmnzlZw+fSZR MApaMm5miSrCNulHTjLqmaJYnHpfVm6vlDf2HuH12EyK2wGqMXArCOd/FwaUPmkX6Jut 7IaQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1769539538; x=1770144338; h=to:from:subject:message-id:references:mime-version:in-reply-to:date :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=8CoVpu9C7kwqCyjP7uTz46EcKVk9Lj7iUFKEqIBdIZM=; b=iZqrfWRCSeHRAZ+QAdMllIn52++x8Nm++nEQ3YcpDOqMA2kd9TiDeOb+gN8C2tSD+5 V//v39M7IgPHAyeNOqlF7/PXtcRFugMMp6SxNikbfSOzP/nma83PlPiwL5IDVr2i/+xu JpWZpCuquyrj5gQYiRF5dQROo16He25cxuEXVwe/as5wTAnLEfTHBTlVwm0s7iNnfnRG /BUzK8nYENSqmXh62rGxax0taj9GPOmsRFRc6kV6vP+ffrZFflK6S5k7ZifDKpKTcQaE JXbf+GymUvKvMuECdqArpZkOkqLJKJsT2Kcif4GMsCUHQ+JA+tzEU7/rW09YM8LurOtx QPtQ== X-Forwarded-Encrypted: i=1; AJvYcCXnd7C4fYBhNAaPvRRt+TPFDX/hz1vMNKtbUKnPDy+iprw9KvSBVPUwTF/nyLHsv6WhWzYScU0qxvj4BeE=@vger.kernel.org X-Gm-Message-State: AOJu0YwOi1S0cYG+kN5yeg27grWd4GVoYuQVXQnS7nf/6fhXN7uMRA/V XyumKrZMlsQmtAE3jvrWGy0XIa4VC/p8DPO2IHMHbsWUyDyH7lZgXNoBQEJBSgKucHfCRTB6r9I VtkE/LDqZkQ== X-Received: from dybdr31.prod.google.com ([2002:a05:7300:b29f:b0:2b6:bdce:fb0]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a05:7300:72c5:b0:2b0:51a7:509a with SMTP id 5a478bee46e88-2b78da12271mr1505624eec.33.1769539537837; Tue, 27 Jan 2026 10:45:37 -0800 (PST) Date: Tue, 27 Jan 2026 10:44:37 -0800 In-Reply-To: <20260127184506.3059493-1-irogers@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260127184506.3059493-1-irogers@google.com> X-Mailer: git-send-email 2.52.0.457.g6b5491de43-goog Message-ID: <20260127184506.3059493-7-irogers@google.com> Subject: [PATCH v11 06/35] perf jevents: Add br metric group for branch statistics on AMD From: Ian Rogers To: Adrian Hunter , Alexander Shishkin , Arnaldo Carvalho de Melo , Benjamin Gray , Caleb Biggers , Edward Baker , Ian Rogers , Ingo Molnar , James Clark , Jing Zhang , Jiri Olsa , John Garry , Leo Yan , Namhyung Kim , Perry Taylor , Peter Zijlstra , Sandipan Das , Thomas Falcon , Weilin Wang , Xu Yang , linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The br metric group for branches itself comprises metric groups for total, taken, conditional, fused and far metric groups using json events. The lack of conditional events on anything but zen2 means this category is lacking on zen1, zen3 and zen4. Reviewed-by: Sandipan Das Signed-off-by: Ian Rogers --- tools/perf/pmu-events/amd_metrics.py | 105 +++++++++++++++++++++++++++ 1 file changed, 105 insertions(+) diff --git a/tools/perf/pmu-events/amd_metrics.py b/tools/perf/pmu-events/a= md_metrics.py index 42e46b33334d..38948f63cb52 100755 --- a/tools/perf/pmu-events/amd_metrics.py +++ b/tools/perf/pmu-events/amd_metrics.py @@ -18,6 +18,110 @@ cycles =3D Event("cycles") smt_cycles =3D Select(cycles / 2, Literal("#smt_on"), cycles) =20 =20 +def AmdBr(): + def Total() -> MetricGroup: + br =3D Event("ex_ret_brn") + br_m_all =3D Event("ex_ret_brn_misp") + br_clr =3D Event("ex_ret_brn_cond_misp", + "ex_ret_msprd_brnch_instr_dir_msmtch", + "ex_ret_brn_resync") + + br_r =3D d_ratio(br, interval_sec) + ins_r =3D d_ratio(ins, br) + misp_r =3D d_ratio(br_m_all, br) + clr_r =3D d_ratio(br_clr, interval_sec) + + return MetricGroup("lpm_br_total", [ + Metric("lpm_br_total_retired", + "The number of branch instructions retired per second."= , br_r, + "insn/s"), + Metric( + "lpm_br_total_mispred", + "The number of branch instructions retired, of any type, t= hat were " + "not correctly predicted as a percentage of all branch ins= trucions.", + misp_r, "100%"), + Metric("lpm_br_total_insn_between_branches", + "The number of instructions divided by the number of br= anches.", + ins_r, "insn"), + Metric("lpm_br_total_insn_fe_resteers", + "The number of resync branches per second.", clr_r, "re= q/s") + ]) + + def Taken() -> MetricGroup: + br =3D Event("ex_ret_brn_tkn") + br_m_tk =3D Event("ex_ret_brn_tkn_misp") + br_r =3D d_ratio(br, interval_sec) + ins_r =3D d_ratio(ins, br) + misp_r =3D d_ratio(br_m_tk, br) + return MetricGroup("lpm_br_taken", [ + Metric("lpm_br_taken_retired", + "The number of taken branches that were retired per sec= ond.", + br_r, "insn/s"), + Metric( + "lpm_br_taken_mispred", + "The number of retired taken branch instructions that were= " + "mispredicted as a percentage of all taken branches.", mis= p_r, + "100%"), + Metric( + "lpm_br_taken_insn_between_branches", + "The number of instructions divided by the number of taken= branches.", + ins_r, "insn"), + ]) + + def Conditional() -> Optional[MetricGroup]: + global _zen_model + br =3D Event("ex_ret_brn_cond", "ex_ret_cond") + br_r =3D d_ratio(br, interval_sec) + ins_r =3D d_ratio(ins, br) + + metrics =3D [ + Metric("lpm_br_cond_retired", "Retired conditional branch inst= ructions.", + br_r, "insn/s"), + Metric("lpm_br_cond_insn_between_branches", + "The number of instructions divided by the number of co= nditional " + "branches.", ins_r, "insn"), + ] + if _zen_model =3D=3D 2: + br_m_cond =3D Event("ex_ret_cond_misp") + misp_r =3D d_ratio(br_m_cond, br) + metrics +=3D [ + Metric("lpm_br_cond_mispred", + "Retired conditional branch instructions mispredict= ed as a " + "percentage of all conditional branches.", misp_r, = "100%"), + ] + + return MetricGroup("lpm_br_cond", metrics) + + def Fused() -> MetricGroup: + br =3D Event("ex_ret_fused_instr", "ex_ret_fus_brnch_inst") + br_r =3D d_ratio(br, interval_sec) + ins_r =3D d_ratio(ins, br) + return MetricGroup("lpm_br_cond", [ + Metric("lpm_br_fused_retired", + "Retired fused branch instructions per second.", br_r, = "insn/s"), + Metric( + "lpm_br_fused_insn_between_branches", + "The number of instructions divided by the number of fused= " + "branches.", ins_r, "insn"), + ]) + + def Far() -> MetricGroup: + br =3D Event("ex_ret_brn_far") + br_r =3D d_ratio(br, interval_sec) + ins_r =3D d_ratio(ins, br) + return MetricGroup("lpm_br_far", [ + Metric("lpm_br_far_retired", "Retired far control transfers pe= r second.", + br_r, "insn/s"), + Metric( + "lpm_br_far_insn_between_branches", + "The number of instructions divided by the number of far b= ranches.", + ins_r, "insn"), + ]) + + return MetricGroup("lpm_br", [Total(), Taken(), Conditional(), Fused()= , Far()], + description=3D"breakdown of retired branch instruct= ions") + + def AmdUpc() -> Metric: ops =3D Event("ex_ret_ops", "ex_ret_cops") upc =3D d_ratio(ops, smt_cycles) @@ -83,6 +187,7 @@ def main() -> None: _zen_model =3D int(_args.model[6:]) =20 all_metrics =3D MetricGroup("", [ + AmdBr(), AmdUpc(), Idle(), Rapl(), --=20 2.52.0.457.g6b5491de43-goog From nobody Sat Feb 7 09:20:46 2026 Received: from mail-dl1-f73.google.com (mail-dl1-f73.google.com [74.125.82.73]) (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 B46B432B999 for ; Tue, 27 Jan 2026 18:45:40 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.82.73 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769539542; cv=none; b=gFNtHF24PkKo4z0zd7awmjFbQR53fIgjk4ZgBGAE8AdKQx65sz99MuGY/mplMMCbPZY7awgdfCAAY1tn7DQyHWzEk3/cqzijy4gXwDnxEfCbqHLzU+kfo7/P6+y0+eruD4WZbuscIfnZdW1ByfwoV5J3QT1wOgjDr2SQxFvAFHo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769539542; c=relaxed/simple; bh=y7FaKz7L3UAtslgu2x3jUq5vT+1dSABmFKBuMuNMePw=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=oIqE+Cgyqrp2NFrSfDc1idOUAQ715sucafHF8Ti6iHWAO93TobFW90kWH+84HA9B1lBjSmu2sa2z0tKq6KQwo06CZLlE15Zna8jmJpvQCRNCIFgOwHBTkP5Vnt6EyrMXS2A25aRDuS5pl8wgZrRP+oEgH/6o6nTxufDg6nzBtVo= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--irogers.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=QTktOvgc; arc=none smtp.client-ip=74.125.82.73 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--irogers.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="QTktOvgc" Received: by mail-dl1-f73.google.com with SMTP id a92af1059eb24-124a5098029so2638904c88.0 for ; Tue, 27 Jan 2026 10:45:40 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1769539540; x=1770144340; darn=vger.kernel.org; h=to:from:subject:message-id:references:mime-version:in-reply-to:date :from:to:cc:subject:date:message-id:reply-to; bh=6JKS6gPP28FO6KPHugmrB/ENZliUhA7YoQoCZ5CSB0Q=; b=QTktOvgcenTrsFeGp/q69q2c9gXenOzDkJ3R8cxZxttQ8b3ICW1sbAfns6ut3HkXUe s0ZwgOd9Yg2iCmcgHd0HoCZlBxymVwQ7EU+FcTt423MgSK7+XDeiFEVN1QtGfi3iEURQ fhMtz2Jjwy9OWYjOtkI7QFYWiP02HVmlloD4qpGjXJlGxyk9aSxNdDXvCDZzBQeW2orp W4Mt8s1U3rP88O+m8Jm7IBVZSWSI8B7+iSjo16Wd+E4knrVHRFlnFeZAAuhI1KWk6IxK S2PVcGw4Swed1m0UquXJ2Q53FBVOPi2yVoNjJvy0AdwC0AmFh5s065rqoqnZTmgT34ya dbwQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1769539540; x=1770144340; h=to:from:subject:message-id:references:mime-version:in-reply-to:date :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=6JKS6gPP28FO6KPHugmrB/ENZliUhA7YoQoCZ5CSB0Q=; b=EnWJYXBkXpa17JA04i+COaBSW2lCZBEe3qaC8AhE386Pmc4tmeCvdLLucNgIVjw3mc pIgUe4WWtapDrfoTBOjpBgi4w8IkeWGtUzkoGR1kEK/m0u9EiM5jLmEe0YamH/pt9HUu e3DAs/gmsOZkrtdtijJ4NhRtuPBVYtLA5ZDGZ48lYWbuL1XNsQ0NnPU2nY5My92OYdE3 xSfalhNDpfsC+xrSZKBdheoaJVbXWV/J7YWB8HTjjKmb3zGyqNFqPEOs3gosXdOSCtDI GfXwBFxlVUPYwjCrfKaKRuebhAiSXId4+vykZzk7u7YH0fxazulfGD66zyxFAuR8RiEF kKqQ== X-Forwarded-Encrypted: i=1; AJvYcCUSq5MDtawFSDbsQygqtIf7NjMiN3XkcrDayR8RsjQdjbNX1bVwhJrz8IOWiyYwnsE0xSuiB2VBPkFmh2o=@vger.kernel.org X-Gm-Message-State: AOJu0YzNLtlYxV4E7NaRTXSCPovy3KJojqFiOMfEjywcTNCyXlPrNTwK Z07xu+7VFg1IZUxbVOD6bJZU1P9YAmRZnfvTnvRu2N/zqB4dNiLy7rIF3qZoYT0WCw75shGiK1W 0P72Q+R1I2Q== X-Received: from dldnz2.prod.google.com ([2002:a05:701a:ca02:b0:11d:fd49:7806]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a05:7022:4194:b0:124:9ae7:b2df with SMTP id a92af1059eb24-124a0129de1mr1290403c88.44.1769539539836; Tue, 27 Jan 2026 10:45:39 -0800 (PST) Date: Tue, 27 Jan 2026 10:44:38 -0800 In-Reply-To: <20260127184506.3059493-1-irogers@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260127184506.3059493-1-irogers@google.com> X-Mailer: git-send-email 2.52.0.457.g6b5491de43-goog Message-ID: <20260127184506.3059493-8-irogers@google.com> Subject: [PATCH v11 07/35] perf jevents: Add itlb metric group for AMD From: Ian Rogers To: Adrian Hunter , Alexander Shishkin , Arnaldo Carvalho de Melo , Benjamin Gray , Caleb Biggers , Edward Baker , Ian Rogers , Ingo Molnar , James Clark , Jing Zhang , Jiri Olsa , John Garry , Leo Yan , Namhyung Kim , Perry Taylor , Peter Zijlstra , Sandipan Das , Thomas Falcon , Weilin Wang , Xu Yang , linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Add metrics that give an overview and details of the l1 itlb (zen1, zen2, zen3) and l2 itlb (all zens). Reviewed-by: Sandipan Das Signed-off-by: Ian Rogers --- tools/perf/pmu-events/amd_metrics.py | 49 ++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) diff --git a/tools/perf/pmu-events/amd_metrics.py b/tools/perf/pmu-events/a= md_metrics.py index 38948f63cb52..8fb0b55074a2 100755 --- a/tools/perf/pmu-events/amd_metrics.py +++ b/tools/perf/pmu-events/amd_metrics.py @@ -122,6 +122,54 @@ def AmdBr(): description=3D"breakdown of retired branch instruct= ions") =20 =20 +def AmdItlb(): + global _zen_model + l2h =3D Event("bp_l1_tlb_miss_l2_tlb_hit", "bp_l1_tlb_miss_l2_hit") + l2m =3D Event("l2_itlb_misses") + l2r =3D l2h + l2m + + itlb_l1_mg =3D None + l1m =3D l2r + if _zen_model <=3D 3: + l1r =3D Event("ic_fw32") + l1h =3D max(l1r - l1m, 0) + itlb_l1_mg =3D MetricGroup("lpm_itlb_l1", [ + Metric("lpm_itlb_l1_hits", + "L1 ITLB hits as a perecentage of L1 ITLB accesses.", + d_ratio(l1h, l1h + l1m), "100%"), + Metric("lpm_itlb_l1_miss", + "L1 ITLB misses as a perecentage of L1 ITLB accesses.", + d_ratio(l1m, l1h + l1m), "100%"), + Metric("lpm_itlb_l1_reqs", + "The number of 32B fetch windows transferred from IC pi= pe to DE " + "instruction decoder per second.", d_ratio( + l1r, interval_sec), + "windows/sec"), + ]) + + return MetricGroup("lpm_itlb", [ + MetricGroup("lpm_itlb_ov", [ + Metric("lpm_itlb_ov_insn_bt_l1_miss", + "Number of instructions between l1 misses", d_ratio( + ins, l1m), "insns"), + Metric("lpm_itlb_ov_insn_bt_l2_miss", + "Number of instructions between l2 misses", d_ratio( + ins, l2m), "insns"), + ]), + itlb_l1_mg, + MetricGroup("lpm_itlb_l2", [ + Metric("lpm_itlb_l2_hits", + "L2 ITLB hits as a percentage of all L2 ITLB accesses.", + d_ratio(l2h, l2r), "100%"), + Metric("lpm_itlb_l2_miss", + "L2 ITLB misses as a percentage of all L2 ITLB accesses= .", + d_ratio(l2m, l2r), "100%"), + Metric("lpm_itlb_l2_reqs", "ITLB accesses per second.", + d_ratio(l2r, interval_sec), "accesses/sec"), + ]), + ], description=3D"Instruction TLB breakdown") + + def AmdUpc() -> Metric: ops =3D Event("ex_ret_ops", "ex_ret_cops") upc =3D d_ratio(ops, smt_cycles) @@ -188,6 +236,7 @@ def main() -> None: =20 all_metrics =3D MetricGroup("", [ AmdBr(), + AmdItlb(), AmdUpc(), Idle(), Rapl(), --=20 2.52.0.457.g6b5491de43-goog From nobody Sat Feb 7 09:20:46 2026 Received: from mail-dl1-f73.google.com (mail-dl1-f73.google.com [74.125.82.73]) (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 A6ADF363C7A for ; Tue, 27 Jan 2026 18:45:42 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.82.73 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769539544; cv=none; b=QhQGN5txJr0rFXvtgsDPty3nF0dyL0DCIq8n7E/CGdXKc5wYD/zCJPUhO5gwekBxU/trXbyIAsS0TxmJA17U6H7jTeduS5q2T45hgei4xGQ7GF56jLa3dcOBv5oD2xGKd9UUXqee6ntpnIA65TKeHZVK6+nl+b8lBjqq95Jhvmc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769539544; c=relaxed/simple; bh=wEwAu69dqy7FwpW88ji7Ds3Y/ObVL48wrOVgUzJIELw=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=uTwkdRsK+NBJlZjmHctOUeoGlPJQLpq3++PSdou7gHwtubKaTpws3/C+OqrFX6E3hmRv5+MJRkTkZPDKH2xhcE/TtK58wLuC2HS9LUvOjydbehldT1Q+FECiEWOuxyHuUrTB9YVWgztAUHOp2MxGSLrwHlrem6vuylM1LMbKm/Y= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--irogers.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=1sAItDkE; arc=none smtp.client-ip=74.125.82.73 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--irogers.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="1sAItDkE" Received: by mail-dl1-f73.google.com with SMTP id a92af1059eb24-124627fc58dso10704258c88.1 for ; Tue, 27 Jan 2026 10:45:42 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1769539542; x=1770144342; darn=vger.kernel.org; h=to:from:subject:message-id:references:mime-version:in-reply-to:date :from:to:cc:subject:date:message-id:reply-to; bh=+LtPwfdvum8VZ9vGv/kPmqTwGJ31j4ut7cChRLWG0yY=; b=1sAItDkEfzbYv71pDAd2l8TIk/YpRgbeL/qtgtO2s9ZyFdyo4xUWi6RGT6V+45wsbK AyJkH25COBHzIgPL5hLreJY6YKRcaWlBxm0yfKGM/ok6PkQl3kZWdQV/3Nny21LRvDor YB/rRmH4jnrVDP3MJ3Yr4TgVg+uP8ArJ200zJNbStTzligM8FPO7mGpztzsgwYdfot1I wtDgxIHkg6V5gxxVqNQaaNHWlZ7ve9FFP1ZAKE5pb6NJ6VxgTk+9ytEJlXIF468gBALt 8mZROiH1foc4Aj+mh5e0okAvwNvxaBIVH6N4ItUj7NyPAL4Hf0La8YkwHomQriSS6FWQ kBXw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1769539542; x=1770144342; h=to:from:subject:message-id:references:mime-version:in-reply-to:date :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=+LtPwfdvum8VZ9vGv/kPmqTwGJ31j4ut7cChRLWG0yY=; b=kkJddR8Sm0hru3qGJeeDOlqTmsTPMDdpmWNGxSMWr3kHDwULNF/gXPZSUpn16noum+ 4h0s6hRWp0Pg3m/PGw4uNNfuQoIZl255JL2vU/igd8cDaM57qh/KWTl0LI9nWs83UbJU 3/94q2yajMZnWvFaEFbxaR/PnpFgv3Mi5l710BBTiQN4dGZLKfC2AZ6HVb9IiklT02g5 WA2WWBH1QnFzzvw50/waMpuPLcpG8/R79JZF9HZSZtXSqoTFRMhQv8RV7jiJeN5rNf5s usSBsSWyHBr4SpEglHw8rndDqZSQkvTONF1/MDnh/CxDVHTwB2XhArylnrvbXYPFHvRA KL4w== X-Forwarded-Encrypted: i=1; AJvYcCU3bGbP6Gsx+g6rE/MMwNQK7h+8/nnQhKiwzT8UScXlLYdqbSDqUkW/mq1KG+21U4nw3dViLWD9/2Wyl5M=@vger.kernel.org X-Gm-Message-State: AOJu0YzyLTuRBdds7OWSVQJeLcTMTdOwiUE7ZjA12/rBzKMhrQ5kJff9 dnpUu6Ku2ufevK2re/bequz88HEfSjEkgjnDCiG/7oF9XDlcitPMKU32IqMWatqG5SRUx/Eo3lO 9+pt3vaGvfQ== X-Received: from dlbut9.prod.google.com ([2002:a05:7022:7e09:b0:124:a635:44d1]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a05:7022:306:b0:11b:9386:8271 with SMTP id a92af1059eb24-124a00ddc17mr1936944c88.46.1769539541703; Tue, 27 Jan 2026 10:45:41 -0800 (PST) Date: Tue, 27 Jan 2026 10:44:39 -0800 In-Reply-To: <20260127184506.3059493-1-irogers@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260127184506.3059493-1-irogers@google.com> X-Mailer: git-send-email 2.52.0.457.g6b5491de43-goog Message-ID: <20260127184506.3059493-9-irogers@google.com> Subject: [PATCH v11 08/35] perf jevents: Add dtlb metric group for AMD From: Ian Rogers To: Adrian Hunter , Alexander Shishkin , Arnaldo Carvalho de Melo , Benjamin Gray , Caleb Biggers , Edward Baker , Ian Rogers , Ingo Molnar , James Clark , Jing Zhang , Jiri Olsa , John Garry , Leo Yan , Namhyung Kim , Perry Taylor , Peter Zijlstra , Sandipan Das , Thomas Falcon , Weilin Wang , Xu Yang , linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Add metrics that give an overview and details of the dtlb (zen1, zen2, zen3). Reviewed-by: Sandipan Das Signed-off-by: Ian Rogers --- tools/perf/pmu-events/amd_metrics.py | 111 +++++++++++++++++++++++++++ 1 file changed, 111 insertions(+) diff --git a/tools/perf/pmu-events/amd_metrics.py b/tools/perf/pmu-events/a= md_metrics.py index 8fb0b55074a2..a4ff88de08b5 100755 --- a/tools/perf/pmu-events/amd_metrics.py +++ b/tools/perf/pmu-events/amd_metrics.py @@ -122,6 +122,116 @@ def AmdBr(): description=3D"breakdown of retired branch instruct= ions") =20 =20 +def AmdDtlb() -> Optional[MetricGroup]: + global _zen_model + if _zen_model >=3D 4: + return None + + d_dat =3D Event("ls_dc_accesses") if _zen_model <=3D 3 else None + d_h4k =3D Event("ls_l1_d_tlb_miss.tlb_reload_4k_l2_hit") + d_hcoal =3D Event( + "ls_l1_d_tlb_miss.tlb_reload_coalesced_page_hit") if _zen_model >= =3D 2 else 0 + d_h2m =3D Event("ls_l1_d_tlb_miss.tlb_reload_2m_l2_hit") + d_h1g =3D Event("ls_l1_d_tlb_miss.tlb_reload_1g_l2_hit") + + d_m4k =3D Event("ls_l1_d_tlb_miss.tlb_reload_4k_l2_miss") + d_mcoal =3D Event( + "ls_l1_d_tlb_miss.tlb_reload_coalesced_page_miss") if _zen_model >= =3D 2 else 0 + d_m2m =3D Event("ls_l1_d_tlb_miss.tlb_reload_2m_l2_miss") + d_m1g =3D Event("ls_l1_d_tlb_miss.tlb_reload_1g_l2_miss") + + d_w0 =3D Event("ls_tablewalker.dc_type0") if _zen_model <=3D 3 else No= ne + d_w1 =3D Event("ls_tablewalker.dc_type1") if _zen_model <=3D 3 else No= ne + walks =3D d_w0 + d_w1 + walks_r =3D d_ratio(walks, interval_sec) + ins_w =3D d_ratio(ins, walks) + l1 =3D d_dat + l1_r =3D d_ratio(l1, interval_sec) + l2_hits =3D d_h4k + d_hcoal + d_h2m + d_h1g + l2_miss =3D d_m4k + d_mcoal + d_m2m + d_m1g + l2_r =3D d_ratio(l2_hits + l2_miss, interval_sec) + l1_miss =3D l2_hits + l2_miss + walks + l1_hits =3D max(l1 - l1_miss, 0) + ins_l =3D d_ratio(ins, l1_miss) + + return MetricGroup("lpm_dtlb", [ + MetricGroup("lpm_dtlb_ov", [ + Metric("lpm_dtlb_ov_insn_bt_l1_miss", + "DTLB overview: instructions between l1 misses.", ins_l, + "insns"), + Metric("lpm_dtlb_ov_insn_bt_walks", + "DTLB overview: instructions between dtlb page table wa= lks.", + ins_w, "insns"), + ]), + MetricGroup("lpm_dtlb_l1", [ + Metric("lpm_dtlb_l1_hits", + "DTLB L1 hits as percentage of all DTLB L1 accesses.", + d_ratio(l1_hits, l1), "100%"), + Metric("lpm_dtlb_l1_miss", + "DTLB L1 misses as percentage of all DTLB L1 accesses.", + d_ratio(l1_miss, l1), "100%"), + Metric("lpm_dtlb_l1_reqs", "DTLB L1 accesses per second.", l1_= r, + "insns/s"), + ]), + MetricGroup("lpm_dtlb_l2", [ + Metric("lpm_dtlb_l2_hits", + "DTLB L2 hits as percentage of all DTLB L2 accesses.", + d_ratio(l2_hits, l2_hits + l2_miss), "100%"), + Metric("lpm_dtlb_l2_miss", + "DTLB L2 misses as percentage of all DTLB L2 accesses.", + d_ratio(l2_miss, l2_hits + l2_miss), "100%"), + Metric("lpm_dtlb_l2_reqs", "DTLB L2 accesses per second.", l2_= r, + "insns/s"), + MetricGroup("lpm_dtlb_l2_4kb", [ + Metric( + "lpm_dtlb_l2_4kb_hits", + "DTLB L2 4kb page size hits as percentage of all DTLB = L2 4kb " + "accesses.", d_ratio(d_h4k, d_h4k + d_m4k), "100%"), + Metric( + "lpm_dtlb_l2_4kb_miss", + "DTLB L2 4kb page size misses as percentage of all DTL= B L2 4kb" + "accesses.", d_ratio(d_m4k, d_h4k + d_m4k), "100%") + ]), + MetricGroup("lpm_dtlb_l2_coalesced", [ + Metric( + "lpm_dtlb_l2_coal_hits", + "DTLB L2 coalesced page (16kb) hits as percentage of a= ll DTLB " + "L2 coalesced accesses.", d_ratio(d_hcoal, + d_hcoal + d_mcoal), = "100%"), + Metric( + "lpm_dtlb_l2_coal_miss", + "DTLB L2 coalesced page (16kb) misses as percentage of= all " + "DTLB L2 coalesced accesses.", + d_ratio(d_mcoal, d_hcoal + d_mcoal), "100%") + ]), + MetricGroup("lpm_dtlb_l2_2mb", [ + Metric( + "lpm_dtlb_l2_2mb_hits", + "DTLB L2 2mb page size hits as percentage of all DTLB = L2 2mb " + "accesses.", d_ratio(d_h2m, d_h2m + d_m2m), "100%"), + Metric( + "lpm_dtlb_l2_2mb_miss", + "DTLB L2 2mb page size misses as percentage of all DTL= B L2 " + "accesses.", d_ratio(d_m2m, d_h2m + d_m2m), "100%") + ]), + MetricGroup("lpm_dtlb_l2_1g", [ + Metric( + "lpm_dtlb_l2_1g_hits", + "DTLB L2 1gb page size hits as percentage of all DTLB = L2 1gb " + "accesses.", d_ratio(d_h1g, d_h1g + d_m1g), "100%"), + Metric( + "lpm_dtlb_l2_1g_miss", + "DTLB L2 1gb page size misses as percentage of all DTL= B L2 " + "1gb accesses.", d_ratio(d_m1g, d_h1g + d_m1g), "100%") + ]), + ]), + MetricGroup("lpm_dtlb_walks", [ + Metric("lpm_dtlb_walks_reqs", "DTLB page table walks per secon= d.", + walks_r, "walks/s"), + ]), + ], description=3D"Data TLB metrics") + + def AmdItlb(): global _zen_model l2h =3D Event("bp_l1_tlb_miss_l2_tlb_hit", "bp_l1_tlb_miss_l2_hit") @@ -236,6 +346,7 @@ def main() -> None: =20 all_metrics =3D MetricGroup("", [ AmdBr(), + AmdDtlb(), AmdItlb(), AmdUpc(), Idle(), --=20 2.52.0.457.g6b5491de43-goog From nobody Sat Feb 7 09:20:46 2026 Received: from mail-dl1-f73.google.com (mail-dl1-f73.google.com [74.125.82.73]) (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 6BE94364050 for ; Tue, 27 Jan 2026 18:45:44 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.82.73 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769539545; cv=none; b=aLLyuiHDFUNPVA5eYa+8fm543IaP9FOaIXdI4Xu+nDMnQCfJ6rBpgADm5MMPY0GA9vLdVVLEct0iE9JhpzUpZpdtnUJZsh9LvoRvMP/BQcbSrM6Lxq+AoMeUX7o4g2Dt2YyXYol9CEs02GJO93JfEOEiLo9ZqmmqB1qkdt/AjEw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769539545; c=relaxed/simple; bh=ARE/Q2G89TxiCVGgVTApgtKtNEltPTE3mlntYnL0UpU=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=dDo5EY92kgUqlhOUf4vdc+YcekHLRGfakxtWv1NVa1UEm3jzq1B0dbsuLvR0AI9zsPd6rC84CYBFd8l56xYuRFFMXkCOGDxga7S5v0DfXEdaMCL1A28dMEflUcxwvuhjAVD2gNg6rjGevPaTB0wQ/Dq5ADx52kAvhnrnbbI+CGU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--irogers.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=MyVTYlL/; arc=none smtp.client-ip=74.125.82.73 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--irogers.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="MyVTYlL/" Received: by mail-dl1-f73.google.com with SMTP id a92af1059eb24-124743cf760so5119637c88.1 for ; Tue, 27 Jan 2026 10:45:44 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1769539544; x=1770144344; darn=vger.kernel.org; h=to:from:subject:message-id:references:mime-version:in-reply-to:date :from:to:cc:subject:date:message-id:reply-to; bh=rblm5KSHXE6JkXlIc70Vz9oUvY6uCMkftvfXFaxGDFo=; b=MyVTYlL/+Fqcf0w00vM5y6BZElb4ZLzxGYPtjg5KCi96fzVtChKrKkeb9LQiBNaZkT zVi/9FO5xm2d4Ao1sdxu1UU0iTG4cOmfWXlR1iR4nVCL6VrhUmVE9XDtcOyLgjK1mGqp Rm9UiMjA6T7GKaWpTRnvpjPO/BbtYBGBUQ8Ovw/+eca1Jn2BHzBYVn+HIhWLsJqnruNO hczLa/P9j8XOk+TUDkVdloVDMEm8hN8xMpZPri+euaVSYjcr1nQnB650dhgC/eEGpXl8 xe7NkNIaqYTQAAmQuiIlqysUdMRkF6kU4R8amdr5v5DWk1dVWorAXqVp+WgdREd+OMWG 0lSg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1769539544; x=1770144344; h=to:from:subject:message-id:references:mime-version:in-reply-to:date :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=rblm5KSHXE6JkXlIc70Vz9oUvY6uCMkftvfXFaxGDFo=; b=aTZRZhI5UTe/mf+CEYOf/BmdFj/yXDza2Hn4pM9rNgwvEsOpRbQahJHceNvBRuSoe2 t/JU2bRoxWfR4RWR+NY1XpsmqkZ91FUZqIjvo8HdPtlIa3Wdz7TEySTK9qSvCC+Vd9MS xZcw1huneLdiLjKvJdysFPW1ol5j/2mkw/CwploJBKn56iu1UwxPZbDIwjbd8BaM5Pow MN/Bwg4a1s0Ra011MYAdIRlhfS+PCzPSB9Up3MmxaYgyArcCPyRZK07z4XtuImoySiK0 5C/NO2xZfHxhxkmZk0DcIKciUam2JKuOaKI3N5CrbLnCXti+5S/SVRfa95ce6Ljg0MUo X91Q== X-Forwarded-Encrypted: i=1; AJvYcCULbkrv0EXBY81uMgYxUpbhiWzRDleGhGZT8I1QM0dIFAHBLebVAmNsTIdPvVwFN18PIO9Julz/+xbU6FE=@vger.kernel.org X-Gm-Message-State: AOJu0YxS93CbB3SN4+LkNGv3NrBLjIDTT+IPdIBFp+mAGmxfpHxfsg4s vByFsgab8lVdYldSHOXixbFRGUsVF5up8X6XniRNDa0YaoPA/bci5yGlxNAslBM+vmk6z9xbIks DqYAbM0kpnA== X-Received: from dlg25.prod.google.com ([2002:a05:7022:799:b0:124:9b94:b216]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a05:7022:6082:b0:119:e56b:c762 with SMTP id a92af1059eb24-124a00df67fmr1555629c88.39.1769539543549; Tue, 27 Jan 2026 10:45:43 -0800 (PST) Date: Tue, 27 Jan 2026 10:44:40 -0800 In-Reply-To: <20260127184506.3059493-1-irogers@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260127184506.3059493-1-irogers@google.com> X-Mailer: git-send-email 2.52.0.457.g6b5491de43-goog Message-ID: <20260127184506.3059493-10-irogers@google.com> Subject: [PATCH v11 09/35] perf jevents: Add uncore l3 metric group for AMD From: Ian Rogers To: Adrian Hunter , Alexander Shishkin , Arnaldo Carvalho de Melo , Benjamin Gray , Caleb Biggers , Edward Baker , Ian Rogers , Ingo Molnar , James Clark , Jing Zhang , Jiri Olsa , John Garry , Leo Yan , Namhyung Kim , Perry Taylor , Peter Zijlstra , Sandipan Das , Thomas Falcon , Weilin Wang , Xu Yang , linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Metrics use the amd_l3 PMU for access/miss/hit information. Reviewed-by: Sandipan Das Signed-off-by: Ian Rogers --- tools/perf/pmu-events/amd_metrics.py | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/tools/perf/pmu-events/amd_metrics.py b/tools/perf/pmu-events/a= md_metrics.py index a4ff88de08b5..d71997177239 100755 --- a/tools/perf/pmu-events/amd_metrics.py +++ b/tools/perf/pmu-events/amd_metrics.py @@ -317,6 +317,24 @@ def Rapl() -> MetricGroup: description=3D"Processor socket power consumption e= stimates") =20 =20 +def UncoreL3(): + acc =3D Event("l3_lookup_state.all_coherent_accesses_to_l3", + "l3_lookup_state.all_l3_req_typs") + miss =3D Event("l3_lookup_state.l3_miss", + "l3_comb_clstr_state.request_miss") + acc =3D max(acc, miss) + hits =3D acc - miss + + return MetricGroup("lpm_l3", [ + Metric("lpm_l3_accesses", "L3 victim cache accesses", + d_ratio(acc, interval_sec), "accesses/sec"), + Metric("lpm_l3_hits", "L3 victim cache hit rate", + d_ratio(hits, acc), "100%"), + Metric("lpm_l3_miss", "L3 victim cache miss rate", d_ratio(miss, a= cc), + "100%"), + ], description=3D"L3 cache breakdown per CCX") + + def main() -> None: global _args global _zen_model @@ -351,6 +369,7 @@ def main() -> None: AmdUpc(), Idle(), Rapl(), + UncoreL3(), ]) =20 if _args.metricgroups: --=20 2.52.0.457.g6b5491de43-goog From nobody Sat Feb 7 09:20:46 2026 Received: from mail-dl1-f73.google.com (mail-dl1-f73.google.com [74.125.82.73]) (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 7B81F3644C5 for ; Tue, 27 Jan 2026 18:45:46 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.82.73 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769539548; cv=none; b=DVp3vJpa4eimVQ6nAFuJAxpfxSyboKR29nkbjxqG2H/k6JxePEDGy5kwyzi8Cnsy7sdRIPoNOF38KYgqDx4DVi1u7HJ/jQIxF3nDAdC/uZNchRbMrw5YcElu1hKfT1RLEAyFDzr/NUMIUd7ntgggAtJXJE9zPFY0jXD7ca/lKUA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769539548; c=relaxed/simple; bh=cIu6eR1sR5Z5vTDJWp5UW5V0wvKX6WEDplqiXQUSFGQ=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=VxEqHXz/KxISODVufw3bjqCOgzy9Q2DOzz0PqWRHN/kIB3C+SIofldVTxut71xKkwB3A3eJ0KPbQcwItvUhWu9uLghcSEFRs1HZjOtRhAqz1VhJkOqKDeRAbYMe5ayZ5MCNi6wg1QtjwSWKkIJliwrPDzgey5Idvhq0GVw+Hxj4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--irogers.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=t4Yh2tFw; arc=none smtp.client-ip=74.125.82.73 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--irogers.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="t4Yh2tFw" Received: by mail-dl1-f73.google.com with SMTP id a92af1059eb24-12339e20a86so6764515c88.0 for ; Tue, 27 Jan 2026 10:45:46 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1769539546; x=1770144346; darn=vger.kernel.org; h=to:from:subject:message-id:references:mime-version:in-reply-to:date :from:to:cc:subject:date:message-id:reply-to; bh=79FcYdK/0zuRLjptxWds6JuhoHGCloD1d2+DIKaDNX0=; b=t4Yh2tFwL0D8IMN78XHMfmXSvzMN8r14YeEcFYyuBY56XQleyoYEobqrHVt/ClZMFM huEnTTjruCyVVuEOr4Rrd6FuZwxNvDyyhKFBM9WN0ruBfdR+IjMyHULZf6miyJum8Q++ 2ZDjIQsGURGG1GR34W1xAzXcwmNMw4gyZ/q4N+TxCLsna0qMOhP58+xoMW8cWrdo6ZWw kL76VCrKdhb4UiA4iTCNzxQ9nY0hFuUX3MCa8RxY1THAWpDoK3Os2XvMgDymuPIfXRHb PpLuwHFU4qjlLJxKUo8k0dJoYrn8nqJEcqPGolLd0BEgtF47b18vizzJ3G2wYdcb7+TO YJvQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1769539546; x=1770144346; h=to:from:subject:message-id:references:mime-version:in-reply-to:date :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=79FcYdK/0zuRLjptxWds6JuhoHGCloD1d2+DIKaDNX0=; b=KOdqRp5sTs8kasY6tzNemA26j23MwPMGwJsEQpmbrk7eVeqXO5+QLf+Xy4oK/V/syg dHUAE9xh3I4RS1qt2enawxYG5gB5bSyrUpnxl5YlPE1PKcTVYfMJ5EKa+5/eI4Dun5Xn 1YJuaGXL0adP2lqEIpVrlQ+ALACv9bghoQedf7KoDIM3UUe5mBDoXxcd3qyVHYhR1xbr 7OY9paguOB/6Zzj1MOiVqdHSY2PyXK8oLr5pI7u7dDYjW5uFHN0RyZyHHMFcROsryetb 5vuK6u27UJc3DiX50QMz6BpHp2PYRc+JPqNO0SlfwPmP7r9MtRQk0CMl7Co2cWIyOLX4 fppQ== X-Forwarded-Encrypted: i=1; AJvYcCXOJLKtZy3eyU7b4NWCmNTCZurqjOghJiVPR3O7EleNqPuy0cyn5xUQ6V0DWP/YI6SYlH5A9LVsTor5NI4=@vger.kernel.org X-Gm-Message-State: AOJu0Yw2y3MbYmuag9zUqf+X4AlI9PMFZMFWJXr+4PWuFExrwNQzA1To rue1uLx230Fte9PM5BKMoJjfz1tyblmSZooRaD95hTnuLATkKhoOCGwlV3VY3f7N9yx4XGH8lot SRKv+6H2YHw== X-Received: from dlbpy18.prod.google.com ([2002:a05:7022:e992:b0:11f:42e8:ad40]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a05:7022:6a0:b0:11b:9386:826c with SMTP id a92af1059eb24-124a00d64dbmr1945062c88.41.1769539545636; Tue, 27 Jan 2026 10:45:45 -0800 (PST) Date: Tue, 27 Jan 2026 10:44:41 -0800 In-Reply-To: <20260127184506.3059493-1-irogers@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260127184506.3059493-1-irogers@google.com> X-Mailer: git-send-email 2.52.0.457.g6b5491de43-goog Message-ID: <20260127184506.3059493-11-irogers@google.com> Subject: [PATCH v11 10/35] perf jevents: Add load store breakdown metrics ldst for AMD From: Ian Rogers To: Adrian Hunter , Alexander Shishkin , Arnaldo Carvalho de Melo , Benjamin Gray , Caleb Biggers , Edward Baker , Ian Rogers , Ingo Molnar , James Clark , Jing Zhang , Jiri Olsa , John Garry , Leo Yan , Namhyung Kim , Perry Taylor , Peter Zijlstra , Sandipan Das , Thomas Falcon , Weilin Wang , Xu Yang , linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Give breakdown of number of instructions. Use the counter mask (cmask) to show the number of cycles taken to retire the instructions. Reviewed-by: Sandipan Das Signed-off-by: Ian Rogers --- tools/perf/pmu-events/amd_metrics.py | 75 ++++++++++++++++++++++++++++ 1 file changed, 75 insertions(+) diff --git a/tools/perf/pmu-events/amd_metrics.py b/tools/perf/pmu-events/a= md_metrics.py index d71997177239..b3de74babe40 100755 --- a/tools/perf/pmu-events/amd_metrics.py +++ b/tools/perf/pmu-events/amd_metrics.py @@ -280,6 +280,80 @@ def AmdItlb(): ], description=3D"Instruction TLB breakdown") =20 =20 +def AmdLdSt() -> MetricGroup: + ldst_ld =3D Event("ls_dispatch.pure_ld", "ls_dispatch.ld_dispatch") + ldst_st =3D Event("ls_dispatch.pure_st", "ls_dispatch.store_dispatch") + ldst_ldc1 =3D Event(f"{ldst_ld}/cmask=3D1/") + ldst_stc1 =3D Event(f"{ldst_st}/cmask=3D1/") + ldst_ldc2 =3D Event(f"{ldst_ld}/cmask=3D2/") + ldst_stc2 =3D Event(f"{ldst_st}/cmask=3D2/") + ldst_ldc3 =3D Event(f"{ldst_ld}/cmask=3D3/") + ldst_stc3 =3D Event(f"{ldst_st}/cmask=3D3/") + ldst_cyc =3D Event("ls_not_halted_cyc") + + ld_rate =3D d_ratio(ldst_ld, interval_sec) + st_rate =3D d_ratio(ldst_st, interval_sec) + + ld_v1 =3D max(ldst_ldc1 - ldst_ldc2, 0) + ld_v2 =3D max(ldst_ldc2 - ldst_ldc3, 0) + ld_v3 =3D ldst_ldc3 + + st_v1 =3D max(ldst_stc1 - ldst_stc2, 0) + st_v2 =3D max(ldst_stc2 - ldst_stc3, 0) + st_v3 =3D ldst_stc3 + + return MetricGroup("lpm_ldst", [ + MetricGroup("lpm_ldst_total", [ + Metric("lpm_ldst_total_ld", "Number of loads dispatched per se= cond.", + ld_rate, "insns/sec"), + Metric("lpm_ldst_total_st", "Number of stores dispatched per s= econd.", + st_rate, "insns/sec"), + ]), + MetricGroup("lpm_ldst_percent_insn", [ + Metric("lpm_ldst_percent_insn_ld", + "Load instructions as a percentage of all instructions.= ", + d_ratio(ldst_ld, ins), "100%"), + Metric("lpm_ldst_percent_insn_st", + "Store instructions as a percentage of all instructions= .", + d_ratio(ldst_st, ins), "100%"), + ]), + MetricGroup("lpm_ldst_ret_loads_per_cycle", [ + Metric( + "lpm_ldst_ret_loads_per_cycle_1", + "Load instructions retiring in 1 cycle as a percentage of = all " + "unhalted cycles.", d_ratio(ld_v1, ldst_cyc), "100%"), + Metric( + "lpm_ldst_ret_loads_per_cycle_2", + "Load instructions retiring in 2 cycles as a percentage of= all " + "unhalted cycles.", d_ratio(ld_v2, ldst_cyc), "100%"), + Metric( + "lpm_ldst_ret_loads_per_cycle_3", + "Load instructions retiring in 3 or more cycles as a perce= ntage" + "of all unhalted cycles.", d_ratio(ld_v3, ldst_cyc), "100%= "), + ]), + MetricGroup("lpm_ldst_ret_stores_per_cycle", [ + Metric( + "lpm_ldst_ret_stores_per_cycle_1", + "Store instructions retiring in 1 cycle as a percentage of= all " + "unhalted cycles.", d_ratio(st_v1, ldst_cyc), "100%"), + Metric( + "lpm_ldst_ret_stores_per_cycle_2", + "Store instructions retiring in 2 cycles as a percentage o= f all " + "unhalted cycles.", d_ratio(st_v2, ldst_cyc), "100%"), + Metric( + "lpm_ldst_ret_stores_per_cycle_3", + "Store instructions retiring in 3 or more cycles as a perc= entage" + "of all unhalted cycles.", d_ratio(st_v3, ldst_cyc), "100%= "), + ]), + MetricGroup("lpm_ldst_insn_bt", [ + Metric("lpm_ldst_insn_bt_ld", "Number of instructions between = loads.", + d_ratio(ins, ldst_ld), "insns"), + Metric("lpm_ldst_insn_bt_st", "Number of instructions between = stores.", + d_ratio(ins, ldst_st), "insns"), + ]) + ], description=3D"Breakdown of load/store instructions") + + def AmdUpc() -> Metric: ops =3D Event("ex_ret_ops", "ex_ret_cops") upc =3D d_ratio(ops, smt_cycles) @@ -366,6 +440,7 @@ def main() -> None: AmdBr(), AmdDtlb(), AmdItlb(), + AmdLdSt(), AmdUpc(), Idle(), Rapl(), --=20 2.52.0.457.g6b5491de43-goog From nobody Sat Feb 7 09:20:46 2026 Received: from mail-dy1-f201.google.com (mail-dy1-f201.google.com [74.125.82.201]) (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 8B9451D45E8 for ; Tue, 27 Jan 2026 18:45:48 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.82.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769539549; cv=none; b=dqMdwQfZiutiVzQ9abSaLgon8f8QadP6n8mWjeFwYEj1mPkhe1hvZHGksARRW64O/gJopffs6rN7qLZp9OvISMfko6Gz7cpDhNmvQqFajnx14U1Tgowg7R1YeRIaaEt8A4S1/G5CQwe1rT6sh88h38bRAcYCsSU7NficWvCw+EI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769539549; c=relaxed/simple; bh=jGvHnBOIRlpXNzPDylmnrl70NxmK3iS0ZSa2PimW/OY=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=aQyfD1Du0R41hWRMHysZRKHS6z0+B/aCUla8n+voeRTf9ne0d8UYM21CFtJpiVYf01Xv8hJjjTXM1kmRcYwejKAx3PilzeOgFW07lhf2tjHSzyw/ZVjuZ5VKb4T/ybFZ+pWLBZJlbweDTzmQFIKqRGSIIFpv4D5OtkdQ/Y5E7XA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--irogers.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=Jnv4Werr; arc=none smtp.client-ip=74.125.82.201 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--irogers.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="Jnv4Werr" Received: by mail-dy1-f201.google.com with SMTP id 5a478bee46e88-2b724ff60e6so6241810eec.0 for ; Tue, 27 Jan 2026 10:45:48 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1769539548; x=1770144348; darn=vger.kernel.org; h=to:from:subject:message-id:references:mime-version:in-reply-to:date :from:to:cc:subject:date:message-id:reply-to; bh=/bQwBUeqFHmxPyvU6W3Kgyx2XHVX/3kNh3j54lLQrKs=; b=Jnv4WerrqrEB+YsRRRIJD7QS5NPatx5Rb+QBuP2d3EVlFHVjqVm6k/iQ8Fn5Kutw07 EuzHMlXG7WfjV+cWT4MvjYr1nQWKZqCrEJuwh1/2Y2EW7DwdWOm5+05hZQJgVF4FmzQ9 XaymvYzYFhURhy3Xim1ZihlCslpvYXphMQxPHEf1V9GVEP+X2xPCoCkPye8CbvlGJP87 aTBuEeitDpGklT3u1J/rWriUwmuBmqduPvmkWuaEqv0FWs3PlXdWKBjJPNQCeyg1EGoS 92rU4RV/Fz19/7vG/v4IWBUwYEvpVLs0lEqCXcl/uwBCk1XUjKdEvepBhUDMuxx9zvfU aXrA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1769539548; x=1770144348; h=to:from:subject:message-id:references:mime-version:in-reply-to:date :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=/bQwBUeqFHmxPyvU6W3Kgyx2XHVX/3kNh3j54lLQrKs=; b=mnFB/d+bTmNaHmcXSnT79OR4wVWemjhJCnFgUdgsFFWCTjE7cJDgsJ7PqqLB7TbhNL zkQEm08xFmKGsxMRTN4dkf5pguLx8Boe6RTVoiMI6OZOJRWl6vS5QR43w8Lt9WHKqCL3 V4Yp3YnUgVq1B3DcwGGX7rUOv+4X38DttTvdgi3Y7GIBIIkId4b9aXKTKSY+YSYI25vb XgvpcTgnwF4By1xRm3bbYWM3aaJEjCc79xdx4drsVIdcaQvsfXtr11INLe/z86Suv44N m75/dOV8CzjsPexujJpjmaP6g+kEIbJEFV5Se+UP8icUrhCwrZHO3HShC748DlOsb3g2 ytsw== X-Forwarded-Encrypted: i=1; AJvYcCX8NdJWncRJhFkm0RgMo/u2syLGi1L5VOZ6HLpixevUoB6gnS7gEwBwO2HWbKCg0XCea+/hldtaBN57Fdo=@vger.kernel.org X-Gm-Message-State: AOJu0YxhWIyuE4YDFEd94mQpr1/G02p9mdtYBnQizrUMj0IPkUm4qwH6 EtXVsAXvDErz/2y12lM3QCsalEjKpH0UirxENbwlUbxWbZ/wSFwHyRJElxTtvcgLEaIhgs7sxT2 wA0uieV/B4A== X-Received: from dyt2.prod.google.com ([2002:a05:693c:8082:b0:2b7:499d:745f]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a05:7300:e80c:b0:2b6:b23b:d488 with SMTP id 5a478bee46e88-2b78d98df7dmr2125109eec.25.1769539547575; Tue, 27 Jan 2026 10:45:47 -0800 (PST) Date: Tue, 27 Jan 2026 10:44:42 -0800 In-Reply-To: <20260127184506.3059493-1-irogers@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260127184506.3059493-1-irogers@google.com> X-Mailer: git-send-email 2.52.0.457.g6b5491de43-goog Message-ID: <20260127184506.3059493-12-irogers@google.com> Subject: [PATCH v11 11/35] perf jevents: Add context switch metrics for AMD From: Ian Rogers To: Adrian Hunter , Alexander Shishkin , Arnaldo Carvalho de Melo , Benjamin Gray , Caleb Biggers , Edward Baker , Ian Rogers , Ingo Molnar , James Clark , Jing Zhang , Jiri Olsa , John Garry , Leo Yan , Namhyung Kim , Perry Taylor , Peter Zijlstra , Sandipan Das , Thomas Falcon , Weilin Wang , Xu Yang , linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Metrics break down context switches for different kinds of instruction. Reviewed-by: Sandipan Das Signed-off-by: Ian Rogers --- tools/perf/pmu-events/amd_metrics.py | 33 ++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/tools/perf/pmu-events/amd_metrics.py b/tools/perf/pmu-events/a= md_metrics.py index b3de74babe40..83e77ccc059e 100755 --- a/tools/perf/pmu-events/amd_metrics.py +++ b/tools/perf/pmu-events/amd_metrics.py @@ -122,6 +122,38 @@ def AmdBr(): description=3D"breakdown of retired branch instruct= ions") =20 =20 +def AmdCtxSw() -> MetricGroup: + cs =3D Event("context\\-switches") + metrics =3D [ + Metric("lpm_cs_rate", "Context switches per second", + d_ratio(cs, interval_sec), "ctxsw/s") + ] + + ev =3D Event("instructions") + metrics.append(Metric("lpm_cs_instr", "Instructions per context switch= ", + d_ratio(ev, cs), "instr/cs")) + + ev =3D Event("cycles") + metrics.append(Metric("lpm_cs_cycles", "Cycles per context switch", + d_ratio(ev, cs), "cycles/cs")) + + ev =3D Event("ls_dispatch.pure_ld", "ls_dispatch.ld_dispatch") + metrics.append(Metric("lpm_cs_loads", "Loads per context switch", + d_ratio(ev, cs), "loads/cs")) + + ev =3D Event("ls_dispatch.pure_st", "ls_dispatch.store_dispatch") + metrics.append(Metric("lpm_cs_stores", "Stores per context switch", + d_ratio(ev, cs), "stores/cs")) + + ev =3D Event("ex_ret_brn_tkn") + metrics.append(Metric("lpm_cs_br_taken", "Branches taken per context s= witch", + d_ratio(ev, cs), "br_taken/cs")) + + return MetricGroup("lpm_cs", metrics, + description=3D("Number of context switches per seco= nd, instructions " + "retired & core cycles between context= switches")) + + def AmdDtlb() -> Optional[MetricGroup]: global _zen_model if _zen_model >=3D 4: @@ -438,6 +470,7 @@ def main() -> None: =20 all_metrics =3D MetricGroup("", [ AmdBr(), + AmdCtxSw(), AmdDtlb(), AmdItlb(), AmdLdSt(), --=20 2.52.0.457.g6b5491de43-goog From nobody Sat Feb 7 09:20:46 2026 Received: from mail-dy1-f201.google.com (mail-dy1-f201.google.com [74.125.82.201]) (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 980F1365A00 for ; Tue, 27 Jan 2026 18:45:50 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.82.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769539551; cv=none; b=J+MLRSXgpQPhNI9bOa3HW1j7HJ4SYBZmNk5XnsOH7ZMOGDOZ7qSYpPg3K+VeabG49qBuvsgK4hY7t1h8Xz0vI1sS0ZjozicJqwZm7RuBvArpramPTQuNCM52/AwO62ssvpg+ciD3XMvMMuwqgpMG6rFK12oGIzXVCs1SRBfNKQQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769539551; c=relaxed/simple; bh=4YZdNHoD4OVwl+Z+UboY1dxnW9GaDyHi2p47czxKHP8=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=XG7280QOqUWUzVxYs+pZQxdcJmU9Up7Ym5spG+3A3asPwXcFcuUhzOIH3ZR+1nYd4gxkyi81bzjTpCJbFkSJqwwnwLJrP8Yl81U0Py9DG1Z/KGTygYMQHFLxRevFoLn3HtK3qXrXtRcZHQEmcJdnmpsx0Gyb34h2x3WbYbDDEM0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--irogers.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=P8nUJ/nP; arc=none smtp.client-ip=74.125.82.201 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--irogers.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="P8nUJ/nP" Received: by mail-dy1-f201.google.com with SMTP id 5a478bee46e88-2b72b6fc371so4682753eec.0 for ; Tue, 27 Jan 2026 10:45:50 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1769539550; x=1770144350; darn=vger.kernel.org; h=to:from:subject:message-id:references:mime-version:in-reply-to:date :from:to:cc:subject:date:message-id:reply-to; bh=Ml2Rrb34ZIoAiVgzhWpgKhiTIZVKvjCF+KWI69P37pc=; b=P8nUJ/nPOWeLeOCSwadKKaS8IRtd9R/BFbLISxHtw6WHF7XrNox9ZPpCUtcKcYoHNY 2L5Q9VpgwAtV3zPRxzGNr0qfBiSYwFLSoqZnFbpiSQBFyW40EJnKolJilORB2m+fALLm 88QOI9XjfGUBxxP7nVHuTFc4/YHKnzcWFSEPlEYVcY1pfogjUI7bzJ7JzuyWoKXSjV49 qrn9WlviOqoNnFpvD0PCCrS/I53CcJS9BeL97NN/liHyGbLbAqF6buI34j5/318dstKS vUb5T3XTTs9/3qc5GoyTMuiZwpgWN9IzKenl4P2VLCSnlDpQpBMczO1gqZUCWsvxqcNn vWow== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1769539550; x=1770144350; h=to:from:subject:message-id:references:mime-version:in-reply-to:date :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=Ml2Rrb34ZIoAiVgzhWpgKhiTIZVKvjCF+KWI69P37pc=; b=HrX9EaLSSU87WnIJ3WWgz+DhHza33Yd7XcKIQ4Kxw/s6RdYkq5Uk7V7wWYXbyVXUKu ucVCgn8pSJQm/Fqz8uUldWg1jIDKEJvDUhP2q8kV6HJIjK/H/3lbVIVjx1QTH9Fwtur+ 5Khzj8VQiwyubnWcKNHgg/5Sf9o6Mc6R+YCtPoJ3fmwRphfGaQFw660w1ygMBXAJlf9i 7d0svUIQeF/55vLh/rHEdKkRY5AmqkUjL87a9fA8pjgYyN0rw4+VqXGw155YUmj3Ip85 ZiVlO3ffG2MGwmHmZg2GJQ3twOUHPxbYGl3aR3HTscnz7OBYLA3F1EsPvi93xA8+ilVr n7tA== X-Forwarded-Encrypted: i=1; AJvYcCW844dvJIiC/H3suCY47Mke2EZoIU4UQYpMhYw/rFfNGPTh0FYbVbTamKKr1p6UkiIptJjasnWNDYG8qgw=@vger.kernel.org X-Gm-Message-State: AOJu0YyhAoc4dQMxcCvs6bitZAfNDcSxu7pSKwDgxwl0KJAsLnktJanG Vw7/Gq2r/UJ1HLemL0xryIXQ4eEIYGwM+9Js+sdOIgXwnrlj9lON+1VQGudD6Y0O6w2hukcyw51 KM3Xrqm1ECg== X-Received: from dycnh8.prod.google.com ([2002:a05:7300:ce88:b0:2a4:6ffc:87c9]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a05:7301:688c:b0:2b6:f0fc:8c47 with SMTP id 5a478bee46e88-2b78d9147f6mr1565661eec.16.1769539549765; Tue, 27 Jan 2026 10:45:49 -0800 (PST) Date: Tue, 27 Jan 2026 10:44:43 -0800 In-Reply-To: <20260127184506.3059493-1-irogers@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260127184506.3059493-1-irogers@google.com> X-Mailer: git-send-email 2.52.0.457.g6b5491de43-goog Message-ID: <20260127184506.3059493-13-irogers@google.com> Subject: [PATCH v11 12/35] perf jevents: Add RAPL metrics for all Intel models From: Ian Rogers To: Adrian Hunter , Alexander Shishkin , Arnaldo Carvalho de Melo , Benjamin Gray , Caleb Biggers , Edward Baker , Ian Rogers , Ingo Molnar , James Clark , Jing Zhang , Jiri Olsa , John Garry , Leo Yan , Namhyung Kim , Perry Taylor , Peter Zijlstra , Sandipan Das , Thomas Falcon , Weilin Wang , Xu Yang , linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Add a 'cpu_power' metric group that computes the power consumption from RAPL events if they are present. Tested-by: Thomas Falcon Signed-off-by: Ian Rogers --- tools/perf/pmu-events/intel_metrics.py | 44 ++++++++++++++++++++++++-- 1 file changed, 41 insertions(+), 3 deletions(-) diff --git a/tools/perf/pmu-events/intel_metrics.py b/tools/perf/pmu-events= /intel_metrics.py index b287ef115193..61778deedfff 100755 --- a/tools/perf/pmu-events/intel_metrics.py +++ b/tools/perf/pmu-events/intel_metrics.py @@ -1,12 +1,48 @@ #!/usr/bin/env python3 # SPDX-License-Identifier: (LGPL-2.1 OR BSD-2-Clause) import argparse +import math import os -from metric import (JsonEncodeMetric, JsonEncodeMetricGroupDescriptions, L= oadEvents, - MetricGroup) +from metric import (d_ratio, has_event, Event, JsonEncodeMetric, JsonEncod= eMetricGroupDescriptions, + LoadEvents, Metric, MetricGroup, Select) =20 # Global command line arguments. _args =3D None +interval_sec =3D Event("duration_time") + + +def Rapl() -> MetricGroup: + """Processor power consumption estimate. + + Use events from the running average power limit (RAPL) driver. + """ + # Watts =3D joules/second + pkg =3D Event("power/energy\\-pkg/") + cond_pkg =3D Select(pkg, has_event(pkg), math.nan) + cores =3D Event("power/energy\\-cores/") + cond_cores =3D Select(cores, has_event(cores), math.nan) + ram =3D Event("power/energy\\-ram/") + cond_ram =3D Select(ram, has_event(ram), math.nan) + gpu =3D Event("power/energy\\-gpu/") + cond_gpu =3D Select(gpu, has_event(gpu), math.nan) + psys =3D Event("power/energy\\-psys/") + cond_psys =3D Select(psys, has_event(psys), math.nan) + scale =3D 2.3283064365386962890625e-10 + metrics =3D [ + Metric("lpm_cpu_power_pkg", "", + d_ratio(cond_pkg * scale, interval_sec), "Watts"), + Metric("lpm_cpu_power_cores", "", + d_ratio(cond_cores * scale, interval_sec), "Watts"), + Metric("lpm_cpu_power_ram", "", + d_ratio(cond_ram * scale, interval_sec), "Watts"), + Metric("lpm_cpu_power_gpu", "", + d_ratio(cond_gpu * scale, interval_sec), "Watts"), + Metric("lpm_cpu_power_psys", "", + d_ratio(cond_psys * scale, interval_sec), "Watts"), + ] + + return MetricGroup("lpm_cpu_power", metrics, + description=3D"Running Average Power Limit (RAPL) p= ower consumption estimates") =20 =20 def main() -> None: @@ -33,7 +69,9 @@ def main() -> None: directory =3D f"{_args.events_path}/x86/{_args.model}/" LoadEvents(directory) =20 - all_metrics =3D MetricGroup("", []) + all_metrics =3D MetricGroup("", [ + Rapl(), + ]) =20 if _args.metricgroups: print(JsonEncodeMetricGroupDescriptions(all_metrics)) --=20 2.52.0.457.g6b5491de43-goog From nobody Sat Feb 7 09:20:46 2026 Received: from mail-dl1-f73.google.com (mail-dl1-f73.google.com [74.125.82.73]) (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 39ADA36604D for ; Tue, 27 Jan 2026 18:45:52 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.82.73 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769539553; cv=none; b=tN92iLRwx5iwAth1aHUf9IVIOiCUjnRI6keND4h1RCDkTJB7pylcQlKl8txyS+PbJ0ARepRt6OcjqObrGI58Yu94JMxYTY3iPRMJZXruUs4AtU3Zod/IdreJC1A4C/uKN4V31sGq3ZK4aeuO+XnnrNzDsCWOJetdHsoK4gZJJ8I= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769539553; c=relaxed/simple; bh=4pM2tdD652IcZD8wzPhrvfuqgRtHqz0V8U/ipI7rM2A=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=Cp1Rv+UTI3e3Z5ggTG5XNfjp5hAouS0W0Do2vjLAGiHxXJ4BMk2csp7kemjUirJkJvMtu59waii+Mg+7vgvdm2TrcRh2axpP3Fk+/Y32Dc8VNAEPjsg41zLTT6Yw7y/nEHUwkmZrHO40Hgy9+jxI0TAWMZzi16P4v+BNfdy38zo= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--irogers.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=xx9+0cpc; arc=none smtp.client-ip=74.125.82.73 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--irogers.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="xx9+0cpc" Received: by mail-dl1-f73.google.com with SMTP id a92af1059eb24-12339eea50bso4655039c88.1 for ; Tue, 27 Jan 2026 10:45:52 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1769539551; x=1770144351; darn=vger.kernel.org; h=to:from:subject:message-id:references:mime-version:in-reply-to:date :from:to:cc:subject:date:message-id:reply-to; bh=L4BlKuWwvBoHJMjQiget3mJt2hAfQGaEdqNx0fF+IWg=; b=xx9+0cpcybFvuLWoQT8RRfDhgaNlnOkwxZQjO50hEE6pDmLeqlT2hkHpJ3PDAQ4GXK EdSCFRp+CzQdcypJ3CPdQ9+SVHGbkiJlrIv6pchsbgiT/dCchGFPhKgRp/uXwPfA/o/A byiX9xc077ZWjDZG2KBwyeVpECV8arW/tNEJ7Zs+K5k3X3QKLSXijzybu8wtPzFNAeMY SuZ9j9JSwM7P57ZZ8eYZ9wS/Smiy9nVA5ZwhbQRUXotPZXNCJYtOTPochASkQnmfEQ5Q 95ZV6GSZun4q684XZjbrUBCPwXuVmn46O+uJ4dZaSSl20nymbIUgPrUTeKQDvPseoc5M glQQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1769539551; x=1770144351; h=to:from:subject:message-id:references:mime-version:in-reply-to:date :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=L4BlKuWwvBoHJMjQiget3mJt2hAfQGaEdqNx0fF+IWg=; b=MxQ314h/yE4sFbWRUjrYv0fFRKjgIr96yk+zlJNDtFIAxHbOh89AglV9ogDo4q4egc c1hmqSnwhDJfOjNNReBIt37khnDvW5gOitkXOTIvXYHjoOw3WcAPrp3MnXknbXj7Eer6 UXm3aLQLH0sY9PQh02Shb48C67hp8h8CpQA4xY8wq9+YBdfwWaJXU3N9TZVxs+uZ2G+0 Dl6CdPvkIIBqZPGJjs1SfgfanJapJGL29gTthTaZN3Ma/cnOQ9hnih8HcFdHgcIwgYVL p7ge2RS6+tQnHsm0DVVjzAQyqryxAO86XkyouxIBEw/cjPsP6Et/tkX1VoLQjzSQgxfp t1WA== X-Forwarded-Encrypted: i=1; AJvYcCWOO3IeSr4/L6UkAXwlZLq6a9Zt0CTvVT+/aWnQ+8g8iVNqoEB1HYf904Ia38aUEB7ORMirYME8U8sgn5I=@vger.kernel.org X-Gm-Message-State: AOJu0Yz5Mxe9QQ3nHPeK3GFylVHUE020G5sdXT0H7rDqVQikRRsg7M2e gaZVV0t5VQPn2PzRF5Wc4IDsZuvK1MiCJShE0pVy+qM4PSzvsjPsBvBaxCwCsNE9v65t+pd2lE9 aksQLuiej1Q== X-Received: from dlbro6.prod.google.com ([2002:a05:7022:1586:b0:120:56a0:1dd9]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a05:7022:7a4:b0:11b:ceee:b78a with SMTP id a92af1059eb24-124a00aaff5mr1435298c88.19.1769539551401; Tue, 27 Jan 2026 10:45:51 -0800 (PST) Date: Tue, 27 Jan 2026 10:44:44 -0800 In-Reply-To: <20260127184506.3059493-1-irogers@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260127184506.3059493-1-irogers@google.com> X-Mailer: git-send-email 2.52.0.457.g6b5491de43-goog Message-ID: <20260127184506.3059493-14-irogers@google.com> Subject: [PATCH v11 13/35] perf jevents: Add idle metric for Intel models From: Ian Rogers To: Adrian Hunter , Alexander Shishkin , Arnaldo Carvalho de Melo , Benjamin Gray , Caleb Biggers , Edward Baker , Ian Rogers , Ingo Molnar , James Clark , Jing Zhang , Jiri Olsa , John Garry , Leo Yan , Namhyung Kim , Perry Taylor , Peter Zijlstra , Sandipan Das , Thomas Falcon , Weilin Wang , Xu Yang , linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Compute using the msr PMU the percentage of wallclock cycles where the CPUs are in a low power state. Tested-by: Thomas Falcon Signed-off-by: Ian Rogers --- tools/perf/pmu-events/intel_metrics.py | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/tools/perf/pmu-events/intel_metrics.py b/tools/perf/pmu-events= /intel_metrics.py index 61778deedfff..0cb7a38ad238 100755 --- a/tools/perf/pmu-events/intel_metrics.py +++ b/tools/perf/pmu-events/intel_metrics.py @@ -3,14 +3,25 @@ import argparse import math import os -from metric import (d_ratio, has_event, Event, JsonEncodeMetric, JsonEncod= eMetricGroupDescriptions, - LoadEvents, Metric, MetricGroup, Select) +from metric import (d_ratio, has_event, max, Event, JsonEncodeMetric, + JsonEncodeMetricGroupDescriptions, LoadEvents, Metric, + MetricGroup, Select) =20 # Global command line arguments. _args =3D None interval_sec =3D Event("duration_time") =20 =20 +def Idle() -> Metric: + cyc =3D Event("msr/mperf/") + tsc =3D Event("msr/tsc/") + low =3D max(tsc - cyc, 0) + return Metric( + "lpm_idle", + "Percentage of total wallclock cycles where CPUs are in low power = state (C1 or deeper sleep state)", + d_ratio(low, tsc), "100%") + + def Rapl() -> MetricGroup: """Processor power consumption estimate. =20 @@ -70,6 +81,7 @@ def main() -> None: LoadEvents(directory) =20 all_metrics =3D MetricGroup("", [ + Idle(), Rapl(), ]) =20 --=20 2.52.0.457.g6b5491de43-goog From nobody Sat Feb 7 09:20:46 2026 Received: from mail-dl1-f73.google.com (mail-dl1-f73.google.com [74.125.82.73]) (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 32189366053 for ; Tue, 27 Jan 2026 18:45:54 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.82.73 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769539555; cv=none; b=QWGe0AXkhij3LQ4McpCtb73LMGPPtNJADtj5PZzi5xZb3mFALqChlRbsMl2q7aJtpC7dPhMSX9iu+HBGRJM0AeaCgMHgFPZR6l8zc6OM3jjvW4xZF8aXzqpHKWwPkTrI++AFWGUh8h/c+iXfWLFxQdL057OBWNPsnwcJ2rlxP2Y= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769539555; c=relaxed/simple; bh=bp7wUYlwFQ9u8p8yyH/LWJ+nT+cGLAukFIDqJoid0TM=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=lIYT46d8V/TwUt+AFNjyPpPxw5R7d9dIp9ye0DaAbCxtmmx1fozhXR2pQ5x4r2T0EEQ/jbwY08iS6WpIlHmVIgoiZUROS8+yJ0isyMVAy35ogzt5sQOpvKOngpK1zc1b/8LJpY3p3ldIJicPCVe650KSJPzjlvfABs3l7ytmYcA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--irogers.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=1lmNwqFL; arc=none smtp.client-ip=74.125.82.73 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--irogers.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="1lmNwqFL" Received: by mail-dl1-f73.google.com with SMTP id a92af1059eb24-124743cf760so5120637c88.1 for ; Tue, 27 Jan 2026 10:45:53 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1769539553; x=1770144353; darn=vger.kernel.org; h=to:from:subject:message-id:references:mime-version:in-reply-to:date :from:to:cc:subject:date:message-id:reply-to; bh=ZlwDSvXJTA5pQkOVBh7Jgz1PRQVOZ1b1qdOJqVwcy94=; b=1lmNwqFLo6EicyM7YjFBIxNJfVMyw8vRNWwjaMRI6NhrXuorxRrVQ6wpdu5/BW307D RKHIV8u3d8ZbKNynJeQdyyFBsL75HRwS7GPibuY22HCdJO2DifiKxqicxPsHZM2CndYI CLJnJlpPKlS4qdBBIVWKDg+EjVMmJepQo65IwZdooFYbpPH0jQHyMHJTKOUK/eRedC8e m83L/qYJM6ws7Xov5lvPdr4t/yqVGIByOyhbTj/wylrLSIIKUJcFpns7GTpb2eL7fQUe VHAX1YaXbQCQJLCz1n8uzq3WQ+9PbOtth7Nnb+UfgZSfC4kbuYWIOfpuOXwu5NOhB16c WGow== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1769539553; x=1770144353; h=to:from:subject:message-id:references:mime-version:in-reply-to:date :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=ZlwDSvXJTA5pQkOVBh7Jgz1PRQVOZ1b1qdOJqVwcy94=; b=lb43qT3SBPRz1VYtKqrqRDU6xVpNkzfh39+HB9euTJAiuJlfbg17rx3OBuGk/ybkuu Q4iIwV+hd7v851B5rZaVnP3M9pA9iDA9Ao319t5qHLZb01f4IKezheuLpkqhXdB2TeOw xMPCRTt31nDq7Rxs0MmVvECxvWUi+LUIsl0nslcIvw9LURe7ODWSUnCOGeCo6vq4wWWq Q6nMcSaOGmRPRGO61YWz51n8Q3r24GQgvlECc6oJMGBHofbfWVowIfsaCExx/s1CUcGt fXDTVqvJVPsZHOl1JzJioCjc12wKUyp4jFVzpNZAGoNb6d2TDpgJ/4ReudkFvS8GHEZT H76Q== X-Forwarded-Encrypted: i=1; AJvYcCVuhpjojc6RGXNinIvXlQ/Q1sQTK6dKSflLTmGgyi4GpvRdH4Qw/UcDpTc5ZWWCPzdl255f9BlhOpaLf+s=@vger.kernel.org X-Gm-Message-State: AOJu0YwMvVDnTPAj0FiBYftVluxyBw/8kiaq5zaHamuhHGj5OmwCoxvG pyWwSduLStiPrRzD8xuuk9cA/S96F7H6a2PLxWVevk+XoyqTjrc3BIWMGxJrq9nViyRv5TMMWVE oMuxV1W7RdQ== X-Received: from dlbrs24.prod.google.com ([2002:a05:7022:f698:b0:124:9f56:9bb7]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a05:7022:e0e:b0:11b:c1ab:bdd4 with SMTP id a92af1059eb24-124a00dfa79mr1639604c88.38.1769539553255; Tue, 27 Jan 2026 10:45:53 -0800 (PST) Date: Tue, 27 Jan 2026 10:44:45 -0800 In-Reply-To: <20260127184506.3059493-1-irogers@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260127184506.3059493-1-irogers@google.com> X-Mailer: git-send-email 2.52.0.457.g6b5491de43-goog Message-ID: <20260127184506.3059493-15-irogers@google.com> Subject: [PATCH v11 14/35] perf jevents: Add CheckPmu to see if a PMU is in loaded json events From: Ian Rogers To: Adrian Hunter , Alexander Shishkin , Arnaldo Carvalho de Melo , Benjamin Gray , Caleb Biggers , Edward Baker , Ian Rogers , Ingo Molnar , James Clark , Jing Zhang , Jiri Olsa , John Garry , Leo Yan , Namhyung Kim , Perry Taylor , Peter Zijlstra , Sandipan Das , Thomas Falcon , Weilin Wang , Xu Yang , linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" CheckPmu can be used to determine if hybrid events are present, allowing for hybrid conditional metrics/events/pmus to be premised on the json files rather than hard coded tables. Tested-by: Thomas Falcon Signed-off-by: Ian Rogers --- tools/perf/pmu-events/metric.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/tools/perf/pmu-events/metric.py b/tools/perf/pmu-events/metric= .py index e33e163b2815..62d1a1e1d458 100644 --- a/tools/perf/pmu-events/metric.py +++ b/tools/perf/pmu-events/metric.py @@ -8,10 +8,12 @@ import re from enum import Enum from typing import Dict, List, Optional, Set, Tuple, Union =20 +all_pmus =3D set() all_events =3D set() =20 def LoadEvents(directory: str) -> None: """Populate a global set of all known events for the purpose of validati= ng Event names""" + global all_pmus global all_events all_events =3D { "context\\-switches", @@ -26,6 +28,8 @@ def LoadEvents(directory: str) -> None: if filename.endswith(".json"): try: for x in json.load(open(f"{directory}/{filename}")): + if "Unit" in x: + all_pmus.add(x["Unit"]) if "EventName" in x: all_events.add(x["EventName"]) elif "ArchStdEvent" in x: @@ -36,6 +40,10 @@ def LoadEvents(directory: str) -> None: pass =20 =20 +def CheckPmu(name: str) -> bool: + return name in all_pmus + + def CheckEvent(name: str) -> bool: """Check the event name exists in the set of all loaded events""" global all_events --=20 2.52.0.457.g6b5491de43-goog From nobody Sat Feb 7 09:20:47 2026 Received: from mail-dy1-f201.google.com (mail-dy1-f201.google.com [74.125.82.201]) (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 1351E366577 for ; Tue, 27 Jan 2026 18:45:55 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.82.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769539557; cv=none; b=E0PFFYPx5b5TO/cUrLEn0MzVTl+81Act07H76daNIhWt/HcO3r4JoILTgqJqw2E9NKQUQ+51pm78cpzXrgIyGetAhcCiPtLKqk7dfccnEWkXkCJLLfel4FKRzGsKX6cE+IZepMXqSUGdEnYvwDzD+nHJHdqxJUwwVg16+HNRUl0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769539557; c=relaxed/simple; bh=YxZ/OsA3lmCo6/plyihzmoA72k7p/jAWTQVj1BOnHOA=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=pMwcIkWMA+jeIa+giyG9WKpEFFayAuKJdEKiQMwLrz4h5AP0uqXsOc3xX+SAWN0oSZq4JhLv6jzaulgQJpHt47xDCaGbB1pyfW7nUP3xu1WMtqw/dS6gCHIFkoart47zRtGTq+COR2JxARjtUwMqf9AoZf23IuIeNmwEvIBZxaQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--irogers.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=mQyAx5cX; arc=none smtp.client-ip=74.125.82.201 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--irogers.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="mQyAx5cX" Received: by mail-dy1-f201.google.com with SMTP id 5a478bee46e88-2b722bc1be1so27388608eec.0 for ; Tue, 27 Jan 2026 10:45:55 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1769539555; x=1770144355; darn=vger.kernel.org; h=to:from:subject:message-id:references:mime-version:in-reply-to:date :from:to:cc:subject:date:message-id:reply-to; bh=OecttgXJ1EvArNGliMlBZCK1j+fgZte6pz1jbYKv0lI=; b=mQyAx5cXZHO2nMklf0R0c5wQXehqmPUXsXaf/EqJcGyq50DecZ1lk/6xYvFCPl6bFm 1usWfWfaFuQtuJSkcF0T7zbFEK6eG8HuCi/tNFR19ky5Zd9rrYdgant6+RMqXAXZzaJh Ov+w+1nkQHXXr3W6eeayDe96+0Vd9IqHeqQarAqNpucOK19wl/+3eXKeNsXzRcQ6Tg6R m+VJb79U5PpMyYlOh9q7JYYu3YLZoyAuLksU319Hv9K6aNEq0ADiPSDw5joEyOFWptT+ 9M46dg/jo56ZbHvZHEHBcUsygFHiNzPrq0u8QHPh6t3SG/rZVB+Al1FJU6qiChFs99KH rMrg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1769539555; x=1770144355; h=to:from:subject:message-id:references:mime-version:in-reply-to:date :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=OecttgXJ1EvArNGliMlBZCK1j+fgZte6pz1jbYKv0lI=; b=vquwP7iiCT/6Uy4PLYE4EX602WcLku/hArK4NmdUI0WlQVXMr89FHqMk3E1LLH1s2d deBn7UWKAcqNGwmCMbBVRdLSKqTH81guWY0oi4flYbJlOaGhxgYQO3c1JVUxnaaQpbwU TapUpoSKSR3Gs6jHP3KZQHMoInYurDMsHttTAUQSsVvaT+iiDUfI+5GytI6P9DN4ghRP 48GVqL5XRzCgkqo4HuNgirC3s24W2bhWKJk8q0L2GQlOmAH9ZXHhSSDEneNmmhEstCe7 K0wzF6v+TmPyaTUTlhd9PQDq/bDjUWDNrM+42kGedi4lM96r13V3/+gB5C2EG7i6X7kP fUvQ== X-Forwarded-Encrypted: i=1; AJvYcCWrGjRfSfMItcQiNEcHeJ3Uu7bv9VFGg7jrBZI/Kc0cxn9hbFmtlmhmFKO5iArO63gOSCXGcSQfH2o/P0Q=@vger.kernel.org X-Gm-Message-State: AOJu0Yz3eoJEvP41CzrfWSTUODxjeV6aYQvkpTnekJz6eVjPfi565qFP Cxnagr4qY2AAXvmcVCMWBgudNgv97FoNg3Um6mE0uf20IRi1t1s5xyemrdb4VxO+jx2PJgih7jT MxBBvQH87sg== X-Received: from dybkl23.prod.google.com ([2002:a05:7301:d17:b0:2b6:b833:a98d]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a05:7300:d02:b0:2a4:61d1:f451 with SMTP id 5a478bee46e88-2b78d8da0a6mr1537521eec.16.1769539555104; Tue, 27 Jan 2026 10:45:55 -0800 (PST) Date: Tue, 27 Jan 2026 10:44:46 -0800 In-Reply-To: <20260127184506.3059493-1-irogers@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260127184506.3059493-1-irogers@google.com> X-Mailer: git-send-email 2.52.0.457.g6b5491de43-goog Message-ID: <20260127184506.3059493-16-irogers@google.com> Subject: [PATCH v11 15/35] perf jevents: Add smi metric group for Intel models From: Ian Rogers To: Adrian Hunter , Alexander Shishkin , Arnaldo Carvalho de Melo , Benjamin Gray , Caleb Biggers , Edward Baker , Ian Rogers , Ingo Molnar , James Clark , Jing Zhang , Jiri Olsa , John Garry , Leo Yan , Namhyung Kim , Perry Taylor , Peter Zijlstra , Sandipan Das , Thomas Falcon , Weilin Wang , Xu Yang , linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Allow duplicated metric to be dropped from json files. Tested-by: Thomas Falcon Signed-off-by: Ian Rogers --- tools/perf/pmu-events/intel_metrics.py | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/tools/perf/pmu-events/intel_metrics.py b/tools/perf/pmu-events= /intel_metrics.py index 0cb7a38ad238..94604b1b07d8 100755 --- a/tools/perf/pmu-events/intel_metrics.py +++ b/tools/perf/pmu-events/intel_metrics.py @@ -3,9 +3,9 @@ import argparse import math import os -from metric import (d_ratio, has_event, max, Event, JsonEncodeMetric, +from metric import (d_ratio, has_event, max, CheckPmu, Event, JsonEncodeMe= tric, JsonEncodeMetricGroupDescriptions, LoadEvents, Metric, - MetricGroup, Select) + MetricGroup, MetricRef, Select) =20 # Global command line arguments. _args =3D None @@ -56,6 +56,25 @@ def Rapl() -> MetricGroup: description=3D"Running Average Power Limit (RAPL) p= ower consumption estimates") =20 =20 +def Smi() -> MetricGroup: + pmu =3D "" if CheckPmu("cpu_core") else "cpu" + aperf =3D Event('msr/aperf/') + cycles =3D Event('cycles') + smi_num =3D Event('msr/smi/') + smi_cycles =3D Select(Select((aperf - cycles) / aperf, smi_num > 0, 0), + has_event(aperf), + 0) + return MetricGroup('smi', [ + Metric('smi_num', 'Number of SMI interrupts.', + Select(smi_num, has_event(smi_num), 0), 'SMI#'), + # Note, the smi_cycles "Event" is really a reference to the metric. + Metric('smi_cycles', + 'Percentage of cycles spent in System Management Interrupts= . ' + f'Requires /sys/bus/event_source/devices/{pmu}/freeze_on_sm= i to be 1.', + smi_cycles, '100%', threshold=3D(MetricRef('smi_cycles') > = 0.10)) + ], description=3D'System Management Interrupt metrics') + + def main() -> None: global _args =20 @@ -83,6 +102,7 @@ def main() -> None: all_metrics =3D MetricGroup("", [ Idle(), Rapl(), + Smi(), ]) =20 if _args.metricgroups: --=20 2.52.0.457.g6b5491de43-goog From nobody Sat Feb 7 09:20:47 2026 Received: from mail-dy1-f201.google.com (mail-dy1-f201.google.com [74.125.82.201]) (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 CEE6535EDB2 for ; Tue, 27 Jan 2026 18:45:57 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.82.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769539559; cv=none; b=IlkKaXejTJ1IsyF0EdDnlmZqjcYQNbh3unm7QvK0zr2DQodMsfx+UnvCho+C+Ng8f1eLGHSpG3ttAEmKaoywn4MOaEE3ImDC75x5IKwkRg2x6Tnhc8+9jH3FP/3RsqZ4wtag0JXaNvyXilNrKTMP5KBnKM0nJHFo7QLa0DIxU8g= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769539559; c=relaxed/simple; bh=Tg0u9xgINTvX1H6FGlOJHenHBu6latCGVtmFgleOH30=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=XJkcIPzipNZXfS8ToIvvlDSFgOOPR3gUS5AkXI7z4NQ5BP2luFlxVzto5hfXeWgHPMuYKdR9xKKPNV9DkuWGgQSL+bV4nMsmqbPkSFSMAuYpYFcKf63P16otmuv2nX3oQu72SWssVuwxKS+p8tibYf+GJE3kbUtckyVSo8NU5Go= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--irogers.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=bEwtQxXX; arc=none smtp.client-ip=74.125.82.201 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--irogers.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="bEwtQxXX" Received: by mail-dy1-f201.google.com with SMTP id 5a478bee46e88-2b70d8095daso5754028eec.1 for ; Tue, 27 Jan 2026 10:45:57 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1769539557; x=1770144357; darn=vger.kernel.org; h=to:from:subject:message-id:references:mime-version:in-reply-to:date :from:to:cc:subject:date:message-id:reply-to; bh=U6hcFPxi9yX1voNwD9X4pnHV7jvDzOlcX84euGlTBqw=; b=bEwtQxXXM9DPR/NmuS4/qRLFp6uPpjwRTzH6Vod4t81L94wWcZ2Co1p27k8+dJsEJV huWuQKBPuyNT+I/hnE4JaVs2xeJoIAwhnJpSEzKx9crfwokXw30Xwvxh6umUuRGqvvk/ xQYZfrilku3x+MRUikx2mCNNzuO37tLnTUpqjg+g6MMH3svHSl+f6A+0JcrVFAymv6wl 0R3q/sf5QAg0ZCdL6WFn2ZTbq5hfwIvNVvCt/hIUdyrkxhh7gnwaqRnaVBciDreKA0nG fREi93xNwhra9Cm2zyxkteUJfWUmUs//qSN8Bzi8uxTk29VSIplI3hugL9x9e52zV1W8 L5ZQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1769539557; x=1770144357; h=to:from:subject:message-id:references:mime-version:in-reply-to:date :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=U6hcFPxi9yX1voNwD9X4pnHV7jvDzOlcX84euGlTBqw=; b=jYZjiWhkAeBQiKQ8MFzPrvmVuqj93EJgM/cyX8hh8VeT5XFo2vWk0m/wleu3MGgm1n v8zk8DzXqt0cUlV5XEaZnghz9LcE2kuQ3gQag7/SV2E0JOEtSlsC+UnKi5p8HC4C7rRP pYGqWr7LY2Dm0gYsk73d/mKQT4Dh7K3QaV/oDi2Cp5qyXpVzPZ8BMoIggGkcNfF20smC AKoC/0/xUD1veiULPZKUR3Ec3lMIRjxHF85+v/QcTejV+11EcTXc4n4nXIRej8viXcQs 6IRiz9P2f5l3mSltin+snmQYtNg9egVK2UyswCKQT9oN/ecP5STdcS1BTFaqhSCGiZRg ooEQ== X-Forwarded-Encrypted: i=1; AJvYcCVznUFlOh1Y+3o1rgMda7Op1PXBzEVNsOrld3rKQ5DELxUwIulwcPy2hMGrLAwaEOvXFWMVPni5G6qZBjA=@vger.kernel.org X-Gm-Message-State: AOJu0Yz4GvEi8TgAlk3rP4Sy5H4odMj5Gk+8iX/FBLkwxlUzr6lIjO2W PkTwFV38i0U8y+ZEUp0RsQiJlucn635YjIvCenguwo6+J1Si3yxBSE/JHjqaFeKsyOApdhRNMg6 bQkeUMgZd7w== X-Received: from dlai16.prod.google.com ([2002:a05:701b:2710:b0:11a:51f9:d69]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a05:7022:1284:b0:123:35a4:e8be with SMTP id a92af1059eb24-124a006ef1cmr1274154c88.13.1769539557024; Tue, 27 Jan 2026 10:45:57 -0800 (PST) Date: Tue, 27 Jan 2026 10:44:47 -0800 In-Reply-To: <20260127184506.3059493-1-irogers@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260127184506.3059493-1-irogers@google.com> X-Mailer: git-send-email 2.52.0.457.g6b5491de43-goog Message-ID: <20260127184506.3059493-17-irogers@google.com> Subject: [PATCH v11 16/35] perf jevents: Mark metrics with experimental events as experimental From: Ian Rogers To: Adrian Hunter , Alexander Shishkin , Arnaldo Carvalho de Melo , Benjamin Gray , Caleb Biggers , Edward Baker , Ian Rogers , Ingo Molnar , James Clark , Jing Zhang , Jiri Olsa , John Garry , Leo Yan , Namhyung Kim , Perry Taylor , Peter Zijlstra , Sandipan Das , Thomas Falcon , Weilin Wang , Xu Yang , linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" When metrics are made with experimental events it is desirable the metric description also carries this information in case of metric inaccuracies. Suggested-by: Perry Taylor Tested-by: Thomas Falcon Signed-off-by: Ian Rogers --- tools/perf/pmu-events/metric.py | 44 +++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) diff --git a/tools/perf/pmu-events/metric.py b/tools/perf/pmu-events/metric= .py index 62d1a1e1d458..2029b6e28365 100644 --- a/tools/perf/pmu-events/metric.py +++ b/tools/perf/pmu-events/metric.py @@ -10,11 +10,13 @@ from typing import Dict, List, Optional, Set, Tuple, Un= ion =20 all_pmus =3D set() all_events =3D set() +experimental_events =3D set() =20 def LoadEvents(directory: str) -> None: """Populate a global set of all known events for the purpose of validati= ng Event names""" global all_pmus global all_events + global experimental_events all_events =3D { "context\\-switches", "cpu\\-cycles", @@ -32,6 +34,8 @@ def LoadEvents(directory: str) -> None: all_pmus.add(x["Unit"]) if "EventName" in x: all_events.add(x["EventName"]) + if "Experimental" in x and x["Experimental"] =3D=3D "1": + experimental_events.add(x["EventName"]) elif "ArchStdEvent" in x: all_events.add(x["ArchStdEvent"]) except json.decoder.JSONDecodeError: @@ -61,6 +65,18 @@ def CheckEvent(name: str) -> bool: return name in all_events =20 =20 +def IsExperimentalEvent(name: str) -> bool: + global experimental_events + if ':' in name: + # Remove trailing modifier. + name =3D name[:name.find(':')] + elif '/' in name: + # Name could begin with a PMU or an event, for now assume it is not ex= perimental. + return False + + return name in experimental_events + + class MetricConstraint(Enum): GROUPED_EVENTS =3D 0 NO_GROUP_EVENTS =3D 1 @@ -82,6 +98,10 @@ class Expression: """Returns a simplified version of self.""" raise NotImplementedError() =20 + def HasExperimentalEvents(self) -> bool: + """Are experimental events used in the expression?""" + raise NotImplementedError() + def Equals(self, other) -> bool: """Returns true when two expressions are the same.""" raise NotImplementedError() @@ -249,6 +269,9 @@ class Operator(Expression): =20 return Operator(self.operator, lhs, rhs) =20 + def HasExperimentalEvents(self) -> bool: + return self.lhs.HasExperimentalEvents() or self.rhs.HasExperimentalEve= nts() + def Equals(self, other: Expression) -> bool: if isinstance(other, Operator): return self.operator =3D=3D other.operator and self.lhs.Equals( @@ -297,6 +320,10 @@ class Select(Expression): =20 return Select(true_val, cond, false_val) =20 + def HasExperimentalEvents(self) -> bool: + return (self.cond.HasExperimentalEvents() or self.true_val.HasExperime= ntalEvents() or + self.false_val.HasExperimentalEvents()) + def Equals(self, other: Expression) -> bool: if isinstance(other, Select): return self.cond.Equals(other.cond) and self.false_val.Equals( @@ -345,6 +372,9 @@ class Function(Expression): =20 return Function(self.fn, lhs, rhs) =20 + def HasExperimentalEvents(self) -> bool: + return self.lhs.HasExperimentalEvents() or (self.rhs and self.rhs.HasE= xperimentalEvents()) + def Equals(self, other: Expression) -> bool: if isinstance(other, Function): result =3D self.fn =3D=3D other.fn and self.lhs.Equals(other.lhs) @@ -384,6 +414,9 @@ class Event(Expression): global all_events raise Exception(f"No event {error} in:\n{all_events}") =20 + def HasExperimentalEvents(self) -> bool: + return IsExperimentalEvent(self.name) + def ToPerfJson(self): result =3D re.sub('/', '@', self.name) return result @@ -416,6 +449,9 @@ class MetricRef(Expression): def Simplify(self) -> Expression: return self =20 + def HasExperimentalEvents(self) -> bool: + return False + def Equals(self, other: Expression) -> bool: return isinstance(other, MetricRef) and self.name =3D=3D other.name =20 @@ -443,6 +479,9 @@ class Constant(Expression): def Simplify(self) -> Expression: return self =20 + def HasExperimentalEvents(self) -> bool: + return False + def Equals(self, other: Expression) -> bool: return isinstance(other, Constant) and self.value =3D=3D other.value =20 @@ -465,6 +504,9 @@ class Literal(Expression): def Simplify(self) -> Expression: return self =20 + def HasExperimentalEvents(self) -> bool: + return False + def Equals(self, other: Expression) -> bool: return isinstance(other, Literal) and self.value =3D=3D other.value =20 @@ -527,6 +569,8 @@ class Metric: self.name =3D name self.description =3D description self.expr =3D expr.Simplify() + if self.expr.HasExperimentalEvents(): + self.description +=3D " (metric should be considered experimental as= it contains experimental events)." # Workraound valid_only_metric hiding certain metrics based on unit. scale_unit =3D scale_unit.replace('/sec', ' per sec') if scale_unit[0].isdigit(): --=20 2.52.0.457.g6b5491de43-goog From nobody Sat Feb 7 09:20:47 2026 Received: from mail-dl1-f74.google.com (mail-dl1-f74.google.com [74.125.82.74]) (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 A3C2435E546 for ; Tue, 27 Jan 2026 18:45:59 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.82.74 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769539561; cv=none; b=Pcm/Ldtfb0NxciV5WZnYsClzTAm8OqQBWqtv3/TVJB3u1bKe/LbOzgc0kA8EqZsMfijLAW6MIpualQq9ZUtK6ARqP3l5D/hF4SGuRfAdQFGTxSKL7/EQ/1sVjfJnSjvIudMzXzBjRL1aZ6BmYqpyALr3MhKLBmgvTgj+Ud098RU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769539561; c=relaxed/simple; bh=e5HCiCuPrRhKQ5C7WVfdNlfmfEV5F34Gu+L6jhwfY7U=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=D647QocbL4L19Du2lVqStwIWzVUzvFimPMdK+mGkXLiy5qy47jy0guy6y4y+2Vuni522xSOLnotFK0L/fu7JbE/g/g5GlA9m7YN5ECIhHVhyrJQorNkpnBhszVWPvwTjwSDTNGlY8pp1xf11fGeApQ4+HN3FCx9ybKyBjoJOWtg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--irogers.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=iyWNnWy8; arc=none smtp.client-ip=74.125.82.74 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--irogers.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="iyWNnWy8" Received: by mail-dl1-f74.google.com with SMTP id a92af1059eb24-124743cf760so5121205c88.1 for ; Tue, 27 Jan 2026 10:45:59 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1769539559; x=1770144359; darn=vger.kernel.org; h=to:from:subject:message-id:references:mime-version:in-reply-to:date :from:to:cc:subject:date:message-id:reply-to; bh=xk6S0HgVzRXTxY7M8qgn9fyMiMtdB0df3ARIvh/RRkI=; b=iyWNnWy8qctDii97Ydrn813G+YM3mMrucrxEeTnP7Fs0E84t17nu+ML+hHQcXijbHl XvhP+1lPZhebDyMgbhf58vLz4FvQQZ0AA9SM71pN73cbwyQbM5yNh6izCj7Vg+6NN+Ka 5eYbkscCoecSa0xPIgYUQ/r7kTry1+GH60WBsEHGMoUYrUlhE8oWJ9namcfluHklxWnK PSCcN44ri8LfdbKND/utCTRG3uu7EYXAqdiM1w2M3xcDSZgH2RBFi+u7oFfI82zH3qNz kjjIDhhRfWf4wMm6/Zv+o6cMELiow/JNI807Lbst04otvAB1gSVn3dC5egVTXkTPhBJR Yuag== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1769539559; x=1770144359; h=to:from:subject:message-id:references:mime-version:in-reply-to:date :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=xk6S0HgVzRXTxY7M8qgn9fyMiMtdB0df3ARIvh/RRkI=; b=wPZPY/61J03WTe4TLnC12SKNExZLQMkdaiwmDMBhuTSrEYlraH+sUyKcBGTMjG5dNx hFov/W1ku0XtwLFrrXmUJfk6knWCZtoymzxgYpHrX2uzELXGTiJmMp7RkJbnqqR7Lqu7 wcydTmL2hvB/cd46RS+JWObLzJOqLB5NbWveDVyabpa2qLvLKCAyq/kwyqqbaM9jHVtR eoNmlPV6nMRo772rlJZ53ldbs20oTiZXetOsp+Xlt6rO1Rwf5PSqeab+6DUVu1LYY+ix lVeks007Hk+st3q/hiu8R3iIxYfoZ0glDVXmm3Z8Th9oL/zVlMJchR574FK0rFZaj4q0 kp+A== X-Forwarded-Encrypted: i=1; AJvYcCXLIEM+cDTLm+siGkAiJoLt4Ncn9qnueJ3eA8zGPpWvJQS6yyyiPgQoBuILwrIF/TyFhNWFmn7xAR2RSPg=@vger.kernel.org X-Gm-Message-State: AOJu0YxKn4iaeAlRijYBOAIGsJnK5VUIubJA5QXINhXiTlOK6IGp8yBW HblJLYuGy9ay1kKDlGsQs8kaN+yBUvC1Ti2jnwmd48Ua+mxM9CZMaPXPZnksfzBhYCTs2C0ohHu GHbVco4Xqyg== X-Received: from dlbvv5.prod.google.com ([2002:a05:7022:5f05:b0:124:a551:3498]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a05:7022:670c:b0:119:e56b:c752 with SMTP id a92af1059eb24-124a00c6f30mr1509152c88.23.1769539558630; Tue, 27 Jan 2026 10:45:58 -0800 (PST) Date: Tue, 27 Jan 2026 10:44:48 -0800 In-Reply-To: <20260127184506.3059493-1-irogers@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260127184506.3059493-1-irogers@google.com> X-Mailer: git-send-email 2.52.0.457.g6b5491de43-goog Message-ID: <20260127184506.3059493-18-irogers@google.com> Subject: [PATCH v11 17/35] perf jevents: Add tsx metric group for Intel models From: Ian Rogers To: Adrian Hunter , Alexander Shishkin , Arnaldo Carvalho de Melo , Benjamin Gray , Caleb Biggers , Edward Baker , Ian Rogers , Ingo Molnar , James Clark , Jing Zhang , Jiri Olsa , John Garry , Leo Yan , Namhyung Kim , Perry Taylor , Peter Zijlstra , Sandipan Das , Thomas Falcon , Weilin Wang , Xu Yang , linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Allow duplicated metric to be dropped from json files. Detect when TSX is supported by a model by using the json events, use sysfs events at runtime as hypervisors, etc. may disable TSX. Add CheckPmu to metric to determine if which PMUs have been associated with the loaded events. Tested-by: Thomas Falcon Signed-off-by: Ian Rogers --- tools/perf/pmu-events/intel_metrics.py | 50 ++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) diff --git a/tools/perf/pmu-events/intel_metrics.py b/tools/perf/pmu-events= /intel_metrics.py index 94604b1b07d8..05f3d94ec5d5 100755 --- a/tools/perf/pmu-events/intel_metrics.py +++ b/tools/perf/pmu-events/intel_metrics.py @@ -3,6 +3,7 @@ import argparse import math import os +from typing import Optional from metric import (d_ratio, has_event, max, CheckPmu, Event, JsonEncodeMe= tric, JsonEncodeMetricGroupDescriptions, LoadEvents, Metric, MetricGroup, MetricRef, Select) @@ -75,6 +76,54 @@ def Smi() -> MetricGroup: ], description=3D'System Management Interrupt metrics') =20 =20 +def Tsx() -> Optional[MetricGroup]: + pmu =3D "cpu_core" if CheckPmu("cpu_core") else "cpu" + cycles =3D Event('cycles') + cycles_in_tx =3D Event(f'{pmu}/cycles\\-t/') + cycles_in_tx_cp =3D Event(f'{pmu}/cycles\\-ct/') + try: + # Test if the tsx event is present in the json, prefer the + # sysfs version so that we can detect its presence at runtime. + transaction_start =3D Event("RTM_RETIRED.START") + transaction_start =3D Event(f'{pmu}/tx\\-start/') + except: + return None + + elision_start =3D None + try: + # Elision start isn't supported by all models, but we'll not + # generate the tsx_cycles_per_elision metric in that + # case. Again, prefer the sysfs encoding of the event. + elision_start =3D Event("HLE_RETIRED.START") + elision_start =3D Event(f'{pmu}/el\\-start/') + except: + pass + + return MetricGroup('transaction', [ + Metric('tsx_transactional_cycles', + 'Percentage of cycles within a transaction region.', + Select(cycles_in_tx / cycles, has_event(cycles_in_tx), 0), + '100%'), + Metric('tsx_aborted_cycles', 'Percentage of cycles in aborted tran= sactions.', + Select(max(cycles_in_tx - cycles_in_tx_cp, 0) / cycles, + has_event(cycles_in_tx), + 0), + '100%'), + Metric('tsx_cycles_per_transaction', + 'Number of cycles within a transaction divided by the numbe= r of transactions.', + Select(cycles_in_tx / transaction_start, + has_event(cycles_in_tx), + 0), + "cycles / transaction"), + Metric('tsx_cycles_per_elision', + 'Number of cycles within a transaction divided by the numbe= r of elisions.', + Select(cycles_in_tx / elision_start, + has_event(elision_start), + 0), + "cycles / elision") if elision_start else None, + ], description=3D"Breakdown of transactional memory statistics") + + def main() -> None: global _args =20 @@ -103,6 +152,7 @@ def main() -> None: Idle(), Rapl(), Smi(), + Tsx(), ]) =20 if _args.metricgroups: --=20 2.52.0.457.g6b5491de43-goog From nobody Sat Feb 7 09:20:47 2026 Received: from mail-dl1-f74.google.com (mail-dl1-f74.google.com [74.125.82.74]) (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 1CB3B346AC3 for ; Tue, 27 Jan 2026 18:46:01 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.82.74 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769539563; cv=none; b=FtSwCfNm8ZaEHxFLi1fu01ABxu+HicREy8bYjwTqrIoacrqX3WA3Bj33WeSAPBFKXG4TEbHAMVYNJqRPZvOLVXCWXsT0zd+EwgxYYGEJ8RKebavuO5LsMqLldF+oW+mcyDbeJPxncmogUZ/C0C+6X5lpGtIM+544rnwR7wL08jo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769539563; c=relaxed/simple; bh=SqSW1HSI4Y1aSQ8k/4kIp/osnr+X4b4UKAj2lYUJFSY=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=j7YQpCXYst/3VeYu3xCi6eBkqdaaG4ALqEfkkCdFCT7ftt2msXSJd1VAW1fifpEcnrp8HHmb42+Hsp+u9tETifyTbdimKVoFl2DlpKx4QaXmumgKAEM4XzZXOTDJDQ7MBqbCGMENnXr68xfdawj/C/MwhviQ2xz0I95KQVLGg6c= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--irogers.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=GMPw6g1S; arc=none smtp.client-ip=74.125.82.74 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--irogers.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="GMPw6g1S" Received: by mail-dl1-f74.google.com with SMTP id a92af1059eb24-1247bb4db53so7858625c88.1 for ; Tue, 27 Jan 2026 10:46:01 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1769539561; x=1770144361; darn=vger.kernel.org; h=to:from:subject:message-id:references:mime-version:in-reply-to:date :from:to:cc:subject:date:message-id:reply-to; bh=fOdr8IbPINiK2ARzYXL2NZXJz57sKNu7nLLXlg9pgVg=; b=GMPw6g1SnxDJ7P6GLwOB1J6u/mwdCJKkBJQbRJ+DzrkWRz610f4L2WPcAEQ8DTCZvR QB8WzoNpQh/n5D+3GNCpTo9Rh0vFndrVbJKZQZIsKPTCKuc/GAAv4pH/27sXu/MT/4bf veiPpNihqHb+m2v5RIRPDNOkVBkL7q1LuW1qt0h41ZW5cA2zTzGU+XZOPjzc2jr9+z5Y yKLKfbEjwQFYlI/M1EoB0m41D9uAX3HSIJIbRv6XB14LrWfnvQQkS3zVU6baDirKreu2 YglAShTRj6p4xr7ZVL+dBKJglbPNyutMcxfe4Ffv2LTnICuz8vvS9EJf4jGLxkybTg5X kVxQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1769539561; x=1770144361; h=to:from:subject:message-id:references:mime-version:in-reply-to:date :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=fOdr8IbPINiK2ARzYXL2NZXJz57sKNu7nLLXlg9pgVg=; b=UX52HkYhooceeVbFtKiS73qkWh/DbTjjGb02oaml6l9+esQ1oRgEU6vaeeYsEcW7ko 2Oy7LylKkrnHg0eJF3Dbb3HLrSNRlkANBs6qDHimjnu6spP54b+Cgv46+1aDGTh/z2cJ wzYTUAs7DRcQgPV93Ps0A9Qp3QypwvNnKQhpFMIXnU2Rar65bDzoPasGdLdiK3XrVwDt oU+F1ms5YXRdZD68XRwZHD3kW4djYRzw3Q3TFnGG4XFt1QP9iNEeaQPJNihHfTP7mb47 WyKxAqJg/VG9+rXJBy51XWrn8HhDxtv1Gxa+V3efJ1nrzQJ7ZcFAFVAw/ize+9s6zyjH NjuA== X-Forwarded-Encrypted: i=1; AJvYcCUCmYV55cpr6pIgvaFTDpY1nl6kLudyaiq6XuqyQVtJF2j43tXyNyHf9rBeBAki5qTL+k7l9/YvwkwOOM0=@vger.kernel.org X-Gm-Message-State: AOJu0YyZcsIRpQm31v1b/3DOvIc6EXNoODMl7BJABe7BIDo8HI9wd9r/ wEBVGZPUDzYmoY+BWMayV2fzO5BlZ0v0grt8Fc589bx4/hN/TaT4vN2flAUiWuKN3iXzgjrtPCY MaH/bNqxO8g== X-Received: from dlbou13.prod.google.com ([2002:a05:7022:110d:b0:120:5c35:c798]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a05:7022:925:b0:119:e55a:9be7 with SMTP id a92af1059eb24-124a008b0dbmr1761211c88.3.1769539560860; Tue, 27 Jan 2026 10:46:00 -0800 (PST) Date: Tue, 27 Jan 2026 10:44:49 -0800 In-Reply-To: <20260127184506.3059493-1-irogers@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260127184506.3059493-1-irogers@google.com> X-Mailer: git-send-email 2.52.0.457.g6b5491de43-goog Message-ID: <20260127184506.3059493-19-irogers@google.com> Subject: [PATCH v11 18/35] perf jevents: Add br metric group for branch statistics on Intel From: Ian Rogers To: Adrian Hunter , Alexander Shishkin , Arnaldo Carvalho de Melo , Benjamin Gray , Caleb Biggers , Edward Baker , Ian Rogers , Ingo Molnar , James Clark , Jing Zhang , Jiri Olsa , John Garry , Leo Yan , Namhyung Kim , Perry Taylor , Peter Zijlstra , Sandipan Das , Thomas Falcon , Weilin Wang , Xu Yang , linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The br metric group for branches itself comprises metric groups for total, taken, conditional, fused and far metric groups using json events. Conditional taken and not taken metrics are specific to Icelake and later generations, so the presence of the event is used to determine whether the metric should exist. Tested-by: Thomas Falcon Signed-off-by: Ian Rogers --- tools/perf/pmu-events/intel_metrics.py | 138 +++++++++++++++++++++++++ 1 file changed, 138 insertions(+) diff --git a/tools/perf/pmu-events/intel_metrics.py b/tools/perf/pmu-events= /intel_metrics.py index 05f3d94ec5d5..e1944d821248 100755 --- a/tools/perf/pmu-events/intel_metrics.py +++ b/tools/perf/pmu-events/intel_metrics.py @@ -124,6 +124,143 @@ def Tsx() -> Optional[MetricGroup]: ], description=3D"Breakdown of transactional memory statistics") =20 =20 +def IntelBr(): + ins =3D Event("instructions") + + def Total() -> MetricGroup: + br_all =3D Event("BR_INST_RETIRED.ALL_BRANCHES", "BR_INST_RETIRED.= ANY") + br_m_all =3D Event("BR_MISP_RETIRED.ALL_BRANCHES", + "BR_INST_RETIRED.MISPRED", + "BR_MISP_EXEC.ANY") + br_clr =3D None + try: + br_clr =3D Event("BACLEARS.ANY", "BACLEARS.ALL") + except: + pass + + br_r =3D d_ratio(br_all, interval_sec) + ins_r =3D d_ratio(ins, br_all) + misp_r =3D d_ratio(br_m_all, br_all) + clr_r =3D d_ratio(br_clr, interval_sec) if br_clr else None + + return MetricGroup("lpm_br_total", [ + Metric("lpm_br_total_retired", + "The number of branch instructions retired per second."= , br_r, + "insn/s"), + Metric( + "lpm_br_total_mispred", + "The number of branch instructions retired, of any type, t= hat were " + "not correctly predicted as a percentage of all branch ins= trucions.", + misp_r, "100%"), + Metric("lpm_br_total_insn_between_branches", + "The number of instructions divided by the number of br= anches.", + ins_r, "insn"), + Metric("lpm_br_total_insn_fe_resteers", + "The number of resync branches per second.", clr_r, "re= q/s" + ) if clr_r else None + ]) + + def Taken() -> MetricGroup: + br_all =3D Event("BR_INST_RETIRED.ALL_BRANCHES", "BR_INST_RETIRED.= ANY") + br_m_tk =3D None + try: + br_m_tk =3D Event("BR_MISP_RETIRED.NEAR_TAKEN", + "BR_MISP_RETIRED.TAKEN_JCC", + "BR_INST_RETIRED.MISPRED_TAKEN") + except: + pass + br_r =3D d_ratio(br_all, interval_sec) + ins_r =3D d_ratio(ins, br_all) + misp_r =3D d_ratio(br_m_tk, br_all) if br_m_tk else None + return MetricGroup("lpm_br_taken", [ + Metric("lpm_br_taken_retired", + "The number of taken branches that were retired per sec= ond.", + br_r, "insn/s"), + Metric( + "lpm_br_taken_mispred", + "The number of retired taken branch instructions that were= " + "mispredicted as a percentage of all taken branches.", mis= p_r, + "100%") if misp_r else None, + Metric( + "lpm_br_taken_insn_between_branches", + "The number of instructions divided by the number of taken= branches.", + ins_r, "insn"), + ]) + + def Conditional() -> Optional[MetricGroup]: + try: + br_cond =3D Event("BR_INST_RETIRED.COND", + "BR_INST_RETIRED.CONDITIONAL", + "BR_INST_RETIRED.TAKEN_JCC") + br_m_cond =3D Event("BR_MISP_RETIRED.COND", + "BR_MISP_RETIRED.CONDITIONAL", + "BR_MISP_RETIRED.TAKEN_JCC") + except: + return None + + br_cond_nt =3D None + br_m_cond_nt =3D None + try: + br_cond_nt =3D Event("BR_INST_RETIRED.COND_NTAKEN") + br_m_cond_nt =3D Event("BR_MISP_RETIRED.COND_NTAKEN") + except: + pass + br_r =3D d_ratio(br_cond, interval_sec) + ins_r =3D d_ratio(ins, br_cond) + misp_r =3D d_ratio(br_m_cond, br_cond) + taken_metrics =3D [ + Metric("lpm_br_cond_retired", "Retired conditional branch inst= ructions.", + br_r, "insn/s"), + Metric("lpm_br_cond_insn_between_branches", + "The number of instructions divided by the number of co= nditional " + "branches.", ins_r, "insn"), + Metric("lpm_br_cond_mispred", + "Retired conditional branch instructions mispredicted a= s a " + "percentage of all conditional branches.", misp_r, "100= %"), + ] + if not br_m_cond_nt: + return MetricGroup("lpm_br_cond", taken_metrics) + + br_r =3D d_ratio(br_cond_nt, interval_sec) + ins_r =3D d_ratio(ins, br_cond_nt) + misp_r =3D d_ratio(br_m_cond_nt, br_cond_nt) + + not_taken_metrics =3D [ + Metric("lpm_br_cond_retired", "Retired conditional not taken b= ranch instructions.", + br_r, "insn/s"), + Metric("lpm_br_cond_insn_between_branches", + "The number of instructions divided by the number of no= t taken conditional " + "branches.", ins_r, "insn"), + Metric("lpm_br_cond_mispred", + "Retired not taken conditional branch instructions misp= redicted as a " + "percentage of all not taken conditional branches.", mi= sp_r, "100%"), + ] + return MetricGroup("lpm_br_cond", [ + MetricGroup("lpm_br_cond_nt", not_taken_metrics), + MetricGroup("lpm_br_cond_tkn", taken_metrics), + ]) + + def Far() -> Optional[MetricGroup]: + try: + br_far =3D Event("BR_INST_RETIRED.FAR_BRANCH") + except: + return None + + br_r =3D d_ratio(br_far, interval_sec) + ins_r =3D d_ratio(ins, br_far) + return MetricGroup("lpm_br_far", [ + Metric("lpm_br_far_retired", "Retired far control transfers pe= r second.", + br_r, "insn/s"), + Metric( + "lpm_br_far_insn_between_branches", + "The number of instructions divided by the number of far b= ranches.", + ins_r, "insn"), + ]) + + return MetricGroup("lpm_br", [Total(), Taken(), Conditional(), Far()], + description=3D"breakdown of retired branch instruct= ions") + + def main() -> None: global _args =20 @@ -153,6 +290,7 @@ def main() -> None: Rapl(), Smi(), Tsx(), + IntelBr(), ]) =20 if _args.metricgroups: --=20 2.52.0.457.g6b5491de43-goog From nobody Sat Feb 7 09:20:47 2026 Received: from mail-dy1-f202.google.com (mail-dy1-f202.google.com [74.125.82.202]) (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 480E1367F36 for ; Tue, 27 Jan 2026 18:46:04 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.82.202 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769539565; cv=none; b=amD3x5mvJaX/OldPVtn1ys+n2/CTycnMfrNkXSYQ8tFzXKU0EhLwoaj/FytYkq6FqC2oAYmfGvu3PLtTS2vdI9HPNcVTDyQC3dvtYr0Wp+knncbbQPcvXjA/xdFzYArMlzOZQjxJHhGXfBJdfEbf4p1cMmlmJpEfu3WIAOV0IHU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769539565; c=relaxed/simple; bh=CtVMYcUIf02+ZMTzUrQLC0XZE4+iMH9mNrvHBr7BiZ8=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=sVXlnyGy74fF9RUjI2M7azg7tmXyWRnkNdQPL8Z8mubcmuWa+wtL0xhMCDV6kCEQSPUz7mk+weCMUwwbSldol7udemgsV+XvSnKsyA7RZjGF7TTJIOS2zYqKWEAXyfwJyfTKIiFHQk/Nwdw2uT5kH+WS6vER5p1n1hYgTmUc/tE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--irogers.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=vx1G+l96; arc=none smtp.client-ip=74.125.82.202 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--irogers.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="vx1G+l96" Received: by mail-dy1-f202.google.com with SMTP id 5a478bee46e88-2b70d8095daso5754124eec.1 for ; Tue, 27 Jan 2026 10:46:03 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1769539563; x=1770144363; darn=vger.kernel.org; h=to:from:subject:message-id:references:mime-version:in-reply-to:date :from:to:cc:subject:date:message-id:reply-to; bh=VK0zyNurabiFsImDIZqSBtyLaLOCoRSnfPTqeYDaNRE=; b=vx1G+l96Dvhv8yZslPpp2XFzzZqfBfqUZl7BS0cS9a1hirSKzq0U80I3C9oJebp3PA oCXN+rYKmrqNK0vTHavGYvg46I+OWUcrtbTLQAjysfeFYyceb6efo5oujYy0kAZaS+IM 9X/ttypwUylU6Xarfz+8WruwyK1I+COYBL/55185EYMsjZzpCMX9nGSYHGSqZDkVwYAf POfszWMRHYWbjV8ao3mKzAEOgf6g/5kL4kB9NsQIzccTf85BXEGdrHk8OrNMN73COu5p 00C9mAt3clKK9Mj1lMdG6rQQhYujeN0thQYBpFiYXtE1hSDUHDAA99cHA2KemqoRiMcY 7JpQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1769539563; x=1770144363; h=to:from:subject:message-id:references:mime-version:in-reply-to:date :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=VK0zyNurabiFsImDIZqSBtyLaLOCoRSnfPTqeYDaNRE=; b=c3jhVtyVfNNeft50qoZlCN1iI8SHFRNXzLdZCGEN5rxYiK+u/QbJr4tuQCBKq75+M5 zGbMva+dssFv8Z4ior/tOmDzmTxlH8B7RCCIJsVrZqCC4PK6rHUAnEuqWcwF88uSHjSu 2sCbUI6I+Mz73/ZY9nSN5ygYQUvlMBDSJ2j0A2nrYhSx1b8jjyWPjNc10y4eV9v7Vxlo HpA4Uw9EH69zKH7o4BL7ei+g8VItmhmOnQ3li4eDkgrngxz1RqMwmY33S4eDvHaLuCzg zBSiJDrYkzKaK4fSeJSHLlFGkf+Hw/eP+TXUHjoZaYB3b1yVIsphYZMnsdbBUg4dAVYf 2Dig== X-Forwarded-Encrypted: i=1; AJvYcCVGdF/+y+/G+/szdglZkU4oQ9E1WkpkfYmgNmdqCQvuDFKgFvBQUkqDekPpYUKOxuGrETzlUK9A5he+jiM=@vger.kernel.org X-Gm-Message-State: AOJu0YwjorIZPqT/eTGX2NldInwD41WSRiZdQMuJZamZCX4aLo/apHEO UUilk+a59v3Nz1MW99a6uFp8fKW8saOUx8bqfUtnQatyRRmXH3pWGyXLmJichzhco5rW5mwHJqI 7IVHYoxmKUQ== X-Received: from dybpe6.prod.google.com ([2002:a05:7301:4586:b0:2b7:4bcf:315a]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a05:7300:ad09:b0:2a4:3593:ddd9 with SMTP id 5a478bee46e88-2b78d8d38c2mr1529991eec.6.1769539562969; Tue, 27 Jan 2026 10:46:02 -0800 (PST) Date: Tue, 27 Jan 2026 10:44:50 -0800 In-Reply-To: <20260127184506.3059493-1-irogers@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260127184506.3059493-1-irogers@google.com> X-Mailer: git-send-email 2.52.0.457.g6b5491de43-goog Message-ID: <20260127184506.3059493-20-irogers@google.com> Subject: [PATCH v11 19/35] perf jevents: Add software prefetch (swpf) metric group for Intel From: Ian Rogers To: Adrian Hunter , Alexander Shishkin , Arnaldo Carvalho de Melo , Benjamin Gray , Caleb Biggers , Edward Baker , Ian Rogers , Ingo Molnar , James Clark , Jing Zhang , Jiri Olsa , John Garry , Leo Yan , Namhyung Kim , Perry Taylor , Peter Zijlstra , Sandipan Das , Thomas Falcon , Weilin Wang , Xu Yang , linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Add metrics that breakdown software prefetch instruction use. Tested-by: Thomas Falcon Signed-off-by: Ian Rogers --- tools/perf/pmu-events/intel_metrics.py | 66 ++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) diff --git a/tools/perf/pmu-events/intel_metrics.py b/tools/perf/pmu-events= /intel_metrics.py index e1944d821248..919a058c343a 100755 --- a/tools/perf/pmu-events/intel_metrics.py +++ b/tools/perf/pmu-events/intel_metrics.py @@ -261,6 +261,71 @@ def IntelBr(): description=3D"breakdown of retired branch instruct= ions") =20 =20 +def IntelSwpf() -> Optional[MetricGroup]: + ins =3D Event("instructions") + try: + s_ld =3D Event("MEM_INST_RETIRED.ALL_LOADS", + "MEM_UOPS_RETIRED.ALL_LOADS") + s_nta =3D Event("SW_PREFETCH_ACCESS.NTA") + s_t0 =3D Event("SW_PREFETCH_ACCESS.T0") + s_t1 =3D Event("SW_PREFETCH_ACCESS.T1_T2") + s_w =3D Event("SW_PREFETCH_ACCESS.PREFETCHW") + except: + return None + + all_sw =3D s_nta + s_t0 + s_t1 + s_w + swp_r =3D d_ratio(all_sw, interval_sec) + ins_r =3D d_ratio(ins, all_sw) + ld_r =3D d_ratio(s_ld, all_sw) + + return MetricGroup("lpm_swpf", [ + MetricGroup("lpm_swpf_totals", [ + Metric("lpm_swpf_totals_exec", "Software prefetch instructions= per second", + swp_r, "swpf/s"), + Metric("lpm_swpf_totals_insn_per_pf", + "Average number of instructions between software prefet= ches", + ins_r, "insn/swpf"), + Metric("lpm_swpf_totals_loads_per_pf", + "Average number of loads between software prefetches", + ld_r, "loads/swpf"), + ]), + MetricGroup("lpm_swpf_bkdwn", [ + MetricGroup("lpm_swpf_bkdwn_nta", [ + Metric("lpm_swpf_bkdwn_nta_per_swpf", + "Software prefetch NTA instructions as a percent of= all prefetch instructions", + d_ratio(s_nta, all_sw), "100%"), + Metric("lpm_swpf_bkdwn_nta_rate", + "Software prefetch NTA instructions per second", + d_ratio(s_nta, interval_sec), "insn/s"), + ]), + MetricGroup("lpm_swpf_bkdwn_t0", [ + Metric("lpm_swpf_bkdwn_t0_per_swpf", + "Software prefetch T0 instructions as a percent of = all prefetch instructions", + d_ratio(s_t0, all_sw), "100%"), + Metric("lpm_swpf_bkdwn_t0_rate", + "Software prefetch T0 instructions per second", + d_ratio(s_t0, interval_sec), "insn/s"), + ]), + MetricGroup("lpm_swpf_bkdwn_t1_t2", [ + Metric("lpm_swpf_bkdwn_t1_t2_per_swpf", + "Software prefetch T1 or T2 instructions as a perce= nt of all prefetch instructions", + d_ratio(s_t1, all_sw), "100%"), + Metric("lpm_swpf_bkdwn_t1_t2_rate", + "Software prefetch T1 or T2 instructions per second= ", + d_ratio(s_t1, interval_sec), "insn/s"), + ]), + MetricGroup("lpm_swpf_bkdwn_w", [ + Metric("lpm_swpf_bkdwn_w_per_swpf", + "Software prefetch W instructions as a percent of a= ll prefetch instructions", + d_ratio(s_w, all_sw), "100%"), + Metric("lpm_swpf_bkdwn_w_rate", + "Software prefetch W instructions per second", + d_ratio(s_w, interval_sec), "insn/s"), + ]), + ]), + ], description=3D"Software prefetch instruction breakdown") + + def main() -> None: global _args =20 @@ -291,6 +356,7 @@ def main() -> None: Smi(), Tsx(), IntelBr(), + IntelSwpf(), ]) =20 if _args.metricgroups: --=20 2.52.0.457.g6b5491de43-goog From nobody Sat Feb 7 09:20:47 2026 Received: from mail-dy1-f201.google.com (mail-dy1-f201.google.com [74.125.82.201]) (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 CAC7A367F2A for ; Tue, 27 Jan 2026 18:46:05 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.82.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769539567; cv=none; b=NxQx3pDiF4bQFeYz4qbmgfn6JJ2guDBCxhQMEMMo1bdCjdloEx0X1YtQNf4Q0yopcaiOafMY9AmqRh+ulJVun3xVyG+oKe2OP1PyfemygmXlIhamjoF49dlEBIR3une531pp3SC7xhedd+dDnZ6KCtavCs+iMJeNw20GOoAh2mM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769539567; c=relaxed/simple; bh=G/uAvahxqJcRd5BleQ08IDyOIhEFgPbCXkArIUPFs8I=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=MRJWm4QamQbaWKrzxN5WmTga/wldVUL0UUYUr1b72G1JpfTHVujFiSXb0TmPp1GNdAR53NbyJKsbLXI2K7tMZPVBDDhKta0Cp/XpnIeZiiWcW/vmN/CTFXMq/WG7DC0eGijxbK5Gk4wWctdLx1IPYB6Q3MMtB/MjmEew14x5Mbg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--irogers.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=FxyKjzvW; arc=none smtp.client-ip=74.125.82.201 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--irogers.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="FxyKjzvW" Received: by mail-dy1-f201.google.com with SMTP id 5a478bee46e88-2b715b26fc3so8096215eec.1 for ; Tue, 27 Jan 2026 10:46:05 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1769539565; x=1770144365; darn=vger.kernel.org; h=to:from:subject:message-id:references:mime-version:in-reply-to:date :from:to:cc:subject:date:message-id:reply-to; bh=ojqL+aHY7ws3pOSR/jykm3GApScz0VMEtLVUVjH0CII=; b=FxyKjzvWvevzn8Dy+YPVFyFWeyI6JQjbOCOdc9cEDjlvwbyrPcaxWJNjSUdOyc1Dvd GORKO1t31FC3LaX+SkFUMCnfRKr0iXnit3G0Sn4vddssruFhKRboQ7ylEI+L8eu5U8Xc 4YeSB5cw6KDr8+AF/j24KWrQ0v1vP89CL55u/7kphIl1L4OV2hpOaA88wHIe0RKjjRcS 1iL2fTtvlU9SILQD/1Rzaa9MEvkBOw5VWBrC69+ZhizHGdIadPFVdzy+dOHaUuxwym7t gLDDYiWT6be5tB1FEMrlLqPK7TUYVN8mQVAb81vfxRxpw2LFg/BRv4sy22n7CRbbvMt5 9UoQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1769539565; x=1770144365; h=to:from:subject:message-id:references:mime-version:in-reply-to:date :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=ojqL+aHY7ws3pOSR/jykm3GApScz0VMEtLVUVjH0CII=; b=tase7jsoBi6NZWae2BYL3AEpxh84SvglZfN6ZFTotFeG8MKaDgwC2KT3qymVj9NTJp tmCKKQqJMxT4IKa5DNAmnOTIjYesySW2W38jqUdriW9N9mBBchdT2xjO1TyNAGiR4xDD trMMYeeDi9noRzq3tweM4QWH+k6apO8nsER4TZa3hI/BGGGG17NGA8FsTDckAV+hY3Vb QgKPbfVn7GNMCLyUj5PDlqCsSrZ6cDI6SykjrXgWA9cAY9iia3QO/q1InHEWrZZd0t2f Itgs+6nvtgJ/OwYWXIo0SZq/btwctW6X/Er6/72NK+MvloCWKhu1VVuv1WT4fstDJaG+ oOCQ== X-Forwarded-Encrypted: i=1; AJvYcCViOyZ4kcRMQSzxuL9/Psj6ET/tggIoA8OElQwOCT91npDFaQz/f9ZzxpWR3fAUbhKuwtLh8Trw20Iqbtg=@vger.kernel.org X-Gm-Message-State: AOJu0Yy4gyEZbUiw1lbMiajrfwabQSOlOEMooBIOf0W5o9oC9D9qRAik 4oyc6wIY9XgGbtDBvdNOV2dV8Fu/2egXkWFn0i76z3i4dLmjb4y/oM8IKE7Qsvf2bBZWvsC2cYZ nANLiPJyegA== X-Received: from dymh30.prod.google.com ([2002:a05:7300:1c1e:b0:2ab:9e42:f552]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a05:7300:230b:b0:2b0:520c:df62 with SMTP id 5a478bee46e88-2b78d9193bdmr1734981eec.19.1769539564966; Tue, 27 Jan 2026 10:46:04 -0800 (PST) Date: Tue, 27 Jan 2026 10:44:51 -0800 In-Reply-To: <20260127184506.3059493-1-irogers@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260127184506.3059493-1-irogers@google.com> X-Mailer: git-send-email 2.52.0.457.g6b5491de43-goog Message-ID: <20260127184506.3059493-21-irogers@google.com> Subject: [PATCH v11 20/35] perf jevents: Add ports metric group giving utilization on Intel From: Ian Rogers To: Adrian Hunter , Alexander Shishkin , Arnaldo Carvalho de Melo , Benjamin Gray , Caleb Biggers , Edward Baker , Ian Rogers , Ingo Molnar , James Clark , Jing Zhang , Jiri Olsa , John Garry , Leo Yan , Namhyung Kim , Perry Taylor , Peter Zijlstra , Sandipan Das , Thomas Falcon , Weilin Wang , Xu Yang , linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The ports metric group contains a metric for each port giving its utilization as a ratio of cycles. The metrics are created by looking for UOPS_DISPATCHED.PORT events. Tested-by: Thomas Falcon Signed-off-by: Ian Rogers --- tools/perf/pmu-events/intel_metrics.py | 35 ++++++++++++++++++++++++-- 1 file changed, 33 insertions(+), 2 deletions(-) diff --git a/tools/perf/pmu-events/intel_metrics.py b/tools/perf/pmu-events= /intel_metrics.py index 919a058c343a..7fcc0a1c544d 100755 --- a/tools/perf/pmu-events/intel_metrics.py +++ b/tools/perf/pmu-events/intel_metrics.py @@ -1,12 +1,14 @@ #!/usr/bin/env python3 # SPDX-License-Identifier: (LGPL-2.1 OR BSD-2-Clause) import argparse +import json import math import os +import re from typing import Optional from metric import (d_ratio, has_event, max, CheckPmu, Event, JsonEncodeMe= tric, - JsonEncodeMetricGroupDescriptions, LoadEvents, Metric, - MetricGroup, MetricRef, Select) + JsonEncodeMetricGroupDescriptions, Literal, LoadEvents, + Metric, MetricGroup, MetricRef, Select) =20 # Global command line arguments. _args =3D None @@ -261,6 +263,34 @@ def IntelBr(): description=3D"breakdown of retired branch instruct= ions") =20 =20 +def IntelPorts() -> Optional[MetricGroup]: + pipeline_events =3D json.load( + open(f"{_args.events_path}/x86/{_args.model}/pipeline.json")) + + core_cycles =3D Event("CPU_CLK_UNHALTED.THREAD_P_ANY", + "CPU_CLK_UNHALTED.DISTRIBUTED", + "cycles") + # Number of CPU cycles scaled for SMT. + smt_cycles =3D Select(core_cycles / 2, Literal("#smt_on"), core_cycles) + + metrics =3D [] + for x in pipeline_events: + if "EventName" in x and re.search("^UOPS_DISPATCHED.PORT", x["Even= tName"]): + name =3D x["EventName"] + port =3D re.search(r"(PORT_[0-9].*)", name).group(0).lower() + if name.endswith("_CORE"): + cyc =3D core_cycles + else: + cyc =3D smt_cycles + metrics.append(Metric(f"lpm_{port}", f"{port} utilization (hig= her is better)", + d_ratio(Event(name), cyc), "100%")) + if len(metrics) =3D=3D 0: + return None + + return MetricGroup("lpm_ports", metrics, "functional unit (port) utili= zation -- " + "fraction of cycles each port is utilized (higher i= s better)") + + def IntelSwpf() -> Optional[MetricGroup]: ins =3D Event("instructions") try: @@ -356,6 +386,7 @@ def main() -> None: Smi(), Tsx(), IntelBr(), + IntelPorts(), IntelSwpf(), ]) =20 --=20 2.52.0.457.g6b5491de43-goog From nobody Sat Feb 7 09:20:47 2026 Received: from mail-dl1-f74.google.com (mail-dl1-f74.google.com [74.125.82.74]) (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 053B4346AC3 for ; Tue, 27 Jan 2026 18:46:07 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.82.74 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769539572; cv=none; b=spMMidofbHQZkIQQThffPi8Ceb1lIo2LQijnoUgCVSGRXTe0V6kiH8sgzGhhcOiacjU1pwDhGqMDub+WhaONo08nFDXF3dDXnkDn+1QU0scUlxi5gi8L7PBxJYl2nWtBCA4nhUPGIh4BIgKCkwhn654Q82R8f2DKjfPCbTliXy4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769539572; c=relaxed/simple; bh=qrxmlP6PqMfaXzM0qAusjhd39JJ/O+hNC8cojlyi1NY=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=mDcd5qvTR0ad1Pn95rT1Ob9vOV4LaWf8V2eSEZMVdItMrIGtz5xrqcb+iCLJhUKSurl7jTou20QZ2D6bniACee2iUnssSLwvZJYuyu31XVgFgYxCg1xyE+OdTWJEeuSaS6PIbxNRokBYi7Z3/GRF5F0hyWfbNjRjj8k5JVGBIqU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--irogers.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=s4Gxchfx; arc=none smtp.client-ip=74.125.82.74 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--irogers.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="s4Gxchfx" Received: by mail-dl1-f74.google.com with SMTP id a92af1059eb24-1233893db9fso25892614c88.0 for ; Tue, 27 Jan 2026 10:46:07 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1769539567; x=1770144367; darn=vger.kernel.org; h=to:from:subject:message-id:references:mime-version:in-reply-to:date :from:to:cc:subject:date:message-id:reply-to; bh=7uxdfHuFFOhN+dRexF0ufH2t107HB/W3xh1le+g84b8=; b=s4GxchfxMNaA5VHVTRb8am1Zi3NfoWkdcVEAao0X7ArcwPdhHcoM8iDAFrUqDG9RSk Y3YKFkdA5lvoMCapLJBYU7d7Yc7O7e55LNYUpTJbstwVjiFiIvTY41ckex8Z0aM9lvco QcFDRiPDyqOFps6wX1s/X+gOyNiGXwulxz9/GurxuGdn/4jXdP6IuJQjHogve/jaeeuz yiU8ahF4L2STYMmsS1VWoe6HWs0paxRaUPnQaq/phQHQL9JoLt/WTIudfWYfM5HdvLIT 1NFhtYxPZwiAmsfetbb9piVEKzkIA1ON090OjVLwnCng2hocRdxh5EmMiL44HbpiSnAY KclQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1769539567; x=1770144367; h=to:from:subject:message-id:references:mime-version:in-reply-to:date :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=7uxdfHuFFOhN+dRexF0ufH2t107HB/W3xh1le+g84b8=; b=LduA4kk9kdOGpI8qzFSbGCwYHA2nXKd5lgjGWoWeb7yyuvLnefk0hIFuJdR8njkR+e mpSEdGJ0HtgaHgvEkUZCeCI6W0PDunFa2c4lUJmxZCdTo0x7/HDkygn9dv0GYSBXUZJV 2kS0Fia4PhMHEbGkurI7cmlC0WESV794v30w6ZVgaH4xZD+I17ny/LhkAYnI55VxZYdt nFcfuWe6a8YytydrqLp7n8BPhFXyGDulOYQWz+KJtstsrIdr46/hva0ut/L1Q/qHHijT GBxNHABIH+4dO5LtlpkRbqDpQi6+gXksNiuNyZQJerlYY2W5uuKF73quZYkrw+iWTT/X grDw== X-Forwarded-Encrypted: i=1; AJvYcCVYuWbgJV7Fe5krHvZ+oJdwdERNr9TqvkvdXPd79AgUf/62GoA7DHXZ4zwiGhdmFolr/HSnNn0tpu8dLac=@vger.kernel.org X-Gm-Message-State: AOJu0Yxrg+cxxdGnnFxJ4MM9KZ1NEGNUilZpQsXc/PpA9yg0dKC7CNOp Y6CFq1R9R9j3umnPwZEapDKl5zFM97D8bkvvDwrxEEcRQuL96iPE0hCv3wQTKiT0nVimWyhht9T ra6bKx6zPnw== X-Received: from dlbpm5.prod.google.com ([2002:a05:7022:3885:b0:11d:cfca:1df5]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a05:7022:2487:b0:11b:9386:a3cb with SMTP id a92af1059eb24-124a00e3b63mr1179484c88.44.1769539566952; Tue, 27 Jan 2026 10:46:06 -0800 (PST) Date: Tue, 27 Jan 2026 10:44:52 -0800 In-Reply-To: <20260127184506.3059493-1-irogers@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260127184506.3059493-1-irogers@google.com> X-Mailer: git-send-email 2.52.0.457.g6b5491de43-goog Message-ID: <20260127184506.3059493-22-irogers@google.com> Subject: [PATCH v11 21/35] perf jevents: Add L2 metrics for Intel From: Ian Rogers To: Adrian Hunter , Alexander Shishkin , Arnaldo Carvalho de Melo , Benjamin Gray , Caleb Biggers , Edward Baker , Ian Rogers , Ingo Molnar , James Clark , Jing Zhang , Jiri Olsa , John Garry , Leo Yan , Namhyung Kim , Perry Taylor , Peter Zijlstra , Sandipan Das , Thomas Falcon , Weilin Wang , Xu Yang , linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Give a breakdown of various L2 counters as metrics, including totals, reads, hardware prefetcher, RFO, code and evictions. Tested-by: Thomas Falcon Signed-off-by: Ian Rogers --- tools/perf/pmu-events/intel_metrics.py | 170 +++++++++++++++++++++++++ 1 file changed, 170 insertions(+) diff --git a/tools/perf/pmu-events/intel_metrics.py b/tools/perf/pmu-events= /intel_metrics.py index 7fcc0a1c544d..d190d97f4aff 100755 --- a/tools/perf/pmu-events/intel_metrics.py +++ b/tools/perf/pmu-events/intel_metrics.py @@ -263,6 +263,175 @@ def IntelBr(): description=3D"breakdown of retired branch instruct= ions") =20 =20 +def IntelL2() -> Optional[MetricGroup]: + try: + DC_HIT =3D Event("L2_RQSTS.DEMAND_DATA_RD_HIT") + except: + return None + try: + DC_MISS =3D Event("L2_RQSTS.DEMAND_DATA_RD_MISS") + l2_dmnd_miss =3D DC_MISS + l2_dmnd_rd_all =3D DC_MISS + DC_HIT + except: + DC_ALL =3D Event("L2_RQSTS.ALL_DEMAND_DATA_RD") + l2_dmnd_miss =3D DC_ALL - DC_HIT + l2_dmnd_rd_all =3D DC_ALL + l2_dmnd_mrate =3D d_ratio(l2_dmnd_miss, interval_sec) + l2_dmnd_rrate =3D d_ratio(l2_dmnd_rd_all, interval_sec) + + DC_PFH =3D None + DC_PFM =3D None + l2_pf_all =3D None + l2_pf_mrate =3D None + l2_pf_rrate =3D None + try: + DC_PFH =3D Event("L2_RQSTS.PF_HIT") + DC_PFM =3D Event("L2_RQSTS.PF_MISS") + l2_pf_all =3D DC_PFH + DC_PFM + l2_pf_mrate =3D d_ratio(DC_PFM, interval_sec) + l2_pf_rrate =3D d_ratio(l2_pf_all, interval_sec) + except: + pass + + DC_RFOH =3D None + DC_RFOM =3D None + l2_rfo_all =3D None + l2_rfo_mrate =3D None + l2_rfo_rrate =3D None + try: + DC_RFOH =3D Event("L2_RQSTS.RFO_HIT") + DC_RFOM =3D Event("L2_RQSTS.RFO_MISS") + l2_rfo_all =3D DC_RFOH + DC_RFOM + l2_rfo_mrate =3D d_ratio(DC_RFOM, interval_sec) + l2_rfo_rrate =3D d_ratio(l2_rfo_all, interval_sec) + except: + pass + + DC_CH =3D None + try: + DC_CH =3D Event("L2_RQSTS.CODE_RD_HIT") + except: + pass + DC_CM =3D Event("L2_RQSTS.CODE_RD_MISS") + DC_IN =3D Event("L2_LINES_IN.ALL") + DC_OUT_NS =3D None + DC_OUT_S =3D None + l2_lines_out =3D None + l2_out_rate =3D None + wbn =3D None + isd =3D None + try: + DC_OUT_NS =3D Event("L2_LINES_OUT.NON_SILENT", + "L2_LINES_OUT.DEMAND_DIRTY", + "L2_LINES_IN.S") + DC_OUT_S =3D Event("L2_LINES_OUT.SILENT", + "L2_LINES_OUT.DEMAND_CLEAN", + "L2_LINES_IN.I") + if DC_OUT_S.name =3D=3D "L2_LINES_OUT.SILENT" and ( + args.model.startswith("skylake") or + args.model =3D=3D "cascadelakex"): + DC_OUT_S.name =3D "L2_LINES_OUT.SILENT/any/" + # bring is back to per-CPU + l2_s =3D Select(DC_OUT_S / 2, Literal("#smt_on"), DC_OUT_S) + l2_ns =3D DC_OUT_NS + l2_lines_out =3D l2_s + l2_ns + l2_out_rate =3D d_ratio(l2_lines_out, interval_sec) + nlr =3D max(l2_ns - DC_WB_U - DC_WB_D, 0) + wbn =3D d_ratio(nlr, interval_sec) + isd =3D d_ratio(l2_s, interval_sec) + except: + pass + DC_OUT_U =3D None + l2_pf_useless =3D None + l2_useless_rate =3D None + try: + DC_OUT_U =3D Event("L2_LINES_OUT.USELESS_HWPF") + l2_pf_useless =3D DC_OUT_U + l2_useless_rate =3D d_ratio(l2_pf_useless, interval_sec) + except: + pass + DC_WB_U =3D None + DC_WB_D =3D None + wbu =3D None + wbd =3D None + try: + DC_WB_U =3D Event("IDI_MISC.WB_UPGRADE") + DC_WB_D =3D Event("IDI_MISC.WB_DOWNGRADE") + wbu =3D d_ratio(DC_WB_U, interval_sec) + wbd =3D d_ratio(DC_WB_D, interval_sec) + except: + pass + + l2_lines_in =3D DC_IN + l2_code_all =3D (DC_CH + DC_CM) if DC_CH else None + l2_code_rate =3D d_ratio(l2_code_all, interval_sec) if DC_CH else None + l2_code_miss_rate =3D d_ratio(DC_CM, interval_sec) + l2_in_rate =3D d_ratio(l2_lines_in, interval_sec) + + return MetricGroup("lpm_l2", [ + MetricGroup("lpm_l2_totals", [ + Metric("lpm_l2_totals_in", "L2 cache total in per second", + l2_in_rate, "In/s"), + Metric("lpm_l2_totals_out", "L2 cache total out per second", + l2_out_rate, "Out/s") if l2_out_rate else None, + ]), + MetricGroup("lpm_l2_rd", [ + Metric("lpm_l2_rd_hits", "L2 cache data read hits", + d_ratio(DC_HIT, l2_dmnd_rd_all), "100%"), + Metric("lpm_l2_rd_hits", "L2 cache data read hits", + d_ratio(l2_dmnd_miss, l2_dmnd_rd_all), "100%"), + Metric("lpm_l2_rd_requests", "L2 cache data read requests per = second", + l2_dmnd_rrate, "requests/s"), + Metric("lpm_l2_rd_misses", "L2 cache data read misses per seco= nd", + l2_dmnd_mrate, "misses/s"), + ]), + MetricGroup("lpm_l2_hwpf", [ + Metric("lpm_l2_hwpf_hits", "L2 cache hardware prefetcher hits", + d_ratio(DC_PFH, l2_pf_all), "100%"), + Metric("lpm_l2_hwpf_misses", "L2 cache hardware prefetcher mis= ses", + d_ratio(DC_PFM, l2_pf_all), "100%"), + Metric("lpm_l2_hwpf_useless", "L2 cache hardware prefetcher us= eless prefetches per second", + l2_useless_rate, "100%") if l2_useless_rate else None, + Metric("lpm_l2_hwpf_requests", "L2 cache hardware prefetcher r= equests per second", + l2_pf_rrate, "100%"), + Metric("lpm_l2_hwpf_misses", "L2 cache hardware prefetcher mis= ses per second", + l2_pf_mrate, "100%"), + ]) if DC_PFH else None, + MetricGroup("lpm_l2_rfo", [ + Metric("lpm_l2_rfo_hits", "L2 cache request for ownership (RFO= ) hits", + d_ratio(DC_RFOH, l2_rfo_all), "100%"), + Metric("lpm_l2_rfo_misses", "L2 cache request for ownership (R= FO) misses", + d_ratio(DC_RFOM, l2_rfo_all), "100%"), + Metric("lpm_l2_rfo_requests", "L2 cache request for ownership = (RFO) requests per second", + l2_rfo_rrate, "requests/s"), + Metric("lpm_l2_rfo_misses", "L2 cache request for ownership (R= FO) misses per second", + l2_rfo_mrate, "misses/s"), + ]) if DC_RFOH else None, + MetricGroup("lpm_l2_code", [ + Metric("lpm_l2_code_hits", "L2 cache code hits", + d_ratio(DC_CH, l2_code_all), "100%") if DC_CH else None, + Metric("lpm_l2_code_misses", "L2 cache code misses", + d_ratio(DC_CM, l2_code_all), "100%") if DC_CH else None, + Metric("lpm_l2_code_requests", "L2 cache code requests per sec= ond", + l2_code_rate, "requests/s") if DC_CH else None, + Metric("lpm_l2_code_misses", "L2 cache code misses per second", + l2_code_miss_rate, "misses/s"), + ]), + MetricGroup("lpm_l2_evict", [ + MetricGroup("lpm_l2_evict_mef_lines", [ + Metric("lpm_l2_evict_mef_lines_l3_hot_lru", "L2 evictions = M/E/F lines L3 hot LRU per second", + wbu, "HotLRU/s") if wbu else None, + Metric("lpm_l2_evict_mef_lines_l3_norm_lru", "L2 evictions= M/E/F lines L3 normal LRU per second", + wbn, "NormLRU/s") if wbn else None, + Metric("lpm_l2_evict_mef_lines_dropped", "L2 evictions M/E= /F lines dropped per second", + wbd, "dropped/s") if wbd else None, + Metric("lpm_l2_evict_is_lines_dropped", "L2 evictions I/S = lines dropped per second", + isd, "dropped/s") if isd else None, + ]), + ]), + ], description=3D"L2 data cache analysis") + + def IntelPorts() -> Optional[MetricGroup]: pipeline_events =3D json.load( open(f"{_args.events_path}/x86/{_args.model}/pipeline.json")) @@ -386,6 +555,7 @@ def main() -> None: Smi(), Tsx(), IntelBr(), + IntelL2(), IntelPorts(), IntelSwpf(), ]) --=20 2.52.0.457.g6b5491de43-goog From nobody Sat Feb 7 09:20:47 2026 Received: from mail-dl1-f73.google.com (mail-dl1-f73.google.com [74.125.82.73]) (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 7E10036920E for ; Tue, 27 Jan 2026 18:46:09 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.82.73 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769539571; cv=none; b=TXDYBJvYu7hB6ZpW1TFNRHPuO0Z/ENb+KyiLkgCD8AhUimmzeuVDppN32sVWNAdlY1K/EpXyBhws3Q2G+P0ED8K07u79+rBJxBQ54ETrOCqSzA0i8o9IPIKyCG1w0v2v5GO7ETCPYQCJ41aNgCNaNHmTFCFpvmVh0G0ThnaG5TI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769539571; c=relaxed/simple; bh=jxPbqZjiKeqXjVKXPNpmd0p+gzDjnPXntJAsQ5FCjdo=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=qJXfiGHK+c8Bbn7W/G52o6jHLiM1YcgAsIdRTQMiLPGvsbG+Mz5dqFebb25TjSI2r6eezLhSq1b0nhE4B2FVae8ElRyB0t47SnL/FkpThWiKhpJQqDw256ru11479nDwd7qFdDU7qFCxxqj7ZMKSAa6UlZSw9xLMMVB0ETW8jRw= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--irogers.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=sVuDQXTQ; arc=none smtp.client-ip=74.125.82.73 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--irogers.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="sVuDQXTQ" Received: by mail-dl1-f73.google.com with SMTP id a92af1059eb24-1248da4d2d6so4567222c88.0 for ; Tue, 27 Jan 2026 10:46:09 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1769539569; x=1770144369; darn=vger.kernel.org; h=to:from:subject:message-id:references:mime-version:in-reply-to:date :from:to:cc:subject:date:message-id:reply-to; bh=fORtvInl785vwPPesserRrCS7Xt/2I1SnOVTrAyhACY=; b=sVuDQXTQRYC1r2YsgmVfokEQie5/rMlefWY/GO11YlORSyza/MyjwsUbJay8YubLZy bPhTrEZ3dwkhRRMpZWYtWSp+EfoPte0zw1f+SWHikMXXtqEY5tZkHwUfG3wf9mymFfF7 uxIZSMtGwRChXxADi8QbvGO5sqOqygGxUQ51yqnkYi05ZEmdt1LaVzUDWT7uE5tN3hJc DZ/VgYigcQas99gtxfCWsthJpDe7v9alg8n9HcxRM+rvy210PZT+rtGrMq5oiBmaF6ko F1ha6pmTubxURxIB8j6Q4KFz+dE1moMBYizWqeUftryEa1vv8EU54zBteNgmFntK6fBE J4Uw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1769539569; x=1770144369; h=to:from:subject:message-id:references:mime-version:in-reply-to:date :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=fORtvInl785vwPPesserRrCS7Xt/2I1SnOVTrAyhACY=; b=Z5vcMAZ7vUBqZGfR2J3t11J4NnDBYeMo6fT3U4pW7Le7tO5WeLdoJdUY+WS+M39LiX BoDvg/lNegrJwmyQTnNKD+jbBW5eByler6ym/S5rMdhSmKSVl+rvr6pwfaRPTRUqvgJJ DWDx5G8v2S+Y7dt8+0K061sZuFjJQUqzg7AFYxWEBp0+zaXepbBUSOi2LK+jnUXGYJDb NqulojcES4XP18jPwUCpSBCcfeoDX6O+Dmsw+no9sjLL/AjdIj3fC0eVoVI4G2aMXyxA fKw6m18KME6XE0gYLV4Xx6yjI4BNvdmhHsY5Fl2fe1WjBMl5lmN2j5EhQYSHOnvgrlPO 3GZg== X-Forwarded-Encrypted: i=1; AJvYcCV6nyiDzftpQcwCm2B4W4T3KDUKP9Yhj71Kfvwgv4rJKwPLiVAb57fWesLQ7aFf9nCYEav2R0+YCsxyDuY=@vger.kernel.org X-Gm-Message-State: AOJu0YzeOzPPB58krS7E/rto/FgGNs8xv1NRH/sAlYr01VQfuJurVXrZ FhSCpW+b6dtxtt677pdGIIGid2pfwA98kU3Vx7qE1JD7SV6BgjflcyQizt4HpgCcpUqEsazzj0Q YADtACZa2nw== X-Received: from dlg33.prod.google.com ([2002:a05:7022:7a1:b0:11d:cf4c:62ab]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a05:7022:6b99:b0:11b:a36d:a7f7 with SMTP id a92af1059eb24-124a009996amr1475905c88.16.1769539568559; Tue, 27 Jan 2026 10:46:08 -0800 (PST) Date: Tue, 27 Jan 2026 10:44:53 -0800 In-Reply-To: <20260127184506.3059493-1-irogers@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260127184506.3059493-1-irogers@google.com> X-Mailer: git-send-email 2.52.0.457.g6b5491de43-goog Message-ID: <20260127184506.3059493-23-irogers@google.com> Subject: [PATCH v11 22/35] perf jevents: Add load store breakdown metrics ldst for Intel From: Ian Rogers To: Adrian Hunter , Alexander Shishkin , Arnaldo Carvalho de Melo , Benjamin Gray , Caleb Biggers , Edward Baker , Ian Rogers , Ingo Molnar , James Clark , Jing Zhang , Jiri Olsa , John Garry , Leo Yan , Namhyung Kim , Perry Taylor , Peter Zijlstra , Sandipan Das , Thomas Falcon , Weilin Wang , Xu Yang , linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Give breakdown of number of instructions. Use the counter mask (cmask) to show the number of cycles taken to retire the instructions. Tested-by: Thomas Falcon Signed-off-by: Ian Rogers --- tools/perf/pmu-events/intel_metrics.py | 87 +++++++++++++++++++++++++- 1 file changed, 86 insertions(+), 1 deletion(-) diff --git a/tools/perf/pmu-events/intel_metrics.py b/tools/perf/pmu-events= /intel_metrics.py index d190d97f4aff..19a284b4c520 100755 --- a/tools/perf/pmu-events/intel_metrics.py +++ b/tools/perf/pmu-events/intel_metrics.py @@ -8,7 +8,7 @@ import re from typing import Optional from metric import (d_ratio, has_event, max, CheckPmu, Event, JsonEncodeMe= tric, JsonEncodeMetricGroupDescriptions, Literal, LoadEvents, - Metric, MetricGroup, MetricRef, Select) + Metric, MetricConstraint, MetricGroup, MetricRef, Sele= ct) =20 # Global command line arguments. _args =3D None @@ -525,6 +525,90 @@ def IntelSwpf() -> Optional[MetricGroup]: ], description=3D"Software prefetch instruction breakdown") =20 =20 +def IntelLdSt() -> Optional[MetricGroup]: + if _args.model in [ + "bonnell", + "nehalemep", + "nehalemex", + "westmereep-dp", + "westmereep-sp", + "westmereex", + ]: + return None + LDST_LD =3D Event("MEM_INST_RETIRED.ALL_LOADS", "MEM_UOPS_RETIRED.ALL_= LOADS") + LDST_ST =3D Event("MEM_INST_RETIRED.ALL_STORES", + "MEM_UOPS_RETIRED.ALL_STORES") + LDST_LDC1 =3D Event(f"{LDST_LD.name}/cmask=3D1/") + LDST_STC1 =3D Event(f"{LDST_ST.name}/cmask=3D1/") + LDST_LDC2 =3D Event(f"{LDST_LD.name}/cmask=3D2/") + LDST_STC2 =3D Event(f"{LDST_ST.name}/cmask=3D2/") + LDST_LDC3 =3D Event(f"{LDST_LD.name}/cmask=3D3/") + LDST_STC3 =3D Event(f"{LDST_ST.name}/cmask=3D3/") + ins =3D Event("instructions") + LDST_CYC =3D Event("CPU_CLK_UNHALTED.THREAD", + "CPU_CLK_UNHALTED.CORE_P", + "CPU_CLK_UNHALTED.THREAD_P") + LDST_PRE =3D None + try: + LDST_PRE =3D Event("LOAD_HIT_PREFETCH.SWPF", "LOAD_HIT_PRE.SW_PF") + except: + pass + LDST_AT =3D None + try: + LDST_AT =3D Event("MEM_INST_RETIRED.LOCK_LOADS") + except: + pass + cyc =3D LDST_CYC + + ld_rate =3D d_ratio(LDST_LD, interval_sec) + st_rate =3D d_ratio(LDST_ST, interval_sec) + pf_rate =3D d_ratio(LDST_PRE, interval_sec) if LDST_PRE else None + at_rate =3D d_ratio(LDST_AT, interval_sec) if LDST_AT else None + + ldst_ret_constraint =3D MetricConstraint.GROUPED_EVENTS + if LDST_LD.name =3D=3D "MEM_UOPS_RETIRED.ALL_LOADS": + ldst_ret_constraint =3D MetricConstraint.NO_GROUP_EVENTS_NMI + + return MetricGroup("lpm_ldst", [ + MetricGroup("lpm_ldst_total", [ + Metric("lpm_ldst_total_loads", "Load/store instructions total = loads", + ld_rate, "loads"), + Metric("lpm_ldst_total_stores", "Load/store instructions total= stores", + st_rate, "stores"), + ]), + MetricGroup("lpm_ldst_prcnt", [ + Metric("lpm_ldst_prcnt_loads", "Percent of all instructions th= at are loads", + d_ratio(LDST_LD, ins), "100%"), + Metric("lpm_ldst_prcnt_stores", "Percent of all instructions t= hat are stores", + d_ratio(LDST_ST, ins), "100%"), + ]), + MetricGroup("lpm_ldst_ret_lds", [ + Metric("lpm_ldst_ret_lds_1", "Retired loads in 1 cycle", + d_ratio(max(LDST_LDC1 - LDST_LDC2, 0), cyc), "100%", + constraint=3Dldst_ret_constraint), + Metric("lpm_ldst_ret_lds_2", "Retired loads in 2 cycles", + d_ratio(max(LDST_LDC2 - LDST_LDC3, 0), cyc), "100%", + constraint=3Dldst_ret_constraint), + Metric("lpm_ldst_ret_lds_3", "Retired loads in 3 or more cycle= s", + d_ratio(LDST_LDC3, cyc), "100%"), + ]), + MetricGroup("lpm_ldst_ret_sts", [ + Metric("lpm_ldst_ret_sts_1", "Retired stores in 1 cycle", + d_ratio(max(LDST_STC1 - LDST_STC2, 0), cyc), "100%", + constraint=3Dldst_ret_constraint), + Metric("lpm_ldst_ret_sts_2", "Retired stores in 2 cycles", + d_ratio(max(LDST_STC2 - LDST_STC3, 0), cyc), "100%", + constraint=3Dldst_ret_constraint), + Metric("lpm_ldst_ret_sts_3", "Retired stores in 3 more cycles", + d_ratio(LDST_STC3, cyc), "100%"), + ]), + Metric("lpm_ldst_ld_hit_swpf", "Load hit software prefetches per s= econd", + pf_rate, "swpf/s") if pf_rate else None, + Metric("lpm_ldst_atomic_lds", "Atomic loads per second", + at_rate, "loads/s") if at_rate else None, + ], description=3D"Breakdown of load/store instructions") + + def main() -> None: global _args =20 @@ -556,6 +640,7 @@ def main() -> None: Tsx(), IntelBr(), IntelL2(), + IntelLdSt(), IntelPorts(), IntelSwpf(), ]) --=20 2.52.0.457.g6b5491de43-goog From nobody Sat Feb 7 09:20:47 2026 Received: from mail-dy1-f201.google.com (mail-dy1-f201.google.com [74.125.82.201]) (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 7B9A0363C76 for ; Tue, 27 Jan 2026 18:46:11 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.82.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769539572; cv=none; b=sxtTkH8uRHF+AJ69nvJcIyjWSPKU+pbPIDKKmIFeLRFqYGU9YHCFALd5/59MYuSHdilr5GT0TcICB3fi7SrjfhWhUu5T5Bwe6GNwEHg7yy6tK7+g2MIGZsBxAY4LRTCg5Lx6psY8q0mmQ15DGgRQomEOvrQ/pCmbT6L9vM/cAPc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769539572; c=relaxed/simple; bh=5xiZtz+7A1r9ki67YdNxm6S4vRgkIhkqUDeTkPmh6mI=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=KLbw6xILHDuA/u8efQBcpGEHQmEXpZBupfb95c32FGhU5dCsINEPcMyNhe9a+goNR5KWD+Q4kBROxdLP+I1/TchxrcsxNLX+WNqPX3rwgwLvbe44lr1CN6p6nAyylv1y38MzrjJYtA/3i+PLOIUVx4bpUxTUV/cLz6wzYECL3C4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--irogers.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=VySkdmiO; arc=none smtp.client-ip=74.125.82.201 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--irogers.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="VySkdmiO" Received: by mail-dy1-f201.google.com with SMTP id 5a478bee46e88-2b7155ca88cso5835644eec.1 for ; Tue, 27 Jan 2026 10:46:11 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1769539571; x=1770144371; darn=vger.kernel.org; h=to:from:subject:message-id:references:mime-version:in-reply-to:date :from:to:cc:subject:date:message-id:reply-to; bh=DfvDdkmRBFYOyeN2O+RaG4K637ivAdshUHZLdNirJKE=; b=VySkdmiOWgJ7o2Bzf9bds0jiHGTm7CRKb2XdET/ys9XVJOxMrhMkczpz+ggZy5J84M 5FvajUZ7rNROqn9krGyGSh8DsFBuE+Xwyx7eLmTKYdMBkk7EGVGKClSuhn58Aq4ny9is EM+ig9Fb4iauyGdkUNSXJtgT9r+Jjqtd6KfYdQ9jKg2giqy1jv/zAHgOWCLRj5aVPrIN 2+LvW6AxlnAROkNIcv9WK6ryMMu1bkMJnlM/4lAJ/95VvijR1CbeFbICkE944IhdtX9A 6cjDKUY6X9oOrJcYQ0ioggpvCnjNA2LxKRstEVHqKoDHlzI6Pc4VssT1pH6WwZdtt6Nd vLrw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1769539571; x=1770144371; h=to:from:subject:message-id:references:mime-version:in-reply-to:date :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=DfvDdkmRBFYOyeN2O+RaG4K637ivAdshUHZLdNirJKE=; b=ZNwVRFBd1WrXD2YZgH0982YTpBlbc5veMJGD5VUfWL+Wsthxt+HhJaRw/M6EQHA1V3 pRR/TfMzadT3qshV2JTX0xULG587qYOJMgSG+oglQsPvXQqMGeShTmuW3c6bU5Uc46SY 8Ptm39mw4ogDEx3eZWtpWqdrkM/66SxOztr+MVBe9pB1j3yGLGpW0TIN4IpaVNR5P7xY IxyJ49kzewEdO068nnJYj0V261VILxU2TyKQCF3HBuyYw//+pymzI2Z7T+9H2YPZAHIu PhSCYvm6AvVgBA7t8DhBGrn/Nrz7H3nXIMlPP5Yvx3TMs+n2j84Q2XLsq8kWDkTuh96h VbDw== X-Forwarded-Encrypted: i=1; AJvYcCXo5RWVjL7qyxQ/FamAtGnd3MWQxg4Fq8UfmLji8per2KXIifrsvj9OOjLpGhKe0P7FzuNk/R77uvwI/rU=@vger.kernel.org X-Gm-Message-State: AOJu0YwpDxHfrMImM5PgN91FC8uyOZNz08aw0OT796G2yRDeUiHk259C K4bfOg6BUGYZmUljzemqZqdgYXAXFjLWTWcyxnsOkLLy9CRzZuRJj/j3JWtqDqPreCV/KxmdzjX fCjXNJ+FPMg== X-Received: from dybtr9.prod.google.com ([2002:a05:7300:f549:b0:2b0:4f93:391f]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a05:7300:6d08:b0:2ab:ca55:89b1 with SMTP id 5a478bee46e88-2b78da0a187mr1459124eec.40.1769539570509; Tue, 27 Jan 2026 10:46:10 -0800 (PST) Date: Tue, 27 Jan 2026 10:44:54 -0800 In-Reply-To: <20260127184506.3059493-1-irogers@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260127184506.3059493-1-irogers@google.com> X-Mailer: git-send-email 2.52.0.457.g6b5491de43-goog Message-ID: <20260127184506.3059493-24-irogers@google.com> Subject: [PATCH v11 23/35] perf jevents: Add ILP metrics for Intel From: Ian Rogers To: Adrian Hunter , Alexander Shishkin , Arnaldo Carvalho de Melo , Benjamin Gray , Caleb Biggers , Edward Baker , Ian Rogers , Ingo Molnar , James Clark , Jing Zhang , Jiri Olsa , John Garry , Leo Yan , Namhyung Kim , Perry Taylor , Peter Zijlstra , Sandipan Das , Thomas Falcon , Weilin Wang , Xu Yang , linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Use the counter mask (cmask) to see how many cycles an instruction takes to retire. Present as a set of ILP metrics. Tested-by: Thomas Falcon Signed-off-by: Ian Rogers --- tools/perf/pmu-events/intel_metrics.py | 40 ++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/tools/perf/pmu-events/intel_metrics.py b/tools/perf/pmu-events= /intel_metrics.py index 19a284b4c520..bc3c50285916 100755 --- a/tools/perf/pmu-events/intel_metrics.py +++ b/tools/perf/pmu-events/intel_metrics.py @@ -263,6 +263,45 @@ def IntelBr(): description=3D"breakdown of retired branch instruct= ions") =20 =20 +def IntelIlp() -> MetricGroup: + tsc =3D Event("msr/tsc/") + c0 =3D Event("msr/mperf/") + low =3D tsc - c0 + inst_ret =3D Event("INST_RETIRED.ANY_P") + inst_ret_c =3D [Event(f"{inst_ret.name}/cmask=3D{x}/") for x in range(= 1, 6)] + core_cycles =3D Event("CPU_CLK_UNHALTED.THREAD_P_ANY", + "CPU_CLK_UNHALTED.DISTRIBUTED", + "cycles") + ilp =3D [d_ratio(max(inst_ret_c[x] - inst_ret_c[x + 1], 0), core_cycle= s) + for x in range(0, 4)] + ilp.append(d_ratio(inst_ret_c[4], core_cycles)) + ilp0 =3D 1 + for x in ilp: + ilp0 -=3D x + return MetricGroup("lpm_ilp", [ + Metric("lpm_ilp_idle", "Lower power cycles as a percentage of all = cycles", + d_ratio(low, tsc), "100%"), + Metric("lpm_ilp_inst_ret_0", + "Instructions retired in 0 cycles as a percentage of all cy= cles", + ilp0, "100%"), + Metric("lpm_ilp_inst_ret_1", + "Instructions retired in 1 cycles as a percentage of all cy= cles", + ilp[0], "100%"), + Metric("lpm_ilp_inst_ret_2", + "Instructions retired in 2 cycles as a percentage of all cy= cles", + ilp[1], "100%"), + Metric("lpm_ilp_inst_ret_3", + "Instructions retired in 3 cycles as a percentage of all cy= cles", + ilp[2], "100%"), + Metric("lpm_ilp_inst_ret_4", + "Instructions retired in 4 cycles as a percentage of all cy= cles", + ilp[3], "100%"), + Metric("lpm_ilp_inst_ret_5", + "Instructions retired in 5 or more cycles as a percentage o= f all cycles", + ilp[4], "100%"), + ]) + + def IntelL2() -> Optional[MetricGroup]: try: DC_HIT =3D Event("L2_RQSTS.DEMAND_DATA_RD_HIT") @@ -639,6 +678,7 @@ def main() -> None: Smi(), Tsx(), IntelBr(), + IntelIlp(), IntelL2(), IntelLdSt(), IntelPorts(), --=20 2.52.0.457.g6b5491de43-goog From nobody Sat Feb 7 09:20:47 2026 Received: from mail-dl1-f73.google.com (mail-dl1-f73.google.com [74.125.82.73]) (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 7D716369239 for ; Tue, 27 Jan 2026 18:46:13 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.82.73 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769539575; cv=none; b=bvJgxL5O4xyeBHJo3eCZTmq+RhLOs0nkkGR/ljpMkOEAaHe/KMT6ruNZ59RknX7KS2iRdvmRcrNYuayd0OP1GJ1FwhqmTYp99qZO6iXqHukSHuJCMUr4nRczPwisA5RxKuseCOJd3y3YbAFqOQ2yCDbOtQiMGlM/J3DnEjhVrwY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769539575; c=relaxed/simple; bh=uBZQbaf2jw+Z+6X/HPLRd2UQ4QNWgpzfDckkTan8FMs=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=mUg/Gmxgl2rp+mEv1cL18HuHcs5PyDA9OFOGVq39MQDCw1ZQ2oB2N3/r1fMeegi9qPUiPYFlYHX1DMIOmKGeFMcX5GQd56SZFk0G/LnWvLCql6ZKK2PRkrEFYwrcctLLupBL6hI8yEfcEkl6GrYWymNJC6QC7+n1EHN1mee09pE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--irogers.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=fKDqSTPb; arc=none smtp.client-ip=74.125.82.73 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--irogers.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="fKDqSTPb" Received: by mail-dl1-f73.google.com with SMTP id a92af1059eb24-123840bf029so45655384c88.1 for ; Tue, 27 Jan 2026 10:46:13 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1769539573; x=1770144373; darn=vger.kernel.org; h=to:from:subject:message-id:references:mime-version:in-reply-to:date :from:to:cc:subject:date:message-id:reply-to; bh=nTe2zkqt3kO+WTK/oM0HIoGu3LJeTRzWv45QieO9b4w=; b=fKDqSTPbkGBOXuGHcD/tds1Y1n8NxEpsGroxtvo+rb6e/1VnYe5jmZV+yuFSYVGlRZ O4tYFU9g4W9keVsC8gr19c8B0peacyZcXH2zap04p4DSujYnyD2TdGlT6ZYN2b+4mILL wk3Az2F++ZhfKbnfhmwTejiunkxyHNokj6/QTIrAu2lpHLHU3XuH1kzSa7ZgpOPK5GfP 32hDYVWyvUf68lfg/T7XwGj1HLT2FVrRaCM48aBHiD/GhG/280QNCcqW7UNSnwxpD0lH suL8j42UxlpucwteAzUZTKa9e18BjyO+LogWEoX9A3Lernuabi2gj458Jy9Ifx9LDCND 76lw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1769539573; x=1770144373; h=to:from:subject:message-id:references:mime-version:in-reply-to:date :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=nTe2zkqt3kO+WTK/oM0HIoGu3LJeTRzWv45QieO9b4w=; b=oBLBH4pza/6XGUX78RIDrMDIiW+s/BlPaGPnxRFPZWfq68WEJpSD52mLC0GnJBNIXJ /60IMq7RvrSOPpuaBkRJkWLH5XRJ/r4zKFDyFu7x2YUjYriRlFyciwuy2FFhsV5AmtuN 9gGG2yPRDpI4AC7IMC1SaOTrGs7kOZtXJSyro6z108NO0JEGUaUVLgC7QnvIdej7XqSr VqPiTmLCaVpEBVj/LAOjlQPd+BvhdVJ6V/+3OyrUn9EwzUWvDJW9tqimGPCWfE3gs2OH +42Lkt1hNTeolDo6CJqT7N0UGXGCYaCNaDshzHdhGohlQhPwf+FOKAMIq4tHcPvfJvTs eX1Q== X-Forwarded-Encrypted: i=1; AJvYcCX/uCaFajHecwW6xA2pvtmR2HRbdx2uLEJV/ZKVZ2/qKAOBeG3kFmlPITGhUiFd5WtaLNYgEBW1a8HvwvE=@vger.kernel.org X-Gm-Message-State: AOJu0YxJq1Gs06xG2B665yW7KAasMq2l31sBZ+lFhNh0+TKo5ZIOmpQF gSANCCc+47+907h3N9lGYBPBZLQrjIDqHApimQzXbWEMpgb+cFx8l4k+Pzw//0SeTLt+FeUyz7l WpIXJGPbRjw== X-Received: from dlbpj8.prod.google.com ([2002:a05:7022:3808:b0:123:2e41:8b40]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a05:701a:c94e:b0:119:e569:fba9 with SMTP id a92af1059eb24-124a00b888dmr2012255c88.24.1769539572681; Tue, 27 Jan 2026 10:46:12 -0800 (PST) Date: Tue, 27 Jan 2026 10:44:55 -0800 In-Reply-To: <20260127184506.3059493-1-irogers@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260127184506.3059493-1-irogers@google.com> X-Mailer: git-send-email 2.52.0.457.g6b5491de43-goog Message-ID: <20260127184506.3059493-25-irogers@google.com> Subject: [PATCH v11 24/35] perf jevents: Add context switch metrics for Intel From: Ian Rogers To: Adrian Hunter , Alexander Shishkin , Arnaldo Carvalho de Melo , Benjamin Gray , Caleb Biggers , Edward Baker , Ian Rogers , Ingo Molnar , James Clark , Jing Zhang , Jiri Olsa , John Garry , Leo Yan , Namhyung Kim , Perry Taylor , Peter Zijlstra , Sandipan Das , Thomas Falcon , Weilin Wang , Xu Yang , linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Metrics break down context switches for different kinds of instruction. Tested-by: Thomas Falcon Signed-off-by: Ian Rogers --- tools/perf/pmu-events/intel_metrics.py | 58 ++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) diff --git a/tools/perf/pmu-events/intel_metrics.py b/tools/perf/pmu-events= /intel_metrics.py index bc3c50285916..9cf4bd8ac769 100755 --- a/tools/perf/pmu-events/intel_metrics.py +++ b/tools/perf/pmu-events/intel_metrics.py @@ -263,6 +263,63 @@ def IntelBr(): description=3D"breakdown of retired branch instruct= ions") =20 =20 +def IntelCtxSw() -> MetricGroup: + cs =3D Event("context\\-switches") + metrics =3D [ + Metric("lpm_cs_rate", "Context switches per second", + d_ratio(cs, interval_sec), "ctxsw/s") + ] + + ev =3D Event("instructions") + metrics.append(Metric("lpm_cs_instr", "Instructions per context switch= ", + d_ratio(ev, cs), "instr/cs")) + + ev =3D Event("cycles") + metrics.append(Metric("lpm_cs_cycles", "Cycles per context switch", + d_ratio(ev, cs), "cycles/cs")) + + try: + ev =3D Event("MEM_INST_RETIRED.ALL_LOADS", "MEM_UOPS_RETIRED.ALL_L= OADS") + metrics.append(Metric("lpm_cs_loads", "Loads per context switch", + d_ratio(ev, cs), "loads/cs")) + except: + pass + + try: + ev =3D Event("MEM_INST_RETIRED.ALL_STORES", + "MEM_UOPS_RETIRED.ALL_STORES") + metrics.append(Metric("lpm_cs_stores", "Stores per context switch", + d_ratio(ev, cs), "stores/cs")) + except: + pass + + try: + ev =3D Event("BR_INST_RETIRED.NEAR_TAKEN", "BR_INST_RETIRED.TAKEN_= JCC") + metrics.append(Metric("lpm_cs_br_taken", "Branches taken per conte= xt switch", + d_ratio(ev, cs), "br_taken/cs")) + except: + pass + + try: + l2_misses =3D (Event("L2_RQSTS.DEMAND_DATA_RD_MISS") + + Event("L2_RQSTS.RFO_MISS") + + Event("L2_RQSTS.CODE_RD_MISS")) + try: + l2_misses +=3D Event("L2_RQSTS.HWPF_MISS", + "L2_RQSTS.L2_PF_MISS", "L2_RQSTS.PF_MISS") + except: + pass + + metrics.append(Metric("lpm_cs_l2_misses", "L2 misses per context s= witch", + d_ratio(l2_misses, cs), "l2_misses/cs")) + except: + pass + + return MetricGroup("lpm_cs", metrics, + description=3D("Number of context switches per seco= nd, instructions " + "retired & core cycles between context= switches")) + + def IntelIlp() -> MetricGroup: tsc =3D Event("msr/tsc/") c0 =3D Event("msr/mperf/") @@ -678,6 +735,7 @@ def main() -> None: Smi(), Tsx(), IntelBr(), + IntelCtxSw(), IntelIlp(), IntelL2(), IntelLdSt(), --=20 2.52.0.457.g6b5491de43-goog From nobody Sat Feb 7 09:20:47 2026 Received: from mail-dy1-f201.google.com (mail-dy1-f201.google.com [74.125.82.201]) (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 9E36C36A022 for ; Tue, 27 Jan 2026 18:46:15 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.82.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769539580; cv=none; b=uy6jQq5yYIeGug8ustHmgpZ58nDeS3VPJpkSI+gpMg2U6850ZtnK2a8TO4aoQxtgPhaIdvom1BygB4FE9WVGRy186GxOe/GFebvi3ohfW5vuIRoRrVEXoT2QmTnmE1OJgbrxIMiN3//HsPSeLeY72x//Dk7pJZTJmHjBZ0kzav4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769539580; c=relaxed/simple; bh=BuZQB1JrWPbol810BNiSgRTMMbqOOuEypIktx0AEIeE=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=Uqm5kH20kNh7YaI0VXNt+I9FtvQpPavYJ1+8af4Nh/OR9yDLJbUY9g+xT+Bd6a+dx6PZONiHcWZ9j2WZ9A6Uupp3t6oGmWHaDoL6mzH9X8ymbh7JMrjzWAoTJ+uKbhVDAXwSQTVWuTwOcd9ENZfK/St1lGRD8s4JDS7kMJJm62M= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--irogers.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=ICrehh2/; arc=none smtp.client-ip=74.125.82.201 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--irogers.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="ICrehh2/" Received: by mail-dy1-f201.google.com with SMTP id 5a478bee46e88-2b6f0b345e3so32185390eec.0 for ; Tue, 27 Jan 2026 10:46:15 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1769539575; x=1770144375; darn=vger.kernel.org; h=to:from:subject:message-id:references:mime-version:in-reply-to:date :from:to:cc:subject:date:message-id:reply-to; bh=tp6WggX015VKfu2PeZYMD7tqCi4geCJV/SpM3J5HtbY=; b=ICrehh2/EcnhwDO/z44FUXyyRd/3KzTcstnW37DrQ4dfYMeKxqHkM58lMQTDVbKIiV OPgX+FXxnqI/revokzhdlZLSZXoHW6qGlvITo2Fa52snRfLln7Uqv78z1gcM1qSrqVtT fdItVQufrv6mo+4mJl3KC6UdHBagLWu23JLojklXDRaNIvmfQYsnXtzAvdQ7eeZLDoIg TUxKR+MpQnWySKycSH8yXNlh26zOZLuEMlbneAS3O+NErtMGRX7QxTh7xZpnVzwlysCZ 486qVkxxx7figcfaCfEICsxtsVfk7zp6JyvwrxBZxsawPtmk9xBNM3oxOhTXHh0h3SU6 UZwQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1769539575; x=1770144375; h=to:from:subject:message-id:references:mime-version:in-reply-to:date :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=tp6WggX015VKfu2PeZYMD7tqCi4geCJV/SpM3J5HtbY=; b=iveEBg+fJMZmyUbPO5QcuU1ycg71P7H2Q1R5S+SpVKBl2zHbqegdAWADLq4j0XH8wd naU1eL7RuFQufkYQa8gxxMoZ9hxTznxGLaPbjZ6f3E/87b4wncnftE+nCfeLP9g9kP1k 1U2G1Igh/ROf2IYwxoft+Ar4hIpjw9Mj1zCOOU/dgAGukR+7Gu0315oLTZis7wqbQJAG PSQs/5KKY2tTPn54whhSKWEUHwLxzUzBsbZLDPYyk94se9Bve3u1JmcNfn0EMlqG3BOo TnZPioIyVuBbvCRKTeg8DqXgkNpG0nAyZdXpR/sNYuzgCvRh4Kt+8akM6DHM7ZXZ4gFp nR5g== X-Forwarded-Encrypted: i=1; AJvYcCX/E1BDztA5FP0/ndjaQvqgv2EHYI8KMX4KHUdXdAbia+haUIvY4rQF9nQpSowSJzujpamh+AYwTlFk4eo=@vger.kernel.org X-Gm-Message-State: AOJu0YwXAY8hvYVR23iXS6JUm6Ck3lsupppomtMxcaE9dilfLqF01yeU AiD/UIkBR46XYRji2rhVDc2sEJGdcnyKc6Nrxdej49LQA4SfeuLAZ1YUDGOL8v4N455G9JRnsbv gnvPr41VNdQ== X-Received: from dlbrl14.prod.google.com ([2002:a05:7022:f50e:b0:119:78ff:fe10]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a05:7022:6609:b0:11b:8161:5cfc with SMTP id a92af1059eb24-124a00c4cbamr1673614c88.36.1769539574570; Tue, 27 Jan 2026 10:46:14 -0800 (PST) Date: Tue, 27 Jan 2026 10:44:56 -0800 In-Reply-To: <20260127184506.3059493-1-irogers@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260127184506.3059493-1-irogers@google.com> X-Mailer: git-send-email 2.52.0.457.g6b5491de43-goog Message-ID: <20260127184506.3059493-26-irogers@google.com> Subject: [PATCH v11 25/35] perf jevents: Add FPU metrics for Intel From: Ian Rogers To: Adrian Hunter , Alexander Shishkin , Arnaldo Carvalho de Melo , Benjamin Gray , Caleb Biggers , Edward Baker , Ian Rogers , Ingo Molnar , James Clark , Jing Zhang , Jiri Olsa , John Garry , Leo Yan , Namhyung Kim , Perry Taylor , Peter Zijlstra , Sandipan Das , Thomas Falcon , Weilin Wang , Xu Yang , linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Metrics break down of floating point operations. Tested-by: Thomas Falcon Signed-off-by: Ian Rogers --- tools/perf/pmu-events/intel_metrics.py | 97 ++++++++++++++++++++++++++ 1 file changed, 97 insertions(+) diff --git a/tools/perf/pmu-events/intel_metrics.py b/tools/perf/pmu-events= /intel_metrics.py index 9cf4bd8ac769..77b8e10194db 100755 --- a/tools/perf/pmu-events/intel_metrics.py +++ b/tools/perf/pmu-events/intel_metrics.py @@ -320,6 +320,102 @@ def IntelCtxSw() -> MetricGroup: "retired & core cycles between context= switches")) =20 =20 +def IntelFpu() -> Optional[MetricGroup]: + cyc =3D Event("cycles") + try: + s_64 =3D Event("FP_ARITH_INST_RETIRED.SCALAR_SINGLE", + "SIMD_INST_RETIRED.SCALAR_SINGLE") + except: + return None + d_64 =3D Event("FP_ARITH_INST_RETIRED.SCALAR_DOUBLE", + "SIMD_INST_RETIRED.SCALAR_DOUBLE") + s_128 =3D Event("FP_ARITH_INST_RETIRED.128B_PACKED_SINGLE", + "SIMD_INST_RETIRED.PACKED_SINGLE") + + flop =3D s_64 + d_64 + 4 * s_128 + + d_128 =3D None + s_256 =3D None + d_256 =3D None + s_512 =3D None + d_512 =3D None + try: + d_128 =3D Event("FP_ARITH_INST_RETIRED.128B_PACKED_DOUBLE") + flop +=3D 2 * d_128 + s_256 =3D Event("FP_ARITH_INST_RETIRED.256B_PACKED_SINGLE") + flop +=3D 8 * s_256 + d_256 =3D Event("FP_ARITH_INST_RETIRED.256B_PACKED_DOUBLE") + flop +=3D 4 * d_256 + s_512 =3D Event("FP_ARITH_INST_RETIRED.512B_PACKED_SINGLE") + flop +=3D 16 * s_512 + d_512 =3D Event("FP_ARITH_INST_RETIRED.512B_PACKED_DOUBLE") + flop +=3D 8 * d_512 + except: + pass + + f_assist =3D Event("ASSISTS.FP", "FP_ASSIST.ANY", "FP_ASSIST.S") + if f_assist in [ + "ASSISTS.FP", + "FP_ASSIST.S", + ]: + f_assist +=3D "/cmask=3D1/" + + flop_r =3D d_ratio(flop, interval_sec) + flop_c =3D d_ratio(flop, cyc) + nmi_constraint =3D MetricConstraint.GROUPED_EVENTS + if f_assist.name =3D=3D "ASSISTS.FP": # Icelake+ + nmi_constraint =3D MetricConstraint.NO_GROUP_EVENTS_NMI + + def FpuMetrics(group: str, fl: Optional[Event], mult: int, desc: str) = -> Optional[MetricGroup]: + if not fl: + return None + + f =3D fl * mult + fl_r =3D d_ratio(f, interval_sec) + r_s =3D d_ratio(fl, interval_sec) + return MetricGroup(group, [ + Metric(f"{group}_of_total", desc + " floating point operations= per second", + d_ratio(f, flop), "100%"), + Metric(f"{group}_flops", desc + " floating point operations pe= r second", + fl_r, "flops/s"), + Metric(f"{group}_ops", desc + " operations per second", + r_s, "ops/s"), + ]) + + return MetricGroup("lpm_fpu", [ + MetricGroup("lpm_fpu_total", [ + Metric("lpm_fpu_total_flops", "Floating point operations per s= econd", + flop_r, "flops/s"), + Metric("lpm_fpu_total_flopc", "Floating point operations per c= ycle", + flop_c, "flops/cycle", constraint=3Dnmi_constraint), + ]), + MetricGroup("lpm_fpu_64", [ + FpuMetrics("lpm_fpu_64_single", s_64, 1, "64-bit single"), + FpuMetrics("lpm_fpu_64_double", d_64, 1, "64-bit double"), + ]), + MetricGroup("lpm_fpu_128", [ + FpuMetrics("lpm_fpu_128_single", s_128, + 4, "128-bit packed single"), + FpuMetrics("lpm_fpu_128_double", d_128, + 2, "128-bit packed double"), + ]), + MetricGroup("lpm_fpu_256", [ + FpuMetrics("lpm_fpu_256_single", s_256, + 8, "128-bit packed single"), + FpuMetrics("lpm_fpu_256_double", d_256, + 4, "128-bit packed double"), + ]), + MetricGroup("lpm_fpu_512", [ + FpuMetrics("lpm_fpu_512_single", s_512, + 16, "128-bit packed single"), + FpuMetrics("lpm_fpu_512_double", d_512, + 8, "128-bit packed double"), + ]), + Metric("lpm_fpu_assists", "FP assists as a percentage of cycles", + d_ratio(f_assist, cyc), "100%"), + ]) + + def IntelIlp() -> MetricGroup: tsc =3D Event("msr/tsc/") c0 =3D Event("msr/mperf/") @@ -736,6 +832,7 @@ def main() -> None: Tsx(), IntelBr(), IntelCtxSw(), + IntelFpu(), IntelIlp(), IntelL2(), IntelLdSt(), --=20 2.52.0.457.g6b5491de43-goog From nobody Sat Feb 7 09:20:47 2026 Received: from mail-dl1-f73.google.com (mail-dl1-f73.google.com [74.125.82.73]) (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 641D6346AC3 for ; Tue, 27 Jan 2026 18:46:17 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.82.73 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769539582; cv=none; b=Dr0NLTMOevRnGYQ8QncnURZ7d64aiVLEsX8eJafv8iuvH4n6MAABMPnVIEfN5VbaGUhqKUbQWixk2tl/U8Z4n2wB9qUly31cOKiheunxulb7cJBGRYX3zEUPXIosdUe8Uz7K0iozGTO7eOFotaanapFPNPP6KnxUu97rL65g+Xs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769539582; c=relaxed/simple; bh=Ox8xoIEvHlXmb3ZnV7uUMcH4VYIJguTr3dOQXPYocWo=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=hngxRcPhnWsNA0PYpUSV5vmyFFJBzLJozRGBSHHu25RwTwWfIJZnxDs0J6as+HSbAo//XzFSJkhj5R/0oG9jvzs7p0SdmfYcTUhdA8BVH82FH0wmmBTEp0SlpIvms8rkzU8t/2kor34NIR72UcRwJ0dCmsx/Ds8g9CQVvT/GyDs= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--irogers.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=yla9DBmf; arc=none smtp.client-ip=74.125.82.73 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--irogers.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="yla9DBmf" Received: by mail-dl1-f73.google.com with SMTP id a92af1059eb24-124a2d3d1b7so936488c88.0 for ; Tue, 27 Jan 2026 10:46:17 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1769539576; x=1770144376; darn=vger.kernel.org; h=to:from:subject:message-id:references:mime-version:in-reply-to:date :from:to:cc:subject:date:message-id:reply-to; bh=ZEKSewz96VX4s1GwXYzsYujeSp/AMjDx+PpNSoy8VmI=; b=yla9DBmfwY9RowwoKhTDXHQ46IJQOtKstAe94wIDZWg5EWSkp0dkGq8r+ZgM6sWk9V hv7RGQ0/t1BACq4sCTjmk39+q8XkAuwjzLR9Od46HLlct8oUsAQ8g4D0KWlmTRb7Xlst lfnaqTFVUyTwpZWB2uKJI48DSpsSULm96dMc+V7ky7F4qOHv4dtkwRPLkyv+/Kz3bRNa 2imri5PrJ+rS/7UUAKV24JHDJbk90iCpAm4trbxvuG2yXTY4a4LqQoRGV91gXq1MkX3t CYY5rGldrj/Y4o2s7d0FukjiC9eNLtAnaVI7ueu+ieEbog/Ul+NUduyuQQJyRWgv2nqd Fbrw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1769539576; x=1770144376; h=to:from:subject:message-id:references:mime-version:in-reply-to:date :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=ZEKSewz96VX4s1GwXYzsYujeSp/AMjDx+PpNSoy8VmI=; b=R6xUa1q4qmtbiOOSLu+1yAgAluL98QaWq/tt65vKKZHY2dqa9TjAWMSPv00PYag57E chbVzN2pFYsgFrPsDzMg/hZyRuDZMJjQMDbZE93MppzsKu+3inz1A+KCV/ThALFvZRFb K9ZHRHM4u3n99YbRiBINl9VqlbRi1YnVWOO+gZ3fRWMcvB3fnTjsfCz8v7DURLPFkcw5 iV1FvEdLuAGuPgwTehN5z90ED4t2PJedD21kXDzUQrx4J5Kxi9vZHNEnsvgtitamBPVx CoasuQH9e3t7b1Faj/wLuVYqNL8maBP9bz1rvbpWAYPFpDcRoX+hsmEaILoAs68I42/Q OqeA== X-Forwarded-Encrypted: i=1; AJvYcCWR9LmtfcCvN1jntIpkQw/AufCpcIjd8iH2IPvlwOxixvmirfFAOhwJ5zga3/tECM3ffdeKZwPimYOd0LI=@vger.kernel.org X-Gm-Message-State: AOJu0YwH4Qelr5jx40DePyvjF9eQmmbQfgraw7ZkJqQiI74nGs4wxBZ2 lVTlYZl5zR6vmF0GMpbxjW6hHYGMYIz1jacw+5YIOhlXLIxIuSJw1gLjeBfOFVQLoW14b/LCm8z Q/FS3MfnxgQ== X-Received: from dlg19.prod.google.com ([2002:a05:7022:793:b0:11f:3f33:f0a5]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a05:7022:eb56:10b0:11b:fe75:d03 with SMTP id a92af1059eb24-124a005f2f6mr1144597c88.8.1769539576417; Tue, 27 Jan 2026 10:46:16 -0800 (PST) Date: Tue, 27 Jan 2026 10:44:57 -0800 In-Reply-To: <20260127184506.3059493-1-irogers@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260127184506.3059493-1-irogers@google.com> X-Mailer: git-send-email 2.52.0.457.g6b5491de43-goog Message-ID: <20260127184506.3059493-27-irogers@google.com> Subject: [PATCH v11 26/35] perf jevents: Add Miss Level Parallelism (MLP) metric for Intel From: Ian Rogers To: Adrian Hunter , Alexander Shishkin , Arnaldo Carvalho de Melo , Benjamin Gray , Caleb Biggers , Edward Baker , Ian Rogers , Ingo Molnar , James Clark , Jing Zhang , Jiri Olsa , John Garry , Leo Yan , Namhyung Kim , Perry Taylor , Peter Zijlstra , Sandipan Das , Thomas Falcon , Weilin Wang , Xu Yang , linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Number of outstanding load misses per cycle. Tested-by: Thomas Falcon Signed-off-by: Ian Rogers --- tools/perf/pmu-events/intel_metrics.py | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/tools/perf/pmu-events/intel_metrics.py b/tools/perf/pmu-events= /intel_metrics.py index 77b8e10194db..dddeae35e4b4 100755 --- a/tools/perf/pmu-events/intel_metrics.py +++ b/tools/perf/pmu-events/intel_metrics.py @@ -624,6 +624,20 @@ def IntelL2() -> Optional[MetricGroup]: ], description=3D"L2 data cache analysis") =20 =20 +def IntelMlp() -> Optional[Metric]: + try: + l1d =3D Event("L1D_PEND_MISS.PENDING") + l1dc =3D Event("L1D_PEND_MISS.PENDING_CYCLES") + except: + return None + + l1dc =3D Select(l1dc / 2, Literal("#smt_on"), l1dc) + ml =3D d_ratio(l1d, l1dc) + return Metric("lpm_mlp", + "Miss level parallelism - number of outstanding load mis= ses per cycle (higher is better)", + ml, "load_miss_pending/cycle") + + def IntelPorts() -> Optional[MetricGroup]: pipeline_events =3D json.load( open(f"{_args.events_path}/x86/{_args.model}/pipeline.json")) @@ -836,6 +850,7 @@ def main() -> None: IntelIlp(), IntelL2(), IntelLdSt(), + IntelMlp(), IntelPorts(), IntelSwpf(), ]) --=20 2.52.0.457.g6b5491de43-goog From nobody Sat Feb 7 09:20:47 2026 Received: from mail-dy1-f201.google.com (mail-dy1-f201.google.com [74.125.82.201]) (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 50B103644BA for ; Tue, 27 Jan 2026 18:46:19 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.82.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769539580; cv=none; b=PnvgmHDQ5xQVfqwlsTHQ52z/PGhlrXtGeoFeipeHJLQuji7QuHJmvVxcTor5RlH3YMWqgpmpVPsb5mI9RIR0Xhxq2PGIlFaFdx8ZG+dY+WLecucuvf0spHcLwaD8kc27Z+a0TYnXMeCtm6oPgua+u37O4DzenrQ2Ni9TaDxCW6A= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769539580; c=relaxed/simple; bh=2jmqKph2zPBaDCiirJx0Zuul8V+Id9CgYa/L0xXNrec=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=O1q/XmJw6cB8lEV3yAqYPTMHazJkt5Mp+cy44kryp0HMdTJI2tYRC1Zv6Y9rRXhVxwPB9r4ahCThKIJvHSCaxYSVhs0Oci3IRYO6fSSptDSoxUFvQZ5IUwXQduD5LR8mzZe9o1jldlAzlSM4zaR8gILK7C6XpjyM9pn628n0FKg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--irogers.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=XxpI3PI6; arc=none smtp.client-ip=74.125.82.201 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--irogers.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="XxpI3PI6" Received: by mail-dy1-f201.google.com with SMTP id 5a478bee46e88-2b6b9c1249fso11402582eec.1 for ; Tue, 27 Jan 2026 10:46:19 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1769539578; x=1770144378; darn=vger.kernel.org; h=to:from:subject:message-id:references:mime-version:in-reply-to:date :from:to:cc:subject:date:message-id:reply-to; bh=fJoyN8MzitpnRKNksQbC+dtWJQHWKeGHeklIvOG/ru4=; b=XxpI3PI6CSWhaskHPnx3oXUTHjY9gIyU0JGeOihV+xKlOMhtNkQMrz5HMEExaA9ml0 JkaLL3DQGRfO/x7E8EFgCJe7rN0NsPF5EyyrPtIOFa+iOoe2VeatLHFNhwJOo3ik1uq1 u3RHKfob7QZvaq0wJwjvkkw6/R44f5lGIK7osOEqkxz0ubzPcI11RCdy4zelO5T8kBns b71x2b+rtA+pz1PC5LPpmyANksb4/ENF/3BITru3azqnqzyWwPhX9Sol8ijysclxW9Z+ Ot+Suh3dfhvVDcXLhUaSR7qWh60VR5vlIBK/03KxqEcaRzKb3CSVjwtpFuNbspLDa8I5 vkVQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1769539578; x=1770144378; h=to:from:subject:message-id:references:mime-version:in-reply-to:date :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=fJoyN8MzitpnRKNksQbC+dtWJQHWKeGHeklIvOG/ru4=; b=fFLcD7k39dsCJvNqzkG5PbH4lWRo9qjPXVqwWx7GsCQ+Xn+UvMJRXKLQdbhq4CZVqV 3WC2zkzrEAqWg711luGVN0cJkhd0RO8JND5R9jgtWEAmqu8n4FsBlEdxM2nbJ7FSqEWa 0fhzY7gGGrj2PUPE/P8VLr4Np3czoFdPDnlxgDNGIe1frTnjFPS1t7XdhPgCQcxc01f0 qYZ7RS4m3VYdLeG0YqFDCMovfOBwAqdnPoRiZefOmt5Ldkj+Edsgs+IcR7xMOTH5OQK6 25Lvw7BZryryi9+IgiCwFmE6zIFZfclGQu3cQtWmFFhTjWmhlV8JHbJNK4G1+8lDoIZ+ 9i0g== X-Forwarded-Encrypted: i=1; AJvYcCWUfoAamjoEMsyqd1oKsAeOtyYWK8yN0L/Ie88rZVfLCgrn3wigQfuXT0bos5vJp/yfLiw3ndhP3Z8LcsI=@vger.kernel.org X-Gm-Message-State: AOJu0Yx/DTyyGrtiIwVheIQLfSB8fXXGtzp5rqXsPzj8WHSaj7GPZEIc 3OVJqEkPk4rvsvfeVfWSOheC5u3TsZGGbPJuYpUcx12TRSY3i4lQ98jZH715D0UOfj3jNFjqCgF b4jHV83SZyA== X-Received: from dyw2.prod.google.com ([2002:a05:7300:8802:b0:2a2:4eb1:3771]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a05:7301:7018:b0:2b7:2a17:af34 with SMTP id 5a478bee46e88-2b78d9f1bdemr1836844eec.23.1769539578354; Tue, 27 Jan 2026 10:46:18 -0800 (PST) Date: Tue, 27 Jan 2026 10:44:58 -0800 In-Reply-To: <20260127184506.3059493-1-irogers@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260127184506.3059493-1-irogers@google.com> X-Mailer: git-send-email 2.52.0.457.g6b5491de43-goog Message-ID: <20260127184506.3059493-28-irogers@google.com> Subject: [PATCH v11 27/35] perf jevents: Add mem_bw metric for Intel From: Ian Rogers To: Adrian Hunter , Alexander Shishkin , Arnaldo Carvalho de Melo , Benjamin Gray , Caleb Biggers , Edward Baker , Ian Rogers , Ingo Molnar , James Clark , Jing Zhang , Jiri Olsa , John Garry , Leo Yan , Namhyung Kim , Perry Taylor , Peter Zijlstra , Sandipan Das , Thomas Falcon , Weilin Wang , Xu Yang , linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Break down memory bandwidth using uncore counters. For many models this matches the memory_bandwidth_* metrics, but these metrics aren't made available on all models. Add support for free running counters. Query the event json when determining which what events/counters are available. Tested-by: Thomas Falcon Signed-off-by: Ian Rogers --- tools/perf/pmu-events/intel_metrics.py | 62 ++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) diff --git a/tools/perf/pmu-events/intel_metrics.py b/tools/perf/pmu-events= /intel_metrics.py index dddeae35e4b4..f671d6e4fd67 100755 --- a/tools/perf/pmu-events/intel_metrics.py +++ b/tools/perf/pmu-events/intel_metrics.py @@ -815,6 +815,67 @@ def IntelLdSt() -> Optional[MetricGroup]: ], description=3D"Breakdown of load/store instructions") =20 =20 +def UncoreMemBw() -> Optional[MetricGroup]: + mem_events =3D [] + try: + mem_events =3D json.load(open(f"{os.path.dirname(os.path.realpath(= __file__))}" + f"/arch/x86/{args.model}/uncore-memory= .json")) + except: + pass + + ddr_rds =3D 0 + ddr_wrs =3D 0 + ddr_total =3D 0 + for x in mem_events: + if "EventName" in x: + name =3D x["EventName"] + if re.search("^UNC_MC[0-9]+_RDCAS_COUNT_FREERUN", name): + ddr_rds +=3D Event(name) + elif re.search("^UNC_MC[0-9]+_WRCAS_COUNT_FREERUN", name): + ddr_wrs +=3D Event(name) + # elif re.search("^UNC_MC[0-9]+_TOTAL_REQCOUNT_FREERUN", name): + # ddr_total +=3D Event(name) + + if ddr_rds =3D=3D 0: + try: + ddr_rds =3D Event("UNC_M_CAS_COUNT.RD") + ddr_wrs =3D Event("UNC_M_CAS_COUNT.WR") + except: + return None + + ddr_total =3D ddr_rds + ddr_wrs + + pmm_rds =3D 0 + pmm_wrs =3D 0 + try: + pmm_rds =3D Event("UNC_M_PMM_RPQ_INSERTS") + pmm_wrs =3D Event("UNC_M_PMM_WPQ_INSERTS") + except: + pass + + pmm_total =3D pmm_rds + pmm_wrs + + scale =3D 64 / 1_000_000 + return MetricGroup("lpm_mem_bw", [ + MetricGroup("lpm_mem_bw_ddr", [ + Metric("lpm_mem_bw_ddr_read", "DDR memory read bandwidth", + d_ratio(ddr_rds, interval_sec), f"{scale}MB/s"), + Metric("lpm_mem_bw_ddr_write", "DDR memory write bandwidth", + d_ratio(ddr_wrs, interval_sec), f"{scale}MB/s"), + Metric("lpm_mem_bw_ddr_total", "DDR memory write bandwidth", + d_ratio(ddr_total, interval_sec), f"{scale}MB/s"), + ], description=3D"DDR Memory Bandwidth"), + MetricGroup("lpm_mem_bw_pmm", [ + Metric("lpm_mem_bw_pmm_read", "PMM memory read bandwidth", + d_ratio(pmm_rds, interval_sec), f"{scale}MB/s"), + Metric("lpm_mem_bw_pmm_write", "PMM memory write bandwidth", + d_ratio(pmm_wrs, interval_sec), f"{scale}MB/s"), + Metric("lpm_mem_bw_pmm_total", "PMM memory write bandwidth", + d_ratio(pmm_total, interval_sec), f"{scale}MB/s"), + ], description=3D"PMM Memory Bandwidth") if pmm_rds !=3D 0 else No= ne, + ], description=3D"Memory Bandwidth") + + def main() -> None: global _args =20 @@ -853,6 +914,7 @@ def main() -> None: IntelMlp(), IntelPorts(), IntelSwpf(), + UncoreMemBw(), ]) =20 if _args.metricgroups: --=20 2.52.0.457.g6b5491de43-goog From nobody Sat Feb 7 09:20:47 2026 Received: from mail-dy1-f201.google.com (mail-dy1-f201.google.com [74.125.82.201]) (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 354B936A03A for ; Tue, 27 Jan 2026 18:46:21 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.82.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769539582; cv=none; b=Ivn+lfFLUF56Y4K9lJak5vDJrNhIJUKpGDwX09Vg/gPeBbClX1rhbejiTtJeg44NJHQ48V7ToxqGdwdJ1UH5Ih5l4dG0pnRttz1N3oaVMB9sE6G4MNlPdTn79HoUg/0wJzfT9aRHgF587kbLpEjv0UQBIqj9wQoapOFoZF/ha4w= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769539582; c=relaxed/simple; bh=iFgxYI8YkDQdRRykiWwbB91svFRxih0jHTs5Ccf/Mo4=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=ktEA/bfKiqNNDXjsZR1Xd7eAgS3Xs5nfQzAHXttLDIXSuk8XnUo5QQV8UvswBsKcezVXtiAs/riwpsQZh70VD/8tS4cO16UZkn9YtqhH5Y2/qnlgrSrFC/8bsysEUBDcIFkDtKL0LNiLkNOsay9X87uqJAvR3wtgK5eVYuyDyXk= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--irogers.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=MtK8vIcD; arc=none smtp.client-ip=74.125.82.201 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--irogers.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="MtK8vIcD" Received: by mail-dy1-f201.google.com with SMTP id 5a478bee46e88-2b71bdcd037so81934eec.1 for ; Tue, 27 Jan 2026 10:46:21 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1769539580; x=1770144380; darn=vger.kernel.org; h=to:from:subject:message-id:references:mime-version:in-reply-to:date :from:to:cc:subject:date:message-id:reply-to; bh=W5NprC8R5leRz2bKlO+oNnE5MEyD18eL1u1cM1xoByk=; b=MtK8vIcD/nSp5QtBsr91wkuxDWnoFUf+vFjvLWRvPJfpckZN300xLmUgXB8NyaVrrq MdZW4sqtrmUkLlCdzv0VhwzrCNPva6eNlvDgoe2azpnb5zKk+obSzvOf4Wt3eW+rsgcX jhrZ4LUtlf2ZWFGsdEdLvm4u3LbNex6ydfR+bkSKn0p9ZZst7erd/2qZfysjA8Zv4gce C1+Jjzd1zEFySoJnrvI/z64CK+XFRww4O1GTXXyWQDXpwmBAUIWafEu+Hnnq17JyRRTq 2oCeVec6Mzrhljy7Mes6u1uDIjFihh0vYxFITC6WNlZUF0I/4xlONKhyCpHiLJnyfM/O 8+5g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1769539580; x=1770144380; h=to:from:subject:message-id:references:mime-version:in-reply-to:date :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=W5NprC8R5leRz2bKlO+oNnE5MEyD18eL1u1cM1xoByk=; b=Q3Kebf/YCGEuS5iryZvKnl5AwOGWFI/S4ecMGJBMFS3UkQx4grIJSyFtAJqPTqq98r LChmfRDO4xh0Nnmyr+risyN65GBKWWJC84erg/KwUHq9W5I9dkjMvhSyrwDAD7xICyxU TmZ38Xdo7SwqiGmKiMrq5ytJbI4/tlpYzPvOkYtCdzFMd/QRZsn0b0w14uOU5rskPCez YeOllbuvYkWsTEeEsKP57yHtzR4lYXjcAiZdPINbtGZ5pjHei3xJTbdBej9FIpN0nca9 gqiAgy/GrO9hbLN5ns6sVTKh+QGv4l9F08UyrEfERmNeFDHp4QCfpS8sCz6OQedBi46U DvJA== X-Forwarded-Encrypted: i=1; AJvYcCWX3IZgmGZSrunWc2I7D8DeTemMye3CSQobiWA4MjpHYO2QNemi/Rg1zkDiNu/dNKT4xsqUggN0tpd+ApE=@vger.kernel.org X-Gm-Message-State: AOJu0YwYGoXb9UWZVEU6TOnf2qQ1hStMlLf8NDdwgRBvfKP7gulyJxCN 2fnSR/ZANMna3s5OnD6LPCCxOnaqwLCw78LQxkGLTcJeNthEjHvtoOcw7i8PKqUWWvQEHfAN38H CKyGVhIesdg== X-Received: from dybqf15.prod.google.com ([2002:a05:7301:648f:b0:2ae:582c:694f]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a05:7300:cd8d:b0:2ab:9d23:f0b1 with SMTP id 5a478bee46e88-2b78e7bbecbmr1229676eec.13.1769539580277; Tue, 27 Jan 2026 10:46:20 -0800 (PST) Date: Tue, 27 Jan 2026 10:44:59 -0800 In-Reply-To: <20260127184506.3059493-1-irogers@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260127184506.3059493-1-irogers@google.com> X-Mailer: git-send-email 2.52.0.457.g6b5491de43-goog Message-ID: <20260127184506.3059493-29-irogers@google.com> Subject: [PATCH v11 28/35] perf jevents: Add local/remote "mem" breakdown metrics for Intel From: Ian Rogers To: Adrian Hunter , Alexander Shishkin , Arnaldo Carvalho de Melo , Benjamin Gray , Caleb Biggers , Edward Baker , Ian Rogers , Ingo Molnar , James Clark , Jing Zhang , Jiri Olsa , John Garry , Leo Yan , Namhyung Kim , Perry Taylor , Peter Zijlstra , Sandipan Das , Thomas Falcon , Weilin Wang , Xu Yang , linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Breakdown local and remote memory bandwidth, read and writes. The implementation uses the HA and CHA PMUs present in server models broadwellde, broadwellx cascadelakex, emeraldrapids, haswellx, icelakex, ivytown, sapphirerapids and skylakex. Tested-by: Thomas Falcon Signed-off-by: Ian Rogers --- tools/perf/pmu-events/intel_metrics.py | 31 ++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/tools/perf/pmu-events/intel_metrics.py b/tools/perf/pmu-events= /intel_metrics.py index f671d6e4fd67..983e5021f3d3 100755 --- a/tools/perf/pmu-events/intel_metrics.py +++ b/tools/perf/pmu-events/intel_metrics.py @@ -815,6 +815,36 @@ def IntelLdSt() -> Optional[MetricGroup]: ], description=3D"Breakdown of load/store instructions") =20 =20 +def UncoreMem() -> Optional[MetricGroup]: + try: + loc_rds =3D Event("UNC_CHA_REQUESTS.READS_LOCAL", + "UNC_H_REQUESTS.READS_LOCAL") + rem_rds =3D Event("UNC_CHA_REQUESTS.READS_REMOTE", + "UNC_H_REQUESTS.READS_REMOTE") + loc_wrs =3D Event("UNC_CHA_REQUESTS.WRITES_LOCAL", + "UNC_H_REQUESTS.WRITES_LOCAL") + rem_wrs =3D Event("UNC_CHA_REQUESTS.WRITES_REMOTE", + "UNC_H_REQUESTS.WRITES_REMOTE") + except: + return None + + scale =3D 64 / 1_000_000 + return MetricGroup("lpm_mem", [ + MetricGroup("lpm_mem_local", [ + Metric("lpm_mem_local_read", "Local memory read bandwidth not = including directory updates", + d_ratio(loc_rds, interval_sec), f"{scale}MB/s"), + Metric("lpm_mem_local_write", "Local memory write bandwidth no= t including directory updates", + d_ratio(loc_wrs, interval_sec), f"{scale}MB/s"), + ]), + MetricGroup("lpm_mem_remote", [ + Metric("lpm_mem_remote_read", "Remote memory read bandwidth no= t including directory updates", + d_ratio(rem_rds, interval_sec), f"{scale}MB/s"), + Metric("lpm_mem_remote_write", "Remote memory write bandwidth = not including directory updates", + d_ratio(rem_wrs, interval_sec), f"{scale}MB/s"), + ]), + ], description=3D"Memory Bandwidth breakdown local vs. remote (remote = requests in). directory updates not included") + + def UncoreMemBw() -> Optional[MetricGroup]: mem_events =3D [] try: @@ -914,6 +944,7 @@ def main() -> None: IntelMlp(), IntelPorts(), IntelSwpf(), + UncoreMem(), UncoreMemBw(), ]) =20 --=20 2.52.0.457.g6b5491de43-goog From nobody Sat Feb 7 09:20:47 2026 Received: from mail-dl1-f73.google.com (mail-dl1-f73.google.com [74.125.82.73]) (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 ECA2436B042 for ; Tue, 27 Jan 2026 18:46:22 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.82.73 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769539584; cv=none; b=CMN5XbPy3m6KCqpPItLnu+0FUjhqJXwufjtqK7hBgOwpc1Ko/bmStCJmhkVA7Xcojs8oIZROEBxD4zsy531K3M01LJPUlNWItdzt8FUddFK31sKKqOofwT3GqnWUbPOunRdFJvshZ3NKDRilEAJ9TaUV4onnMqvW45/M+GbxVjc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769539584; c=relaxed/simple; bh=Sr+0utK0tNOs2nzfxd6UaoFEVfN9d6C1I9sdXtbKpqg=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=il8raAKCQ9iZ12RRrg45Vk5a2YmNSAF6spBU0LhWY90kWV1+eH/YqR6LUzfKoelRkXKyfqA/Uth4DzOBIEP8r0omfBxndmrIR2l2V6wl7fqrWdAduIxl9enryapEJYRrPzgxJsOB8oJJcCgLNfwQHEygkpMeTMTpT8dV5zVUkEM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--irogers.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=p1orKiuM; arc=none smtp.client-ip=74.125.82.73 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--irogers.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="p1orKiuM" Received: by mail-dl1-f73.google.com with SMTP id a92af1059eb24-1247bb4db53so7859161c88.1 for ; Tue, 27 Jan 2026 10:46:22 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1769539582; x=1770144382; darn=vger.kernel.org; h=to:from:subject:message-id:references:mime-version:in-reply-to:date :from:to:cc:subject:date:message-id:reply-to; bh=yAo1MILhGnqZNbLlgKzWKgNCypTb5sxkZ5UVUsguhwU=; b=p1orKiuMg5IvS5tFwcqxkK7NDMuV45sYyxxczAQZUHy58nE3cS6RswXrObYTAsO62x A8YQ0fCHuOyU84dsuXTIMZlYZyQqkVWoLkuENjOrH3Ans8pj45wd3BsqW31ciEqMuxX/ +cAXAy0zmwNRY3PLQc7RHHVu8OhSOx4SCmlZET35zl8Fw5vkzJMagH6TH7/JR1b4NgR9 OMBd5OItFVUoA73uPARJ+OdLkKFIPledCVzx8vyIcl1isbANBwtMARD7SnVYFQqVjNRG oikayJug/2cgtoEd6oPdQ3Wr1uFLxXy5yWjkcNW/zWqyW7uFbV1rx5QVLArg5TLnEPYD dAXQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1769539582; x=1770144382; h=to:from:subject:message-id:references:mime-version:in-reply-to:date :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=yAo1MILhGnqZNbLlgKzWKgNCypTb5sxkZ5UVUsguhwU=; b=CJou+E75qLm8as4ZIe5UplH4jG08b6xmZLMQLJTgIOhUDvdQXMPukbMG9ujkR1u+Xp 1Ew4zSWwiZLIhjvj1nqGJ/8X080315H5caw6ey4Q+Se1HxJhQ1gVwPNakJwr4mLEcLgr HcL3/EMtgriVZ5xrnmd7CxojEfRUP+N0Nv14iCrHmXya0jYmNuOloLBioS6FOPTRVn9l xeidADxxf3Y/D8Ozr3xEYpVrzn/bjSfJJpYA+E4utoy8VvTFIbOj047P5gh8lybL8ZCQ vUEx+sP4kkamLg3WHy4yn85kwUMUehYm0wbRU6SxvyTw4W77wtO61Pb2hQtRdd8IaM6d Zyng== X-Forwarded-Encrypted: i=1; AJvYcCWrN76P3Z4cPwMxIvtd7iYnmDumTCeGf/FxKosMKwDqrlEfq+jQ762eBw/b9PrVm8KLNz6VM8rIZkwYwuM=@vger.kernel.org X-Gm-Message-State: AOJu0YyvBUR7WjjHQ+83Fwpirl926t/twWwpENwSjpVb6LYSrahbWQK0 jtPmKK7C+dmx8DidsFnUeyt39+zEgBql3DBo0l0thaFHfwr+fUiVKbjuuebYqVO6jjZ7D0Kd9YT FBXjeMuM+og== X-Received: from dlbcf3.prod.google.com ([2002:a05:7022:4583:b0:123:12b9:c4e5]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a05:7022:128c:b0:123:361e:e87c with SMTP id a92af1059eb24-124a0098f90mr1789109c88.11.1769539581994; Tue, 27 Jan 2026 10:46:21 -0800 (PST) Date: Tue, 27 Jan 2026 10:45:00 -0800 In-Reply-To: <20260127184506.3059493-1-irogers@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260127184506.3059493-1-irogers@google.com> X-Mailer: git-send-email 2.52.0.457.g6b5491de43-goog Message-ID: <20260127184506.3059493-30-irogers@google.com> Subject: [PATCH v11 29/35] perf jevents: Add dir breakdown metrics for Intel From: Ian Rogers To: Adrian Hunter , Alexander Shishkin , Arnaldo Carvalho de Melo , Benjamin Gray , Caleb Biggers , Edward Baker , Ian Rogers , Ingo Molnar , James Clark , Jing Zhang , Jiri Olsa , John Garry , Leo Yan , Namhyung Kim , Perry Taylor , Peter Zijlstra , Sandipan Das , Thomas Falcon , Weilin Wang , Xu Yang , linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Breakdown directory hit, misses and requests. The implementation uses the M2M and CHA PMUs present in server models broadwellde, broadwellx cascadelakex, emeraldrapids, icelakex, sapphirerapids and skylakex. Tested-by: Thomas Falcon Signed-off-by: Ian Rogers --- tools/perf/pmu-events/intel_metrics.py | 36 ++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/tools/perf/pmu-events/intel_metrics.py b/tools/perf/pmu-events= /intel_metrics.py index 983e5021f3d3..24ceb7f8719b 100755 --- a/tools/perf/pmu-events/intel_metrics.py +++ b/tools/perf/pmu-events/intel_metrics.py @@ -815,6 +815,41 @@ def IntelLdSt() -> Optional[MetricGroup]: ], description=3D"Breakdown of load/store instructions") =20 =20 +def UncoreDir() -> Optional[MetricGroup]: + try: + m2m_upd =3D Event("UNC_M2M_DIRECTORY_UPDATE.ANY") + m2m_hits =3D Event("UNC_M2M_DIRECTORY_HIT.DIRTY_I") + # Turn the umask into a ANY rather than DIRTY_I filter. + m2m_hits.name +=3D "/umask=3D0xFF,name=3DUNC_M2M_DIRECTORY_HIT.ANY= /" + m2m_miss =3D Event("UNC_M2M_DIRECTORY_MISS.DIRTY_I") + # Turn the umask into a ANY rather than DIRTY_I filter. + m2m_miss.name +=3D "/umask=3D0xFF,name=3DUNC_M2M_DIRECTORY_MISS.AN= Y/" + cha_upd =3D Event("UNC_CHA_DIR_UPDATE.HA") + # Turn the umask into a ANY rather than HA filter. + cha_upd.name +=3D "/umask=3D3,name=3DUNC_CHA_DIR_UPDATE.ANY/" + except: + return None + + m2m_total =3D m2m_hits + m2m_miss + upd =3D m2m_upd + cha_upd # in cache lines + upd_r =3D upd / interval_sec + look_r =3D m2m_total / interval_sec + + scale =3D 64 / 1_000_000 # Cache lines to MB + return MetricGroup("lpm_dir", [ + Metric("lpm_dir_lookup_rate", "", + d_ratio(m2m_total, interval_sec), "requests/s"), + Metric("lpm_dir_lookup_hits", "", + d_ratio(m2m_hits, m2m_total), "100%"), + Metric("lpm_dir_lookup_misses", "", + d_ratio(m2m_miss, m2m_total), "100%"), + Metric("lpm_dir_update_requests", "", + d_ratio(m2m_upd + cha_upd, interval_sec), "requests/s"), + Metric("lpm_dir_update_bw", "", + d_ratio(m2m_upd + cha_upd, interval_sec), f"{scale}MB/s"), + ]) + + def UncoreMem() -> Optional[MetricGroup]: try: loc_rds =3D Event("UNC_CHA_REQUESTS.READS_LOCAL", @@ -944,6 +979,7 @@ def main() -> None: IntelMlp(), IntelPorts(), IntelSwpf(), + UncoreDir(), UncoreMem(), UncoreMemBw(), ]) --=20 2.52.0.457.g6b5491de43-goog From nobody Sat Feb 7 09:20:47 2026 Received: from mail-dl1-f74.google.com (mail-dl1-f74.google.com [74.125.82.74]) (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 CC64836BCCA for ; Tue, 27 Jan 2026 18:46:24 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.82.74 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769539586; cv=none; b=ZfKuRJX6MJzbsCqW/04Jw7Qg1v7grbkQ1rWftDGvCJ+axH+tP7Yn9hXwUEH1yaUFzeK4loC2obI5BSrUDgS1H706/t++ILEhiFZxN+YZftJYvFgUZn9PEYywd5Nem172awJ3PROqUs8XF00gRqnR121HbkNT61xamCjQihZ82qI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769539586; c=relaxed/simple; bh=0/p47u8XI/jepoD/8n27VWWYDMXq2JoIclYASBN8NcM=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=KRDRBWVng4XGGip91g4yWnkzJvKMvDqLJf7+GU/AZffNtsn5cUq0+T9JX/ODPLJ2PQWS8poCHzaK3qCc5qk0VGVrlpfLCvJM8+GpCDtfkSvvPA79VSvopq2GVAqcJy0bRmU5WglazlYPaIvk7Cfp6lZRFBq9V7hF7TM+kHsWvu8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--irogers.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=PjUpvf1y; arc=none smtp.client-ip=74.125.82.74 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--irogers.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="PjUpvf1y" Received: by mail-dl1-f74.google.com with SMTP id a92af1059eb24-12337114f3fso8314414c88.0 for ; Tue, 27 Jan 2026 10:46:24 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1769539584; x=1770144384; darn=vger.kernel.org; h=to:from:subject:message-id:references:mime-version:in-reply-to:date :from:to:cc:subject:date:message-id:reply-to; bh=a8hELqlVqsPd53TkBvYAfiL9c8Iu/vvPZfjM7X/WNAc=; b=PjUpvf1ygi+Hbk8spsqC5wR8y/0AlujyVQ9vmQPR/4bmkb5wwJp/pQb9yGCz8T3OnO C4ICh+BGtLGSxV+YTsnzHa4mnYc1T08qxtqzOoDl5GPh8Nf8iDCDVQTFvZx265eXptTX XRXhYjBGcTPPeXqBDqZdF2tZpYB8y9obv3cMfKWdLWNV4VNExdOO217odvZXJQmIVxxF PBojYiB6GNhSJLCc6NVeTgf5w8+czxOvi2dPrbwhEtO38GTj6BpJWsLNvtk4IMfUTaJQ 7R07tfbPS98z0o1Zm4Smv6RWAQ8ahoye2qGA/rnm7z8Zo1hAmlQHUDe6fBF9Lray+eZR LHcg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1769539584; x=1770144384; h=to:from:subject:message-id:references:mime-version:in-reply-to:date :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=a8hELqlVqsPd53TkBvYAfiL9c8Iu/vvPZfjM7X/WNAc=; b=FImhy2GRyyatbCHQaXb3FW0loWp2PSoKtnJiLaeXLrjS+ScWWS58T7NgOvx/sbYbbU sqO1cWcxpBV+wcELgeDVFNYaknDOYvDrz8v73vm3XhLmc5VsCfkR5dPLHepUXE108+I7 DmRi1U1DRS1ayT7+WWTNNZnht6arw2+qnbOqQ0UFUBjLfEG1477yMM1ic+7+djzAkNOs RrNHXofDwQQtE4bryaqNMporGr4gyuJj4mKImT3oPPImvwk8vW6+x5syfc3CbUNdzHeh GH9k/+5fFZxKCKUebVslgTPq0wt9N/2uRMkde4fpFfk/NDk5jWmi9gkPUK2akdE7Cu3Z c0UA== X-Forwarded-Encrypted: i=1; AJvYcCWSSwUw/UgmFu55outvnx1h3A6CnblLQEwW9K0bxSmAI67uE2jMmuH7r/CI5FgOFcx3D/IYf8txzFdHVZw=@vger.kernel.org X-Gm-Message-State: AOJu0YyOOBs/P0wmJw5vJX7KaUBwxciQj0IzNOG3idaxAjbxC5VE9mrq eAL/KjVGjv/01HgWdBeT7OEKMfWj5AJqyvZ93RLfLArxqdQBdl2M3/7xkko+vJcUl44nwNEdWCf G2BMNNpk+iw== X-Received: from dlbtu19.prod.google.com ([2002:a05:7022:3c13:b0:123:2dd9:db4]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a05:7022:6286:b0:11b:9386:a37d with SMTP id a92af1059eb24-124a00e8ae7mr1367052c88.44.1769539583947; Tue, 27 Jan 2026 10:46:23 -0800 (PST) Date: Tue, 27 Jan 2026 10:45:01 -0800 In-Reply-To: <20260127184506.3059493-1-irogers@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260127184506.3059493-1-irogers@google.com> X-Mailer: git-send-email 2.52.0.457.g6b5491de43-goog Message-ID: <20260127184506.3059493-31-irogers@google.com> Subject: [PATCH v11 30/35] perf jevents: Add C-State metrics from the PCU PMU for Intel From: Ian Rogers To: Adrian Hunter , Alexander Shishkin , Arnaldo Carvalho de Melo , Benjamin Gray , Caleb Biggers , Edward Baker , Ian Rogers , Ingo Molnar , James Clark , Jing Zhang , Jiri Olsa , John Garry , Leo Yan , Namhyung Kim , Perry Taylor , Peter Zijlstra , Sandipan Das , Thomas Falcon , Weilin Wang , Xu Yang , linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Use occupancy events fixed in: https://lore.kernel.org/lkml/20240226201517.3540187-1-irogers@google.com/ Metrics are at the socket level referring to cores, not hyperthreads. Tested-by: Thomas Falcon Signed-off-by: Ian Rogers --- tools/perf/pmu-events/intel_metrics.py | 30 ++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/tools/perf/pmu-events/intel_metrics.py b/tools/perf/pmu-events= /intel_metrics.py index 24ceb7f8719b..118fe0fc05a3 100755 --- a/tools/perf/pmu-events/intel_metrics.py +++ b/tools/perf/pmu-events/intel_metrics.py @@ -815,6 +815,35 @@ def IntelLdSt() -> Optional[MetricGroup]: ], description=3D"Breakdown of load/store instructions") =20 =20 +def UncoreCState() -> Optional[MetricGroup]: + try: + pcu_ticks =3D Event("UNC_P_CLOCKTICKS") + c0 =3D Event("UNC_P_POWER_STATE_OCCUPANCY.CORES_C0") + c3 =3D Event("UNC_P_POWER_STATE_OCCUPANCY.CORES_C3") + c6 =3D Event("UNC_P_POWER_STATE_OCCUPANCY.CORES_C6") + except: + return None + + num_cores =3D Literal("#num_cores") / Literal("#num_packages") + + max_cycles =3D pcu_ticks * num_cores + total_cycles =3D c0 + c3 + c6 + + # remove fused-off cores which show up in C6/C7. + c6 =3D Select(max(c6 - (total_cycles - max_cycles), 0), + total_cycles > max_cycles, + c6) + + return MetricGroup("lpm_cstate", [ + Metric("lpm_cstate_c0", "C-State cores in C0/C1", + d_ratio(c0, pcu_ticks), "cores"), + Metric("lpm_cstate_c3", "C-State cores in C3", + d_ratio(c3, pcu_ticks), "cores"), + Metric("lpm_cstate_c6", "C-State cores in C6/C7", + d_ratio(c6, pcu_ticks), "cores"), + ]) + + def UncoreDir() -> Optional[MetricGroup]: try: m2m_upd =3D Event("UNC_M2M_DIRECTORY_UPDATE.ANY") @@ -979,6 +1008,7 @@ def main() -> None: IntelMlp(), IntelPorts(), IntelSwpf(), + UncoreCState(), UncoreDir(), UncoreMem(), UncoreMemBw(), --=20 2.52.0.457.g6b5491de43-goog From nobody Sat Feb 7 09:20:47 2026 Received: from mail-dl1-f74.google.com (mail-dl1-f74.google.com [74.125.82.74]) (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 63078364EBE for ; Tue, 27 Jan 2026 18:46:26 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.82.74 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769539587; cv=none; b=ohOqZuLDzpWAKZbztko/VA7K3INpxn8lsP7v6DY9OS+Ou41+u5dQqJTjVCASiYQXaeY8cVqEMq/qCNJ1IE1yLTzuEOP8ewvoBZkmCcjsiE30M7BW4TnTMCmppZVnXm3/ZgoVLbJLZ+GWuBaFQLLtAjf6xWYz9SyjnIVTxviekNM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769539587; c=relaxed/simple; bh=w/E20u8/Wao9eymMi66Gt2Oyo3Q+Ckqd/d41pO69OCQ=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=jLo87OMDkDYAbRSUnJo1ZQJBYWZoq7tfeDuZbkStLtXCEjVGEb0hHrh91PeY7gpK/u5ZUg6NlBlpIGbZ8E4aFXkKLSQPAWNX/KUVTH7l5CextYYtnSYN8iqNm/pyxEwid69UNf1R85/NQ/w4sH0dOqIg4KDn2CmmAYs5x3iEJjI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--irogers.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=TSuMD/SH; arc=none smtp.client-ip=74.125.82.74 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--irogers.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="TSuMD/SH" Received: by mail-dl1-f74.google.com with SMTP id a92af1059eb24-124a5098029so2641517c88.0 for ; Tue, 27 Jan 2026 10:46:26 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1769539586; x=1770144386; darn=vger.kernel.org; h=to:from:subject:message-id:references:mime-version:in-reply-to:date :from:to:cc:subject:date:message-id:reply-to; bh=bkrL8HvCBil8dXshWsOcY3GoMPnFAn1ScNAR1TTPj0A=; b=TSuMD/SHhCDH2Kl40+pzXUy9B/RqpQJptBTgtyxqYUv1CVlpdzVM92Q+79knv+1suT I2h+dBYt3G9PWVOvU+Laaf2Xpj/wOh9zi60sQQ7XduVDX9outLFbPQyFlFvibixtLiJA GlIDCZgV5/sC5f7calk/lh/UJUtWMgNX9o1Qh/yJkGQYsiKCJ0h4stOGohqh4uKhV4K9 eYD9UE97YmZVvDjeBOaVqajfjSIhSlpd2u9ClJkmM6jeyX85Ua18RYLKosjMKzfhlFhw 3CYfel/tnm52uR3W46CWzqXCRPpVBRUaBAZQBWH+v1Q+fHudNxEjypN8pY0FYx62exSl 2yCw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1769539586; x=1770144386; h=to:from:subject:message-id:references:mime-version:in-reply-to:date :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=bkrL8HvCBil8dXshWsOcY3GoMPnFAn1ScNAR1TTPj0A=; b=p6JYkUYRLiIzuz4mv3Zm1v4jDwfM4O7Qu8o7yF99hV/IRUEazwxv1o/PPBAx++27r+ vTEVKQpQ6E2pCwSGdr2IztOEGKooETlY1twKgT9oqhhI4IYc+vLKYHVZo9XnPfEfOfzE jmJBru13vi/l4pQBmYwD0XTs3mEd2vue1Z7y0dpVYDOJy4YRgu+YJ4Rzopq26Uv6Ommi Qsdw8FY14xW9LbkhxEkmXWMuzphz01jCilt239eQiuGhuSj0NiZoU13zIYN+rWAoGJhs 57MRFSD+VOp/RvjuX+X+/2lnSFvW3KbVrzBMIdCSD0jdhPT7sXqqO0tF9KaEcqzjgTvE Qabg== X-Forwarded-Encrypted: i=1; AJvYcCUNaL7NMmsH4jQHh+iLPayM4OVPhPzXTEMM3WYBQy7oTtZtz4rYJka26Ge7AkF9WR4/AaBadVh2nTMJYDk=@vger.kernel.org X-Gm-Message-State: AOJu0YzsMWRAQhhe0G472FRN6antlxXW/zN80ahlMc3CujnRLsWsAzHB MkGOIDTYAq5WRqS5eykw4v0t7VL83qtOON/Bjfr/Irrv9F9ZnbWqzmP2f8Xuxpwmho74pBCWZPf IIX0qR+8ljw== X-Received: from dlbbz1.prod.google.com ([2002:a05:7022:2381:b0:11f:3484:4f15]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a05:7022:786:b0:11d:f440:b758 with SMTP id a92af1059eb24-124a00f496dmr1951656c88.25.1769539585577; Tue, 27 Jan 2026 10:46:25 -0800 (PST) Date: Tue, 27 Jan 2026 10:45:02 -0800 In-Reply-To: <20260127184506.3059493-1-irogers@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260127184506.3059493-1-irogers@google.com> X-Mailer: git-send-email 2.52.0.457.g6b5491de43-goog Message-ID: <20260127184506.3059493-32-irogers@google.com> Subject: [PATCH v11 31/35] perf jevents: Add local/remote miss latency metrics for Intel From: Ian Rogers To: Adrian Hunter , Alexander Shishkin , Arnaldo Carvalho de Melo , Benjamin Gray , Caleb Biggers , Edward Baker , Ian Rogers , Ingo Molnar , James Clark , Jing Zhang , Jiri Olsa , John Garry , Leo Yan , Namhyung Kim , Perry Taylor , Peter Zijlstra , Sandipan Das , Thomas Falcon , Weilin Wang , Xu Yang , linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Derive from CBOX/CHA occupancy and inserts the average latency as is provided in Intel's uncore performance monitoring reference. Tested-by: Thomas Falcon Signed-off-by: Ian Rogers --- tools/perf/pmu-events/intel_metrics.py | 70 ++++++++++++++++++++++++-- 1 file changed, 67 insertions(+), 3 deletions(-) diff --git a/tools/perf/pmu-events/intel_metrics.py b/tools/perf/pmu-events= /intel_metrics.py index 118fe0fc05a3..037f9b2ea1b6 100755 --- a/tools/perf/pmu-events/intel_metrics.py +++ b/tools/perf/pmu-events/intel_metrics.py @@ -6,9 +6,10 @@ import math import os import re from typing import Optional -from metric import (d_ratio, has_event, max, CheckPmu, Event, JsonEncodeMe= tric, - JsonEncodeMetricGroupDescriptions, Literal, LoadEvents, - Metric, MetricConstraint, MetricGroup, MetricRef, Sele= ct) +from metric import (d_ratio, has_event, max, source_count, CheckPmu, Event, + JsonEncodeMetric, JsonEncodeMetricGroupDescriptions, + Literal, LoadEvents, Metric, MetricConstraint, MetricG= roup, + MetricRef, Select) =20 # Global command line arguments. _args =3D None @@ -624,6 +625,68 @@ def IntelL2() -> Optional[MetricGroup]: ], description=3D"L2 data cache analysis") =20 =20 +def IntelMissLat() -> Optional[MetricGroup]: + try: + ticks =3D Event("UNC_CHA_CLOCKTICKS", "UNC_C_CLOCKTICKS") + data_rd_loc_occ =3D Event("UNC_CHA_TOR_OCCUPANCY.IA_MISS_DRD_LOCAL= ", + "UNC_CHA_TOR_OCCUPANCY.IA_MISS", + "UNC_C_TOR_OCCUPANCY.MISS_LOCAL_OPCODE", + "UNC_C_TOR_OCCUPANCY.MISS_OPCODE") + data_rd_loc_ins =3D Event("UNC_CHA_TOR_INSERTS.IA_MISS_DRD_LOCAL", + "UNC_CHA_TOR_INSERTS.IA_MISS", + "UNC_C_TOR_INSERTS.MISS_LOCAL_OPCODE", + "UNC_C_TOR_INSERTS.MISS_OPCODE") + data_rd_rem_occ =3D Event("UNC_CHA_TOR_OCCUPANCY.IA_MISS_DRD_REMOT= E", + "UNC_CHA_TOR_OCCUPANCY.IA_MISS", + "UNC_C_TOR_OCCUPANCY.MISS_REMOTE_OPCODE", + "UNC_C_TOR_OCCUPANCY.NID_MISS_OPCODE") + data_rd_rem_ins =3D Event("UNC_CHA_TOR_INSERTS.IA_MISS_DRD_REMOTE", + "UNC_CHA_TOR_INSERTS.IA_MISS", + "UNC_C_TOR_INSERTS.MISS_REMOTE_OPCODE", + "UNC_C_TOR_INSERTS.NID_MISS_OPCODE") + except: + return None + + if (data_rd_loc_occ.name =3D=3D "UNC_C_TOR_OCCUPANCY.MISS_LOCAL_OPCODE= " or + data_rd_loc_occ.name =3D=3D "UNC_C_TOR_OCCUPANCY.MISS_OPCODE"): + data_rd =3D 0x182 + for e in [data_rd_loc_occ, data_rd_loc_ins, data_rd_rem_occ, data_= rd_rem_ins]: + e.name +=3D f"/filter_opc=3D{hex(data_rd)}/" + elif data_rd_loc_occ.name =3D=3D "UNC_CHA_TOR_OCCUPANCY.IA_MISS": + # Demand Data Read - Full cache-line read requests from core for + # lines to be cached in S or E, typically for data + demand_data_rd =3D 0x202 + # LLC Prefetch Data - Uncore will first look up the line in the + # LLC; for a cache hit, the LRU will be updated, on a miss, the + # DRd will be initiated + llc_prefetch_data =3D 0x25a + local_filter =3D (f"/filter_opc0=3D{hex(demand_data_rd)}," + f"filter_opc1=3D{hex(llc_prefetch_data)}," + "filter_loc,filter_nm,filter_not_nm/") + remote_filter =3D (f"/filter_opc0=3D{hex(demand_data_rd)}," + f"filter_opc1=3D{hex(llc_prefetch_data)}," + "filter_rem,filter_nm,filter_not_nm/") + for e in [data_rd_loc_occ, data_rd_loc_ins]: + e.name +=3D local_filter + for e in [data_rd_rem_occ, data_rd_rem_ins]: + e.name +=3D remote_filter + else: + assert data_rd_loc_occ.name =3D=3D "UNC_CHA_TOR_OCCUPANCY.IA_MISS_= DRD_LOCAL", data_rd_loc_occ + + ticks_per_cha =3D ticks / source_count(data_rd_loc_ins) + loc_lat =3D interval_sec * 1e9 * data_rd_loc_occ / \ + (ticks_per_cha * data_rd_loc_ins) + ticks_per_cha =3D ticks / source_count(data_rd_rem_ins) + rem_lat =3D interval_sec * 1e9 * data_rd_rem_occ / \ + (ticks_per_cha * data_rd_rem_ins) + return MetricGroup("lpm_miss_lat", [ + Metric("lpm_miss_lat_loc", "Local to a socket miss latency in nano= seconds", + loc_lat, "ns"), + Metric("lpm_miss_lat_rem", "Remote to a socket miss latency in nan= oseconds", + rem_lat, "ns"), + ]) + + def IntelMlp() -> Optional[Metric]: try: l1d =3D Event("L1D_PEND_MISS.PENDING") @@ -1005,6 +1068,7 @@ def main() -> None: IntelIlp(), IntelL2(), IntelLdSt(), + IntelMissLat(), IntelMlp(), IntelPorts(), IntelSwpf(), --=20 2.52.0.457.g6b5491de43-goog From nobody Sat Feb 7 09:20:47 2026 Received: from mail-dy1-f201.google.com (mail-dy1-f201.google.com [74.125.82.201]) (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 1BE1A36C0A2 for ; Tue, 27 Jan 2026 18:46:27 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.82.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769539593; cv=none; b=hoNYydDAB1UlhOyNVO+tm0yRiDCf5Og3HtktPuzJIEcXv8K7HT9FNxises58y2i57NggZhdQitsLN8ZLdDeDYfTefcxOlmdmRStxAQKqjNMaNc/GuByW6lGM8gpJMIr/HKG+FYymPlBjOW6tSeZJ1SXcxWEiIhuwVYZWKqu2uiE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769539593; c=relaxed/simple; bh=M7A7ApF8aVAKAI09vVYWVhio9Nus+oQ+xkeCbrJDjVc=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=MvNzREcX141AAMH5pRdT104xFycXmhwo/PdgL0+dDzVrECnoZuOH8f4ilC3tt/E1ehOUybyUY4oyQA8s2cyqV8WbdyBJyRPM8pGDGDsj+nPbzC2lkiUkV5H+jfh0hOupEHVpiin3sDQOfY1JL0PfD0QYGyUH7RPYXliI8wW5o5A= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--irogers.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=rZs/nFlB; arc=none smtp.client-ip=74.125.82.201 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--irogers.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="rZs/nFlB" Received: by mail-dy1-f201.google.com with SMTP id 5a478bee46e88-2b70d8095daso5754549eec.1 for ; Tue, 27 Jan 2026 10:46:27 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1769539587; x=1770144387; darn=vger.kernel.org; h=to:from:subject:message-id:references:mime-version:in-reply-to:date :from:to:cc:subject:date:message-id:reply-to; bh=O7CG6C6zIj+w7vvLfhwJEssyIpR+8clNxK6M46Vo0NQ=; b=rZs/nFlBQ+EPI/3hSOaSXzbLUPWKq43z/0IwXH9yDH57kTQjwegzem0ufJswdCgVCB zukZG6PDMOvdc5P0gA/5TmcrrVXdAZ1QcliVBuBL8tnJoogHR466h54uFPhKRjsdTvhM 7wxZPlVQKhcPAO3VzgOlPLUDI6JxkFvzIsrhHZOzNRlmUbsxyjGJs2YlFOsVQ1SJOYAG YAYYMJKrZfx7Q7DvtBpCwWl7aAO+M84j5t2AH0SjbPi4SbYZD5tkPwIeav78AMqHRQAY CARKhd3moTLcqhHfbP88onBk7IxWfgqQM/N7PbSWVrSpmx1WmFmILZtvfS5XgjmOshBy lfMg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1769539587; x=1770144387; h=to:from:subject:message-id:references:mime-version:in-reply-to:date :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=O7CG6C6zIj+w7vvLfhwJEssyIpR+8clNxK6M46Vo0NQ=; b=E/MWqvuI8SrEurztjB7NJlpU9x5cPkUy6iQMH6Eu5YMBUfj/VwJf4tfio8PKFbkG/o NGRIb8Sqo1IfFLmCpTdwpGPUJT7lEKOuk8EVWhO+z9ZEzAHAD2UV/0P4XYtqXGmacfFy F0XUuIXqax3ceLvN8xCc0vidnVpQaeY3fzl6VVS9iN2BK50BNH9Afx86+n06IjQxmSUy GHG+xiyIm45SmQQZOKWB5aGIbLL6nI/rBK+ZhAVf/8bCNxXZF0CDwXK5sFHjfvej1xwG 2jZP5Qfy41VYyXKRdvW0GPQSqZtd9BiicJtjkKTaoFaxeB45vJw4Re/euG6sSVkbKfI3 3S7Q== X-Forwarded-Encrypted: i=1; AJvYcCU04d+i+CCs24daiKUdZtW+npwguXebjdsTldh+OYsF4vklGSobcjEHRfiy9DtBhZdnXK2UcK2i21gd7bI=@vger.kernel.org X-Gm-Message-State: AOJu0YzTAhihd9CU0CwWVEHW+yyDLhLNbJ1y25k8Y0yd8KBJeojlfjbz dH+Cn55XatniQ10TysGrUb8DYDsm3l5ebXP9fZYpUvoJV7cvNyhfP5d8mv/XPhWNlOfJc+tjQ7S jHQ1/HC9kWw== X-Received: from dybcn12.prod.google.com ([2002:a05:7300:a90c:b0:2b7:4088:aeb5]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a05:7300:1486:b0:2b7:4129:fe9e with SMTP id 5a478bee46e88-2b78da4a100mr1719612eec.34.1769539587197; Tue, 27 Jan 2026 10:46:27 -0800 (PST) Date: Tue, 27 Jan 2026 10:45:03 -0800 In-Reply-To: <20260127184506.3059493-1-irogers@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260127184506.3059493-1-irogers@google.com> X-Mailer: git-send-email 2.52.0.457.g6b5491de43-goog Message-ID: <20260127184506.3059493-33-irogers@google.com> Subject: [PATCH v11 32/35] perf jevents: Add upi_bw metric for Intel From: Ian Rogers To: Adrian Hunter , Alexander Shishkin , Arnaldo Carvalho de Melo , Benjamin Gray , Caleb Biggers , Edward Baker , Ian Rogers , Ingo Molnar , James Clark , Jing Zhang , Jiri Olsa , John Garry , Leo Yan , Namhyung Kim , Perry Taylor , Peter Zijlstra , Sandipan Das , Thomas Falcon , Weilin Wang , Xu Yang , linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Break down UPI read and write bandwidth using uncore_upi counters. Tested-by: Thomas Falcon Signed-off-by: Ian Rogers --- tools/perf/pmu-events/intel_metrics.py | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/tools/perf/pmu-events/intel_metrics.py b/tools/perf/pmu-events= /intel_metrics.py index 037f9b2ea1b6..f6bb691dc5bb 100755 --- a/tools/perf/pmu-events/intel_metrics.py +++ b/tools/perf/pmu-events/intel_metrics.py @@ -1033,6 +1033,27 @@ def UncoreMemBw() -> Optional[MetricGroup]: ], description=3D"Memory Bandwidth") =20 =20 +def UncoreUpiBw() -> Optional[MetricGroup]: + try: + upi_rds =3D Event("UNC_UPI_RxL_FLITS.ALL_DATA") + upi_wrs =3D Event("UNC_UPI_TxL_FLITS.ALL_DATA") + except: + return None + + upi_total =3D upi_rds + upi_wrs + + # From "Uncore Performance Monitoring": When measuring the amount of + # bandwidth consumed by transmission of the data (i.e. NOT including + # the header), it should be .ALL_DATA / 9 * 64B. + scale =3D (64 / 9) / 1_000_000 + return MetricGroup("lpm_upi_bw", [ + Metric("lpm_upi_bw_read", "UPI read bandwidth", + d_ratio(upi_rds, interval_sec), f"{scale}MB/s"), + Metric("lpm_upi_bw_write", "DDR memory write bandwidth", + d_ratio(upi_wrs, interval_sec), f"{scale}MB/s"), + ], description=3D"UPI Bandwidth") + + def main() -> None: global _args =20 @@ -1076,6 +1097,7 @@ def main() -> None: UncoreDir(), UncoreMem(), UncoreMemBw(), + UncoreUpiBw(), ]) =20 if _args.metricgroups: --=20 2.52.0.457.g6b5491de43-goog From nobody Sat Feb 7 09:20:47 2026 Received: from mail-dl1-f74.google.com (mail-dl1-f74.google.com [74.125.82.74]) (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 3F9263659E8 for ; Tue, 27 Jan 2026 18:46:30 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.82.74 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769539595; cv=none; b=uJn6QRmkiwkyb0vAwJyoN9tlAz/llvGauMHJQOvxB4MkHMl+Jcoz4z5uUVHwDq56OzPXgi0Z7YJtk0tvfJmlXaIpC1LaLojNKbYHKEevS/1lXD9Cft0pxilmT9XaWq+E9PrQhri3FKwZWZOC6nGsT7qaU6TGfDB6z5EqgQGwOfk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769539595; c=relaxed/simple; bh=ehb9+lTGbZ1qDk8zx/gxtgX32wpwcKjuLsajxpEl9rk=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=tgiK7PY/6MI//zYpQmmJ0zbGj6FYXxl2SdWrklGgNcvUY+Bx7tZ2osla6BOlkgv9yrV65a6v+vKUHLdNKP5psj3WuWakjut9EaDvS4KWiuFRsAz42jT5e2nec1Xt/dWgzNikpvy8MAggR+ICPgyd60u7ZjJNBWF8Hkzw88evHjM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--irogers.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=yncgfIVb; arc=none smtp.client-ip=74.125.82.74 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--irogers.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="yncgfIVb" Received: by mail-dl1-f74.google.com with SMTP id a92af1059eb24-1232dd9a256so99812c88.1 for ; Tue, 27 Jan 2026 10:46:30 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1769539589; x=1770144389; darn=vger.kernel.org; h=to:from:subject:message-id:references:mime-version:in-reply-to:date :from:to:cc:subject:date:message-id:reply-to; bh=paWFxLvTCvU+EVxViFjzHOc9++WhWxJTYiWc7P0l41k=; b=yncgfIVbQAq6949fsTylzq66hXOy0Cn2KkQ/lAtbWcEl19TG2TWD30r7FTEL19L/lQ llO6COACwS5OwguujOvu5jkIzVxVWbM5wqLRZq++HedtlvS1NJ2dlQBqKSuPbT7I6hPp Cil/myrATwO0wfdSQGObTMkHCi36t7Ey7g9Gz+0l0cJo0JutpiZHR/VdwG6oe3s1CYRh 733qi3XNKvjPiYF1z73tWaIbLkMhZiaEGVNNAddO80GmmhI6tDlVJI1eBWnfwK7rUXgW o6X/xMSzCenP25urxf2zc2F6EdptVPQ1M28qnw09pH7c3YYWUMdAau+aVTO/VMUjC+8H vxvg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1769539589; x=1770144389; h=to:from:subject:message-id:references:mime-version:in-reply-to:date :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=paWFxLvTCvU+EVxViFjzHOc9++WhWxJTYiWc7P0l41k=; b=pbWDJy0nLl67cfPczCp9xAOxxixqQsB6Ui7MCb6QFAf/iZpaqQcMQavNOqbL53HYVh fVzchUIp7TkLblzcie0s+cCY0NlgzuzsaZcqox/HVMEj4c3dZNis5jE2mGx5pkujrvub HQdtqRyytA+lx5gudMdNTV3hJMWa/m+bpYAArC3CFaKh4nZ9ReJAJiq+D1lh5r6NY341 AwHn0YimnqOA7KUD+mib+EsFJ46BRTc0/YxDLZpvbJCJg2NkStWRpmy9qDMJy5lkaADO pavMNsAlBwDJ3GVyU1Z+wYwDSmgvIgryT36gjWZNITXugjRrqIRo7u0CskUFAwAWNeuZ 0cog== X-Forwarded-Encrypted: i=1; AJvYcCVXZlW/dh3Og7i7erbAKPHUATEFqSubnygeHt6KGhIqr7uullRR8hOU+jic0fw8DNZANzL4ifrIhVlq2WI=@vger.kernel.org X-Gm-Message-State: AOJu0Yy+Tzs858VrvKFpS5nM5VFsPYxGCrmHeqO1FxnCN0yBhNAJ0j1M XCFPn88tCQ6l7Agyk6RYH6lc+BoEUurmGLx4NFzxjG92XC/humCDy/DZ1I0xJDRQdNddEa9W0zV +c+SmDZJMwA== X-Received: from dlbcq17.prod.google.com ([2002:a05:7022:2491:b0:124:9694:5535]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a05:7022:f90:b0:11b:a8e3:847b with SMTP id a92af1059eb24-124a0577d9bmr1429544c88.5.1769539589230; Tue, 27 Jan 2026 10:46:29 -0800 (PST) Date: Tue, 27 Jan 2026 10:45:04 -0800 In-Reply-To: <20260127184506.3059493-1-irogers@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260127184506.3059493-1-irogers@google.com> X-Mailer: git-send-email 2.52.0.457.g6b5491de43-goog Message-ID: <20260127184506.3059493-34-irogers@google.com> Subject: [PATCH v11 33/35] perf jevents: Add mesh bandwidth saturation metric for Intel From: Ian Rogers To: Adrian Hunter , Alexander Shishkin , Arnaldo Carvalho de Melo , Benjamin Gray , Caleb Biggers , Edward Baker , Ian Rogers , Ingo Molnar , James Clark , Jing Zhang , Jiri Olsa , John Garry , Leo Yan , Namhyung Kim , Perry Taylor , Peter Zijlstra , Sandipan Das , Thomas Falcon , Weilin Wang , Xu Yang , linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Memory bandwidth saturation from CBOX/CHA events present in broadwellde, broadwellx, cascadelakex, haswellx, icelakex, skylakex and snowridgex. Tested-by: Thomas Falcon Signed-off-by: Ian Rogers --- tools/perf/pmu-events/intel_metrics.py | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/tools/perf/pmu-events/intel_metrics.py b/tools/perf/pmu-events= /intel_metrics.py index f6bb691dc5bb..d56bab7337df 100755 --- a/tools/perf/pmu-events/intel_metrics.py +++ b/tools/perf/pmu-events/intel_metrics.py @@ -1033,6 +1033,22 @@ def UncoreMemBw() -> Optional[MetricGroup]: ], description=3D"Memory Bandwidth") =20 =20 +def UncoreMemSat() -> Optional[Metric]: + try: + clocks =3D Event("UNC_CHA_CLOCKTICKS", "UNC_C_CLOCKTICKS") + sat =3D Event("UNC_CHA_DISTRESS_ASSERTED.VERT", "UNC_CHA_FAST_ASSE= RTED.VERT", + "UNC_C_FAST_ASSERTED") + except: + return None + + desc =3D ("Mesh Bandwidth saturation (% CBOX cycles with FAST signal a= sserted, " + "include QPI bandwidth saturation), lower is better") + if "UNC_CHA_" in sat.name: + desc =3D ("Mesh Bandwidth saturation (% CHA cycles with FAST signa= l asserted, " + "include UPI bandwidth saturation), lower is better") + return Metric("lpm_mem_sat", desc, d_ratio(sat, clocks), "100%") + + def UncoreUpiBw() -> Optional[MetricGroup]: try: upi_rds =3D Event("UNC_UPI_RxL_FLITS.ALL_DATA") @@ -1097,6 +1113,7 @@ def main() -> None: UncoreDir(), UncoreMem(), UncoreMemBw(), + UncoreMemSat(), UncoreUpiBw(), ]) =20 --=20 2.52.0.457.g6b5491de43-goog From nobody Sat Feb 7 09:20:47 2026 Received: from mail-dl1-f74.google.com (mail-dl1-f74.google.com [74.125.82.74]) (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 3A151365A11 for ; Tue, 27 Jan 2026 18:46:32 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.82.74 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769539593; cv=none; b=VBG60d01UxAQrbO0jXxDvAjlMs9lO5JJGDvqWgAHfb5nFEhJzzunYIwjZ4K1XnBLUWcwwBbpFE27F4v43C8SMZa4ILRoctFH4zkdF/b6YJr7D7xwlztQFJR4ovHcefDBYjkkYv4ySQUIa5DYExM3xIuvvf8np3fGu4kcHnVVofc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769539593; c=relaxed/simple; bh=1zUi4F0wnFrKUNubA5dgAmMBGudhKmfRBZtS61CeTbE=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=WyKkiWF4IOobPnLKlBuQ20qu0zYopLmj4JFhknP5mf5HLm9XH74UOmT0JZwDiwGokql2PMdaey36NTEBZrVONFvjXSwSDS82Mx+4n8+7Rx1QmqMAoRtEi0IYUaFD1Xl9bM4coF36dKEqsegOnZfTLWnn9ShD9iIFZhhLcT8kyjc= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--irogers.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=kBUnFBWo; arc=none smtp.client-ip=74.125.82.74 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--irogers.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="kBUnFBWo" Received: by mail-dl1-f74.google.com with SMTP id a92af1059eb24-123377038f9so3981769c88.0 for ; Tue, 27 Jan 2026 10:46:32 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1769539591; x=1770144391; darn=vger.kernel.org; h=to:from:subject:message-id:references:mime-version:in-reply-to:date :from:to:cc:subject:date:message-id:reply-to; bh=gpcaviiC3LGw00gXygGe2ykJpAMPCjE5SQ665o5d7iE=; b=kBUnFBWoH+jsZOhcMyaUKR1xZm3A9haJp5GdmM1rupdSXaeF3tgV1cnW1C+jjD8U0A GVmTu7E+ZmC9FICkWV+V2OZCQj2IKDFp89wBmhEuy9NwadYTE1AhPyL66gt/MzSSYAsC 6pgHPglmKjLqBBAmBuBTrlYAbEkTEP++TqG7O6kEysIHmU7FlYl9bErUw52D8+Z2Xuj0 6pKlOGc3/vUM/EWFHOv5dXCl79YfiOiwZUjbCR1DLF9b+Wo73KY8vqxxSotUgtOIJgM+ SNJF1oMCIqQZmpFqFhRWxZSB1FCklgXmTKPMRz1oRY40EjxRxh7mPzZAVrAT0e+yz7Fi n33Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1769539591; x=1770144391; h=to:from:subject:message-id:references:mime-version:in-reply-to:date :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=gpcaviiC3LGw00gXygGe2ykJpAMPCjE5SQ665o5d7iE=; b=nnFHQbkFCSxgrii3RH6x0UfwABLCdk0Fpl/hv2fdFQw4oah1G9xYwVtoYTo5GXd95b WFAwOlZORmgbwjRPekVak2EgzhyjNV3gOcVB8tEuidU2Kp+U3qMFhbWB3b12rMN2UaRL /hVR8/hjswZBrrvQreQwQCt3ErFI4iClaGWyJPUYs7eFcedaWZnL1FyIPdqB7BTnRIxJ AcVWZ19P93mfpTm2zSKn4ax/LEjlICJI9ySwWgszW1qpvyUqUe80Eg/I/BlA5xuBIH+4 hgJQLYNmPvFTorwY63SUamIOtxzzj01/svpx2/wyzR0V1aIkt/qdWTKrk6sH4XGtiMPL UCfQ== X-Forwarded-Encrypted: i=1; AJvYcCXAXVpMF1WEGPm4oIYNpfb9PL9AOEETvhk7cpcs6H1l+P8fo1aShplu7vIHVyxK5RAaanmBDfs+58htTa4=@vger.kernel.org X-Gm-Message-State: AOJu0Yy1ER+ci2mkEtRAmBcuhu21Jg7NqpYjA1qvb8NchLluOTuLeGV8 GBu8KTFhszMfxnvjIC0RoEzTH3j7/sx1GmSHl6hU5qT6H4VIqUC1EMFjtzOVkOW+E6JM6mjVs1d NWtcsZ/tGOw== X-Received: from dlbeb5.prod.google.com ([2002:a05:7022:d45:b0:121:7b85:782a]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a05:701a:c94e:b0:11d:fcb2:3311 with SMTP id a92af1059eb24-124a00c7d5dmr1467924c88.27.1769539591175; Tue, 27 Jan 2026 10:46:31 -0800 (PST) Date: Tue, 27 Jan 2026 10:45:05 -0800 In-Reply-To: <20260127184506.3059493-1-irogers@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260127184506.3059493-1-irogers@google.com> X-Mailer: git-send-email 2.52.0.457.g6b5491de43-goog Message-ID: <20260127184506.3059493-35-irogers@google.com> Subject: [PATCH v11 34/35] perf jevents: Add cycles breakdown metric for arm64/AMD/Intel From: Ian Rogers To: Adrian Hunter , Alexander Shishkin , Arnaldo Carvalho de Melo , Benjamin Gray , Caleb Biggers , Edward Baker , Ian Rogers , Ingo Molnar , James Clark , Jing Zhang , Jiri Olsa , John Garry , Leo Yan , Namhyung Kim , Perry Taylor , Peter Zijlstra , Sandipan Das , Thomas Falcon , Weilin Wang , Xu Yang , linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Breakdown cycles to user, kernel and guest. Add a common_metrics.py file for such metrics. Tested-by: Thomas Falcon Signed-off-by: Ian Rogers --- tools/perf/pmu-events/Build | 2 +- tools/perf/pmu-events/amd_metrics.py | 2 ++ tools/perf/pmu-events/arm64_metrics.py | 5 ++++- tools/perf/pmu-events/common_metrics.py | 19 +++++++++++++++++++ tools/perf/pmu-events/intel_metrics.py | 2 ++ 5 files changed, 28 insertions(+), 2 deletions(-) create mode 100644 tools/perf/pmu-events/common_metrics.py diff --git a/tools/perf/pmu-events/Build b/tools/perf/pmu-events/Build index 4878d922a732..537d27851ca9 100644 --- a/tools/perf/pmu-events/Build +++ b/tools/perf/pmu-events/Build @@ -44,7 +44,7 @@ $(LEGACY_CACHE_JSON): $(LEGACY_CACHE_PY) $(call rule_mkdir) $(Q)$(call echo-cmd,gen)$(PYTHON) $(LEGACY_CACHE_PY) > $@ =20 -GEN_METRIC_DEPS :=3D pmu-events/metric.py +GEN_METRIC_DEPS :=3D pmu-events/metric.py pmu-events/common_metrics.py =20 # Generate AMD Json ZENS =3D $(shell ls -d pmu-events/arch/x86/amdzen*) diff --git a/tools/perf/pmu-events/amd_metrics.py b/tools/perf/pmu-events/a= md_metrics.py index 83e77ccc059e..e2defaffde3e 100755 --- a/tools/perf/pmu-events/amd_metrics.py +++ b/tools/perf/pmu-events/amd_metrics.py @@ -4,6 +4,7 @@ import argparse import math import os from typing import Optional +from common_metrics import Cycles from metric import (d_ratio, has_event, max, Event, JsonEncodeMetric, JsonEncodeMetricGroupDescriptions, Literal, LoadEvents, Metric, MetricGroup, Select) @@ -475,6 +476,7 @@ def main() -> None: AmdItlb(), AmdLdSt(), AmdUpc(), + Cycles(), Idle(), Rapl(), UncoreL3(), diff --git a/tools/perf/pmu-events/arm64_metrics.py b/tools/perf/pmu-events= /arm64_metrics.py index ac717ca3513a..4ecda96d11fa 100755 --- a/tools/perf/pmu-events/arm64_metrics.py +++ b/tools/perf/pmu-events/arm64_metrics.py @@ -4,6 +4,7 @@ import argparse import os from metric import (JsonEncodeMetric, JsonEncodeMetricGroupDescriptions, L= oadEvents, MetricGroup) +from common_metrics import Cycles =20 # Global command line arguments. _args =3D None @@ -34,7 +35,9 @@ def main() -> None: directory =3D f"{_args.events_path}/arm64/{_args.vendor}/{_args.model}= /" LoadEvents(directory) =20 - all_metrics =3D MetricGroup("", []) + all_metrics =3D MetricGroup("", [ + Cycles(), + ]) =20 if _args.metricgroups: print(JsonEncodeMetricGroupDescriptions(all_metrics)) diff --git a/tools/perf/pmu-events/common_metrics.py b/tools/perf/pmu-event= s/common_metrics.py new file mode 100644 index 000000000000..fcdfb9d3e648 --- /dev/null +++ b/tools/perf/pmu-events/common_metrics.py @@ -0,0 +1,19 @@ +# SPDX-License-Identifier: (LGPL-2.1 OR BSD-2-Clause) +from metric import (d_ratio, Event, Metric, MetricGroup) + + +def Cycles() -> MetricGroup: + cyc_k =3D Event("cpu\\-cycles:kHh") # exclude user and guest + cyc_g =3D Event("cpu\\-cycles:G") # exclude host + cyc_u =3D Event("cpu\\-cycles:uH") # exclude kernel, hypervisor and g= uest + cyc =3D cyc_k + cyc_g + cyc_u + + return MetricGroup("lpm_cycles", [ + Metric("lpm_cycles_total", "Total number of cycles", cyc, "cycles"= ), + Metric("lpm_cycles_user", "User cycles as a percentage of all cycl= es", + d_ratio(cyc_u, cyc), "100%"), + Metric("lpm_cycles_kernel", "Kernel cycles as a percentage of all = cycles", + d_ratio(cyc_k, cyc), "100%"), + Metric("lpm_cycles_guest", "Hypervisor guest cycles as a percentag= e of all cycles", + d_ratio(cyc_g, cyc), "100%"), + ], description=3D"cycles breakdown per privilege level (users, kernel,= guest)") diff --git a/tools/perf/pmu-events/intel_metrics.py b/tools/perf/pmu-events= /intel_metrics.py index d56bab7337df..52035433b505 100755 --- a/tools/perf/pmu-events/intel_metrics.py +++ b/tools/perf/pmu-events/intel_metrics.py @@ -6,6 +6,7 @@ import math import os import re from typing import Optional +from common_metrics import Cycles from metric import (d_ratio, has_event, max, source_count, CheckPmu, Event, JsonEncodeMetric, JsonEncodeMetricGroupDescriptions, Literal, LoadEvents, Metric, MetricConstraint, MetricG= roup, @@ -1095,6 +1096,7 @@ def main() -> None: LoadEvents(directory) =20 all_metrics =3D MetricGroup("", [ + Cycles(), Idle(), Rapl(), Smi(), --=20 2.52.0.457.g6b5491de43-goog From nobody Sat Feb 7 09:20:47 2026 Received: from mail-dl1-f74.google.com (mail-dl1-f74.google.com [74.125.82.74]) (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 B8DF6365A18 for ; Tue, 27 Jan 2026 18:46:33 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.82.74 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769539595; cv=none; b=FqyOjFmamfHNqS1X1gegWXjznVI8Dw7R5U50Dmyl9UehUS0TCJvmqU3z6iZwxMh/fIqoThdxuGPdIDUwZPSK3mUnep8KTVP0//FZSXcjXhabqxR1OFRhh5wd29ocUbGvA7a/pwdF448sqdqlaGTefhK7jO11aWjE5ItP61+KP6A= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769539595; c=relaxed/simple; bh=J+f02vC6vGMWfbo7N83jJBpPCUC7ojdATQyc1Sr4ucs=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=a3UrFakw1QK/i/fjF8VlsYJYgyh3FfXHlAqtrxAB6VubEQNYGgFhJ/jjum/2Fm+/g00pjEy3FBTUnC63kobaCBPLiDtXo9Y57yJ411ztK9bjlMoFS6ENIANwDlLycTr+AbzV896BIJOfVmpdnxz5p/+TPvMf1yJu2OS266B1HxA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--irogers.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=WslYIB4t; arc=none smtp.client-ip=74.125.82.74 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--irogers.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="WslYIB4t" Received: by mail-dl1-f74.google.com with SMTP id a92af1059eb24-123377038f9so3981852c88.0 for ; Tue, 27 Jan 2026 10:46:33 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1769539593; x=1770144393; darn=vger.kernel.org; h=to:from:subject:message-id:references:mime-version:in-reply-to:date :from:to:cc:subject:date:message-id:reply-to; bh=FbXTdK+dMmj1w20jlEWvuTScD9bjGDPfd4CifWDSxbc=; b=WslYIB4tvvY6N3zionTBQFmFLxHDc2nGAxGF9pc1yydjYnCHynz31f/wafZocfyUOj vvv8qccnLl9ArQbJugI8KPenKt9oQe/vF3QlPvunigkGo25niLZ5Y67r1oul5YuSgmYZ TnG53xwM+3cML6Dk3x55L/WvXlcyEWsYysX5JElVZVw/hKwqzn1V5DqbPpTF9sXKmDol bvb4uPLswRi0fsJvWtFukgCEKDKIyyXHI3W3urtGogDvUKnvl911c246E/X6roeyIBJD i0XN5jwV3lq7kZbIpCv5Psey2rvt6UUs1vS4Qol/hlhNrSqixFLYO0M19cc8ZhA8ogZC 0U7A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1769539593; x=1770144393; h=to:from:subject:message-id:references:mime-version:in-reply-to:date :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=FbXTdK+dMmj1w20jlEWvuTScD9bjGDPfd4CifWDSxbc=; b=vtNp2eKwCpjd6XnRUX0/SsuFaISyiPOvgXbb82ZM+njIJ//KplekLF+D/y2mR55iTu RCqpokVTI4LAWVLs3XhXpGvS5aMVS0fs7Ca915VMxqvtOE06VcEITvDdl5g203IeB6sz bWmBPvSrnCDw88plbrMDCjRgp65w0jmuGpFseQTnkF3wrv7KMWsMieREFWuc087AZtZJ WP9hny8jGNlnDWtCA6CfMAMepa6rExMXqQQtNNtBjmu9amHvF7iLaJ6OyZiUIhqDYxX0 kVJ2JY0+ro0H0ogWI0ObuHuphIkLwazuNYQCrQBkqqj+9lF/y3qhF0xInEd40sJ5Moxx 63hQ== X-Forwarded-Encrypted: i=1; AJvYcCUidHp/fpXkcVh15muE7npwD8RgHUcrNHbLy3DjgjSXz3ek+G8i+Hba7MQ9RiZfyjWtMPn0BqovGI3GKXs=@vger.kernel.org X-Gm-Message-State: AOJu0Yy+W+PiuexmXfiWy/9d4WNIv6oKaUdk2+GXaQBBJcmfev6786YI ToMnNTixudv3ZrfsGfcEPSlSKXiLXShSpaSzO61EqbxsaBGaUDlp5ZhOfvKvFnAzf3LPSFvvEwX gr9Oo1AWUHA== X-Received: from dlbsv14.prod.google.com ([2002:a05:7022:3a0e:b0:124:9d31:3581]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a05:7022:6082:b0:119:e56b:c762 with SMTP id a92af1059eb24-124a00df67fmr1557216c88.39.1769539592876; Tue, 27 Jan 2026 10:46:32 -0800 (PST) Date: Tue, 27 Jan 2026 10:45:06 -0800 In-Reply-To: <20260127184506.3059493-1-irogers@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260127184506.3059493-1-irogers@google.com> X-Mailer: git-send-email 2.52.0.457.g6b5491de43-goog Message-ID: <20260127184506.3059493-36-irogers@google.com> Subject: [PATCH v11 35/35] perf jevents: Validate that all names given an Event From: Ian Rogers To: Adrian Hunter , Alexander Shishkin , Arnaldo Carvalho de Melo , Benjamin Gray , Caleb Biggers , Edward Baker , Ian Rogers , Ingo Molnar , James Clark , Jing Zhang , Jiri Olsa , John Garry , Leo Yan , Namhyung Kim , Perry Taylor , Peter Zijlstra , Sandipan Das , Thomas Falcon , Weilin Wang , Xu Yang , linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Validate they exist in a json file from one directory found from one directory above the model's json directory. This avoids broken fallback encodings being created. Tested-by: Thomas Falcon Signed-off-by: Ian Rogers --- tools/perf/pmu-events/metric.py | 36 +++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/tools/perf/pmu-events/metric.py b/tools/perf/pmu-events/metric= .py index 2029b6e28365..585454828c2f 100644 --- a/tools/perf/pmu-events/metric.py +++ b/tools/perf/pmu-events/metric.py @@ -11,12 +11,14 @@ from typing import Dict, List, Optional, Set, Tuple, Un= ion all_pmus =3D set() all_events =3D set() experimental_events =3D set() +all_events_all_models =3D set() =20 def LoadEvents(directory: str) -> None: """Populate a global set of all known events for the purpose of validati= ng Event names""" global all_pmus global all_events global experimental_events + global all_events_all_models all_events =3D { "context\\-switches", "cpu\\-cycles", @@ -42,6 +44,20 @@ def LoadEvents(directory: str) -> None: # The generated directory may be the same as the input, which # causes partial json files. Ignore errors. pass + all_events_all_models =3D all_events.copy() + for root, dirs, files in os.walk(directory + ".."): + for filename in files: + if filename.endswith(".json"): + try: + for x in json.load(open(f"{root}/{filename}")): + if "EventName" in x: + all_events_all_models.add(x["EventName"]) + elif "ArchStdEvent" in x: + all_events_all_models.add(x["ArchStdEvent"]) + except json.decoder.JSONDecodeError: + # The generated directory may be the same as the input, which + # causes partial json files. Ignore errors. + pass =20 =20 def CheckPmu(name: str) -> bool: @@ -64,6 +80,25 @@ def CheckEvent(name: str) -> bool: =20 return name in all_events =20 +def CheckEveryEvent(*names: str) -> None: + """Check all the events exist in at least one json file""" + global all_events_all_models + if len(all_events_all_models) =3D=3D 0: + assert len(names) =3D=3D 1, f"Cannot determine valid events in {names}" + # No events loaded so assume any event is good. + return + + for name in names: + # Remove trailing modifier. + if ':' in name: + name =3D name[:name.find(':')] + elif '/' in name: + name =3D name[:name.find('/')] + if any([name.startswith(x) for x in ['amd', 'arm', 'cpu', 'msr', 'po= wer']]): + continue + if name not in all_events_all_models: + raise Exception(f"Is {name} a named json event?") + =20 def IsExperimentalEvent(name: str) -> bool: global experimental_events @@ -403,6 +438,7 @@ class Event(Expression): =20 def __init__(self, *args: str): error =3D "" + CheckEveryEvent(*args) for name in args: if CheckEvent(name): self.name =3D _FixEscapes(name) --=20 2.52.0.457.g6b5491de43-goog