From nobody Sun Feb 8 01:31:17 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 C6C2B314A80 for ; Thu, 8 Jan 2026 19:11:28 +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=1767899490; cv=none; b=jBjVUdCQG4+OalQClKLBXShMyP+pI2XyRrJgpfA04vpFs7qi/nulmd3oZ4nW8bzZuI5eEzGUc3HAtKWtGBRXvxz4vdVHg5opbspmvDoVi4qZwRfyuDq+GS3mWebLVtpeQQfBuMBk+83+r7CjU3IZumcAM/VXUNtleGCHHpB+NHg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767899490; c=relaxed/simple; bh=+gTQNryLEr3/Hv6b1sFXvK918lbzAnY34/Ic4iQIbPQ=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=YAb2z9ImnPjOIWOjXmjg5QHnzgeDsI1WuTvm2kIW7bp9cRcVdyYXf3xlUyBKko2zKE/mX72q7H8aTVProbh3LBLNwUwh1KJB+XY7fW5SQG0ilHfhHrEM8pTS3T9p7XBuw78HyWo945h+M997+WeTViFROaNEE2Zap4waxckkCmU= 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=fHdpeVsG; 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="fHdpeVsG" Received: by mail-dl1-f73.google.com with SMTP id a92af1059eb24-11b94abc09dso4131481c88.1 for ; Thu, 08 Jan 2026 11:11:28 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1767899488; x=1768504288; 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=WdVij/CdHS3wRypY/uVWHzN4Zg9aAQVd2lazFiqQTms=; b=fHdpeVsGGySO1px4Hnl7NaVlkXGkZ56E31LdmtHilEsP9JMer07c5jwCspxV4Jniwh fy/BldZMAi/Y9IppvaD4RXcs0Kk6sLrkPRM2mDxdrR9vu0IFaV8PAoPFNK4tOtkzjlOV GKAWshhKu3KVuP2BpbMhlDlJswEVtI5x+LQ8KTrv0M78Luls356GRDGdYhswDp7S6+p9 mLHFkgIBd1yjU/UrIHgSd6RrnjlT4vRbMh2typSBr/4tkMCEowne4U+YAv0uQFA97ps0 Tqg0V+iQbCE6/nz0EBEf6o8nnXsJZBLdo+U0YuPYx//y8BDtyf+7sDluqs+SkFoxDDe7 Y1+A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1767899488; x=1768504288; 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=WdVij/CdHS3wRypY/uVWHzN4Zg9aAQVd2lazFiqQTms=; b=lG9W0P0C7WT82nyt/Dm7/D1nqo3hciEUnfycfFWJDzpwKXz8twodm0vcfETEQaj/vE gc0NI9FxgGqkNQwB2KbAaECTUJkGTH1jMyGoWKgwIKmnUE2KoIs/seQPfnnFAv/h0vc3 MWr/+SRZah4wYQv/2yXagxyzrQ+97Zd4Ol8DOVrpgCcWt5BAemmynWZ2HDi9IZpXrjMs euv9jAwkSEEI+UXH6j8xgT1WMw0MALp7lW67I+I/SijKl6e6j952hVSa0k/tcg0/+H/Z /68mr+JJrjUvSGjSPnH5ICf2YZwF6wKrgBe5mR8diC74nHm3irXXbzi+15C3/NnaMG6f /O1g== X-Forwarded-Encrypted: i=1; AJvYcCVFM3eY5oUWZN6K1nKPkr90tan1p1UKI7HPPbME0AGbR/1zwJ+Pf226DPKXi5XeEMi1QKwMlC19ZjeDg6o=@vger.kernel.org X-Gm-Message-State: AOJu0YyDZao+gVkvhORylEJi7pUnFsrwxiI6M9oJqUgxEVa7f0fBdNj2 TZIijoNxZc98Hnxjh1t9S7L/FTSr0DuGf9eTIL1KMgH/qC2B/MzBmKO6+ZWoNGWrxkF2atsF09o sbppuFL4gJA== X-Google-Smtp-Source: AGHT+IHFBkOJ16gxPN8Npq4T+lUGZaKXI3+m6DOic9M52B+SeBca7P9pygG89WJD9554cWVJ0W+2zllRdAxP X-Received: from dlbbq37.prod.google.com ([2002:a05:7022:6725:b0:11f:45c3:e5f6]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a05:7022:41a7:b0:121:9f05:c4c2 with SMTP id a92af1059eb24-121f8b7baf9mr4895707c88.23.1767899487987; Thu, 08 Jan 2026 11:11:27 -0800 (PST) Date: Thu, 8 Jan 2026 11:10:31 -0800 In-Reply-To: <20260108191105.695131-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: <20260108191105.695131-1-irogers@google.com> X-Mailer: git-send-email 2.52.0.457.g6b5491de43-goog Message-ID: <20260108191105.695131-2-irogers@google.com> Subject: [PATCH v10 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 , Samantha Alt , 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 b64302a76144..133e343bf44e 100644 --- a/tools/perf/.gitignore +++ b/tools/perf/.gitignore @@ -42,6 +42,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 b3f481a626af..3714288fc2f8 100644 --- a/tools/perf/Makefile.perf +++ b/tools/perf/Makefile.perf @@ -1277,6 +1277,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..c9df78ee003c 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/*) +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 Sun Feb 8 01:31:17 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 09FAC328631 for ; Thu, 8 Jan 2026 19:11:30 +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=1767899492; cv=none; b=nqnp9PFjfpyh/R03u5mrKX/7+7HY1ohyRRKjBcNjSr/+wvVYn8BYusG+AVE72HzEeawjZ0vHA/zkBF7YcqKuhHNd4elpobJ84wki/PqJ3oMNIHf7xVOR/eLKbwgpfdziRYtCOauegIa9DmU3uDvZYr46zFB7Ims6DaekPT4ahng= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767899492; c=relaxed/simple; bh=G/JB9j/yYCSUzB144eRGqJpTAe5bFSDu1WPbAp7DSMQ=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=QSZiX1/+cSSyxRE4ASbPi9JcLyU/5FupMsY7ABR8pQ4sA0lUjNroGjWw1w6VjU5ewxLU+74ARLjq/m2aQc/LJYrAETgdyWHcd4y4p3Iv3Tkay4wvnndVLoDT0943azXBat7RIvyTaoH0s0/8AmGHtGmkCivin+nWuFEFr7tP/aw= 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=t5ha7cUP; 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="t5ha7cUP" Received: by mail-dy1-f201.google.com with SMTP id 5a478bee46e88-2b04f8c5e84so3135722eec.1 for ; Thu, 08 Jan 2026 11:11:30 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1767899490; x=1768504290; 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=WOFJbV3DF8K93zyoG7zhHHoKjCsogbKqWaH2d7uXc50=; b=t5ha7cUPKYT42U6bgR63JuIMSA7a28UocmD3a4Rs1VwSNGfrcq5AqqpJjgjE/Lqxig x7lgUBrLqhxQ0z09WCc4ywFUg2AvrSlRvcAYfbPYa0wox517aJ0Jp6urO3nKDH15RlsJ ZYmJd8G2SWcm5Ez4M0XbWjLpnaiNPBhnE3hcmu19EC7FOXPL0VY8OafBwknoNEuZ3tPR TjcyXdQgIAx5ELm8TlpAFbC25LwdyKvmnVR2MsfQMtYnAUTiltnYYNQC+GmJ2TbKxMc/ ereuLxDY9ERaCaci6H5i50tDs2R4utqqC9rv8qlcDXnI+Y6aj8qQHuW5epCiTNOBg2ED IP3g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1767899490; x=1768504290; 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=WOFJbV3DF8K93zyoG7zhHHoKjCsogbKqWaH2d7uXc50=; b=qN1zOrQZeoR7zINWFC9gzl3djUD6X0BB6NkmdOR5tKxZa+onM3NeFI7SgRyNPZjEji WGdiwGi7/L8pSWRBJaHUTJxEepw91xPpaXFB2ft2OTvXO4DGIRYCULoZp5/t3StgQHxm hEFhGXSzLVf09evnsDv3GaGe6yuBNzPZZVmA4N8mRbsfQpchNZAmvDH13Wht2SuTkXdF wCa9ShFJoPmGDk28jYvFf76+qGtnzPB9H1J2To/eYGV2Ql4UQ3JzADih+6OMZHiJ1ALa obkk7f7RaIDD0Xe/uRBlz0EF3GdnxxQsui5sFWSbV5e+FJAl1ihpeDq8I1obUlyQJdOv 7rCg== X-Forwarded-Encrypted: i=1; AJvYcCWiBCk9wVDNU8a3JKBb4Nk5Kl7mTqM/xl6WmPvLwBl3XEQAQTuLdPe3GKJ0HEs7lx8AfPNfxOOYU+zdxxo=@vger.kernel.org X-Gm-Message-State: AOJu0Yxd7fANFA2IW+oyI+DlTHRC19z1Jgy6vQ9eSwuRXoE2GI/smGwS V6+in955I171vwR/IrD1Qe8ZmJ4O84sJBfSlbIgO9ypnLBdB6VgfOxlObFJI2oWgmnP8MeA166u 5ke4UcfZuow== X-Google-Smtp-Source: AGHT+IGx/I1EkXmT0pCXtNVnN8DwePd5SYUczq8/6YLBpar/J4jmt6UKlmBjXm3ZdYi1KmcYvWAteb3OOSb3 X-Received: from dycpr5.prod.google.com ([2002:a05:7301:fd85:b0:2ae:5736:c985]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a05:693c:2411:b0:2ac:2bed:163a with SMTP id 5a478bee46e88-2b17d264cb3mr3850358eec.14.1767899489967; Thu, 08 Jan 2026 11:11:29 -0800 (PST) Date: Thu, 8 Jan 2026 11:10:32 -0800 In-Reply-To: <20260108191105.695131-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: <20260108191105.695131-1-irogers@google.com> X-Mailer: git-send-email 2.52.0.457.g6b5491de43-goog Message-ID: <20260108191105.695131-3-irogers@google.com> Subject: [PATCH v10 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 , Samantha Alt , 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 c9df78ee003c..f7d67d03d055 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/*) @@ -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 Sun Feb 8 01:31:17 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 8C269328B7B for ; Thu, 8 Jan 2026 19:11: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=1767899494; cv=none; b=oLLQOEF2hXwbbNLOjIKquu21nda9Hu230GYxA8jpfsAA3DHrb3FxIHajH6+YvrkMDY+qX+4jZ6NskxqCneVqNSOvYOfu7iCRH7GyvP5m4awiIXxD7luXQdB4A8WIb49cWYFUXmeeGy4lBm5vcDLlED2UISgtGrQV68spsLmnL6Q= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767899494; c=relaxed/simple; bh=3dzH9klhwyq4bIO5RZyfc4K/bXsuFAcPH6T9odgWY5E=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=QsdC2DHbm9Rz8O4qsVruReQHRBcczAbQTIvuQ+iRbFjTs4zPeaN6Hk9jhSMt/TrtAOVEAX16KQfjU3gB6fn4jQXgEHhUG7kqZH0gW+8uF+70yFmnKr9hTgz6MeVqcKZz86aXp52fniAlINzCMVugGR6xBQjrr/5aDYVz4nFYlB8= 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=LtoO3Wsx; 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="LtoO3Wsx" Received: by mail-dl1-f74.google.com with SMTP id a92af1059eb24-11f4500c7ebso4021880c88.0 for ; Thu, 08 Jan 2026 11:11:32 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1767899492; x=1768504292; 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=LtoO3WsxCBUFM6aKblFSmueZRWCNuAqe5v9OaNXphWMK5QI+cwmJbQMTdQDyTcQ7b+ X6PRXSCSL1nvmKG3n426YTQf8uEJA12oxNzHGC+jqZ3UfYPodn96A+SpSSViVQ8HK/Ah gGbYzH3qo24eUItUhOdv3wsuvkTDG5FNbIgvg3aMS0F7zlJkkuBQ5yFnTCWsOyVciRnN 9rUKSZSy9unt0uWOL0vjLwCg2WAz4IINQLzQ05eI+3QXXWIham3+cnfpsdWnj3bsvWr0 HkTH1b0MPHyabv0pZTSgJz7kdsDu2ZPsNxkAewsxz8eYEmvlKSx7ElxEqOsXxyOkwp7a 7yZQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1767899492; x=1768504292; 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=AEfKdiyspins/pdZsVuVOKhDAuIu7roD/ctA7AkUJy3vmS/y/UqfC1AVdKqW0tDGD7 o6oiu08bBbqyTGRWr589h6BwJm6zKzvVSbG3S+3JrEB37yFv5tsERHLxeBYapSy4qh4/ Di3NHvRlur3TWU4hdLioa9IStx/USJGZohs79hgTtgLE63XNTmXCN3ZXRRjUqaS+j4Km rRylTO/50wzpv+Y+mOevloGa68nR+ekrXuVvavv6i+TlLF5aOeycYPn826dF+WDB7INN S8hUbujoQZeJbeP1qsDi1D82xNXzJgnlKLLCX0BAh+6wBBWJOSWdB2dhTcV/haBbOAxO pH0Q== X-Forwarded-Encrypted: i=1; AJvYcCU4+g2s/1ov8keAqq2SorBpyqPTfkR70gIHGRO6ThF94yMKNpD2g0uUVHrjz2xSfDnsK07BCOqwB6YaH20=@vger.kernel.org X-Gm-Message-State: AOJu0YwRpDvzhiW1D6zZc6ehwnFjEiGd48n7/cTw6+EBHaXIBntCp6da pG4BNQ/eP7rLilx9JcmJgKyar2s948HH2v8WcSDmo8Jp7y1AOBBmuB7yNcYdtsg0ImIjEiE8jwy s6fTyBnstCw== X-Google-Smtp-Source: AGHT+IFSzMDUJYZjjH2WbaulVMFC/bdYdVGekkeGgpMpVS1oIkOVX6/sDF1nJr5rF9ce0hLscstavVSdPFK1 X-Received: from dlbti9.prod.google.com ([2002:a05:7022:1b09:b0:11a:44f1:daa3]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a05:7022:f89:b0:11f:2c69:31 with SMTP id a92af1059eb24-121f8b9e384mr6553673c88.46.1767899491609; Thu, 08 Jan 2026 11:11:31 -0800 (PST) Date: Thu, 8 Jan 2026 11:10:33 -0800 In-Reply-To: <20260108191105.695131-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: <20260108191105.695131-1-irogers@google.com> X-Mailer: git-send-email 2.52.0.457.g6b5491de43-goog Message-ID: <20260108191105.695131-4-irogers@google.com> Subject: [PATCH v10 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 , Samantha Alt , 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 Sun Feb 8 01:31:17 2026 Received: from mail-pl1-f202.google.com (mail-pl1-f202.google.com [209.85.214.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 EDFD232938D for ; Thu, 8 Jan 2026 19:11:33 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.202 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767899495; cv=none; b=XR1eWNCuGZKPOMyDDyzfq02sH+ZVoqvXl01iLoD5/I3k5hipPvmaFKH/KaNACoHD+tNKMY482ktfwh0+OsGX3AFnKGUtOhN8FBerRoCGFX3ESFm4l1syNdB3uQiFt11fLarDEV0IfGXGUFyWaJV1F9NRh7Y2FYtFhsmXo9c42eo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767899495; c=relaxed/simple; bh=y6hlwpTyHyOifmLqzqFarB+CugLw8uac40XfiztNF7E=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=KfnPppWy/LOjH8DyWf72r9SLecJ1YuXkupk3xWGTXSdUEGTwGL1bKvq74z4DhPaCpYY44duRJ9IEUTC1EOHn/HoMKg6X194KgY3qEEvyt4btG/npMrBCgSwVS3UDCB9jbyu9CZDaHu/GqQKZy8nR5dXsXHzc3NwjtjM2BQoKF14= 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=A9iSqIkq; arc=none smtp.client-ip=209.85.214.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="A9iSqIkq" Received: by mail-pl1-f202.google.com with SMTP id d9443c01a7336-29f25a008dbso27070665ad.1 for ; Thu, 08 Jan 2026 11:11:33 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1767899493; x=1768504293; 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=A9iSqIkq9EPOykJ3tbBmdl/X43tB8QJ6XSYpLGAp4VGrt0CDpnmkoZlYisZIyR48J8 D9jrCd2mLq5jPE+AMuTF4swvKj6BpHpK4y3H2sB6IdnLs5FOS54jMGqcGvgBKOnKSghG fAxDT7E2TL+uAL1tCPSP4HSzA3BCfqyNRR7kXdM5mInVQChQfrHxUnSQVI4jlDDGIILG p0Lg9/h5Gi+p9rB/ad9+kKEtxF7aojI/7F0xpPFujxJMQvGEEDIMcew2gGRZQO3Lg8nO gRyoBSJHeUZaQZ/KqXXLyxEG50NE23WCkwnj4e5ryVHkkLFxaJ6Zk3TG4kxMlLhDYybO 9CiA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1767899493; x=1768504293; 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=g3TPgmfAbLgCTjWw/VG5GEAKWHvzfGnVKUmzmCG02vbvYb7lE1t0Pdqs+nK3MQzwuO EWuPmsceNvctZE4dALEb+yW9XuNRSKfB1abSYSFqOfL8h3OpKYdXjyKxJ3uV5I2QXEmF y5OGXbICabLdvsA4JINAkjWD74LWDmQmXR1LCyxHmHBuvA+C/ugEkEDkkky5cmxxyM4+ asu1dgi+wM/uP/vxje2wV2KOCjusPA0D216XHOQ66bGGh/z0B5wkZBHONo92HZ7VbyfP FwTyXCsjq3TEArm5K5bAsXYJwm54EwGWDSrxpmCFeA7BOVKXuab/NYOxbrVPHaUV7/cR wbAg== X-Forwarded-Encrypted: i=1; AJvYcCX8H2u/KjYvjSM6JqW9IwYzFfVliH/V4YnDTdzHekzQmU6Hx4TFyzJVu8mYN70TKQO9Ea3CAs4bzDYyW2A=@vger.kernel.org X-Gm-Message-State: AOJu0YxzRtB9yqUEqUHIgIiyU1ncg+vMmrOMgrQHgQcpJQx1lKop+9Tm UKXzVVYDHjIxzPBz+Y+7meOXSE2d2TohaL0QZFTFyKpGTBvDF155/x/BASdgmUY99Bf20Sh8qBO 3/QS6XjDzrQ== X-Google-Smtp-Source: AGHT+IEh2Nm3AEerTFyG9iH4PkrMdqN5IsgekSkj3asg4NS8UH2QINNjmyaIwH4+eyZoyequr6fcZFPWutBc X-Received: from plwh18.prod.google.com ([2002:a17:902:f7d2:b0:2a1:3dae:8f1f]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a17:903:46c5:b0:2a3:e89c:593e with SMTP id d9443c01a7336-2a3ee41f181mr79090735ad.4.1767899493387; Thu, 08 Jan 2026 11:11:33 -0800 (PST) Date: Thu, 8 Jan 2026 11:10:34 -0800 In-Reply-To: <20260108191105.695131-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: <20260108191105.695131-1-irogers@google.com> X-Mailer: git-send-email 2.52.0.457.g6b5491de43-goog Message-ID: <20260108191105.695131-5-irogers@google.com> Subject: [PATCH v10 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 , Samantha Alt , 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 Sun Feb 8 01:31:17 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 E3FFD329E7D for ; Thu, 8 Jan 2026 19:11:35 +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=1767899498; cv=none; b=OjuLEIxTA9UmFSaiKEiygrFl9WerMQsu3wnCoNP/B0PATWnn7CkbnBzXVfOSDuVJJN2t+kE2cCK2Db0GjWD3cpOsZMZUOtyVX4toc1OybxLq0YvZFXuclf9X5yCg0+u9ZQnCwpzANEBJFJM0skWctZ9SL4pDUtWX/c3C3UiGnP0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767899498; c=relaxed/simple; bh=sYwyZW0LBQ597YLyTQ69dNu9phNlPd6GGL+UFrt/Z8M=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=i9p0fXTYXMnbwFTzSi5cCkYV+NBchVgNOEOhz5d5VRaOGhMH8OEqtnf1Y4lZl1sZI4xlX1N80RTmvgR2Uhro93akD+uJyAUU7Lew/q4vH7FlFY8iwE9E/Gn1aqEmjuxsrCpV3a/QxJcjIwStkVtPjhfHBVRr1CsxD+Bic7ZhQeo= 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=E1t/lCQu; 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="E1t/lCQu" Received: by mail-dl1-f74.google.com with SMTP id a92af1059eb24-11f3b5411c7so248063c88.1 for ; Thu, 08 Jan 2026 11:11:35 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1767899495; x=1768504295; 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=E1t/lCQuSXmgPEMNwX++UtCyRHSdhOzKn9wOPvhTGnYntxxqAX5etlhRnAEi0CauCI +1x1m4y2fp/DXFys3EItl1FA829RKZ6uutC1xF/tQQ/BU4xBvaHRYLoGA6K6WHvMA7Yd dV5ucXT7LsZdyNwqYvYzi+RWFohRX3GRr8uAyMxHbIb/3mYBjHKOC8loBTdKfVlDDIUI IYUv8dLwM+KRrRFg+C5UUDJPByV/9TkdijwXfwY4/pZN+cJ2A5OyACN5sWm99ytDoMJg jP1fFeVKDZ2Ujv0wKjUvvaDfeS4oVwTf8AO+XInt7jz8vW5oyVLnsz/POa75WiPsfVTj cOwA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1767899495; x=1768504295; 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=Ac64tpO+esYJhCn3S9TNcONLD1f2cbZRP1TbR5/plb1b6WYbABnP3Am103BCZ74h1n +K8Rz2VK/xW1JKbiPMUhcz7VInaWtjS6BzTfswpM7vAN19gTvQqIyBb4qqON/O4ACqyI nsn7bw/GkKbL8mS8qhVtISHCVtHSKucV8i467HY0Q/Orbiyr7aF7MneoAHd2DXE8NYmG yglajk2drQusB9Qc3IKa8lz9OpiOjOVrC7kjXk3GKibESrmXSygYKlbHeswA3UXqHjpF YXuBD+U1QecgxDwO40rL6/luo8YFe6hYsaTVLgi/361JgxQjqVlmwYwvq1ufz0bVeA8t Izpw== X-Forwarded-Encrypted: i=1; AJvYcCXLBtz7VmUIYK4kavbJN7E8OfqSyyJTtYcsI3fDPGlzvpMt+31JWbdm+F7Ssd9I+ObqEdUC7YO+oIGPLjA=@vger.kernel.org X-Gm-Message-State: AOJu0YxSYEScecCvI8kyEzucaHv+7EqKNPiCT7m+QFSbFv6+8KWGZBGn tpVH8/7SIi7rfOZxGdHhHIc5fzJGHX9UePNxDS2rAvZscvxJAHVc58HjC8uFVWVr2OMZfm0Rg7J qJLbulFoFbg== X-Google-Smtp-Source: AGHT+IFEU0Ge3OyHwketfTl1l2kXLOptB8lTGAn62BI93wCkTMzUx4ghNN34AgBRlWNHycE+o4KU7eNO8/37 X-Received: from dlbqj18.prod.google.com ([2002:a05:7022:ec12:b0:120:5c35:c798]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a05:7022:fc0a:b0:11b:bf3f:5208 with SMTP id a92af1059eb24-121f8ab6a1emr4896207c88.1.1767899494989; Thu, 08 Jan 2026 11:11:34 -0800 (PST) Date: Thu, 8 Jan 2026 11:10:35 -0800 In-Reply-To: <20260108191105.695131-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: <20260108191105.695131-1-irogers@google.com> X-Mailer: git-send-email 2.52.0.457.g6b5491de43-goog Message-ID: <20260108191105.695131-6-irogers@google.com> Subject: [PATCH v10 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 , Samantha Alt , 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 Sun Feb 8 01:31:17 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 BC797328B6E for ; Thu, 8 Jan 2026 19:11:38 +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=1767899500; cv=none; b=BTWeG4FHKAXueDiBbZoIafCAMJeU9f8FW/jL03cyAH7p0HDShxS98BXAyMRFADyu0oU0q6OHPE4HHXC9RdBRooRGKEcGzJEAILiPOsirgvuIR+Aixr+kYq9V8F46f9AFv7xpLRBTq96ZHGJ3eqdYgHensaxphs2D2uZbSSXGIOA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767899500; c=relaxed/simple; bh=6ngkG0km3yB5xxyOrjatuk4rtbR7Z+mDw14r54hwsFQ=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=GYg8MNa/ABCns9/uO46fawzHnIZBzmeRDAf0o02oVHzm2np5OPH5CG+kec40zJ9QRPz70aA80yOBXqViWhKW2f0/FIfxSlPxy65z7QGk4qhxY5Vro96NQLKSaMEt6P8FdAP+8hYGztCk2KNE00vmk89/hqfizzkusaBP6eLxkcQ= 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=w2kZzWpL; 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="w2kZzWpL" Received: by mail-dl1-f73.google.com with SMTP id a92af1059eb24-1219f27037fso13558289c88.1 for ; Thu, 08 Jan 2026 11:11:38 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1767899497; x=1768504297; 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=w2kZzWpL/4TEokXa5KxMfcZTdecYdTK6jCvqoEBPDHPGhYHtxpBwMRjxyCOBn+Acdw KpdaXM/qFcXobY0Z/pFGhDeJJ8eDUvKq0oRLPzjjE5FJJVdnauqplwEIrOvMnJlEh+4x JfVR7FtMG/vYTXvfVupkx6iXChBSNcpmMMEYSC5JIGYqtDfCd9aOIUd5C1IEFtLL2K8H sGk1WeKWg08z28xffg0tbYK6Gxob34SnR7dTqa87TVd4xMbVvG9iOQocOsknyE/sI1ts e0LrgkP/5pU/Ys8gH7Hf6rWgMgKg0IoUe4nl8XZUKkiQ5amDof+/tswnNTcH5DcZ1txY rTNQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1767899497; x=1768504297; 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=HUCesRzHbSLwyllmP7RTIAEx2jljKPAoYEE4PSK/oEX58F16c/VEmURrXCrMnRqJeH XZsSJyRx8I39kY4Cjs92frVnVfsfujLQVf+2l1rbySTbhibm71SNT0Gt8sDtOGPLZzPg OQ7QuAGMKcE70P6HlIE4++wo1LJL+UvFPS3B/PTjRXcD6KynafxfM8d/4kR+ea1g3BUQ NMnsEVfuYcKVqZfQGgq2vD8Cqz36DhHCR9h1BbcG9KcRYODIpYpjCMNmie8LXbl4AnwZ K5DuvZyHsqvc5unjNZC7tWLEnWDbrTYy3DPRUB/t77rhfTv6UOn55Ug/SibtBr7KaJVZ vZqw== X-Forwarded-Encrypted: i=1; AJvYcCWDxxGwq1Bzq+gj8gQv0xPP5EnzS4t4ztNqd3y7WLcyyLIBBEdzw0uoRxgkCz3LXpAuBKyczBHO/471qTM=@vger.kernel.org X-Gm-Message-State: AOJu0YyJ6lwOznagJLdHy7JI8an/Iee2D1YsPuGaVCfKq7HX7ScFIGhS PlcXvex0iVY/kF7sHAYxXcnwLAwxLyqI0hJH1iyR9GkPDUsKSBJm99SxgQpBqyBK6PB4vp+Fudz OuoF7OdgmVg== X-Google-Smtp-Source: AGHT+IFmDL1/Jm7y3jYHlRr52x4gg+K4AT98rUY39BCT7nJZLphOsKZS1B0cPFaGHiw4JXVPve3oNUa7bDW+ X-Received: from dlbcm27.prod.google.com ([2002:a05:7022:689b:b0:122:8e:6ea4]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a05:7022:686:b0:11d:f440:b743 with SMTP id a92af1059eb24-121f8ab9d25mr5769708c88.7.1767899497358; Thu, 08 Jan 2026 11:11:37 -0800 (PST) Date: Thu, 8 Jan 2026 11:10:36 -0800 In-Reply-To: <20260108191105.695131-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: <20260108191105.695131-1-irogers@google.com> X-Mailer: git-send-email 2.52.0.457.g6b5491de43-goog Message-ID: <20260108191105.695131-7-irogers@google.com> Subject: [PATCH v10 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 , Samantha Alt , 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 Sun Feb 8 01:31:17 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 4FA4C329361 for ; Thu, 8 Jan 2026 19:11: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=1767899502; cv=none; b=um6XcU3XKCrkxoOsMc1CnE4melFMsb5FQu76wNSHtngW9j8QtBTUzOn2hBv73a8ZANeUmLcKSmXEVJ+tDv65phadv7qjmBiYDYc6OnNAT7iTtVvjgI2NSaanBQ1vekQJ24g6KBN4huvQLisoWdbuVkq8Aw9Svs2rVq75+PS2Nc0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767899502; c=relaxed/simple; bh=y7FaKz7L3UAtslgu2x3jUq5vT+1dSABmFKBuMuNMePw=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=LWCVHEBIRM3qnNRUtWurrKLkqIzqjANN430clfMqHN4rablLgumwPlfpkJdECfpC46sXbMOTRAXQHcPeWD6xU58SUIQodS+8sMfc5rv7/cEnGsXBnju4PxpMLkzog5HmhXcoK7I8Ys7yTGdRgrky3lt903ITkjhcPi7eEXEceQc= 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=OUeNijPw; 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="OUeNijPw" Received: by mail-dl1-f73.google.com with SMTP id a92af1059eb24-11f4617e256so15688406c88.0 for ; Thu, 08 Jan 2026 11:11:40 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1767899499; x=1768504299; 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=OUeNijPwFTKWPfTUG7MSpWEzvflOOfwP37qn0vhKzHf3v/9qbqUQrqKpEqthFnkNzX AYmrQ/9nFXbWbp/60AdUdSeG/xTnBWoQikeIYit9rPQpSUG6/u+sO+z7oxBQK73IQG/T yNkE/2mTmJw9pjFKu/G1Ls9e3bY4oenLdR6N2U+GiiLEJcIkIDV7q9ZHBioQouGyfqqk GJLZYJtLTz/g0E3ZkKZF5uRZixYR4R0uMKd12rIjWibrVtsE4IV1RWhk6yD72grxWJso PgTyRX/8KfAONLAShN1tDx3RM/Ilqecm3hk3G75ms0Eid7cBR/mZqzWJyGw4OMsgw5+R xwiw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1767899499; x=1768504299; 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=H2n3WwPdSEsvs55qumvauRpwtCtzm2qBURzhzM+i+tDutC+C5o2SKwOt+Gi9ykoWyw hMYnA+vHaVz7lnfPnY7BFVEuatcIBQ3l3iNxj8UlveOw5EikwglaR3qZfKsS541qSX8D SC3GbovyIF5Fv9MotVYoapK973VMLLhfBMJkSbg4y9hW3kbzcpv+UgrdlyKFA51aPAU0 5LkodUH9S/MFghhQIWx6PZSSA+m2t8SxEcpZ7yRNF66jCMVoUm8QNzwiPGWtVUaXIzvt 42J1I6yeCL1MZ8apdlI7zrIBMuLqEXLVS9vhjcqcYthX/dHsfl7mkswn2S9sVokmUoIn R+8w== X-Forwarded-Encrypted: i=1; AJvYcCWAkiHZCBI2RdxWnjqXiv+Mg0af5A3+YrTZEkbXvjgbPoE2ZyAeeCzRpU7SRxpfN1+rXZEq+/SI6s/eOKU=@vger.kernel.org X-Gm-Message-State: AOJu0YxyxwrBexTLQ/NNbRfCiTXArkVy9zvbsn9x8Yx5L3pq61RKnWZR 7JxY5fd7cA+31KlKmSRPok02ekuZtUtM4lE6FzDOFxwl5R7z7iAx9RNoDVjse5GaZTgqaDM7Gea pFOj1j6ftkQ== X-Google-Smtp-Source: AGHT+IF9E17SQWbJuQ50ZHhye5/4q7/rhOcbfrEcIRzVHTzDoIZ8q0s+78FGD/28qUw2K73W43movJxHsXH3 X-Received: from dlbem4.prod.google.com ([2002:a05:7022:1004:b0:11f:330d:ed15]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a05:7022:41a5:b0:119:e569:f27a with SMTP id a92af1059eb24-121f8b5fe14mr6321881c88.35.1767899499231; Thu, 08 Jan 2026 11:11:39 -0800 (PST) Date: Thu, 8 Jan 2026 11:10:37 -0800 In-Reply-To: <20260108191105.695131-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: <20260108191105.695131-1-irogers@google.com> X-Mailer: git-send-email 2.52.0.457.g6b5491de43-goog Message-ID: <20260108191105.695131-8-irogers@google.com> Subject: [PATCH v10 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 , Samantha Alt , 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 Sun Feb 8 01:31:17 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 5BB7632BF2F for ; Thu, 8 Jan 2026 19:11:42 +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=1767899504; cv=none; b=vBqgQypm6fW3EcSKuVq2PWwO5FxMADIqhEKEEhmhaJZ16WYdymttcJ24EmARGXwkct6OHdgY3KwR3r7qTZNKyuKFpqeQjq/AQ9GRb4YOqWAOEW5JjKQJs7eamRHtAVdfWFhba9gsToFposx31zxe3xxnFp0Z47P+O4R1l5aUzXs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767899504; c=relaxed/simple; bh=wEwAu69dqy7FwpW88ji7Ds3Y/ObVL48wrOVgUzJIELw=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=UYstJ1WkWChr2JAGuQS9HYuWnYVUFctqGIzqJ+NCBjx+xeyo4iMiI0siN8+grpSPH9xi5ql9hfJ1nr4jwDCv/kyiz0AHkyFqvXDIt8mKpeD7UFZk+mwTsfXNupySLm9VnwRGlYL2jbEXe8VmklP4m/3jQzirJ+xl+ahMEUQxPH0= 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=WGvDx8Oy; 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="WGvDx8Oy" Received: by mail-dy1-f202.google.com with SMTP id 5a478bee46e88-2ae56205588so3843045eec.1 for ; Thu, 08 Jan 2026 11:11:42 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1767899501; x=1768504301; 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=WGvDx8Oyyf5bAou2Dqit+4aiqulWA3g4ST3Sr0QFY9kPpbxFNWXSWzedHNnJ7/gVHV iBqMOnj+UQWvRwkI/DwbtHRguXl6+kj+3wwwPYkCidbSvMQjtE5HEA+I7fe1RpjWo8tB UgOeznk23GEmDtbOuIiIrl1Eufsv0Bx1kKWCysReoDgjT3ad0f44uSrDqGzzmBW/kmmS YiqS1Aywp/AvNhES6JihHD4XeIg48i8xFPfqGbMVbJeRcmQurJ7EY++zKVrmQVjP1V/Y iRtlvDpY7oaf7ekH8GZZgiKaMKS4i+E5POInsu+aeLZbvJKqRmWkrY9a7QX8EZvBgHOT 5M5A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1767899501; x=1768504301; 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=gbdC4upqb/DTue7AkJo9JsCTLE3CnMuxIIkYac4sShuX/NZCQxR1CTuSBS4GaL3Vgy DbSUwx5BxQ67h2qLZ4M3oshRYANJ33X3WaValNyn9viZ+irCoiSz0vJaSpY+JVC1Df6G worD9PWDGSaWFxTR4xAcatyoz1eEaTZxKOXENrPzS4zWW+BArhHjAUJ8q8wMvFUGBdBR HvzATbuC8nIUVJusrka5ncDAJ3VU8etF8SChHqQl1J07KuSEwPue0hBjiJ6PIVRPQYfx YKP7PtjQgpF6kf4CuLCC3x4A07V0bqlVc5LL1na283W5+gwMoMyJmDNOOpNTK/33a3yO fVxQ== X-Forwarded-Encrypted: i=1; AJvYcCVHYNlfESsHlBGJd5n/TPb0yXwEeuQubDkoYpv4yMFa4qaMh86IaiiQgrPctmVYy2L3IDe2hxqnwwB6yLI=@vger.kernel.org X-Gm-Message-State: AOJu0YxFo8i0vylzg1EmRMbdoPczOv+T07nEZdtXLTJhQTyn+tsPrgAF ElRz4tCBJh+p/ielIzdo69DdT1HTl54u/eGgXceB/XKOi4AVAv/tcLp9vB8Ng9POrhFDXUZozV7 OVLCdncCDAg== X-Google-Smtp-Source: AGHT+IEKH48yV9OvfFDT25L2c5T5QiXJhLeM1UmbKT0FCWK99b8HbZuE75YudSdudOmS1QTrzEjANxU3rb9k X-Received: from dlbdt12.prod.google.com ([2002:a05:7022:258c:b0:11b:2984:3606]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a05:7022:1b13:b0:11b:82b8:40ae with SMTP id a92af1059eb24-121f8b1492bmr4193198c88.18.1767899501177; Thu, 08 Jan 2026 11:11:41 -0800 (PST) Date: Thu, 8 Jan 2026 11:10:38 -0800 In-Reply-To: <20260108191105.695131-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: <20260108191105.695131-1-irogers@google.com> X-Mailer: git-send-email 2.52.0.457.g6b5491de43-goog Message-ID: <20260108191105.695131-9-irogers@google.com> Subject: [PATCH v10 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 , Samantha Alt , 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 Sun Feb 8 01:31:17 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 B1B4732C937 for ; Thu, 8 Jan 2026 19:11:45 +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=1767899508; cv=none; b=YYL8KeC4B6qFR9o2+oGx9PFCChdGwGZm0ptDhXXFF+k6Y1eifUmr0WFq9MJ8/VbLY5NbPrDlvg9TFyUjXc7AGawqPZksqORfblTczONgYm0gN566u7cNVJVrCfQLfjwemLStGLFnUfx6KE3Y9Sv0jsr9BU+UtsF7XLc5mWQenU4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767899508; c=relaxed/simple; bh=ARE/Q2G89TxiCVGgVTApgtKtNEltPTE3mlntYnL0UpU=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=RIHx1Vbre3Mftc2xdc+Hkt04Isr8qJSggie0dq1cI704yG7NATT23Bkd0oL1W3kGzuIgnPbpSuNN4HsIW0VyRlVO0w/rlxw2UULhSv5g9xyz/tTTHBuxVKpaKau0bNRqGomjsF1DxsQDh3GMsU0GR2VoL6WdaFf0oKkgY4apHrU= 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=fWPwtOsq; 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="fWPwtOsq" Received: by mail-dl1-f74.google.com with SMTP id a92af1059eb24-12055b90b7bso249719c88.0 for ; Thu, 08 Jan 2026 11:11:45 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1767899503; x=1768504303; 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=fWPwtOsqhf5z4icDx8aHjASzk0M/OfUaxRMjIceUys6eHb+SeboVW3EbBc3wyeRKl6 nVZi1Q1AEatkijklQVNk2BfG5CaSqXvrS+IiZtaXKKj+I1QOOGW5+FFxWWTotYMJWg05 Iib5Q40eL1oiyfnnwYYvZ/UCESuoZ+wcPeUrUmvwUA/kZnBhQolp7QNinEcBYlFSc2pq kgc69+8swAEgd9Y9U/9YuAS3vz7ssh23WnA7vDIJlYFVD0yYdl5lJXcV0bCMFW54e5iT ogu5LHOXCxvokQvc8cff7HWQNYl4X1KcNOmmkgi8sQSkYh+DxFYtRqtyxrkomSoUdhPu 2Stg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1767899503; x=1768504303; 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=LSJUcUBfJKigtLI1qAutcy17RLqh8cTJ4FJMZH6QW+PFOYnuXyAb7Viq0dDbfV37OB Jjv9OrARnnkmHbIHF3KC26XYOc4osWkSIb0adBMBc/ll/8pLdlEtSnjzLVnb7OOmFJ+R caTi6FFsU66VpX0bzR1hw5XgGgHZxSF4H5plrA+qbD+AFN7z6+xQNBUeYdiH4W3VtOh2 delr0pLymC8XCITknaCOZgcdNe4yfuxOWcZGK2D1AnIpORzzsqMYqVqvbCGKf0SrA0C6 LJSLj2BfXPBpQCosEhWTQesb1CG6HhCeNuVGz6LylKpKSndHVn3fYXOtlErojSrbNtFX 8jSg== X-Forwarded-Encrypted: i=1; AJvYcCVhwGHwfuZUPQHMfBfhp5ljdRihph7fXbpJVvDomH17dIh12GxrsorgYfBmp7eV+1au8PzP2eIxNMQJbvo=@vger.kernel.org X-Gm-Message-State: AOJu0YxnSSkEwiYia0Awr1jp5PItrNDsG3iOIfyrug9CNHPovWRQrN/X Dxg5549de6Rk5rdw7RGSMdQG/P84Y0aryPP4jbAJFJd2o5ALQcSJZgCqnfk+2cfAxb1Py2Ewtuj KTp3aSr6fmA== X-Google-Smtp-Source: AGHT+IGycfr/V1MBVAvRRJu+cPILshDBpdVCcPH1A4b61DFn/b7LNM1rkSXlN/gpZHLmomvyiXzogQ1MjY34 X-Received: from dlbuy4.prod.google.com ([2002:a05:7022:1e04:b0:11f:3f33:f0a5]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a05:7022:e08:b0:11b:4351:2687 with SMTP id a92af1059eb24-121f8ad0889mr6464293c88.17.1767899503061; Thu, 08 Jan 2026 11:11:43 -0800 (PST) Date: Thu, 8 Jan 2026 11:10:39 -0800 In-Reply-To: <20260108191105.695131-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: <20260108191105.695131-1-irogers@google.com> X-Mailer: git-send-email 2.52.0.457.g6b5491de43-goog Message-ID: <20260108191105.695131-10-irogers@google.com> Subject: [PATCH v10 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 , Samantha Alt , 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 Sun Feb 8 01:31:17 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 E807532252D for ; Thu, 8 Jan 2026 19:11:46 +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=1767899510; cv=none; b=tX8tkPMS8YKKkQTNXlIOtFfsgxMOTv0XgEvP9MWPCzBoVY27vAnYMpOamPxxlF5MIFIg9O5bvQWNX3ZRFy1uRTH0zdTUXwu1B3zCwdXQ3bXKRDD0NEA1eObeG7RjdLLx97YauzjqvQwhBjYWq77t3EI+DAZedntTHtW+s8jAr+w= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767899510; c=relaxed/simple; bh=cIu6eR1sR5Z5vTDJWp5UW5V0wvKX6WEDplqiXQUSFGQ=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=E+Qg6UIpYcxpHHFSj/iMd2oUgunH2oPb9nNdXqkPWvA5w9A9zr2BTlRoYPf9RezBi4zTfrBssxwVPye3I5MMg8cV91GIVbc5g0m3jUNOssE5kDCUreW27k4hPTOnSkzsZgAmexyFFQC9ZzonbitViUBIP/PLW9XrTy0bYCtRwBE= 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=t/nBym/p; 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="t/nBym/p" Received: by mail-dl1-f74.google.com with SMTP id a92af1059eb24-11f4500c7ebso4022145c88.0 for ; Thu, 08 Jan 2026 11:11:46 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1767899505; x=1768504305; 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=t/nBym/pUC2u9hJmKGEcBvvtLlvwdjjhSFCfPrkahHN2tbbSR0OoRcDGyOkD9ziorA yW2bvqa6anjVEanANosJZ9hMK7MKo280sZZDQFGDo3a8uS6T6s0HtoLcfWuqshNxB7V9 2X5UV18esEb5hCw7mSun2YmXUqcvTrStsnMVF97RStgClw3k1b1Il2FmBewg7uI4KOM0 LN1N8KO1s8C258FQSqnatRFirwonJqbhhHKtUNCmhGSwzffJh8MQBPrvLeMl3aW2RnQ3 SUcqxIMGjamzenvSCj40pK0SkMyUUTKyqynwjJ73Ymb6X8JGybLKjBzTa8O8jiHoa2Ts Icdw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1767899505; x=1768504305; 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=AJEQhj6DbVuI0aEn05UXldMmqHNO7I9FWaBO+9g3cbpP9zXaI1ZiZBSyCGTRBUDPdP 3VcVnsZthuirj8LhuCGx0iYyOKK1rDKcFaZo+eXvSzMYUqDigIvmQkpbWLSZ8eCW7bKO eawKM+XE9GaU8xjM4gLZyzsLOb01nbzAP3L8mgJt0bw46c0rXPgkazyUnem9BxiRMyaV jnxBcHnKkY1lp5bvKoJT+YLYEhfjAqx/ZmKwgzQ/Skfo2dg/ODw7iSYqh1OWlbGC403j NydtdR7G21hUud05smyuMt4rOZhXb741E+tjIN9ZSIkTav9xNoJb8L9Tv6DosR9cdQ65 hLug== X-Forwarded-Encrypted: i=1; AJvYcCWqCEqUKH96ghdbGP7R8HbXmcDvYkig91tLSdcT7HZvIXUXyvRiH2CouWFsa911FYQEhvb7KaZbuxJ0lBk=@vger.kernel.org X-Gm-Message-State: AOJu0Yz7iDK1dnKhRe/M2DGESphqcdeq2UxGT/QGSDV6EstVq6Pr53+F 7Qxy+2upln/JrwQjDiSDQS2Jzm6eLeJKMcIxA08MK019N7z+NvXUVznEFYfZsK3IyUgIFl2qM/M +Ss6TYdRqew== X-Google-Smtp-Source: AGHT+IE6VKLLaGUFz82YP64T0QE0Qf/kXni+8DbStAK7aoMAja1rMhXb+FIhl81QCTLejTQNfQwPA1yTli+E X-Received: from dlnn11.prod.google.com ([2002:a05:7022:618b:b0:11a:36df:95a9]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a05:7022:326:b0:119:e56c:18a6 with SMTP id a92af1059eb24-121f8b1433dmr5623224c88.14.1767899504718; Thu, 08 Jan 2026 11:11:44 -0800 (PST) Date: Thu, 8 Jan 2026 11:10:40 -0800 In-Reply-To: <20260108191105.695131-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: <20260108191105.695131-1-irogers@google.com> X-Mailer: git-send-email 2.52.0.457.g6b5491de43-goog Message-ID: <20260108191105.695131-11-irogers@google.com> Subject: [PATCH v10 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 , Samantha Alt , 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 Sun Feb 8 01:31:17 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 74BCA32D0DB for ; Thu, 8 Jan 2026 19:11: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=1767899513; cv=none; b=EVH0djSBnUUupEnxtZZQEAKobTgxw9/hECvjDoUfRhiyZcKeRy9iDlCuLLr54tURAup/uofLVSqqOc2X1hXJVd4a+dmMPZi06yhVHJYjsTy/Of8/3TfGMKJGpCRDwKVNfSMNGT3kzdd6BJ+x2T51X1vutq8LQMCxVDoLQZKrj+M= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767899513; c=relaxed/simple; bh=jGvHnBOIRlpXNzPDylmnrl70NxmK3iS0ZSa2PimW/OY=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=CKe7ZFRq0vZ0A+LYCePvnhIB/jjEHeKVjsL2BkJtKgeLDDrgl0Hj1NXE/kHy7eTuqV4dASWp9ymnsCTXRBAMaZVTlTK1aFWMEUIQ+I0QZm6TKECc9rrZHOCJR+9OoalWN9p9OGhfU+8FTlRxuhH44fQITXFRuoD0Z8aya4b/ieg= 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=H5yymHJH; 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="H5yymHJH" Received: by mail-dy1-f201.google.com with SMTP id 5a478bee46e88-2b062c1aa44so4193143eec.0 for ; Thu, 08 Jan 2026 11:11:48 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1767899507; x=1768504307; 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=H5yymHJHc7HxV0g2ZJuYxx/sCwQDm2ytfyzrxGPmtsdw+ZBDDAB/D28/IVEt849CWy UrZVjCnLZGFMt+o2p+RMiSh0H771g9v+VUwHFPtTv9/cJfcUVfictZYWd0e5vUyzspGd y5En87YlOuqgm5MYZF5NAJ65BZHpBLBavu58RDtg4XDZmrpeZysU27xrZ8lxCV8SJee2 pAdwN1vwCxTtEI/mFDL03uA9QCQJ7gZJLKqhfhBU0SPdfJIfLQ0/oGkqczOJLZ0BRhc6 xU+b2sv1t+HiSJKj4e+7TfSTb75gznwkW1c4DXOjj8O+y/xGqKLcTtrI5HmxFhO1y6XL /qhA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1767899507; x=1768504307; 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=RMOTYPcryD6HS+OuU/C6FjwgzPNRfkWf14JKjHBnG/2q8RwSzl/6NQmwZvY39VUxue xhAn0KSC0hlMNJEeyfd56ANXHvWbNMEfe77lXMtKsBcgobRNoeHJ/RZlgv4H9N0AT+p0 j3t+yoSSmCX+JRRGF8FCWQ1C/KD4FfDVnYOQeP2NC0izEK1SvIFI+8zj/bgdc0KWmrCf Qy/2piPvosjITSdifXOV6txjCz3TGPsDi0MksoG125TeeZ0So6+TsP2GL/F9X65FpNtC RCCIf563mImeFwSqSfiK1K68eIErR25p5UyfRtFpPvc7XXY6iElELfZZpz2of49dvtjC ioCg== X-Forwarded-Encrypted: i=1; AJvYcCVlzM1mYvpMqTU7TFXupfEPWrSZkBSdvGvG+7m3p9PuWhrfYawExVl0056aQqCe6H4ibw9kSWH90ZjSFZQ=@vger.kernel.org X-Gm-Message-State: AOJu0YzjpYT2X39pEmGOa3qNwuGZtl8Z2CiDSORIxiQn8zFy2MLanUJj VuitymqduDpYErlGUo7MoCPN9DynkfZ/O61eKcSMNMhQXg9J3Xwi3bJfS9dKssJtwyiD7rFgOkq Jvs3lYuapdQ== X-Google-Smtp-Source: AGHT+IFjJOwZKFxZq+U+vVCmQ0zJZVODmFqQt9C3sBwElvfkzCtXeH6OONG0DU7+z2ReYxNDQwNpM5U6h80R X-Received: from dybny40.prod.google.com ([2002:a05:7300:e828:b0:2a2:2846:c513]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a05:7301:5f0b:b0:2a4:3593:9695 with SMTP id 5a478bee46e88-2b17d23527emr4508241eec.18.1767899507250; Thu, 08 Jan 2026 11:11:47 -0800 (PST) Date: Thu, 8 Jan 2026 11:10:41 -0800 In-Reply-To: <20260108191105.695131-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: <20260108191105.695131-1-irogers@google.com> X-Mailer: git-send-email 2.52.0.457.g6b5491de43-goog Message-ID: <20260108191105.695131-12-irogers@google.com> Subject: [PATCH v10 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 , Samantha Alt , 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 Sun Feb 8 01:31:17 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 ABC2B32D0FD for ; Thu, 8 Jan 2026 19:11:51 +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=1767899516; cv=none; b=Q4tH/6kX8Q5QqFthWYfgg3bFtzqbNQcFUyrGhhygKCKdDfLCrHNC7705MCqx3gEAWIgFfgwQrywwC3QprhGcPSySSo7kRusTC+ftRqi+PshsPRzUt3MSiNBvUszDCk3KrCl0P69w7WzbAVp7lf1BURTaWRYq1OEfVGYpS1nMYbw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767899516; c=relaxed/simple; bh=4YZdNHoD4OVwl+Z+UboY1dxnW9GaDyHi2p47czxKHP8=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=TeQLpPtE08+ddQtohpWSyahQ0OYKZOMyF5OEmizvGVUIs8kozvbs9vh3rB1+aZvLE9R9rZ6UJT2wzTcmmEuAiGYLTftljREv38TzxA7lLoI93BUBJk8H8F4kcr/zCr7PqJU54MYwd4EcjGBHAs2zBNmK3wHAzDnGdX+jCfRjrKw= 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=ZGTvF5Yh; 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="ZGTvF5Yh" Received: by mail-dl1-f73.google.com with SMTP id a92af1059eb24-1219f27037fso13559135c88.1 for ; Thu, 08 Jan 2026 11:11:51 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1767899509; x=1768504309; 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=ZGTvF5YhduVU4Gis7/cljVJ2pQGGHoiNFofLNEfaOtCRs6c6wrDq9zE8tXm++fXQCZ p5w52CcKmF8oh/LJPKni0aA01M69OLlC/TBaqp3+kULmdcQMHaoa+UYjC390iJpc5xZ6 pmWnedvNWnwQHKH4VY6rXES2vI9BYoCc9dQx03zChbQqsFjEfmaP6yH7QIDa+3U28FUk DkN5WTdHIbtAxO8Y9pvspVzmMqL9s92KNQ6rDslDKJrbIhrSEs4fsi41/VESm8KKFKgb N6AaisrsxGXsBbEnkoIF3ywawax5/hRDB1ZBveGz/ykolr3nTH4bSdrrNSGISj/x82l7 WC/A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1767899509; x=1768504309; 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=Ctmchzn/WOaFIQ7y0v8JkqQJ3ObvF0kykjmRyfYcMRKpjW3iIYb3La5dpoWhCEGIHi 7Fyu/oRbJHNZCYDy/B+i50GKmCRx5Hp+zUknOB6fKduVNgzT9PfS1XVMJ9JdROjZvdkj lT3TFbm0gxoE+aa0EjXDAFjm+RxkjYjRHTvKGK4fQGP35uUtoGjP3yIJOfeW+gEWejyS ce2IxshWxMykY3STPZdHh9Idu4IUHpjidHW8n1sGNpQTMT5UFy4MQp7lkfv3ulBoHpw6 s2kvnt386x1vHyPzrc0JUBBk5SsxdsJ1PRKP8WCgAt5Nx/o7ADK/VcfVB2YlXHgIMtRv bBZQ== X-Forwarded-Encrypted: i=1; AJvYcCXp7OBmV43u8IbbA+Nq7tTE1CdbrpMdbyyTjaziM0cSLDqJf6Xxgc3vgP1K9QrahQjlYJrdzseugARcZW4=@vger.kernel.org X-Gm-Message-State: AOJu0YxLEWY2uGg51EN7Gi5Qglz/MQmBA+6KyzPqGwuJaRgKTQCthsU4 D5mD4wCaf13Uv3+znjH1QDGfkx2oyM2euXTWcILoSEIC40bzkNSkQokmM8ghHql13kVTtm/VUfd MBEJ0mFLS3g== X-Google-Smtp-Source: AGHT+IHoiPGHBovETyUcjQ2WmUMUU3CaN+Uazo3cs7yqtLWEn8FJr6Btj82A1YTfCuiVTgb+PwR3cXLrlNJU X-Received: from dycaj16.prod.google.com ([2002:a05:7300:fb90:b0:2a4:7a56:1730]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a05:701b:2215:b0:11b:9386:7ed1 with SMTP id a92af1059eb24-121f8b72712mr4738901c88.46.1767899509296; Thu, 08 Jan 2026 11:11:49 -0800 (PST) Date: Thu, 8 Jan 2026 11:10:42 -0800 In-Reply-To: <20260108191105.695131-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: <20260108191105.695131-1-irogers@google.com> X-Mailer: git-send-email 2.52.0.457.g6b5491de43-goog Message-ID: <20260108191105.695131-13-irogers@google.com> Subject: [PATCH v10 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 , Samantha Alt , 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 Sun Feb 8 01:31:17 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 5794F329E7D for ; Thu, 8 Jan 2026 19:11:52 +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=1767899516; cv=none; b=X4LsZ4gs0zVMyOVc7Ch1ypfXytUZEQqmtu0kiew4wC7Dkrjpr+XMayaCbtGbw5Bej7sZ1C4HmPIDiPu3q5nur9Ptt51XPZeKI8FAf2mUkdOAidbfrKCCbVUCcbAKiYVa3kRGrk2qsnnethY0YUada0Nvt/RMRGtNi/SB0HdOU5Y= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767899516; c=relaxed/simple; bh=4pM2tdD652IcZD8wzPhrvfuqgRtHqz0V8U/ipI7rM2A=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=jqSYlKf6JKz723aEl2E0Mg4lRQe45cjFOwW6W4GGolnTb6g0r+c7yF0L9+/Zj8BWANs/gxP8gaWzM89mtgkxA4wFMihcTYjTOeGFrjQBTPxZYXhUbz51161KFa0CL1mz/q2+g4PC3Ds/h54oQTca2zBJVhNqzZ40jAn4C2gwKQ0= 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=iG/cq0kM; 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="iG/cq0kM" Received: by mail-dy1-f202.google.com with SMTP id 5a478bee46e88-2b0751d8de7so4237198eec.1 for ; Thu, 08 Jan 2026 11:11:52 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1767899511; x=1768504311; 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=iG/cq0kMgUx0Nbq+2jsDgsUJFVR6/R3hvmO/7eSuFJKAKouABrEgyHpdn1ioojyDqh fgHQmENIFBpxKolgytZDO3gJuPbzZBdBiLfx+6gk4UQqFdJSK75SGeGbmzHaBQHMBABJ uyTSOsm4Zhff8lAS0lpERfqykH4wiRaQfhec783HW9ZXcZU7Fv4LxqmU+0qRws3OYoeZ krBtIT+hJiJeeytgJsTtUY0HlMq2bj4iHWSLByWPQ71i2+Hf/W6N/AfbtnqIQM4jALSq o1nIK2uEkt8MWAVx+/T9v2cOdP5XdV+tLSfuNYeQKctJxlak+rjFQgAqL9kuXel/JmB5 hUzA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1767899511; x=1768504311; 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=vC3+I4Vt6AZ3GDlqofrwhUdvfAWU6ZrOSK8m7ARgMtFQVp2HkwgEU+ykb5QIud4c22 H1RTQGniA6TSpK7rEvCjpMrh0WrFf2tm/N16sSzCjTFcec3ww8LmbuN4ygmdZ+zR/eYd rV4Uj0j+3oCqeX/e1Hb4AcmRquGTGRd90yy6Bho1+SMMtko9rf8d6Ij1UDyr8vJprh9m NFBd59HyyQUYXGirnXFufLD2cagKADm/0vkQ6yr8msdFTPLPzgisDFQD7AMSzuCH1+zC 97RyKSIcasSIX7H1sdWk1ZgvVifyIDvmihjuGEMhVvgFMhYt1YxaCwwdGfUI8zButYB/ tD+A== X-Forwarded-Encrypted: i=1; AJvYcCXz5swWHebYSlVHu874yVNzuqsjQF9rc37pi2EWEireI+EXQFTdXHMqom+og0nd0faEwNKC1jkEV4N+/1g=@vger.kernel.org X-Gm-Message-State: AOJu0YxROcgZfnACpRo4War7p6RGW5EDUtDjWkfpZ1kawfFV7M2CmwXy GehHdN2NPyPkRArWEEd1XrHgre2Bv7AjItGTMqQ8nBSG2/ve7au5lYhqCHo73T5R9Y50pP9SgtY ImebJZv8fZA== X-Google-Smtp-Source: AGHT+IFBdZ9YGtBDf20j4auioQ8fS0JHTCtar4eY+lDnx8UdCh0olNr5kj0gIYkLSwrxUvuXTjL9a9JTc+3i X-Received: from dycrq5.prod.google.com ([2002:a05:693c:2c05:b0:2a6:a19b:9a22]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a05:693c:2583:b0:2b0:58aa:8852 with SMTP id 5a478bee46e88-2b17d2b0aa4mr4993331eec.22.1767899511325; Thu, 08 Jan 2026 11:11:51 -0800 (PST) Date: Thu, 8 Jan 2026 11:10:43 -0800 In-Reply-To: <20260108191105.695131-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: <20260108191105.695131-1-irogers@google.com> X-Mailer: git-send-email 2.52.0.457.g6b5491de43-goog Message-ID: <20260108191105.695131-14-irogers@google.com> Subject: [PATCH v10 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 , Samantha Alt , 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 Sun Feb 8 01:31:17 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 E08E8329E4D for ; Thu, 8 Jan 2026 19:11:55 +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=1767899518; cv=none; b=eNkMTXu/K0MNGF80qS9QvJz7VcuqoTG9JAg7lp/2RR/7bod5rirj83ncHMB0N9354PM5OfAn2RTMCfkaJ2cshP20ABBWZV4H/vNW4PI67hbJrUr7TuzQ5VWS4Swtchx/JdN0lh8yFNRBS0aGlSUuovYAXgMnM7ME/lWgrnX/VrE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767899518; c=relaxed/simple; bh=bp7wUYlwFQ9u8p8yyH/LWJ+nT+cGLAukFIDqJoid0TM=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=e3L9wmsWLeErmBdHmXvB059MtkVOzhrBiVQM/WeMMB4iEmHfNhA2iqMQi3vFBfSORT4O+1BS+UaGUicd5wKgclCvKUMYuqA4yfhvW9BRQ2th1KzcxceCQ62K+d7DTg3dT0eC0GTbeHSInBP+7fXzuO+ltcjn1VpouE3K6uXzcBw= 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=gOGU9+Xz; 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="gOGU9+Xz" Received: by mail-dl1-f73.google.com with SMTP id a92af1059eb24-11b7dbce216so4400586c88.1 for ; Thu, 08 Jan 2026 11:11:54 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1767899513; x=1768504313; 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=gOGU9+Xzra1JXS/KFB9TeYMLGDl8SuULiFMd9jkEOYzgH4OrmOsnXzku6DMk6pdIJS Q2SVqkpJAADh8oxeyDG0qSBZSQ6qMvAsxhjZeN7v350N2lmkCVR4IK4weD/YP5p23R73 W041w3HQSIoQQy1U6h4LA4vsXCinFIjC5zPTLrPXm4e5bgV6fSfXhjduTpi8oB3wSlua XdiyzJbMyUfnhLa0irmzcqazeoAVrOM5LnootJ+GT7unz8FOCESLDTO47SMIScGWQHpQ w2kxHAc5/3Tw42NtI1L7zM8DBY25Rv2mXt7zmbcnKEQMHsHsiNKhoiEsi70pl4K2x8pK EYxw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1767899513; x=1768504313; 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=BUC2VCgec8WnoCbtBGEWBZkLsxX1IW38mLt5IKnAnvHGx3RBCJBMW8d+SqSAZVzeOT r7GtmGqjx3557uTSvXr1vcUl/px4CnPvf4F6QHQNo8lTcXpkLyxK7tA82UR3olLIftV3 TmW3bs7MjqMz6z+PsGq475ncr4n9dTt6Dert6SE95nKNKVSVxWic/VHFN1PmjPAkWABW Y2OIq4GZhgtjI5ITEAQkRwocwvR0PoeRTq2V08ZevxeQYUup3wayTbljYJYsxr8ZyUEw fIpA2evW9FkePkzK7x8dt3aJnH/Idz96eNM18smb+OqRv1endnouDrSmTJ9dQIquqZyR A1Eg== X-Forwarded-Encrypted: i=1; AJvYcCVyZ0CalfhQo2NwXlYBIDlINEY6ZpqV8XC7m5swXD0cLK4UQ4Fc2BwTIIvFzFbsnVxo/2B3abamYFNUvQA=@vger.kernel.org X-Gm-Message-State: AOJu0Yw+YUNMGMnskK9irabww8BI7eKPxIxEP7qChV8kyWD1HpSI8Clm 2lueouMCL2MpHtIeh3QcLROG8KbT/BXs8T93zjAT+hLwNuYJZndg11rm+ePuO8rD+rS0kMAaVHF BPZPoMuG8hw== X-Google-Smtp-Source: AGHT+IGJJ/p0fhtPUPumCcKcm6lbsZ6C8U1Qdqbs2veuIqkmDamfVsqWWn/On2uRaOydb1Ld8CGqKXpAaTnu X-Received: from dlbdt22.prod.google.com ([2002:a05:7022:2596:b0:11f:30f6:ea10]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a05:7022:b82:b0:11b:9386:8258 with SMTP id a92af1059eb24-121f8b76b79mr6229029c88.45.1767899513332; Thu, 08 Jan 2026 11:11:53 -0800 (PST) Date: Thu, 8 Jan 2026 11:10:44 -0800 In-Reply-To: <20260108191105.695131-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: <20260108191105.695131-1-irogers@google.com> X-Mailer: git-send-email 2.52.0.457.g6b5491de43-goog Message-ID: <20260108191105.695131-15-irogers@google.com> Subject: [PATCH v10 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 , Samantha Alt , 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 Sun Feb 8 01:31:17 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 36E6132E68E for ; Thu, 8 Jan 2026 19:11:56 +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=1767899519; cv=none; b=K7aBMo1NkjaUpj593W0f+GIthS9yAykoLbM1pALagvk0BD04RDV80XE9AjklUQjh3LcNnD9fXc8LI1T+1aQ9aklQwNIQFqn/p7jKJRlnuTeK2IsbLDv9St0BKxGndf9B9uHQKwrNq+4QWeSAL0YYQ9yZRzuXt3nN/8bCwlhzZJE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767899519; c=relaxed/simple; bh=YxZ/OsA3lmCo6/plyihzmoA72k7p/jAWTQVj1BOnHOA=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=m/qb90gJapEnhyybIrgFQe6EMF1mkB3c2Tmft1wtTBPB/l9Kc0E8z+Zh4JmpRKj+oJ0erMGQ3eCz95VwqysIdKbAi3JHOBxUD3UaYpsj/9WkFdSUT2sSi4Mz7tapoXrah1QKBjYjIsP2BbIYdUIEQXAIbw6NuJMBMReEpJs3//k= 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=TZ/cAJ7j; 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="TZ/cAJ7j" Received: by mail-dl1-f73.google.com with SMTP id a92af1059eb24-121b1cb8377so4582725c88.0 for ; Thu, 08 Jan 2026 11:11:56 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1767899515; x=1768504315; 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=TZ/cAJ7j659Bl62t/lWGrXZozVeKS4D/rRWMNVyFMMkKKSCLz61c+C8LB+CrPT63Dv 26jVmvvil6Z6Xe+qjlW02R2FvxlnVvPoHi/YapnWJQ+rME2J+ap7uOKeYdpmuXIHC6dV hLnpctkFosNEJL9DsA8ZG2V15DQtKwAO7CYZouZBWfbr8lpYspJnRR8r1JJGOBjC4wWD bkY7u/PR198707QH7ssB+oBig9NZ3wWAzyvUNUaiyo4MuXv8f5+V7EgpGu6uw5p51DH1 5QNh51VAgxEZSPgyexmqaAv9VHHOzEZA6MvYaUIWvlWurqMUFwDHRiqMCRhujsXlAp9e GAtw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1767899515; x=1768504315; 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=cHutQdIXPexH+yMXh9gtVXFPVDaLZUAr+JBgY6q/IgWAx7od2uCPHtYOdGcMr6cAfG pf9VjN6Tex4gkeRuBrhwNregTi2P3Ippvrsb2ZAbpxfXgEtAkmsOHjQ+8P4aqCPwajkO JMm4Rxm/C+8fkDrC/5o3/RRJbdNoTkNPfN/nXNiVYILpl67wDK03iJoZW9VSnzUQvO67 O7Jy9fvEvvyodHz14oXzfFNNabcNEw0QH+DCPpwm2YTmqPB8VIjb2R3oBtqVgR6O8XqA WrYdJvXS0pO7l1bNzfqaLIxZSN3HVJbtRaSggRUnoOm3JNdNrbj8qlnaT4M9pLqNdXTV tUyQ== X-Forwarded-Encrypted: i=1; AJvYcCVHzlKJUCNkbYSc7bae5RZp74Emb8HjMTeE2gJqNyn1e2vo6XRGU0VVMtlU/IVIsn4NMsbJMXqaVR7TscQ=@vger.kernel.org X-Gm-Message-State: AOJu0YzU+uj2N5G0k5PG9oqsTW7jZLOWHaQuLidYbGpeTFjtrePcPdcC GrtVK8DfcsfwVka++bXTVKnyxA4W/GZJIpy4qayYFOV/QytNQfQ9HB9N23wdV81Bk75gbOR3b9T y6rS6LtpxCw== X-Google-Smtp-Source: AGHT+IGd2kQf665nloazUkG63CJWxUv5NRwbj0g4dCCQG5Lc6YRA5wiulJJUPQnFlit081KbV48IVNnl6LsC X-Received: from dlbdd40.prod.google.com ([2002:a05:7022:aa8:b0:11f:36a2:78d]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a05:7022:425:b0:11b:c0db:a5ea with SMTP id a92af1059eb24-121f8b7abbdmr6160878c88.26.1767899515006; Thu, 08 Jan 2026 11:11:55 -0800 (PST) Date: Thu, 8 Jan 2026 11:10:45 -0800 In-Reply-To: <20260108191105.695131-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: <20260108191105.695131-1-irogers@google.com> X-Mailer: git-send-email 2.52.0.457.g6b5491de43-goog Message-ID: <20260108191105.695131-16-irogers@google.com> Subject: [PATCH v10 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 , Samantha Alt , 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 Sun Feb 8 01:31:17 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 7351432ED22 for ; Thu, 8 Jan 2026 19:11:58 +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=1767899520; cv=none; b=bR1aI5G6FARMZxHP4Ju52NVLEwHLbl4Dx24kccG3SPkpJcalRA2sAU5Pq7hnJGzUPuNydWPkED6fQqIBXgyU48FwFSvqE94S3JV4QyFEd20/D02z6fS3luOJH9pRXmc7hbJ2UUXHJu3iGHHHmIBzc0w99snk258LqNa5Qpyn7bM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767899520; c=relaxed/simple; bh=Tg0u9xgINTvX1H6FGlOJHenHBu6latCGVtmFgleOH30=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=j9wXpLVh1dAy6FJ1ZP72dcOSDEHTo5KCGdkRI87HjulIovVFOBxpfQ4fRCulSRT/mWqikSG+AyWhE9YWZTj6uU2TlbpJnvnKXNh4q2k+BujweH1tQwzsMoN/tQR7QWfTe+AnKCxk8lGMQqcG3DgXv/qFSdQ5lcLxBGrMxD+GAOs= 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=McqRQs4X; 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="McqRQs4X" Received: by mail-dy1-f201.google.com with SMTP id 5a478bee46e88-2b062c1aa44so4193636eec.0 for ; Thu, 08 Jan 2026 11:11:58 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1767899517; x=1768504317; 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=McqRQs4XGBSIDxm6ORpXgMhX0pSfdIRnxiUJwxqt2scDTi5aaNsvrhwt9vHR1C2M0S Oazphbmn9mhnxL4UGG+c1AuffqjureuwXArTBNcDT8eb8ZwJknlZcAsH8OSll1YOZm65 sHlHpf7Sxb/KujWyIL21OnEfXp9Dczw38TQ2Pwd8nxmKC3huJo4TnzhnWKcSUOXVIqgZ 8MHGNlZMLCHibZrvEYJXiHMNX6CGSNy3lvjzpmfRiKCmEF0KoM8Jjp2pAkGUGGiLYuLE xAkT17Mve0FxOCzPrfRoPywo6qXGbIVWIiV6Cb30llAF2hFwK/Vhc1cxqsasu46dcly7 oUJQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1767899517; x=1768504317; 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=u7tqy1cl08UeW4DMxHM55Y9YsR+LVm93xtRaJX73KHPr8Dl+GtF4QjkTG/F8cyZgCr IFGK+1ha63rl/DSCK/Y1bEk9rkU9xfNNqQfs7pqmpL9zlrl16u2iOaDREm3wgpU2xZge +b0U6hmIjXnFAylpvZq9ZFS4g3y5x+r+LR0pdCXvzCa/nnxAKjZGoPIy6ciuCA493L+V KLoEzoNG8dW+xaJSdEXORxlbeOrLliG26LVimk3pmA56SCCCX8zI3mqYRLHotKtRDQx6 7FpcpyyveX+EWmpYGe5d8eDuz1nowmZm4oE3aMDSfliOpA0ZQ2BW6HtFAb7PJS7zcfiH gAeg== X-Forwarded-Encrypted: i=1; AJvYcCXZ5o5uMM1MkqXfw3nn1jpRX/dQKz4yfsC2IcW9yVjprC4SgKl0JXZ4BfNURIsRii4txqjcKUyeKrJeCyU=@vger.kernel.org X-Gm-Message-State: AOJu0YyCBqFU/pO/Mk/kwfn0gkZLLtvfVQMQgMatFc8o7EOobraWwu4+ XKYpLJQkuPCyPhKC3tC9iiGJodcDtmlVFfyuRSiIHm5DfrOJqKQ95xSTrOsaTxgFsYsKco1UAlc OGeW+xNPqMg== X-Google-Smtp-Source: AGHT+IFnXtL98LV7vbdXX6Sbkm44nwMtzEAp7tcF6f64Sgqk2vPXeIucA35xnhOTAotUYtCEXxX1u8HTolEQ X-Received: from dyboe6.prod.google.com ([2002:a05:7301:3d06:b0:2ae:3555:a1b1]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a05:7300:f54d:b0:2a4:61d1:f451 with SMTP id 5a478bee46e88-2b17d224539mr4078280eec.16.1767899516637; Thu, 08 Jan 2026 11:11:56 -0800 (PST) Date: Thu, 8 Jan 2026 11:10:46 -0800 In-Reply-To: <20260108191105.695131-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: <20260108191105.695131-1-irogers@google.com> X-Mailer: git-send-email 2.52.0.457.g6b5491de43-goog Message-ID: <20260108191105.695131-17-irogers@google.com> Subject: [PATCH v10 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 , Samantha Alt , 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 Sun Feb 8 01:31:17 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 D6FF5329E5F for ; Thu, 8 Jan 2026 19:11:59 +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=1767899521; cv=none; b=To0REeB2BT1lDr4zz2Oqb+2Xg72729YOMtrry8VXleX+vazTfGUJPIgBGcH46bAlbQSpZdsoM0K3QmI0RXLbKL8MB0gE9m5L4zCxW7hRCY5ws9UWFNA5BS2Io1HyVO+GMqsrX0YJK/iNdPUNziilsbV5kxddNldIyfJ/2yQpL8A= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767899521; c=relaxed/simple; bh=e5HCiCuPrRhKQ5C7WVfdNlfmfEV5F34Gu+L6jhwfY7U=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=nbiiRJ2WuN+XgEluXpgkhoumZFjdtBgiDS5wwKhFiDZUZMgSVSTbfQARy2pG3WI/33bLpeHziQwg4AjCWqDgk9JXsk02DlJCD2aTh15vMyOxyCmVBUd4Zmuys4ELMoz7b7gZuXKVb6cBMoyWjpp3ZMhrhiMY2+1+QI/79W2yLUY= 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=kWRQAuTr; 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="kWRQAuTr" Received: by mail-dy1-f201.google.com with SMTP id 5a478bee46e88-2b0531e07e3so2876506eec.1 for ; Thu, 08 Jan 2026 11:11:59 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1767899519; x=1768504319; 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=kWRQAuTrQI0pOQh0Ll4cL1uEIgMeh9EOrKuOMekNXbDZc8KUKhQjN2KPCb8C42lM/+ h8r79hImoaviMLQM+xs6y66oxv4nqiNPco5o2zx281V28J8N4xRLDneQ1LrHrlcly7BY PuPpSTYzPAj+5bWdaTdh6q0Gk5lbgnLj0X6FdbVSXeginx6OJM152QiuI39j3IaOiOOl Fqmn2VqKbI7AdkKOobPOpIwfbyV9XrT7RG8bz4HJMcx5OJGqq/U18vJdCemFDYHDjAI4 nWQDvv4qy8DQDWwOVcipuv4fsMiXFxi7GOFEmDbpFywajyXo2HjdF1XF/L8UiK1OPLwF RSPA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1767899519; x=1768504319; 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=flRjOsYoKowUDzthUPWyEPQUEDJA57kw3v24WbZ/UzggK3NhJD3M1etXTSjcjXSDQw G2y2zCv7G8uQp71ER3yMu35fAl2t2RNj2tksxOeaw+XZGmusWdHprr/PXQmHtoSNU2HV Q+izVRxqpQ+ABY2rL9fd07TMPFEJz3pNB/8kVfkPU5X/VdIoXll5nHvYIw7TpC1nhFFj 55rOZq/GAdk6LrZ60sx2y+dIVjPOmbgJeFRp9xkSybjNMIXTOvo/ZgGOeYRYgVJidquL phspgOFmJwvfzfdSzj1x9D24wO/q3ah+U1qIpca28wRneKZOHHzNMHT7hPWEiV8PVaZV qrKg== X-Forwarded-Encrypted: i=1; AJvYcCVCvY09yElyDEPvk8QjfKzajgrechgcFI+QG8zcrAYvgVLvbMRxbkW6bvbBeOYMzorLwSpRuDFIg+9/gPo=@vger.kernel.org X-Gm-Message-State: AOJu0YyrSaT9MuoaLmJaM+sN4UouJOghkdDpPE/Q+HZNml9IkmIWsW7N w0BTiKsxPZbCHl58ccQ/czdfy81ae1nnx3qx2GMUWuuqlfUj8QDG/Dp1LcaA+6CEnHgRmlC4KhQ LneTfS/BV4A== X-Google-Smtp-Source: AGHT+IE0YYVq29C6WQ6XFAWFEiR28SaNnN+3y7gJb4bYD9PO6loo2xXE8EyJOZ5RP0E0T6/QEkZ+ciLweTId X-Received: from dycrr1.prod.google.com ([2002:a05:693c:2c81:b0:2a2:47b6:b541]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a05:7300:b90d:b0:2b0:4965:8829 with SMTP id 5a478bee46e88-2b17d325943mr4556597eec.34.1767899518910; Thu, 08 Jan 2026 11:11:58 -0800 (PST) Date: Thu, 8 Jan 2026 11:10:47 -0800 In-Reply-To: <20260108191105.695131-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: <20260108191105.695131-1-irogers@google.com> X-Mailer: git-send-email 2.52.0.457.g6b5491de43-goog Message-ID: <20260108191105.695131-18-irogers@google.com> Subject: [PATCH v10 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 , Samantha Alt , 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 Sun Feb 8 01:31:17 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 A190033033A for ; Thu, 8 Jan 2026 19:12:01 +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=1767899523; cv=none; b=CmOsHVt+M6U6zwJBloBB9JNi/sZtjzHvuT6kzDk/o/AGYdQMKFP9Ickzb+ToN8oDSfVpWb+iute3/DSZkuUEDFrvjVIOPHrbkhYMIJUZd/uu5uY1tgLuIS6GmTvzbR3uebrLgnOH3OnFmn9WuRuZoz2ExBRl9sxmgb4c3SJZtqc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767899523; c=relaxed/simple; bh=SqSW1HSI4Y1aSQ8k/4kIp/osnr+X4b4UKAj2lYUJFSY=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=RmWCFd6RFtEnlnFJG/8FhcyeOvx9iiIpN+/Zg2eX5uoYHoP3BUWLVHlbIDyAy33IVpUrrYBDKbljNSbLrW7R20HAHT5IfyhlFO8UkqLi5kZbtLOmJGj0d0zyaqOWsie9hKFw6UW0hBbhpwkdjuHO9GjeIyaeQaXQRoBBV9f6JRM= 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=FAuI/e6m; 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="FAuI/e6m" Received: by mail-dl1-f73.google.com with SMTP id a92af1059eb24-119e80a89b1so10527061c88.0 for ; Thu, 08 Jan 2026 11:12:01 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1767899521; x=1768504321; 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=FAuI/e6m5iKsc88kBgMEGxmUq8fNHFnHD1rG1KO+LOPyg/LdcKJmwNmdgsjot8TrRD 8G4n32wf61NnkrwG8B/bRtNTzQCc/uDgtTBKE7+4VVZNc9Qqc2pHahA0ibBsoW3KZXT4 8LAHBEJS56v76WKAqjMtBfCympHe62M8XytwBUnUWC26UL86+o0T4mJ4VtJ2HN5Ogq2N RzfqZsy2/WI6Gj9zW9XOaHfOb67Gw4TdV6fV2y4BR2t2uKDHvU8o8jnpODLOmTcuzDOl n4QGXy/dQOubICQqvrKQGHEgDNkOWY0UJ3tAszd8jcQvIGNBjZgBg4GCcJYIjhCswM// RH9g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1767899521; x=1768504321; 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=mInb/tSwrbdZD4bbeQzr8BJF6u9zOBRwHDeQbKIA7QqJRZjppoERyqKVQZ7gjLmS7O a2r9r91K+uFYaNOjGZvvUaLFvNIGSM3VDakNN6Q9JEkYn0Xj3i2VND4if7P3xAQg0VR2 HwUGtlSKDrZFYbpEhd8g9g7lrZWuBpqSVtgvIiMAx2L12Buh+1aHlQ4sf/5961cD6yl+ YYVEDs7Rub37r6uOz42xn9uK7odYM3O9PPRckpqiwfFudh1s0BPN3MhhU0Uo8O4Mj0sy sCWV1AQd2z1B23CclathmJxdtAICOLQxyIxaF+0mq4JwFW8wUZmKj9SiId7PJzmC61qz b+GA== X-Forwarded-Encrypted: i=1; AJvYcCXII9FEBPgZuZcE6tJw+usS//rLyoH3kgeCh0ZMWsDcpXuGuSs5u1v6HVb8+fuO1g3gDwb4DKWh8E1bEkw=@vger.kernel.org X-Gm-Message-State: AOJu0YyQ3pVY5Q71EsEHYODrK4UuXHyG6FaPmJ+hbfvjS8leninabzIE twgDeV4UF4b7Iy33tlsm4ZjdglE+iQYKLdsgnkcXlBseMIHDMbN4pmhKths1gzyEEC3T/UcPTPf pkXSRvLzOqA== X-Google-Smtp-Source: AGHT+IFcOWE2quG2Fo1o19pSXXZ4n2dWrBi8Ysraf6hMlSO44GNOg37dSaIL9lVbr0QQMpPmqfKjex5YebID X-Received: from dlbdt12.prod.google.com ([2002:a05:7022:258c:b0:11b:2984:3606]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a05:7022:31e:b0:11d:fc72:e17f with SMTP id a92af1059eb24-121f8ae75f4mr6734306c88.18.1767899520602; Thu, 08 Jan 2026 11:12:00 -0800 (PST) Date: Thu, 8 Jan 2026 11:10:48 -0800 In-Reply-To: <20260108191105.695131-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: <20260108191105.695131-1-irogers@google.com> X-Mailer: git-send-email 2.52.0.457.g6b5491de43-goog Message-ID: <20260108191105.695131-19-irogers@google.com> Subject: [PATCH v10 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 , Samantha Alt , 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 Sun Feb 8 01:31:17 2026 Received: from mail-pf1-f202.google.com (mail-pf1-f202.google.com [209.85.210.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 378CF328B5C for ; Thu, 8 Jan 2026 19:12:03 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.202 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767899525; cv=none; b=cE5LL9ECSVvMBmbWve/jqgj1FJA7YZq2pKzk0GAlM3GWMOYQnq8nWlvC4P6AVDTX4T0MG547Qjkr/MODqGQaSVcd/d5JF4Cd1U48NZAn+F6HvyGA4ILzHmyEM/92LTH9MPsTkAh4dK/XRk0K2gkB2ljYExc5DUVXwxUD6IH9qDk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767899525; c=relaxed/simple; bh=CtVMYcUIf02+ZMTzUrQLC0XZE4+iMH9mNrvHBr7BiZ8=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=oyp/RyMDvT8sJSJC03bXzr1JN42AAm1Fe8DvKM+NTseTTvcbHz7BMneMqdKh6Pk/AhiJYZhUJsrYGewU+FDp0ZMk/8U0XbQKqJ+Ata5/zg+mbdu3Rc/ngc+tq7fziG2JJVJailv7LlYtYp1wT/UiMe+nHK3TK+cy2QvSd7aej5Q= 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=gEewTSJ4; arc=none smtp.client-ip=209.85.210.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="gEewTSJ4" Received: by mail-pf1-f202.google.com with SMTP id d2e1a72fcca58-7b8a12f0cb4so3503435b3a.3 for ; Thu, 08 Jan 2026 11:12:02 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1767899522; x=1768504322; 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=gEewTSJ489OABQ4Bh6HhdLIuI+yG4DgbThfGbUJPisIOtx6YNhQtGfosT9vXnXQO+q iBTRe/3/YyEBHiFBwh9Qw0PTV6tSVxtua/fZbZKhDUVc/cFRaTbv3RWh60pUdtxnrMFe CelrrcCbzTyl7vnDObuRB8+7UgRnvhbm5q9TSu7e7qrvqF7AwzYcuqUehaUux19Kznjy X5aN8z5RVWYStAiLwK4fYnCBrTFIjtKeoiS6kL4Q1EFj33y9VnmA8EEX460/mXs9lSaM 7xSwylf9Dk8w1xUnW2C9Ny+ausBeVKA68/JfKcVRl0ApWq9TUoVd/xWD+KSG77gjy2XR w0EQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1767899522; x=1768504322; 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=MtvBGwoCkeU4t8Pfop6Xvkfg7YMWqqsrYGwvkW0fMl2KFyQBKN9/fpbI+d86jAO06E yyLuETdUKtHb1TZ1dmIJmM9w1q+XtevPYO6x4DtbZtx8n++LsiUMJOjWaifHC51+hA+8 gGGyHXTYFNOkBIU2IKTPjlIh/ub1urbye8cA2QVXwvhyAc5B1Lq07L70GbdLAyYwbro0 ifK8Tl1RvVKpQ+U6LCxRvcZfW/gJDBgq8zSwZyRDa8DhkPv5e6WHsXkTL6nFq6zLPBtp 2lO4YSQOT1p0XLAJLvG4BCGdBiGZe30yZdUifjGnNpbuzrugeyF2yvdXHrXyiE4YEZiK w+hA== X-Forwarded-Encrypted: i=1; AJvYcCWLP7LJ1mlNQGjfx2pG3eeg98dqQO+LbE3nDi7XFHKUQQf1PuH+gBeehIbDcS4ExZb4aTVi53UV9zoBbiI=@vger.kernel.org X-Gm-Message-State: AOJu0Yxgrce+flZtvTsLALqabEjjaHr4jbRBOH7zNVKX8hkeMLLeDHJa 4xmYW8SITwRrzT4vREKdGadlHFXc6ey55oz4t9ydKJeM6VS3sjVoaY/ElpDN1d35pV2B/JwFenc sUf0Hrg+pmg== X-Google-Smtp-Source: AGHT+IFTc+BgQ0D4hs3g+bbfj9CZmqDjMMQ8iQXxj21BJt3Nqjm9xkl90KmEADwSGpvwlIkkVl3K0mPY9QXn X-Received: from pfbhx24.prod.google.com ([2002:a05:6a00:8998:b0:7dd:8bba:63ab]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a00:4ac2:b0:7e8:43f5:bd40 with SMTP id d2e1a72fcca58-81b7f6e70fdmr5793025b3a.44.1767899522297; Thu, 08 Jan 2026 11:12:02 -0800 (PST) Date: Thu, 8 Jan 2026 11:10:49 -0800 In-Reply-To: <20260108191105.695131-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: <20260108191105.695131-1-irogers@google.com> X-Mailer: git-send-email 2.52.0.457.g6b5491de43-goog Message-ID: <20260108191105.695131-20-irogers@google.com> Subject: [PATCH v10 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 , Samantha Alt , 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 Sun Feb 8 01:31:17 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 2DF5C330D32 for ; Thu, 8 Jan 2026 19:12: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=1767899526; cv=none; b=WqoeyLZG3f4A8wqdM+hWxWa7inQtgkv3aoZVosUkli0wxosG1Pzbsh31iTn6nw8o2xhGogkN/EWw4gxbg/yXad5+LaovNvPA1jHsh2B7gUSdemuUnoG52Fw1R777u39GGdGR05+Dpdpolk5gdSUH3DpqY0WMWFPbP/ELoNucAwY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767899526; c=relaxed/simple; bh=G/uAvahxqJcRd5BleQ08IDyOIhEFgPbCXkArIUPFs8I=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=jqaQJXrnopsmDH0n4TG70WthZGIBWTsqhVOdSneeKd4lttl7XNyd/qSm821xEBhuQodmwl6g0u0PwiQZr+BL+J/ZF9gWTr6coxmWAkLjV80hTEuiOh4c7tSjaIrBUvkmO9epPyyqqz89TpzLqj4qx0z3CtdAZJ7XU+ITegtJi7U= 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=c1feFSti; 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="c1feFSti" Received: by mail-dy1-f201.google.com with SMTP id 5a478bee46e88-2b050acf07dso9812349eec.0 for ; Thu, 08 Jan 2026 11:12:05 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1767899524; x=1768504324; 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=c1feFStiDRNcHLY07j2RG9iYkhWuR3TH7DuN/k2DU26skYKdGeDJLHf0LmmN+6NLZ4 jyvkNh+DU7DEdE2GaTAE/n4jsEE/pVJlDl2jRB6tzL/gZop8j+eA4lVSt6lO6hTA9FJt 5SaqSlFe/UMclHVS603pzo5CY9MLtX2rx27vU18dDtumCCC5tQ8QeccwLvGG0WjFo4ma DiIsNdKtxisrCI8D26tyE9x82aHcRsxDOIsl4prm0utB0VMEnPXxmfx+CUiqWNkcTHfb 4Ynr32Z45gBfOYQp0zaQD14jWMdHJ0as5bNmBvMWreSOjvpAU7Tn8KCad5zXmZAeM8+x YMCQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1767899524; x=1768504324; 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=B0DGCa6SO+Vv4fz5J8hqRKK/Rhv6sV8yE2b1z58XhtFU8TqsiKZgW0WUZW+e7+jL1t Lo6FOlBRwXr6l8A9+Wje/XtTDsGzEFdC3BSqf3Q+exTJUWNGAbXBd5QE3DJagygLwLvs vddI0k9U+WjqZ98CbaChDvqSqFjfm1EZAIq9Vq5lYP+PQhSEURXqdT1QxsR9JPTPaZ30 W178et6//AZWL3ryG1cep7LoUELpNOcRdna75CFhqy73/MesD7ZZwQgpFnqb8DKXrKTW M552IdxUvxq/9+A2uwCj2sbNpFww7lIqv3+9FrM1ADXUKhtXUI6rB3BPtELHEuky5oS7 W1JQ== X-Forwarded-Encrypted: i=1; AJvYcCXihQTtXUPRHWUr1u+YkYpjoy3r9Iv0k4BLbRfMnYeCVBHnxHL2sJJPhgc2Ojy8us7SVa08DUyBo6c/7Vc=@vger.kernel.org X-Gm-Message-State: AOJu0Yx+eUQTWPqXv09I4Qlorh86vxD0Zb9QFlu/uUIvoK6nLHTTbpDS +JNQR+Rzx93RW9yKHgpagGmk/oJjEwULa7alxhrd2nxAVyTH0jfShdYuje7oW102QCfJ2gDB13Q BofKAoF7hcA== X-Google-Smtp-Source: AGHT+IGomg2BUUO7ZchHKJFVKs9B9ALyziFsaz4zSsSc7du5ZfNpdlJkL+TAHifGZjktDI9GF7xqdUI6IPbg X-Received: from dlxx12.prod.google.com ([2002:a05:7022:408c:b0:119:49ca:6ba4]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a05:7022:609a:b0:119:e56b:958a with SMTP id a92af1059eb24-121f8ae5f51mr5270520c88.15.1767899524232; Thu, 08 Jan 2026 11:12:04 -0800 (PST) Date: Thu, 8 Jan 2026 11:10:50 -0800 In-Reply-To: <20260108191105.695131-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: <20260108191105.695131-1-irogers@google.com> X-Mailer: git-send-email 2.52.0.457.g6b5491de43-goog Message-ID: <20260108191105.695131-21-irogers@google.com> Subject: [PATCH v10 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 , Samantha Alt , 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 Sun Feb 8 01:31:17 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 EFD0333122E for ; Thu, 8 Jan 2026 19:12:06 +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=1767899529; cv=none; b=sawuW4bay08I+XKls5c5eHyWJBkaNkJZzKWEiY92O7sJTpKgx8ntwBsjKQnZgmxdZCKmsXIRbzucJ68OxZemt32erDnCNyVj/Wh/kymvnrdKiikypnmZufQA7snEJIkL6miylLKALu+FaLWs+9hxQNsmQrwdGgLzNMdQeivxfZ4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767899529; c=relaxed/simple; bh=qrxmlP6PqMfaXzM0qAusjhd39JJ/O+hNC8cojlyi1NY=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=MIwwoBkV5tveAoQ6VTMyrGGpWYTJVUeINqryOMKkZYERn0ct4rg/u8L5qd470sStU4KCSVoA+dZqC6Q4orMjJD6P/LEG36lfMn7toLs9pfxgQ7P2RQT9W3Wt651HGP32PWNmpBwplou/5uNG5/r6QizOdkvRdUIwMRnpjblRyTI= 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=Mq9v3IBX; 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="Mq9v3IBX" Received: by mail-dl1-f74.google.com with SMTP id a92af1059eb24-12175e560b3so4290763c88.0 for ; Thu, 08 Jan 2026 11:12:06 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1767899526; x=1768504326; 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=Mq9v3IBXzh63cTybTAb89OQgyMUf2MsXlQAdNExuDqQP3rUTADBKaa6go5GAg5OuiH XjbFBet/1eNrav6NauxOGk2fREhtIfXoyRhxIFPrUPWNAFTSBVsPw1WkX2qYihQBQcWZ a1t/W4nQJn/zIldYriNUYH5TBQV1YytVASTC5O+fyE7yNrX1vSJ5QKwg4H+t11DpsoPZ N71R7owQ/i48mIyFNElee4Aurcq9ERlcdOvMTaYUTS7Vd9YzAb7ukqLBp02XZ8Ey9e8/ j6C6OqzrV+dPcNOZFFCPWgTHP2IN8DwPdtj3XixHtjTCQI8N+Jkd/+azt0xJM7HYuBWi FYhw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1767899526; x=1768504326; 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=KPsEmVQTAI6WoNBGqOqVoGd39c1G3oM0oeWQkXgEyuk+FSOnQ2IpozOhBxVW8yergT i/MMJ3LhfOHMS551uhXXBipu1Wl7bzyJnnJ+P/xmkhXYXBK6IXFhmJ7n3fcMSYQ1owAL C71+VOrjzL6Ifpo9MDKQ2H3Ipgc+I3QMVF5Gpowa7j3IiOl3hDocySXtSg89MOrWkN54 5vpEG6gX9BL6qkUzRxFE/yCgQYfdOIfze/Oh/0Qik6ivzLUrujuwtgOHdnQf0t5yK94/ DAXQ1Z4ApBBfanaKdRNr3lyBuARYD5gZ3HSdV4+fRcguluxUfujuJymP+ZI/1zcn+/kU Eh1g== X-Forwarded-Encrypted: i=1; AJvYcCU9H8ugYbFKRQiqF1ffWszB6HO/cO2LvX1fV5zFp27kTFMJ9oBVRiFX/CWU8gew/kCXcmAb8If/4/Xpvn8=@vger.kernel.org X-Gm-Message-State: AOJu0YyKdiNcVlByAtXI+EZioCAtZfAWxGW5ir/4EUDDkUSSBWt6jDcZ SUmxRZ3vA/Onb+exjX28cKa0w7P8t07tdaYdk6DZDLLzJ5sUxTQaoBB9owXSLXX/ZbPfJcBzz4d ydlLraRH2kw== X-Google-Smtp-Source: AGHT+IFjoRpRpb6Y7OrFBJMNVp8eXDx3tirOv+6tDbW3Id4cKfnXXVnmhVVyjOBT+bH1IAjhuXg7Od4q30aK X-Received: from dlxx12.prod.google.com ([2002:a05:7022:408c:b0:119:49ca:6ba4]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a05:7022:6baa:b0:11a:2ec8:de1c with SMTP id a92af1059eb24-121f8b65af5mr7030357c88.36.1767899525933; Thu, 08 Jan 2026 11:12:05 -0800 (PST) Date: Thu, 8 Jan 2026 11:10:51 -0800 In-Reply-To: <20260108191105.695131-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: <20260108191105.695131-1-irogers@google.com> X-Mailer: git-send-email 2.52.0.457.g6b5491de43-goog Message-ID: <20260108191105.695131-22-irogers@google.com> Subject: [PATCH v10 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 , Samantha Alt , 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 Sun Feb 8 01:31:17 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 C2E42331A76 for ; Thu, 8 Jan 2026 19:12:08 +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=1767899530; cv=none; b=G7ceGFtVNOOioXhZBYkyDKcLkuK8tDuLTyZMUFfr/Ar1y9Xmj69LN5l+k20znW4L6LZlDyNYetVcPdIU05TpCx27ujhFCN1Ofzp31I3bL0MWHQQ/5sIQcgu3BQOxSEVL8ngevtkcS4Y/IHpYH87wN9oGknSx2L86pYnPwudBoQQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767899530; c=relaxed/simple; bh=jxPbqZjiKeqXjVKXPNpmd0p+gzDjnPXntJAsQ5FCjdo=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=JksGXNvtlTtpDfwvcKq9nm8dlk2x9Grj8HZmuXkKQx8oebC/rj3F1mEGrcaCGQ9ax4GMw0xG9zllQcSAAH51wxP0sCR3VWb4nWLfuO20R9YLSy6iLsMThwdRbtviiTftdyXBY8V4iIsgVBHPl7BP8+sXTY9/glIyTJW8oYkxz5o= 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=EUyGp8t7; 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="EUyGp8t7" Received: by mail-dy1-f201.google.com with SMTP id 5a478bee46e88-2b04f8c5e84so3136386eec.1 for ; Thu, 08 Jan 2026 11:12:08 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1767899528; x=1768504328; 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=EUyGp8t7XsBujsANSbVjJq90Wx77jmr+5SUre3IjLX7JOScsb3JEaSy3dWEltIu+pr 61vjL8Q+AtlaO6rFMIyKeNzgrc2OL1iiRxymNo8kyolCPmKAuH7gQ29x2h4uifK1Mia+ 3ipR6Y5muryhXlClJsTu6A6a31RDd+o9h0fiLUYzHOcuMJDqRQcOvBzSGcVbzNlAY8Gy V1m9bfdntMA3i2ziOW0+i8pr5Zp58N6O2n2bOL8POhX1HrQeus9Kt4PWC57iW2FrH1JW vnMTi2X6AOWBxVUatKP0//+JjV4yA2DllH5I3pj6pxcJcsP4gRc3UdAFGwjLyVpLqxJL tC3w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1767899528; x=1768504328; 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=ZaUVydjfgM3+BeDS5Bk9kAhaEgN5F05Ul8XXl3oOquSvYVAxIb4oMCktAq1Rs8w7kF 4xoCfXxulDlYeN3rkgwtMSB3jxBMJQP8V5TLyzD0Dns55sdj5qx/eYIkeO4qBaVGY4+R w6pgQyE0WCi/ED0a/DB3ROG8HB/XGCaYX99edMAsWRrfIgtyQAR3tWrDcuM0f4XW6cso 6CuebA4iirBP8Q/sAyWmfTn/jfPcaaRE8SxAxapeeeDy5I4o/yXhMKgo038/KBnvl46w JtV+IKEOw0ORAL7ctTZidLpcvv36E2YV0xlm2nfYvCdXQY/4ROo4k5dBOXmr7jBC9YN6 JgQw== X-Forwarded-Encrypted: i=1; AJvYcCWocZbspLuR0ZKSlNN2jn0PRJoOGLtqgqLS406LyC/3NX9I2gFAS9BJqaLEUMDlwNGYDfrci0z80/63s6g=@vger.kernel.org X-Gm-Message-State: AOJu0Yx8WGpc4zZ8GmBO7LLTTrDffLXKUUFzz7fcHmGFmBgu/jrHJtN3 0lP27CRDoconkQQ6/yp+xkBPRPr+t7bGjlkIagJiCqSxILhSqb+VphZL9czyrk6LqrMIeuBi7ZP 3Vu6z41KWSg== X-Google-Smtp-Source: AGHT+IHBRe+I469gsI8wG2MCYndkl11DNmiNwCcvYdIv+OZiEHSifKbRNNtDi8/xdu49fd+M+B13jfcsXSYz X-Received: from dykj3.prod.google.com ([2002:a05:7300:7b83:b0:2b0:4cb3:1106]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a05:7301:dd98:b0:2ae:4ffc:d84e with SMTP id 5a478bee46e88-2b17d31c886mr3664757eec.28.1767899527895; Thu, 08 Jan 2026 11:12:07 -0800 (PST) Date: Thu, 8 Jan 2026 11:10:52 -0800 In-Reply-To: <20260108191105.695131-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: <20260108191105.695131-1-irogers@google.com> X-Mailer: git-send-email 2.52.0.457.g6b5491de43-goog Message-ID: <20260108191105.695131-23-irogers@google.com> Subject: [PATCH v10 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 , Samantha Alt , 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 Sun Feb 8 01:31:17 2026 Received: from mail-pf1-f201.google.com (mail-pf1-f201.google.com [209.85.210.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 73F7F3314DE for ; Thu, 8 Jan 2026 19:12:10 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767899531; cv=none; b=DAoDLPABDl6toOBbce1mfaAbE0z/S7CV5QHqaxfzKxesubmA4j9UGjPsRFgvyBksC6zhWmZDLDag4Bkjq1L38ZGa+kGL1w3JayjtSMWVKw9Hd1cJszFYudQgwNRApSGq/Fh/eoBhmY8EUxpK2HMmvj+oi75V8QI/bT7x4KTCkXM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767899531; c=relaxed/simple; bh=5xiZtz+7A1r9ki67YdNxm6S4vRgkIhkqUDeTkPmh6mI=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=AY6N+1xT6of2adlkq0ggCrAwW/sjfYRbM4nGDMlkuJq3SB1fiu0Wirlh2HqkEHQc6tDWSWGxr2Q2Q2WQGW+m8J5eEwWggGLq0dDrDXggW17we18Z3taYdKZ32H4er1uX478EBgVwwHxR0hWZelzq+wpANwMWYgwD8wYC/fTSQPQ= 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=Nq5GvhMk; arc=none smtp.client-ip=209.85.210.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="Nq5GvhMk" Received: by mail-pf1-f201.google.com with SMTP id d2e1a72fcca58-7c240728e2aso4683383b3a.3 for ; Thu, 08 Jan 2026 11:12:10 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1767899530; x=1768504330; 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=Nq5GvhMk8ozzZ4jnZqpQyW2pxD07rj5ay3xIyRQAxiBoS7M9wukHVjeODcoRQ8YwGX as77ZsKId06qEQffkSbC0mZ690YsMlhvQWx7iMK+Y4W7Al2Kspmb8iFbf4Qy0wtIKn5D xnfrzfSt4qkay8RwurTjsQqVQi2dSGcedOnHnCAQuPkb/aOlLl19Wo4P1cQWthanVLDy rddW/rYBe5ZVmrcOglHsasKaqvIz+IJBctqbaxkSSr/pO4vYAL3lYqLnsRIetjZ95nP2 le0kLEulc80yUKZlqDWzwltwCBgPiri057svQET6Nem5pA6oNNu3F7Bn/yx1MJgoGDvr oNLQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1767899530; x=1768504330; 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=AWA5fZs+JlNHRRp4YVkS8nnFh4PuGwyI1CCAlIQVpPBNa7tYGIAUqSJ5Odp2xxirAv x9oCi0QYsphXHea7AA43nX7/4t2V/vMe6PJ+h229Go9py9IGSob3sH0GrVkUXIUOYXP8 qujC+uT81N/q4drWo8Gm5pUNaSrF6rvMSRul71jSzluZ+fpd/vXR559KhbOaBomEpTSc RFIdEFx9TCKkLHIethKNsUX/ZXCuuWIL4UXs4WH/TCRNTNGfNubKOZrcl8V8qElBtUf/ YEBrgXzaNBlHTWdW814lEh+NtxFUK68A5Eef2fSHfC4gOaxNis5yq97trvHKhjNJl/ut ku6A== X-Forwarded-Encrypted: i=1; AJvYcCWDzXNdf0sjTiUIaLrmcQkAUhirhyDulancFkGRUiejPPs1qDFn3ysXwqNTNDxxj+UNGIygSOmqrIJZntk=@vger.kernel.org X-Gm-Message-State: AOJu0YxIa8X/Eo5tzAA59Rs9iqMYHMwaGDn7frNDmyuiWMcMjxQDrDjU CLwEUnZEf3boE8NgLGFs/0e0TmDq+oxn5m0PLJxkkZuzk19+xPhy4Ze63g9oF2+YD2rEu4IGKMn YGTfj89RVaw== X-Google-Smtp-Source: AGHT+IFozC1Eaou5LUjCJVDzbtJm3tK9WcS6bFE1tUsqEzHWArRFc8pd2b37WtYxG9w77W3k4O4kFciiUPPl X-Received: from pgea7.prod.google.com ([2002:a05:6a02:5387:b0:bac:a20:5eef]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a21:32a7:b0:364:1337:647a with SMTP id adf61e73a8af0-3898f9b97bamr6248506637.38.1767899529821; Thu, 08 Jan 2026 11:12:09 -0800 (PST) Date: Thu, 8 Jan 2026 11:10:53 -0800 In-Reply-To: <20260108191105.695131-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: <20260108191105.695131-1-irogers@google.com> X-Mailer: git-send-email 2.52.0.457.g6b5491de43-goog Message-ID: <20260108191105.695131-24-irogers@google.com> Subject: [PATCH v10 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 , Samantha Alt , 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 Sun Feb 8 01:31:17 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 B687E332EA5 for ; Thu, 8 Jan 2026 19:12:12 +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=1767899534; cv=none; b=NFGqGFIw9pzBFzK3GVTQxXdES8pGohaIYyKbBFTSyj0zX7ByAq3vUJGGZxHxbldSwjkXVuK718Ij+T+U07j5zR22vrPwb7+ECdCvVG9DE8zsS1ysdHYC9LN45+lFdtXwPmWID62QDIf5MLpCOLYYmdSmQ7o+fHXtroNvDWTm158= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767899534; c=relaxed/simple; bh=uBZQbaf2jw+Z+6X/HPLRd2UQ4QNWgpzfDckkTan8FMs=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=TL5PThkh9ovdGrZ/brNE0TYxy7Lxi62r5v3SDOubQf85eA5kK7mh+VsC9075zqrzrSUu86RA6w8sX/IeMcNlF/8QhgxUEtWirK9c+ROy/a2LJPdHDpqb8E4ECdwxmGSZDRLcp+6Fb8PaLVcr0i5WyyC2cCCwQif9dFCLJTfxXLA= 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=wCvENyBW; 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="wCvENyBW" Received: by mail-dy1-f202.google.com with SMTP id 5a478bee46e88-2ac363a9465so2579063eec.0 for ; Thu, 08 Jan 2026 11:12:12 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1767899532; x=1768504332; 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=wCvENyBWGboJG2DyaS/lWJmAY9ZLWbVazcvJvwELfK2WGZSWmdY/y1hUi/kZOLryqD POEnmzwJzsuXmgxPc3dNVUh5AT1KJAda3Ldq+jHQdTgDAgCoLl/OKGq4wM1LM3DBIhwW q9v5p73u8942t0nHO8TkndbI/byoOFmWuf3jjowvw05e+56kE4zS+miYKcXRC0smKb67 xVV4MyYEbG8K2BcXK8hcEkYZMTqJIjVcqS8QmWtCU/99vCmCiBVR80TY2M1BeKqZGihi mFLVTAsBMycDyca5GS9mPZRZjX9ESK+I+i9Ry64A3T2qn/IdOmO1cdStk2rePlDJWlE6 50+A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1767899532; x=1768504332; 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=Vg+nX3dToeE3ONwj3UeaLvfL9dOpW2S8YWOUGqM0ud1+fAdoKAxYOaFDi7QP74SPFb 2qXNNTXe6dB5h57injlOr09plBVbDJj4Mq440XtTkxxNewaZ7GxUeaQ1nFukj89En6+e m4FofIR0ZP/Dn26AdSwwYXmQz6619HqtCil3+Gds0wR8rN+Ou3X3/w2NpZtX0ZMQediw nLjM8OyNhMZ1rZAH5m7d3e+E8XQbI1531V+MJELnoSFvKwIMrxbvAVHrU8FoIoKeOjqz NWUG56/o+SKbbtegABJ23T6ORZnnhWxgzoQZ1A7TgwCcGaeeDgZ5Rn8YazJCLaRzeA2I Ssew== X-Forwarded-Encrypted: i=1; AJvYcCXNkMSp8d2djE3mE/O3LnUa70/1NHxIpozZyT9vRfGvLUiLnyM4J0g73/teGHOJeTwINM2yhF8dQQY6S5k=@vger.kernel.org X-Gm-Message-State: AOJu0YwzKslD3eGk6XNV6an5+HVpYA8CyvkJLm64DMmegpRytsURki4t CsIBXwaQSStJKNjdsP1T2Mp9LceOXxEIMKy7p2cahjWymXg5J+3oGtliJCNkJ/lXUIq1RlU88/t 1MwOvYpe62g== X-Google-Smtp-Source: AGHT+IFbjP+UWSBe29MHc+N1MLgZsL8OyAZWmVkuOZMU5joxNuR39cAh4GxZ/t7opuGsNYq/pZOja6CvhUrc X-Received: from dybpm2.prod.google.com ([2002:a05:7301:4342:b0:2ae:34d1:e425]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a05:7301:fc07:b0:2ae:5af4:7d65 with SMTP id 5a478bee46e88-2b17d3211d7mr4597327eec.31.1767899531834; Thu, 08 Jan 2026 11:12:11 -0800 (PST) Date: Thu, 8 Jan 2026 11:10:54 -0800 In-Reply-To: <20260108191105.695131-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: <20260108191105.695131-1-irogers@google.com> X-Mailer: git-send-email 2.52.0.457.g6b5491de43-goog Message-ID: <20260108191105.695131-25-irogers@google.com> Subject: [PATCH v10 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 , Samantha Alt , 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 Sun Feb 8 01:31:17 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 83666333442 for ; Thu, 8 Jan 2026 19:12:14 +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=1767899535; cv=none; b=b+W1nD4r4tTGA+qWelul1aZ9Vc87lbnT1VurxlR7WLLt2IQqs6aZF6PuV2TfxKCeej34LSiaP9Mikq+z9WkH4buoLZUr+MsUbhuA5FzDHOhKRqhMS3kFrBGRnpKWLdqYP0sbCCbiZlkYThSszTHuxSWj4hL1KB752UAB2784/lI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767899535; c=relaxed/simple; bh=BuZQB1JrWPbol810BNiSgRTMMbqOOuEypIktx0AEIeE=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=LmaXNn7bSr39RzGRgjKZi1KXfwIkaYIBL6uAeA7VWaDRt69cN4Sco9SC+4YB3o2ovRVbEEjPtl+JBfse+V156b1F/Pr1+zYRXuRhfILxvmxhOmcNc18EaHqw0CA31EIQD0pg+AsNGsOrMONGJix4ER9YX2SkE9a2xSyFAoEgCwI= 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=qSyFBcCX; 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="qSyFBcCX" Received: by mail-dl1-f74.google.com with SMTP id a92af1059eb24-121adbf76c3so4041307c88.1 for ; Thu, 08 Jan 2026 11:12:14 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1767899533; x=1768504333; 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=qSyFBcCXN5bt9sbSZx9WHCiyof8t+2E6RzlYCkzFdBrIGIi0D/8/C1cqmn0MKLVHqX Ixpx7ufZN4ADxsH1/v5Hme2Zuo/4Rv1nCtXWYMbTu5HpN3Fd2qfnVUpLZ1hDwv5Yzhmq fVKsP150Psa0g6JxFW9BwUU/URLyy3wBLx8dcUesQDV2RiVpBGYMk5U/nAYT0EVJFP64 K7L2otnO8rYKzdScAClV90BYjH9js64O+dcSxDp69lbM0K6AZy9DXS0V/+/ySbTLS6FQ Q+Nng4NsnOVj/fnC6R6gI7HkMwR5+ZPRpASwbww//5e8bG8d7HlNB7J/rosPO9oYdZym Pp6g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1767899533; x=1768504333; 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=niF0TaIcSd6J4lEoUYqxJ86xbdXCEVYoUCcqs7RZGkIe/gcVAus2oXzbgxdLoSdOX+ H+CZquPChjH9wS4SWi+7vYZHxmxjlWtAVh2i5ne7Ot0uJP6brJdcygCdX/fKKom4zHir FtODcnUkp00nXegjdaqz2fl9SV6/ixjZFaZ8ygUkBQMAt2ZiGeNVnxS53XsnM5PIg6WK ZNR9Q1d2ccoic4HtjUVTLQfcBR/phrDsmP6szJRdWiGMw+Ft2hf1x9mNnRvr7YsLPHwF uqx8I2UjJCds4D+RnPVmcUJKGmTFz6ERJp9dQw5HBE6O396O/twbXOYE6TlKZeU0nPmd c6dQ== X-Forwarded-Encrypted: i=1; AJvYcCXzJkjog3zVID9gaadhRaHspl0mqylnonUUW6mHdr5SCUVJ7JwBOflOzDpJJQMa5YDSs1vdUzs9qFfM+mw=@vger.kernel.org X-Gm-Message-State: AOJu0YzQEiunWbJW0UxjUUtQlg+0AAqKjBkYJfmNI/63IMCelU5n4P/H CuwHA8jxpAInk12dfmyIkg8HP2YqS9K3IQc+5ymCpoX6q68s5K3Xu3WBM+SUUgY9uLFttDE69Po 3+ejCkz3UXQ== X-Google-Smtp-Source: AGHT+IEkNeaw4l1TXm0xbrE4AQ0rsg1YnY4TSJt+WAoehhtjkqQ5DltCA8HTBoevtZoEo8as+gkI/Wy3ZT4d X-Received: from dlbqy8.prod.google.com ([2002:a05:7022:ef08:b0:11f:3701:ba81]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a05:7022:238b:b0:119:fac9:ce12 with SMTP id a92af1059eb24-121f8b145c6mr5625476c88.13.1767899533472; Thu, 08 Jan 2026 11:12:13 -0800 (PST) Date: Thu, 8 Jan 2026 11:10:55 -0800 In-Reply-To: <20260108191105.695131-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: <20260108191105.695131-1-irogers@google.com> X-Mailer: git-send-email 2.52.0.457.g6b5491de43-goog Message-ID: <20260108191105.695131-26-irogers@google.com> Subject: [PATCH v10 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 , Samantha Alt , 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 Sun Feb 8 01:31:17 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 562C533436A for ; Thu, 8 Jan 2026 19:12:16 +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=1767899537; cv=none; b=nrHFzCHxfQkqM37mMYC0zcZ+CWgRZNNyv6PzIW73fwjejCA9nbyrxEEpKIYHzzsCW5Wny79+cynwizuHPHydaXSg7JtV7CrafhWDcJ/ZuESqmbC5aD1vTRXHqRbFHt+8b16en25SQztq4GBkyxO1dCeQH6+kufD6K88vERyLUxs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767899537; c=relaxed/simple; bh=Ox8xoIEvHlXmb3ZnV7uUMcH4VYIJguTr3dOQXPYocWo=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=LapbkdaissXjPnPasosCJQlHDJDnZ0RyVQM4SzklgmSj/2swTDYr3YoeyR4c97XJXc99DWLEvPAsO4oRt/u5tu+mYjhPfuJE3DUCAppGhro6ap3ljbDGCb05RXL4QwS2qXPQGrTxmOnKwRUAa8NEmDjSO93KJmXfWB0pUJhMMIQ= 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=L41gueMr; 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="L41gueMr" Received: by mail-dl1-f74.google.com with SMTP id a92af1059eb24-121b1cb8377so4583238c88.0 for ; Thu, 08 Jan 2026 11:12:16 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1767899535; x=1768504335; 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=L41gueMrUqGw5FHtgNDc0YMt7JJD+HXrowPrFKkCxM7knKv79QZmhPYZ5NqkBi3Avt iV6iF+IoC46XUsBQVHFoav/D05zcwe8KgsZN3EB8Ehwt3wtLt0pZ3IefV40H/+kapOga YznCmSvPcXiBTg+IGKmtwLKhGHwByIKrDl4caZRtax/VzpcDSXT3Wxp4rEt6LlCK+Vyz ShW2rc3p28/qJ5WxZVf0d2rs4iZJYoq9M46ucfRd4BWXtUCwVbKGm8vNQe4x9IvufKcH ZgOVjN6DOg60AgrlRLk2Zf/99oSpK35nceLYw3Ns776IjMu2WYY0PY11e12YALsHU9kD TB1A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1767899535; x=1768504335; 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=dXyELHMd61GuOVE4mEY86mCounwqzS+9f7FuNa0fITpJJ3+UnHqXhPFnh8YUR6ipxB lw42DpCcGJPgHfb5Yk+h4ldw4KafxehDxuNJHfeP57j0lWtwRNIvi3HG0HKxNuZuAffv kuOekVD6yCBfDT6t2VaOdlGHk9i+d+LY8V9oxcXNogl7mVEzCsspl/9j35fNzGaPQOk7 SHLnDpwVHVfGRD+FyKP9Afc4h4bt/S8zFyvnJMXekwQuhRQBu2zyf0myygw46Cj2kG1U 9rO30kulZwak8/9e9U5ip9P1+8I5QBgtoVZMztEqeagcD3Gnc0+aDgQ8n1iVP29ES8QD V7BA== X-Forwarded-Encrypted: i=1; AJvYcCUbpNHHvkCjqY2+/j3dk4SE/MNuVNhU3hnzETmkkndy5PwQLahVj22Vs/vCGQwFiKc+yM3EB2VEze2uW1w=@vger.kernel.org X-Gm-Message-State: AOJu0YyfPt6IOSODEWyRbkwWIX1eReqT7kUQAVgeHeYHvbis/EeebLJS AFgCDjND1niSiGleOmdmImvk6GJlIUj7nNEtnaWDq4m6X/M+tZ4R/tL/LSZAxcLMVBFYPzwECVs 8Rque6+crFw== X-Google-Smtp-Source: AGHT+IFJQw4mIH9r8PO9nIoVY0oCIzPRdJNCpXuN812RCYs2Bq/ZHIm9n3ktTBtVUfFy3JztEhiargkupqPE X-Received: from dlbdd42.prod.google.com ([2002:a05:7022:aaa:b0:11f:3e3f:a2f]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a05:7022:619d:b0:119:e55a:9be4 with SMTP id a92af1059eb24-121f8a63cf3mr6459120c88.0.1767899535295; Thu, 08 Jan 2026 11:12:15 -0800 (PST) Date: Thu, 8 Jan 2026 11:10:56 -0800 In-Reply-To: <20260108191105.695131-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: <20260108191105.695131-1-irogers@google.com> X-Mailer: git-send-email 2.52.0.457.g6b5491de43-goog Message-ID: <20260108191105.695131-27-irogers@google.com> Subject: [PATCH v10 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 , Samantha Alt , 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 Sun Feb 8 01:31:17 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 01F14334C09 for ; Thu, 8 Jan 2026 19:12: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=1767899539; cv=none; b=s63Mz7P55PxJ5yS7RC44nn0MEG5yOvhLotm4r8MLgZ0LfsyHRyzsD1G4ywZDmfYPm8F2ZKUp+sUZdy9b1a+keQ/sVGRYE5O1Xw2xTrE8MhRco5JVeAFKKLVezR9/d8zCunWnzQtRuNCLNgfEUPSlKxwtd4HMLmObr8xjaj0RdzE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767899539; c=relaxed/simple; bh=2jmqKph2zPBaDCiirJx0Zuul8V+Id9CgYa/L0xXNrec=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=ACIQhiOomnKqANKv06+NE7XgJ5/RIY4VLTlHx/cSmhRaL2ijEEMotyskJloHPOSQddBhLMM6O2Pgmd3KlZYjHF2m2cdoOaK5eKbH81WFsKueCX6+WPFb2b7mEp7T+5vEL/CBJc1tptJyhJhnEQ6yPy/MaPSL9vGMAYxuG4j11K4= 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=qxiBcboY; 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="qxiBcboY" Received: by mail-dl1-f73.google.com with SMTP id a92af1059eb24-12175e560b3so4291031c88.0 for ; Thu, 08 Jan 2026 11:12:17 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1767899537; x=1768504337; 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=qxiBcboYLAPgGGEBBfuJX/1fn7GYAs3cAmn0dakBE+ksVMFUJ17x2v/9CXzerMAGdY CwFE9l6Tm33MoVNpyGMmPWH8s+6WAUVNr7173fPYg9sD9ZxhHZV9Y78LSd1NXQs2XwOP n8d2XfTjFyUTGFROpMd1zM7LhzOLqir7THerFvh1886P95yk/6AxfJq5Xut4oN7JUXvo L5YyOnT6rFWCsEUuUMcaTkJQUvlWz41B5uL0TeZaROn3SwEtbxD4i7KnwjKB8CUL4y9Q OAsH2nEWxzrKHCl1UyGSbDrOgrt1wZdd+CnVDJXlVqG/bhZ/VHTH96IAuUmsb8yKG45y ur7w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1767899537; x=1768504337; 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=cfe1PJ/TFKkYDILmf6UjxJUmDK8lxc++yT6wCxxSAv2LhVN3hJdCF1iJmEa652377v 9X88VrXkiP1NfMFeYezEq+bPKbd3cqag4DSsEIi4VwMD2YNaPdt2YY3964I8y4QX0XbJ MGRGZqu1IN007o/SbZNHpoHZj8XZTkZUgp+VWdJjYWVoqKlyMiyngxN/StAPAPjzc/pQ I18clKGGpd65aNArlezra05/lrskiGwOHGmgSJlDNjn5jDmFCXJDzU2iwEyOWFfYa74e JDgaqdstEW8DBsb4snmPi38GXTsYoevcBJjki+2/6uAZsCOeRFhV5/h4l1Ji18TXwbxd /Lhg== X-Forwarded-Encrypted: i=1; AJvYcCVcRgrLgvy5t7m2bow57B8cLds7G77lYNklR6HSiYNbHF7e+dNfdLm06F3SC+N13KtYIPMoNeNsGtyGBhs=@vger.kernel.org X-Gm-Message-State: AOJu0YzWrZs3K68gF29/prwhpJNUR1eqhdiLoJFp3kFiRUCQqqMGD67u 7Dhv1ISsI/XWQ3ZNak2k5/BlCCCps3t3TzSzVMWZfRnSU9qX0eZ8IgVQ6uVecynyAemRGY4iI1A G0EiB0KyKJw== X-Google-Smtp-Source: AGHT+IEUEByo3KVdc2tneC6+sxxVazCdj8/NYJ1QVKci61S7oIAhPXsrCf5wnLRlrXTGJYvPwim2AsCyOnYE X-Received: from dlbqi1.prod.google.com ([2002:a05:7022:ebc1:b0:11b:8174:bf47]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a05:7022:24a3:b0:119:e56b:91f6 with SMTP id a92af1059eb24-121f8b656c7mr5857099c88.39.1767899536988; Thu, 08 Jan 2026 11:12:16 -0800 (PST) Date: Thu, 8 Jan 2026 11:10:57 -0800 In-Reply-To: <20260108191105.695131-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: <20260108191105.695131-1-irogers@google.com> X-Mailer: git-send-email 2.52.0.457.g6b5491de43-goog Message-ID: <20260108191105.695131-28-irogers@google.com> Subject: [PATCH v10 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 , Samantha Alt , 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 Sun Feb 8 01:31:17 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 C7E5633507E for ; Thu, 8 Jan 2026 19:12:19 +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=1767899541; cv=none; b=tcOio/lm9EF1IQ7XqibS1dCrv1xCbuwJkOnoXJVr4Dkbp3WMZPkibZ6ZTMQhU8eVNqOipMeZG2A+6wqztyx9UfBDrdN0BqHK6G4bPTepvHo0irrhU2Ocr3EJp0Ix3uo4ss51eaMlI07F2Fu2GPP5A5MlRBKfys+qKnLLrn8Ivcs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767899541; c=relaxed/simple; bh=iFgxYI8YkDQdRRykiWwbB91svFRxih0jHTs5Ccf/Mo4=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=b0SgkTuvtTiCK+2YLRco6Z2P5tUqKXNSAAS0QXJaBKeFmmViJYvKTE8sglsctDoUg1fMCozWJA5AdOMg80JOcht34jICyhNcP/Qwqd+S1ZEuVPhvwMY4Oa2Y0X0JCaFQ3BoWgde7KgTV5QJK/OVo70BvjVBBhZ5+OqF1GjTAEao= 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=j2s0/UX/; 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="j2s0/UX/" Received: by mail-dl1-f74.google.com with SMTP id a92af1059eb24-121adbf76c3so4041450c88.1 for ; Thu, 08 Jan 2026 11:12:19 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1767899539; x=1768504339; 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=j2s0/UX/glgZNq127iJ6xRRny/9q394oDyspEAzXd1+tFbxcnpCbUXML/Sglcs1SQc iKH0Jpbc5ojktYStcpiBo/f+acgwKtobkxjDq6jLdNXbBBxPLC/+DMZoDKVmvaV6h24r KfdDuFB6rz426hGMO6Z4ANbReHjeSjdA3URxwDDb1zaZGaWfWxftqve1ZiRcERSlvhzD 7mQHS5CNOhZptzBiX0rOgQBNIFELBt55QUZiZR5PED2OdY+KzDoB8QQ/ovIZTxDT3+eE hKK+BUywqwjdQi1ywVzYpX+xvjPSknWF0ThiIJ6g81LrBKnruBJx0HiS4uWoAaz29UbF ulXA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1767899539; x=1768504339; 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=HT5Q2/3H23XKDoFWakGWLpDozfbkpk77sCffSexdqNgQPGP5D/zWLeyUL/Hf+Wu3rT radv70Tz+NC8yGmMyEGDE9qk+sAFCM4MdHulmvmHbC8Qx8xpxFLjponxzo90pAQdxb+g 71Geye+HzWEmhBPjdN6I9iP9P7l+Qwp9vI4Ng5nUWfwO6P+eaezo99S1JXnJwWHr+LGY K41XZ8pmjeod7Uo268vtKld4QPgYLdydXTCQAWd5F+l0WA8ZfOvbA2BW0HLr01gDvyjW ZIiaDQEqoJ6JTQ+1v/DobmwTSHYWIdAhiGA/0ip3x5xm3gGQH1RYE54SemaCFqdi8Al1 bIAQ== X-Forwarded-Encrypted: i=1; AJvYcCXA/hczeCAslLZRfqUq3XKHaUY4rXaD6peVpMasj12xzVtR2BFYo3YxlTFykQn/Ao8UfqMplEFvvXx+eXM=@vger.kernel.org X-Gm-Message-State: AOJu0YwvYZzjOLVYUjLFRgFxdrNy2PHBvMv2J44WdwKHEi+rTwo9D/GE 0mnQYa2r0joMTj18E2wt13pyddQ3yLo12UsqjRh767lL/8bnjsiuksvzkjyHUA7fi2xtWNHs2oQ xI4e7H4ihDQ== X-Google-Smtp-Source: AGHT+IHssv1lJq+ZRAgChOEAZYIXFLkt1Jz/1FBVXh/Ql/90xsmBTYzTMcMzs2V6vrwMNahyuFzfmMachatY X-Received: from dll38.prod.google.com ([2002:a05:7022:226:b0:119:78ff:fe0f]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a05:7022:6188:b0:119:e569:f620 with SMTP id a92af1059eb24-121f8b7a9d1mr7194267c88.25.1767899538693; Thu, 08 Jan 2026 11:12:18 -0800 (PST) Date: Thu, 8 Jan 2026 11:10:58 -0800 In-Reply-To: <20260108191105.695131-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: <20260108191105.695131-1-irogers@google.com> X-Mailer: git-send-email 2.52.0.457.g6b5491de43-goog Message-ID: <20260108191105.695131-29-irogers@google.com> Subject: [PATCH v10 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 , Samantha Alt , 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 Sun Feb 8 01:31:17 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 E68B533436A for ; Thu, 8 Jan 2026 19:12:21 +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=1767899544; cv=none; b=ZBDUTa76OZfiZP2/IFwTuK0XA3iZoP1FqsxcKCA0j9KI1Ncs8ROj1iaM5qQ6s1+W4Kk946KVnJVNGFSOq33Jy9AviQ479Wwa/2/HT0JM5goS3HnRFiKaD5yb3f0ldHgI+NDYI43Hdt8RlPgs5l5Kajd1OFJWx07IhCHWExlTkAA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767899544; c=relaxed/simple; bh=Sr+0utK0tNOs2nzfxd6UaoFEVfN9d6C1I9sdXtbKpqg=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=cbQ/5btlPlEwjP+8Ya+FTXwf9FAWi4eKbYfYSgJAlnxFqfR4b04RzDOFBrW+cDE7GrP3byRT26y3jt9pGj6e136F4y8oBrbU9sWMhwd51IyXi7GZHE6CKAdDA+kfaeqq+ZDLiEsoaP3EztEA9G1UA/I8fQWXkR4RlAfL3rFTDiY= 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=0/lYTG5o; 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="0/lYTG5o" Received: by mail-dy1-f202.google.com with SMTP id 5a478bee46e88-2ae6ef97ac5so9537232eec.1 for ; Thu, 08 Jan 2026 11:12:21 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1767899541; x=1768504341; 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=0/lYTG5oqa3H5V4jRhmYh4aehuFHMJyg3iRXuZiO783mafOTswnlQTGGTMYrCibdoV yBrkk2Um+5gBxiZtkJ+MchchCN7cTaZJj8Wa8kBCnippb2rnNavEtQvohhWS1n2VeGGs rKNpUCei0OUjEcZDUKTRaklnIU5x3KHLXKNiUucwgdZgwPRny7A46TIb6PbIDSB6RpI5 6dqfK0Vfl480Wt0LnI4q9JoCQcZtf23jE9AGYoVUC+7w337p1ip2tUxQNy99K8vSeS8X D3ZpELI7gsp5m9ZPDRCXcJdyOQU+W0hrZbyAgys8d4xJNpdBDplPRqAMwcMnqtnkPoNF 4PXA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1767899541; x=1768504341; 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=UsCdgDa3ANy0GeSbVsxsvogGmUSxfegkQoIMYq9SyidOgq/3VBPRytwOwzW3e3QZZA P0mWabv8V+ZAOZF39luo0wDj1TatbSZIppNyhHTiE77xB/LY+Ex6qwEqdWPzxwoZv8gE QZtOTn3chkoKETIQwrx95baoPzHobsL6D67S1/b2G402pUGdMsHV2gE0HYdQoi+Jx48Y +yKkKdFdRYs1lycVmGySTEAn8S0MMukjYZgP2zTgpzhNy53zQCFHOBxV3bg8/SwEAGRO /mLZ4ogGfY9eBKadwGqpN26FhFE1vm4RE6g9BT9rZd7sx75oChWygJmXMfzwL4RtSMIn fBaQ== X-Forwarded-Encrypted: i=1; AJvYcCWUn1YwaKlof9/iU02wehPUWPV20Nx8xntCnrnm6s5b+/IXmkalArPV604D/V1XIG5FVwFQ3IV+dFLXPdM=@vger.kernel.org X-Gm-Message-State: AOJu0Yw7d8mbG1NHz1uoQbZHu7uOHSbiznhnti6oxUu6VFeCGm0SVXDI mmukbD2hjRKP9W2FxfxLOWVv3KLS0GinKLMp0ueGAJGcyHnV7bMRUfoFGE67r7yfi6xOBgT1DkM iVbiSVBDp5w== X-Google-Smtp-Source: AGHT+IHADtKBzmaJfGZE2ZC8SLeEnddqoBpOOdUcgbZLPOu11ukMCQntJgnojrBY5MD75XcpS2lbM7IfSVI+ X-Received: from dlbtz3.prod.google.com ([2002:a05:7022:eac3:b0:119:9f33:34a6]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a05:701b:2207:b0:11b:9386:a3c1 with SMTP id a92af1059eb24-121f8b750d4mr4494873c88.44.1767899540778; Thu, 08 Jan 2026 11:12:20 -0800 (PST) Date: Thu, 8 Jan 2026 11:10:59 -0800 In-Reply-To: <20260108191105.695131-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: <20260108191105.695131-1-irogers@google.com> X-Mailer: git-send-email 2.52.0.457.g6b5491de43-goog Message-ID: <20260108191105.695131-30-irogers@google.com> Subject: [PATCH v10 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 , Samantha Alt , 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 Sun Feb 8 01:31:17 2026 Received: from mail-pf1-f201.google.com (mail-pf1-f201.google.com [209.85.210.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 867F6329369 for ; Thu, 8 Jan 2026 19:12:23 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767899547; cv=none; b=bYCGaxPsDhVpgzr5jtS5RmHYf7U0g8jy8V98jPZVp8+hmol/aw21tEQMWKXvhN4kam7b7XXfz1wpJtJkh/PWIh89pCeO/jYCvITs8Bn3zLCg4Gp9melq5CCEOD/HUxVIGjxN9XLpNWjlMZgbpo5OZoM5vaIitxaVSCCAXpZ98ww= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767899547; c=relaxed/simple; bh=0/p47u8XI/jepoD/8n27VWWYDMXq2JoIclYASBN8NcM=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=ar1JHDGn7PTxCi2wrOV5J+ktGbqHMNDT38VtwSUFWu4gLdt+K/M3xpJyEFM+mpWDNkNPPi6bh/EXdZTxYVAoTnIPdZvlt4p139sAJFU0U8tlVCg/ylmPh1cUGiXX9nk95Au1I3wcVbFq0IHTGHXXWw5LKlasqghR1i1yLheBxSc= 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=rcrGPhfJ; arc=none smtp.client-ip=209.85.210.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="rcrGPhfJ" Received: by mail-pf1-f201.google.com with SMTP id d2e1a72fcca58-7b8a12f0cb4so3503590b3a.3 for ; Thu, 08 Jan 2026 11:12:23 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1767899543; x=1768504343; 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=rcrGPhfJNk5kseZLM0pau/Ffv02I8+NsCn4M2H4WiTBrujnL1+ojGjqiirQDAlTLlb 822b3ukRb8jNUuuC/dxEzzSjAiUY6zTfme+SmfeyupCITvHv5wyCi7FvMTcQWDO8b8c/ lc2FuaFcbnIg5uXvgOdZ1WrVSk311QKW5Mqm4u/Vb4ZMdhXSLtS2Dzb8VHjqAalLKTcM OQL5RXvMfgIp2lC8wlEcEoE90bLRddtNwHDGEutsKQa05RTI2wShfmN2WPmVYO5rAMPH /zkjBEDPnodvAjExPDI48C1ol08ylabqV40lPGMRejCuJnQ8d6aDDOSOe7IXWyNuzKnH jipA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1767899543; x=1768504343; 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=kygKurjbOXfI9fz2jmpOeWHBk2sFETxQKr3QcLeUKRnkBcVvQEoq/bvvPe3TfSCUwg SF6HSJrR9cCDjjREB1vKCQ4oBEyY7q0lC9IYQENaT98cyDMm0qDqTOmh0AFxOisRFX+Y HQmtaCPkHEetX+MN9DRpJQMDZ21qlZAcy8r1mAqGsyQ64cxObwYv15XJxngD/32AQ1de urh+XhehcacrBQRB26YXBiuRi+I2XkNZsykkg3kmjLZy2diDzNP9WAzS3DC0BVI8wh3M edySkYeb2g0fYdW+RNM/AfRVOe6vuXzon7tr8w/kXGhrNvt5nBFBL+zALsEh2ovtkB+1 kTfg== X-Forwarded-Encrypted: i=1; AJvYcCX24fbgAjomCAxQN/FqFjbke45pt+UcZr9diAMGpi2uW9XekHV8E7E+ACkFuhRi31XpKyLPEvWhCloSk/c=@vger.kernel.org X-Gm-Message-State: AOJu0YxldoMcND9lBvKkNuMFVR7KrqfA15W7DHvlzaQdemElor1v4uIO tyXWnYl8HztaWPsb2bUu6wMG8B3Zig0oHegzJaUwNEhR3/9tH4Eeblnc4TbXGKAjOIUtP041Zow rY6q3l8bfDg== X-Google-Smtp-Source: AGHT+IFRLVCG00OMl4aUYaYlQrWXSJrN6jHeG/wDPN6BSUfe309G2jTBMOTWjoyJ5g1BW6F9QWsfjo74w4mH X-Received: from pfbde15.prod.google.com ([2002:a05:6a00:468f:b0:81c:668c:d977]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a00:440a:b0:7a2:7bdd:cbe8 with SMTP id d2e1a72fcca58-81b7de55545mr5958156b3a.18.1767899542556; Thu, 08 Jan 2026 11:12:22 -0800 (PST) Date: Thu, 8 Jan 2026 11:11:00 -0800 In-Reply-To: <20260108191105.695131-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: <20260108191105.695131-1-irogers@google.com> X-Mailer: git-send-email 2.52.0.457.g6b5491de43-goog Message-ID: <20260108191105.695131-31-irogers@google.com> Subject: [PATCH v10 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 , Samantha Alt , 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 Sun Feb 8 01:31:17 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 60AD6336ECD for ; Thu, 8 Jan 2026 19:12:25 +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=1767899547; cv=none; b=ZMVXc5khBezWtzjJMw0kR6z+Mj0vpFhoUz0G1kWVCMI5D1KBwCdkJpgm6UMvR+PAnrGhkeGAkxGAURHHEuxGcta6MyW+TU5H4BYIHN6ws8zeHJjHANiZDPWJ2oYfQ/KIwLG0EH6YoosSHlq7BrRAwz6NiXG9LlUo5pfiZwGmzAU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767899547; 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=YTL/No4BOofkh7VxMkKSAHcHJ4CF/IgcvbCGMkMDZyOFgsFvRvvsX1muK9yK/fR8ac6jl6UQKt3/a6MieGfjP/5EUwYEbM+Xg9fPccRQXg01B6CDvl5Ol23Lh0FIzYIe3HgbcMWzlD6ep/BMHXCY/Zy2PWSJUoLMqzfB7/bG4n0= 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=tastYZPf; 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="tastYZPf" Received: by mail-dy1-f202.google.com with SMTP id 5a478bee46e88-2ac3019faadso215459eec.1 for ; Thu, 08 Jan 2026 11:12:25 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1767899544; x=1768504344; 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=tastYZPfY054mJst4BWTL0ulzI4lN/7ax8hzDPJbtBv6QO9Y+CCUiVq8mJslZ8we7g /5GDHu7lN/IDWzCHuT95xNyqD+843ljZDOyncR8KZvOVHAxFuYEJLRFv7ZNIZWH7Vj// BaDOn0Poe/po3QyJA4SYsMbw1Gwzh8+HU6rm6/bu1MiRa1Au5bS/T1eiKOv+8ixDQytB ZaoAoCnvtNt2KVR9iqsGT5hm1sNzNR5JRn92+LJiQYX5vyM/ns8lbU0iZqLor2BjYWnJ 9fK9MLx69bl/JQUbrESTYxmfDq/VJ8GiLfvGcdGcHZ6xS+ymhCXrL3bD2eLqkIThwKXd Efyg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1767899544; x=1768504344; 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=AOTTBn2spR/7TVS3epHDOnBgixk6abCb4IVV+8+EhDiXDCCgN52sGugZ24gnggRBSl UhlVtAxTwRk8DW0jPdYDy0OwdXCQFkNK6+/Yy6gTEpqAzypMUi9tCDUsI4QzZeQ/pN4L uglFn08KHd9Td9Ftm9sjF7V4J90XOtRlzZxaKkawYfx2Ky9T1Ej5FNAW5e6+YEAq6uRK 91zJm57tE0s/w1sqWSbrBR0glGVhcJNuWPa4qtLFXXDksi6bhxhqsJHXhaPkjAvh+ReD o+GqLvOJUU3aPi6CfF7nxoMDqZFyCPUiJK3TKuuN/DvLeZnfZQEF0MoWUbvAAIw9vWG5 SBdg== X-Forwarded-Encrypted: i=1; AJvYcCUiuQCgNJO5R4bwhJ32ktwg8PW35ld1n2yk54u9Rk25xmGh/Ni9uRE+M6b1B4dgvgHBXbF5Jdz3U25QTgM=@vger.kernel.org X-Gm-Message-State: AOJu0YyU10HcYDidmiNzUhxV3kqCx4cAeJ297JGRg3PgIhkob/yvPTr8 ET1nijpCBZOfw2icotHVJq/ldChyzSx8SWqwarMuvFXrx3/DzPaNk2zjGYfEV7b0JKiiwExcrRn 1Yvp3gbuveg== X-Google-Smtp-Source: AGHT+IHegIoREH++X6aUzl23BbuBO+jS8yBxk/oknWyBIcHEcFfNG6Lhzrq0bId60XFzdVKmKUG0tg37zfxP X-Received: from dybba30.prod.google.com ([2002:a05:7300:5b9e:b0:2b0:7818:6477]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a05:7301:6790:b0:2b0:59da:f798 with SMTP id 5a478bee46e88-2b17d294b83mr7897975eec.21.1767899544207; Thu, 08 Jan 2026 11:12:24 -0800 (PST) Date: Thu, 8 Jan 2026 11:11:01 -0800 In-Reply-To: <20260108191105.695131-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: <20260108191105.695131-1-irogers@google.com> X-Mailer: git-send-email 2.52.0.457.g6b5491de43-goog Message-ID: <20260108191105.695131-32-irogers@google.com> Subject: [PATCH v10 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 , Samantha Alt , 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 Sun Feb 8 01:31:17 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 4C44932C33D for ; Thu, 8 Jan 2026 19:12:27 +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=1767899549; cv=none; b=PvZMg5rbWfUVPnDbjnmmMUsGuhnGvdXrc5yLBdon2hjcn+DlD9W2GFlXjly+F4ZOQXptUFg2l6gOOCkna4/MNlwy3yqMOgOIEjZi+c7rtHBt5y+BcHPh6Y5/5cShJl+oYUyNGzd32AY6DU5ZVrXiMOieHx+iFIzK9b3lWlC86qM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767899549; c=relaxed/simple; bh=M7A7ApF8aVAKAI09vVYWVhio9Nus+oQ+xkeCbrJDjVc=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=MVrOH7PEwOAhe8RDuUkDYfC5Yev4qfTb7SuXHXAyc1F+TTp4igPE6Q1A+ycD3ZFTRGaYB1vGb0AaST44mfMQVd3r7WYfs+Fo+3+4SpTnWzSk6KI7VvS/BbvO8N4mTszx2swrJW4tN6Iw6eD7yTK1VB+3bazxBo3/xXiOw1NFL94= 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=mWbrh5hA; 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="mWbrh5hA" Received: by mail-dl1-f73.google.com with SMTP id a92af1059eb24-122008d48e5so1427371c88.1 for ; Thu, 08 Jan 2026 11:12:27 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1767899546; x=1768504346; 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=mWbrh5hAGA6jUmXgV3B3hnuiGAhHazV6ZdoF2kq2JFIOGACrzoX4wZrWEi6FFUvaqv U+7rcdnjL81mDivLVTVZZkBFokpjgf38yOEI6j0vbXS3vE0NtHNP4qhNgvif25mLD+Kw g6duz2tVBf+9W7iJmNWxBpYKY7ShYdhSVfypLY0243UnV9aOFSC9EQuhOdkB579g53uJ 9CqRleh7EsBRDCB1imi3J5eB+oTchRKFWk6nTf98M/+/tSZx7UoL0+JCZaRx9epWuQZq zUfOcikt9i2erRqgJ7X3rVQrtBbE/LOBLf5w9+OsC0+X8Kv2ezTZJC99yTmlGGIhtUuy Aopg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1767899546; x=1768504346; 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=mnVZTOLKzy/n6VgNWGGMQhABI17H0jfOJzGRlfxygZUEw034ZKytzBlQ/UwMkpcvCR 4tFwZLY0LwHIeORhZryQVuHGTvw20+9hkCgpFrrIC2TVBATDKpRU/03/imuJyNf/88wj emLpfy5vU3NNjYzcxNBXLmndI8kzchfmtTZp9wGJYc60Iwr/GZmg+8X9S3ca2NrJXelw gqcD3hSeX0nsh0WA4PpWPTydExLGkb0cwiER/u0Ks3WLsRjoF7GZM8um9qNKxFJS1rum TKcZAATktYw38n/bz+6hNsqqpWQHqg/do8497AQRgAE17hsn3n4fp+fUJmcOPqmoLoR0 OOJA== X-Forwarded-Encrypted: i=1; AJvYcCVFL9Zg1RU7oAbAE4e+xtMZkKN2t34z1ZwUZGWfqrQ01EVUBJUarDQ5FjvAnPt+GbzruUdEzOfV7ggVudE=@vger.kernel.org X-Gm-Message-State: AOJu0Ywl3ceJRyev52G6TdqXV7irG490HCwYjg8SDtpRpCcTu/TFwW3e 7CCOXqa+mGai2n6+Gf8P47dQbXi54ToJGR6DsM7A2IsQL8nC676rnx7oT4BojvV7ofgvEWRv0F1 jDCGVzcRMkQ== X-Google-Smtp-Source: AGHT+IHW8rJELnJiguAxNE3b+MLwN6D7t5G6UVdNkhb1HsY9JfLrnAjjNmW4ZmR6/GozrxXTwEqyHEMiWaw2 X-Received: from dlbbt18.prod.google.com ([2002:a05:7022:992:b0:11a:1004:5049]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a05:7022:6723:b0:121:a01a:85d8 with SMTP id a92af1059eb24-121f8b9cf5cmr6434656c88.45.1767899546120; Thu, 08 Jan 2026 11:12:26 -0800 (PST) Date: Thu, 8 Jan 2026 11:11:02 -0800 In-Reply-To: <20260108191105.695131-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: <20260108191105.695131-1-irogers@google.com> X-Mailer: git-send-email 2.52.0.457.g6b5491de43-goog Message-ID: <20260108191105.695131-33-irogers@google.com> Subject: [PATCH v10 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 , Samantha Alt , 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 Sun Feb 8 01:31:17 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 EB6FD33769F for ; Thu, 8 Jan 2026 19:12:28 +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=1767899550; cv=none; b=QS9MaVlm7r+Bu66s1XXZaI32+Lj6jarQmAK/RG06TybkjpzJ/HHnzt07zhaSYNFgcSI0ctvAtBOIpveKuLGhO8LFIt3hhS8dOTEcmKMrWQqHJ/rImtjE/LFK+y1D1TMTkB0fMnhAWnm9E6Vxzv6FnAdq6loglG24Nui1nkb+p9I= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767899550; c=relaxed/simple; bh=ehb9+lTGbZ1qDk8zx/gxtgX32wpwcKjuLsajxpEl9rk=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=XcETFXwlYhIUlHVdXkTjti9CTbGXasscBPQ7O5Ly6r7OlhtuoYVvhXZMEGZ+70hSkRdCvwcrKFxvyi1hYAg7UWpx0yZNir02EaJdVB9JPfcCzNhUCCR4X5im2j5NO49iBVcMbi1COoEI5M6/u+APTRNROmg88kEVf+Cw1zJJDAQ= 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=egZt/jqT; 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="egZt/jqT" Received: by mail-dl1-f74.google.com with SMTP id a92af1059eb24-12055b90b7bso252764c88.0 for ; Thu, 08 Jan 2026 11:12:28 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1767899548; x=1768504348; 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=egZt/jqTPrbtDRoQNRrVQZiOPfxQixeMQ7LDqMHzdWkWYnSvoj1EjmkyI2YjhK/M3H ZNGvko+qxHc74N6LncjWkLnPHwHzicdCQGwOPFZg1YJos4j0e86BaR3iMCFusT1yCwCG 99uuBuM3tgzFZ+sd9ng2GNejKWl1OQDN0mYGi0z24gIHsfmuY5lp5GfgqymeOTlIpQN6 I4T9TDzZ6IjtA5gUZMh4pTq5zEv2Gap3+acCw5221y2npK/8ix2jReJ74BMk7b5SEl+c wfQJmUi3QLe6BDTTPOL7rCDpAVO0p7PZE81mcMiCeJzLyZhCVqiCx+6URYwsbr1R9VV5 xT0A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1767899548; x=1768504348; 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=Kg71KvVdmktUaCyf2t0L7fmMyW1eu2SvyddbktbNWjNwvFNc5+L7xiovPdHpuT/Nyd wPol2ryembz/7MQcVnC5QVcP9PNXozyaXFJy9v8tQL8AQozV+0PDMN56XMklmpocYqO5 AVBgZG81HTSPEGjnRHlgXoR4v9O/9JRowudKD3lXNWrMW2cs0lJa7Se8JjEO64lOiGOG vutCnbClca+8yCR8vOqzvjm/RtjwEzU+DThFyvYuIusCrUYmlbSe+ind6n6SgnNR6pXG 8xquOuvOCM83cPn70l8NCcqO3oslz9lGKWADVIcdmXQFTaqX+QXqRdbx0vNKuhv+zndg MRiQ== X-Forwarded-Encrypted: i=1; AJvYcCUr5gNaPWrEdPD9hz/BPyAGqN/XQ8s2aO8eelzCWLzl/ByLWbZSffggPYA0AMNA0gHlNnKl7lOhfC/3zIs=@vger.kernel.org X-Gm-Message-State: AOJu0YwZSiOjiT7Xe5f+HcQOdyoLHa+0jp9eWGAcVVvjzEFnnL1Aurf+ vXmSfZrxRt8c32+sht0JFpr7dLZU6zfpuWhUxFF9yTA6FRotgmd1n2Ug7SKtEGcURehWkRXYXE+ wjHit08pm3w== X-Google-Smtp-Source: AGHT+IHI8aai5BW52rtKSJMV78OxIVmbD0L5/gXaoix+RCWYIr4y1IK7qLjzVj4lsp1SYuEXviIgPjKQWoXF X-Received: from dlbup8.prod.google.com ([2002:a05:7022:fd08:b0:11e:60ad:95af]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a05:7022:51b:b0:11b:8f02:a876 with SMTP id a92af1059eb24-121f8b40bb1mr5968589c88.23.1767899547811; Thu, 08 Jan 2026 11:12:27 -0800 (PST) Date: Thu, 8 Jan 2026 11:11:03 -0800 In-Reply-To: <20260108191105.695131-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: <20260108191105.695131-1-irogers@google.com> X-Mailer: git-send-email 2.52.0.457.g6b5491de43-goog Message-ID: <20260108191105.695131-34-irogers@google.com> Subject: [PATCH v10 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 , Samantha Alt , 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 Sun Feb 8 01:31:17 2026 Received: from mail-pg1-f202.google.com (mail-pg1-f202.google.com [209.85.215.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 553523382CA for ; Thu, 8 Jan 2026 19:12:30 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.215.202 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767899551; cv=none; b=jfRKDN09RrKESTccXu26sc7yo6I798tf1y4TIdlmib1jfXbykI8DifGO4bnuMG+4UvMMQqL3MMFWtUHvU1z9DW5l4vv33mfcJanSNIo5or40jwuoFaFg3ujnqXukk0u3YpxwzIRye0YUiekHcI7MdbKe/SbY6IZRcsHAQYlntaM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767899551; c=relaxed/simple; bh=mOVt9AZW6S2rBaj6ZNmLMFxelgMYa7fw7fq68S6sjjw=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=QG6FdOMbAdgXbPd+g8L8fCnCRIX0ku0lMvsWzJEA0j+I60P/OAax5SWROSC/kfnu2/Ut0c5+svuT0IMvqBCPXQPwcI//Wak16x2Pqa1dE8R1AnDGFN4hgjGIMWl19a6sf+alFLRJVA0hXC8w7s7eGlrY6hcCa9h4lSZ0wpC41rM= 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=tOcRoer1; arc=none smtp.client-ip=209.85.215.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="tOcRoer1" Received: by mail-pg1-f202.google.com with SMTP id 41be03b00d2f7-b6ce1b57b9cso2883258a12.1 for ; Thu, 08 Jan 2026 11:12:30 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1767899550; x=1768504350; 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=j1b1fHSq3cwPxRtHZEmKHroJ3vQkOF9iI72kRm1MyK0=; b=tOcRoer1FgcrJM34LebG8rIKwTfTY3bWAh4xJQF/HpqDMyc/TZ4DibpWI8EXkwFnUf PfF8iMig1kHml16XnIIXZf9z/sH+ZtZDwPJsw2ZQLK1dphlWuL7zGcdlmWdRY8s7n8nI XOGTx2Dy6s8Z8E2TUvt1LMbPZ7S9PDkMNFCkWxILJY6OZAd/SUYJmmyo+DpRwdknHicE NyO+mX4DiiwdA2oIxkTjROXKcdz+9MQh46PZjxvQutgAgXxQD6bcZzbuEer3pn7vKCxn tPmeepsxDdj1FKszPrQKokpFN01qBEgX1ngz/9KiwkRv8rZU1lHQHC6GqvFRjHG9xImu +qdw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1767899550; x=1768504350; 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=j1b1fHSq3cwPxRtHZEmKHroJ3vQkOF9iI72kRm1MyK0=; b=w4Lh4yTZQ514Y3diB0wea272KVtdWHi2MAJl6Oxd9xN9X0tY5nhLIZpj4yFAV+IBVl Ss26ORGdG1mZaPUjsDNjjkcqlOB74LLU5dbix38FNxsYUTo2S3XH17tDdxglaB6g+dOu ebO8akyguJ6kVz1Yd2SYt/PVn9E+/mg0Flx69w6GGjZXe9j5mZiBU1LYr3YQO4CQyze4 fpk2kmKrunj+KKrkunUIgo7BxXqq4fUhIArh+Gp64cPaodA/ZHlRBgqYkqNJhBru3yOo +6lMqddZtzMzYs6i09k4aErRFzoCshI4WkInMwkgqCs0XB87ho/liMs1+6YPgdQc7Qoe xB8w== X-Forwarded-Encrypted: i=1; AJvYcCW8yQExHeHry+j3H5UIDIcR0O5WAuj7Ne4TOEYTiDy/Hf2R+S0x8w3WGi10eh09K6p1ScNSFTTV/ThO5pQ=@vger.kernel.org X-Gm-Message-State: AOJu0Yxct7rk5EwrQuj6mdvq0v33+Sh3J/nr7PrTl3pAGMhSrge2av86 NYPIkv4Ycf2ZGbAkn2UHb0sPqYQMUvhIgrX24MRHKAxgLfos8tYBOvgg79fpbtE+ayfSBa7bQaO HPAD6/cJZ1A== X-Google-Smtp-Source: AGHT+IFhzyUTizDytRZ/tHKIcIsThhmzWzk6DTPFJP6fIaQ2IZDM03AIDcT9u8rB2+BEGPJERwGv4iLL0OXJ X-Received: from pgdk10.prod.google.com ([2002:a05:6a02:546a:b0:c1d:e051:4d17]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a20:244d:b0:361:63eb:d024 with SMTP id adf61e73a8af0-3898f897040mr6722875637.23.1767899549575; Thu, 08 Jan 2026 11:12:29 -0800 (PST) Date: Thu, 8 Jan 2026 11:11:04 -0800 In-Reply-To: <20260108191105.695131-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: <20260108191105.695131-1-irogers@google.com> X-Mailer: git-send-email 2.52.0.457.g6b5491de43-goog Message-ID: <20260108191105.695131-35-irogers@google.com> Subject: [PATCH v10 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 , Samantha Alt , 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 f7d67d03d055..a3d7a04f0abf 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 Sun Feb 8 01:31:17 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 A44FC32C945 for ; Thu, 8 Jan 2026 19:12: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=1767899554; cv=none; b=m0SZGE0XxhmOWCgcvVNhQaJRqNn+edrDERFlcWO8W+HSCRYiPZrHKMh5Y7/NB8YUeknhoiACbKCZ93ybutnno4BCXhykGCkuOQbqj2zolDYhxN2Q7vr8aBEACuBrmTRKQA/jVtPVfio869Jkw7raBNpFG8K+gIubcdN7d6jz4xU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767899554; c=relaxed/simple; bh=J+f02vC6vGMWfbo7N83jJBpPCUC7ojdATQyc1Sr4ucs=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=aItbuNuAM5HommVkKroHL8kr8FNRxwEaMlbfIQSFp1Ux+JT0GAZf8rVjiJFchcQFy72YrR/BwjoX9pWjpkto0Xook59ueX620MG0mqNIXjvtQH0/XSfTaadQ1DoCu9euioN0I5Ebf/Ez5DdBEyAA0AS6P6SuVgrhoQxXMs1LP5M= 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=RAozLpJY; 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="RAozLpJY" Received: by mail-dl1-f74.google.com with SMTP id a92af1059eb24-11b21dfe918so1629535c88.0 for ; Thu, 08 Jan 2026 11:12:32 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1767899552; x=1768504352; 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=RAozLpJYhaO/GKIYtwnzpJdIM1oOvT4RpUiZAYEMHD55mnsz+VRxQL1qlsxMbuAhmc z7XMLumH09cipxf6lxtWjBLr6Z9bABhtclRDNrY5FDc1HCDbyTW7NaPkYNpgw7KABuSL JQKT/k/aTFPF2bOHf1rqkNKKDiUmKw5BYxlvH3tLr9iHUD0+j9fwtupfcSf1QOG59u39 8I47/3hv0R8XySK8H8x5oX9gMQ4FITkALlHQ9mLkNZOlsdY8znyppRORrn4Gv53wWYlU muDIjm2NKZ4LC+gtG6eSu4kW7rfk8d/21PFhKKiaOZ/FFcVQvf9ZuItAmToEBUGeFrLa U/jg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1767899552; x=1768504352; 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=aUxRgycbHeSQlmWNzsEvV6nJmNdcgDat1zz2ix1rNryg/WrHugVkwl9BPBH6mcgI0x BReAvfos83CmVsFgjEqSq9fiLk2P2CKSIowJByk+57ozMTmD7oA6N/JUNYwqWitzb/wx sJWXiAHdPbXTQcA/YUeQvx6y6LbqwxKzBKV5C2aAWGpwbsuhBmsxqhs6Du0tIXjx5poF k7+QxopFfzA1YW8Gfn97V+pkVqrPwyq2tysaXGSUbXPm0tmgI1MnbvKdQjCNsf/v7UpO Dnc34mrvXMJ2szyNb4yI8Gene/sxAFqH7W1DZeCyob20V3O+mOgUuCRMIL4elDaSXpT9 Erlw== X-Forwarded-Encrypted: i=1; AJvYcCX+T+H0rmxo5aJ5gfwpccKVmyyifFV8FRXtpSa62c8CA1mDF7B9ztgd9uwKo8ixNxDmNoSJOrIQYSJ7+sk=@vger.kernel.org X-Gm-Message-State: AOJu0Yzeaa+Jz7iZKVHW3Wyeh0Rl7G1N/mv59IxUHBChEJAhioV05XK7 1sC539oZaiqadqwc49fIpxhY3aWyp2el43TAT4hwiGn4PCiHTMw6BnEMZqcaEKbWKf/FFwhMcMj V+BTKOrwGMw== X-Google-Smtp-Source: AGHT+IGAA2yE/NJa3SzPn1/ZdLSyNxrmof7l6ODeKVPxDFp55Pp4RwkZHSNTayJhhJKuW5DvwlfGyvIYkpIB X-Received: from dlbpk2.prod.google.com ([2002:a05:7022:3842:b0:119:78ff:fe11]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a05:7022:ec88:b0:11b:ca88:c4f1 with SMTP id a92af1059eb24-121f865e7f7mr6749184c88.20.1767899551756; Thu, 08 Jan 2026 11:12:31 -0800 (PST) Date: Thu, 8 Jan 2026 11:11:05 -0800 In-Reply-To: <20260108191105.695131-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: <20260108191105.695131-1-irogers@google.com> X-Mailer: git-send-email 2.52.0.457.g6b5491de43-goog Message-ID: <20260108191105.695131-36-irogers@google.com> Subject: [PATCH v10 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 , Samantha Alt , 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