From nobody Thu Sep 18 04:01:57 2025 Received: from mail-pj1-f74.google.com (mail-pj1-f74.google.com [209.85.216.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 C9BF1224AED for ; Fri, 29 Aug 2025 04:11:31 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.74 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756440693; cv=none; b=CFQhyNZBZES7BzQuCzlyPIRLhXr2AmxWLzFqjRcNHbh+QpWjZN8P7fi4c8wmrhfqzJgunFdMa/v6n7edKW/vj8MJMJdjth6gr2Dj+5y1WRNahgy3b5DeMBMECCB5AJDYSD32JpGkuzK4b4fc7jZMLMvIhxvcJHdSy3mjWLjuv1g= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756440693; c=relaxed/simple; bh=X53nJP/mZS69ATwldN5hzVeFfJtRGo/KKlDopKhn654=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=aCWmyMH410q6+3EF9tDnS2bUu++wZtmQ1K5GotJfyiumyZO2IST7KsB7KOYWl2b0OwK4T55N7Jcxue8FK3kjkpQ0ZR3X39q2MZWwQssDtjAvxrsJSehkTMZ0HJN8ByjyxCKwEg75g2d2YRAMRQJCBoW6obtpyOp7QCgw6cjGqvI= 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=SuOgsGsH; arc=none smtp.client-ip=209.85.216.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="SuOgsGsH" Received: by mail-pj1-f74.google.com with SMTP id 98e67ed59e1d1-325b2959306so2820740a91.0 for ; Thu, 28 Aug 2025 21:11:31 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1756440691; x=1757045491; 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=VwyQMYLw0FpA9KIhHv/Z7rR87mgRlDW94bg1brpZvR4=; b=SuOgsGsHK7316pBCftFv9kpKJtnaHTtrNOzVMs/ViCawNH4x8kLzujw2kX1S93YwP5 ggNNvCnZbp0PI0tAzFXbAxiNb0VymsPyiKZ43peT1I/4NeN++OjowpPEEY59aGBeRutS Mu0rlG0g/vyx7qXZpwWyUlFLrtY37EE491FdOttbDekBU44RiIH52IJM2YMCnWAmIoI3 AVLPneuCaIcO4NxpXeUrJA78nwrEiYtLAQOMazZZxd/R5wPGIsn3J1J0brj2HNWIdz5L yLEGKrtU1ujzLsxzXdAzmPP8SSJEdF1emxpdHLPuYTArc74HNIq7AjqOM3iXTsjDNUcV NiWw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1756440691; x=1757045491; 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=VwyQMYLw0FpA9KIhHv/Z7rR87mgRlDW94bg1brpZvR4=; b=lMfRVUJ1EOo+8N+5+ZxaV1y1CMZMzs2gc3yru2m1rk4LbpriS/C7rfmzql1UQM5gZK PuSOd9jtqqo/yyg+/IGWlFnCxelVy/QVGS5rcV9lFHngGOc9a6hckGt7OkKctECNZT0s 1j26KXeq/4BzOXC8cQY/62gAUJ2r9HJkCfG247uPdBaH48PrYjbiB7NCadSlC6yMhz/n bJvYpD8P7M6ax+7/cSRgee/l6eQ06PxT/d7zLDrs+SSQSVy032dKg3Ksv3PjQWbwiIIH CatkN9Y6sLRkxDPfpL2TmzBkHZqdSp6o3TLCGEckwExMi0WKTcFNrN8EQWYI1BogCOFJ VtqA== X-Forwarded-Encrypted: i=1; AJvYcCURGi2B/BqRItWzThrBipEHZZXvnomAmNG9VfLSJjesNEWTrupkxPZbwly3tRZemcdOFauTE8k5dIUOi5Q=@vger.kernel.org X-Gm-Message-State: AOJu0YwGO7OAqbngnEBgvg3YVVGTBdW7s+jmbSI97b8dWk+7zxrMjDvP zHKyD5sXr9BlIFK32k3m43pgGNzNvhiKF0LNP2xnlOirk1fVmpxum/WFcY9u2ykEvixr21HzIUw Nev0NgByi2A== X-Google-Smtp-Source: AGHT+IGm9qOaeF502kiWAPj5LuS4z4uHx+FEp9wstbo7flY1Wq6p+EFdIC0W7y/pGCJIh9prVw+wf0JZrWmJ X-Received: from pjj15.prod.google.com ([2002:a17:90b:554f:b0:327:e8e0:b288]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a17:90a:e18e:b0:327:e6b0:c515 with SMTP id 98e67ed59e1d1-327e6b0c875mr1352918a91.9.1756440691249; Thu, 28 Aug 2025 21:11:31 -0700 (PDT) Date: Thu, 28 Aug 2025 21:10:42 -0700 In-Reply-To: <20250829041104.4186320-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: <20250829041104.4186320-1-irogers@google.com> X-Mailer: git-send-email 2.51.0.318.gd7df087d1a-goog Message-ID: <20250829041104.4186320-2-irogers@google.com> Subject: [PATCH v5 01/22] perf jevents: Add RAPL metrics for all Intel models From: Ian Rogers To: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Namhyung Kim , Mark Rutland , Alexander Shishkin , Jiri Olsa , Ian Rogers , Adrian Hunter , Kan Liang , James Clark , Xu Yang , linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org, John Garry , Jing Zhang , Sandipan Das , Benjamin Gray , Perry Taylor , Samantha Alt , Caleb Biggers , Weilin Wang , Edward Baker , Thomas Falcon 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. Signed-off-by: Ian Rogers --- tools/perf/pmu-events/intel_metrics.py | 45 ++++++++++++++++++++++++-- 1 file changed, 42 insertions(+), 3 deletions(-) diff --git a/tools/perf/pmu-events/intel_metrics.py b/tools/perf/pmu-events= /intel_metrics.py index 04a19d05c6c1..df4322ec82d9 100755 --- a/tools/perf/pmu-events/intel_metrics.py +++ b/tools/perf/pmu-events/intel_metrics.py @@ -1,13 +1,49 @@ #!/usr/bin/env python3 # SPDX-License-Identifier: (LGPL-2.1 OR BSD-2-Clause) -from metric import (JsonEncodeMetric, JsonEncodeMetricGroupDescriptions, L= oadEvents, - MetricGroup) +from metric import (d_ratio, has_event, Event, JsonEncodeMetric, JsonEncod= eMetricGroupDescriptions, + LoadEvents, Metric, MetricGroup, Select) import argparse import json +import math import os =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) pow= er consumption estimates") + =20 def main() -> None: global _args @@ -31,7 +67,10 @@ 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.51.0.318.gd7df087d1a-goog From nobody Thu Sep 18 04:01:57 2025 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 0CC61229B12 for ; Fri, 29 Aug 2025 04:11:33 +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=1756440695; cv=none; b=EcUGDK311PvaM2m8A/xbF0VERVpXllwyV+5DnazFIef5cE3UxT24Rmya4WmxaXK2aOP67wjae6KbnE3IzJDQOxHVYItWstbBXmcVbig8edx/POOcd9c7F5AFQaqatJjcmuRvvrK6r+ilj/A0rYNUzh5Syca8hH4eBFUpZ61nvx8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756440695; c=relaxed/simple; bh=SpHZZtQwYfFVz65RxEhRJc/KtRlCGOt7JG0Y1z/14D4=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=g0oXNma0ajOmXhGMZ6WB5xG5Js+Slgl94Tl3uqOTLMuwTpN1B04dhvyyj2h7ZiCT7eyLbIN4l8BwLDSUA47qx+9mrcncRhO922OP8VBEddi0IT/9h94ubDbDWd3z6q37F4wkASffiqUIXNH3HIOXQmcMWsJmWdUZXUrjP7qMT9U= 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=jzqAjMGL; 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="jzqAjMGL" Received: by mail-pf1-f201.google.com with SMTP id d2e1a72fcca58-771b23c0a6bso2877030b3a.0 for ; Thu, 28 Aug 2025 21:11:33 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1756440693; x=1757045493; 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=UPsOCDYWJwD+xaSWmJwCuK47irDUPi7hVVc5CkF1JJs=; b=jzqAjMGLSkUpRAXTBjqN1I3HhgBMN2sZWC+FCHSdIouRmjqHVOVi6qZ94+yfy6Juch n1trr1n30NkTcxrn/yRpwhh6a2YHikrbK78F/ZQNPCUnenWROKA6s3OL9yKLqunFNbdB 1KrFJh3Bf9/NKjmb64X9bB8tAjKdlZpJYbYMW5wj2UMHNeSnYJ+/qnfMTDE9XQCO9iuT rB2m48KP2BNWvQUpCnL8BBgqAWNEgMo1w8Www06uF2vcv9oBOVnAPDcjiEWSjiAHuQjt BUk2By9FLTAKs8sYafKfaffU9RN3PbJzei6D71mA6isO0TtUt0/1TinXNXr6UsAAUGWl Fjzg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1756440693; x=1757045493; 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=UPsOCDYWJwD+xaSWmJwCuK47irDUPi7hVVc5CkF1JJs=; b=JHk2jq6JC8Tl3KPtiZlGSHHjhq9ieHAA2xJJIALhMkAxA7wIJckLZbRT9xqlgp8mTM b6/XUqgFDOubG5HdPVoOXgsk8hn87vnDpk63OYEmbxcrdOMxDOuglhQjm8cMMBm+6n90 Sv7ZfQkd66qFOPEQAcNgfOXg56gai3BVBB5C8ItKUfk26JVNnuTz1aSUlFE+C2sSF84Y ox6kHZAm9rMHRRpsfAvog87Y02GLFZzEmJHxoWH33oGD6weBE+TuB+eMkcmjw5pC0eVB WQAMp8Msxx5uz58h+0SJE5qrcseFl9fBpbIPjMfefzWt1yzrdwaoqmVWxJ5LHd1UwRoO qAlQ== X-Forwarded-Encrypted: i=1; AJvYcCVXYCi+aJ/PH6cz3NE0P005XsauQlAB8L6SLemCv1qNhu9rxP9QKd7PpAzIRXZj3gRr0jiCbgLFVMFlLb4=@vger.kernel.org X-Gm-Message-State: AOJu0YxjnuBsl298q9wLmm/+R+9sSozbLpzo2LAL4zsEBHbTzGhI0eHg FsaNyMw0TLiuAhy76CILYqNhUEz2cPWX6fC4VoXMeFG7FWokM4TyyIR8ED4hxE2NdaFMJ4uSKpe 8HPbRXesUEw== X-Google-Smtp-Source: AGHT+IFz6NP3gaHSWZRuumn1l8T9ebsDEGoBkwBChpO4vMF/HUMHPf2iTXTP7nEWM2eSpRC637e/Lg/a+em5 X-Received: from pfbei15.prod.google.com ([2002:a05:6a00:80cf:b0:771:fbc3:2406]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a00:929d:b0:771:fbb0:b1cf with SMTP id d2e1a72fcca58-771fbb0b2b0mr17834069b3a.17.1756440693121; Thu, 28 Aug 2025 21:11:33 -0700 (PDT) Date: Thu, 28 Aug 2025 21:10:43 -0700 In-Reply-To: <20250829041104.4186320-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: <20250829041104.4186320-1-irogers@google.com> X-Mailer: git-send-email 2.51.0.318.gd7df087d1a-goog Message-ID: <20250829041104.4186320-3-irogers@google.com> Subject: [PATCH v5 02/22] perf jevents: Add idle metric for Intel models From: Ian Rogers To: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Namhyung Kim , Mark Rutland , Alexander Shishkin , Jiri Olsa , Ian Rogers , Adrian Hunter , Kan Liang , James Clark , Xu Yang , linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org, John Garry , Jing Zhang , Sandipan Das , Benjamin Gray , Perry Taylor , Samantha Alt , Caleb Biggers , Weilin Wang , Edward Baker , Thomas Falcon 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. 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 df4322ec82d9..0bb28f4c8316 100755 --- a/tools/perf/pmu-events/intel_metrics.py +++ b/tools/perf/pmu-events/intel_metrics.py @@ -1,7 +1,8 @@ #!/usr/bin/env python3 # SPDX-License-Identifier: (LGPL-2.1 OR BSD-2-Clause) -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) import argparse import json import math @@ -11,6 +12,16 @@ import os _args =3D None interval_sec =3D Event("duration_time") =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 st= ate (C1 or deeper sleep state)", + d_ratio(low, tsc), "100%") + + def Rapl() -> MetricGroup: """Processor power consumption estimate. =20 @@ -68,6 +79,7 @@ def main() -> None: LoadEvents(directory) =20 all_metrics =3D MetricGroup("", [ + Idle(), Rapl(), ]) =20 --=20 2.51.0.318.gd7df087d1a-goog From nobody Thu Sep 18 04:01:57 2025 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 9539F231826 for ; Fri, 29 Aug 2025 04:11:35 +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=1756440697; cv=none; b=AsVtSeOK2kDU4qj3pMqwo1uanrA7QeeYVfD+WwNliSTIMaBm7+7wb/1nFyOGbSJ90eZviuOnKnz/8DPStdsazASe6hUYj/oEvjkg4To2nFO0MVb/ABA11J7GwhTzwkeO6V3Ds7Yzpom8aJpcZDWuuypKU+ODkbZLL5SrsnkGzNM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756440697; c=relaxed/simple; bh=joECuR1Dk7+k5vEaqGQaIvQm0WoUqvh9ot/ZaDm3uFA=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=bv4M7yHB+QlyfPg8siB1K6zGgpD6NMuyKxzoGGrUYLkyNB9Sv9fns/7aIWWT+S4l6+YHpPOc+tLdvSg/QMytXksETgcHGkYBcUVPqHKx5YIMoW8n+TkvGKLo0AcEtB+ImB35KYu5K63qy0XBONyrHJXTpb/0sJjWMFSQiPrA/zw= 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=OmKJt44L; 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="OmKJt44L" Received: by mail-pf1-f202.google.com with SMTP id d2e1a72fcca58-771e1451631so3431824b3a.1 for ; Thu, 28 Aug 2025 21:11:35 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1756440695; x=1757045495; 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=ItByjsoo2hIXvPCvY30XzJpXM8WuvqcV8s0HcZU4W0M=; b=OmKJt44LA7bxQa6L4Gowm0Zlz2gxJnWjgJcCKz5cMM0ckCNO6l98m2qMzVMciA9h99 rhvlGSN2Qno0im1OSpHS40vAZf/t3Z8wqvMvdNhPcYmHHU5YbiAwNpKEnOMjZgiVuCCS aGw35j5t4qrmzMtVa2hz+lAs7NQOW1KQQ969BJB0XB1s5KXpsG5SaUXJ0oN5ic3yNVi+ bKq10GaXQWHe29H+7buDg4AmJjA/oZXCBRiCcaqUXCY6AVy/KYW7sA5goe5lFd56/Vi0 kFYYE4hPHxjFNctbOVdFAdD4rq5uvGDw8aDNU/cgbO/7AH+Y8j69fES2usxxmhI3gpar aDiA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1756440695; x=1757045495; 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=ItByjsoo2hIXvPCvY30XzJpXM8WuvqcV8s0HcZU4W0M=; b=EZJi1tsjKDsmT0yJRI2G9Spu0HQ+madKIHJe/KFB7fwzuXe7WUG3/3peeVn1iRDg2i 1qwVAlk4Nn6ZDiOPzJpL/9UE5v02QdWhIezWnxik9ym1HDhxT1pANjeY1fvX6PG6pDMW Q1ohjtccGAgwSecR7SBJwxqNp6cveEixUrdLpRMtht7Oe0g2ZSa7fKZ8CKiMBLn4N7zt zGVZSKtgNdOpvwBn1+zCNsRfDUIRPIfvh9CsvR5FzKmdyR/S1bX/egAIehNrHyJWEZKT W4+i8XVC6r9uriQTG1fi/+wEE09MbdIwFS/VyrzowuD3PSVOZ0tCgVWE/aiJGlDbxGNs HDGQ== X-Forwarded-Encrypted: i=1; AJvYcCXD3rKAhRlkBn/mcVoga+FdsxXXZosuh//gih7FCFrCWOCQ4F7PAXh5hp3TfNQBjE80AJVaohM5PHR3IrM=@vger.kernel.org X-Gm-Message-State: AOJu0YwX70kYEZNrNngQJOkvuo/NHrXMeJ8XKPXWfnee8AGGwSen8ZFi 4eKDT41gTbnpxMV+/R4l+v4ejsvGR7ghScGYkYsb9RaFXjo2rfuhDLpEf1UkOPDM5+4sPGO1zdr VfOMSVboxLw== X-Google-Smtp-Source: AGHT+IHtQxxmwkW4HdttcwiHVyuLSUd4MwJSBf8lr0jbPLBHY74bfUImgOMcLv+E351JeBJ9veaaw3fWlqQO X-Received: from pfbmy8-n1.prod.google.com ([2002:a05:6a00:6d48:10b0:771:fd7c:50e7]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a00:3d9a:b0:772:1fa1:be43 with SMTP id d2e1a72fcca58-7721fa1c0ebmr3830088b3a.30.1756440694946; Thu, 28 Aug 2025 21:11:34 -0700 (PDT) Date: Thu, 28 Aug 2025 21:10:44 -0700 In-Reply-To: <20250829041104.4186320-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: <20250829041104.4186320-1-irogers@google.com> X-Mailer: git-send-email 2.51.0.318.gd7df087d1a-goog Message-ID: <20250829041104.4186320-4-irogers@google.com> Subject: [PATCH v5 03/22] perf jevents: Add CheckPmu to see if a PMU is in loaded json events From: Ian Rogers To: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Namhyung Kim , Mark Rutland , Alexander Shishkin , Jiri Olsa , Ian Rogers , Adrian Hunter , Kan Liang , James Clark , Xu Yang , linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org, John Garry , Jing Zhang , Sandipan Das , Benjamin Gray , Perry Taylor , Samantha Alt , Caleb Biggers , Weilin Wang , Edward Baker , Thomas Falcon 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. 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 36e9cb3acf6a..4f62f252abef 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", @@ -25,6 +27,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: @@ -35,6 +39,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.51.0.318.gd7df087d1a-goog From nobody Thu Sep 18 04:01:57 2025 Received: from mail-pj1-f73.google.com (mail-pj1-f73.google.com [209.85.216.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 6A44B224891 for ; Fri, 29 Aug 2025 04:11:37 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.73 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756440698; cv=none; b=PMWTHa60sxDw7PipydM93CxxmRWjsfIY6BJ5zIuQgSvTjC+BanILghGjCh/1/c8+bfRr8+PXGhRq0OTQ5+8PHF0y6KFcdupwhBZ1h+JtKCiMYrjB6vI+KSAGNWaLY6ZtxA3k9u0v5kk4IlO93E1Q56K9Vjf5iNFMFVIIer+mD3U= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756440698; c=relaxed/simple; bh=Lj1TxfTdhC1agPvRb6StALeOwsuDc6E3yrG6gjoa+Lo=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=MCQYEUbQfta+YArJb45YZNz7IZUnb/ENlrb9sdrHqRQ+VPwkR1ItlJTCzl9hSSaVA+2HmEYGJO9tWuZAutI1n5tYDKzX6rKlwq97qZbe8+57Ruv1wdyWE9cUTrhtwbHgcrZrup7KckVWYf3RGdHWqKeaehTuDdquHvticzTYFoo= 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=gdx5xElg; arc=none smtp.client-ip=209.85.216.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="gdx5xElg" Received: by mail-pj1-f73.google.com with SMTP id 98e67ed59e1d1-32326e72dfbso2448476a91.3 for ; Thu, 28 Aug 2025 21:11:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1756440697; x=1757045497; 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=RWyndJocq5wXKzLumVZv4tX78BF9vwSGLU+R4CMfK6M=; b=gdx5xElge24gnDiaCg324ZCB7SGdULBU6t0oxiKPouseuRDwJL9u6L8yPU2PhsOk+A AlcxFhPAjAxvZt4zp2LdWZtblG6GBIolBdupE3O+JknZfkS7QAesslo10+VQ1BIX+Z70 csGvYQZ/we/GaGdZ4LWYAizOk8gLLwHbZpEgMVkia1/yAT/Wg7UGuylxMdZpM/CDYuso 5Gnx6KZQn42siGxZDYx9szzjoDDfQWKibjXZXEy30Qgr0yIkwc9mmaZUp4tnHy1NCa4j GuEZ6zLvjgidQ/pbz12kpu3Ksh5v5+MpLi6vJVzSJU3+Jxdpg0jqpSssrTp2bfS73no0 gXiA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1756440697; x=1757045497; 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=RWyndJocq5wXKzLumVZv4tX78BF9vwSGLU+R4CMfK6M=; b=eYpJ80qvlF/A153VmL99A/QA+2rXkDvoLnsmjBXzy1eKOKgNTxaK906f7UdBEfmI8U tX42w7/TtGkNl5SIhDMs7zThEmMDN6gA1keE6RAnFXYIskdPvHDigq8OTJQH/PRYm1+r CqEdvR3sJJRtjn+76OedD0U/XICCa6skTkg4zP/7lyR5kFKBTN0+CAgz9/rRXdZK/m0d SMCn2w8YZBihwWmOq7EVV1JJ2Wils/8rSMxAlOqwbaIq9BHmKlHgKRzK2H87ChaWJV12 rskBkxtoxbc/lNZPtYe7m1DplNGQm+0ONxxp4Ra5BBPm3+TMADase728hqMokpvqfVaV 4Eqg== X-Forwarded-Encrypted: i=1; AJvYcCV6UEPZ5QWvkpscfquGfIW7gAoV1gR0vp2caAApoVGFrKwRsR2DBYqewT8f9zY9YC2xO/0j0xR+U0WXFYM=@vger.kernel.org X-Gm-Message-State: AOJu0Yx4MEd9oWIuSojwSlab4RuYlM897qV10nVwv97++IoLI+3aA7jp FlqD9AHuBX+bo3K5Q1DvZk0BAnhVrNBzyCaegQ7sowcViCNYVl/J0/AQq1eBL3MR2D4jANn0rAn YUXB6TYGriA== X-Google-Smtp-Source: AGHT+IGgxPdxoRBfj1e4QkTolOamcDyFLHq/wP2LRKKmIQn1SERZR2QSFugXp1s2TEzQ7YSySJOjfdPEFpE4 X-Received: from pjbpl10.prod.google.com ([2002:a17:90b:268a:b0:325:7c49:9cce]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a17:90b:3f87:b0:327:e781:3d2e with SMTP id 98e67ed59e1d1-327e7813ef0mr1236053a91.33.1756440696865; Thu, 28 Aug 2025 21:11:36 -0700 (PDT) Date: Thu, 28 Aug 2025 21:10:45 -0700 In-Reply-To: <20250829041104.4186320-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: <20250829041104.4186320-1-irogers@google.com> X-Mailer: git-send-email 2.51.0.318.gd7df087d1a-goog Message-ID: <20250829041104.4186320-5-irogers@google.com> Subject: [PATCH v5 04/22] perf jevents: Add smi metric group for Intel models From: Ian Rogers To: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Namhyung Kim , Mark Rutland , Alexander Shishkin , Jiri Olsa , Ian Rogers , Adrian Hunter , Kan Liang , James Clark , Xu Yang , linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org, John Garry , Jing Zhang , Sandipan Das , Benjamin Gray , Perry Taylor , Samantha Alt , Caleb Biggers , Weilin Wang , Edward Baker , Thomas Falcon Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Allow duplicated metric to be dropped from json files. 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 0bb28f4c8316..1e4790717cec 100755 --- a/tools/perf/pmu-events/intel_metrics.py +++ b/tools/perf/pmu-events/intel_metrics.py @@ -1,8 +1,8 @@ #!/usr/bin/env python3 # SPDX-License-Identifier: (LGPL-2.1 OR BSD-2-Clause) -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) import argparse import json import math @@ -56,6 +56,25 @@ def Rapl() -> MetricGroup: description=3D"Running Average Power Limit (RAPL) pow= er 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 @@ -81,6 +100,7 @@ def main() -> None: all_metrics =3D MetricGroup("", [ Idle(), Rapl(), + Smi(), ]) =20 =20 --=20 2.51.0.318.gd7df087d1a-goog From nobody Thu Sep 18 04:01:57 2025 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 64E05239570 for ; Fri, 29 Aug 2025 04:11:39 +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=1756440700; cv=none; b=FZEowaPqYX3E3v3AxO+oQBz8Uri/gmSc4uo43F6K9takTdxNb7YdQGq5hkN5411r7pUXxW3BRdzZGOY18DuisxS4/HRUotxCP2Qil2+uMfNeqP957JPbJmSDca5tX7mPqXSggwxq/GfFluzqp7VOdIZRnnq9CQI5tPYMnPs/gGE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756440700; c=relaxed/simple; bh=MCG6CjoNW6uxd3dkTAQbhonZPPggN4P+ZXSpzIAMvPc=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=E657yQda6eI8WRZAVkshz3+JZJVNbTAxWy+S+dPlG4ODDuV3JqK7Ynd23WqcRxUKJF9L6jX3+wzhB9UzBsQfO5b1A9mnu4rIwo2t7mXZ6mhwsnBQ28BNu4zufuO0HN/w1/m/SI01lxu19Vdx8JVEEE6MHeNxFZVMDAwGtW4rSog= 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=Hq6GpZA0; 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="Hq6GpZA0" Received: by mail-pg1-f202.google.com with SMTP id 41be03b00d2f7-b49de53348aso1071637a12.1 for ; Thu, 28 Aug 2025 21:11:39 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1756440699; x=1757045499; 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=EcVJ+u3sdC6BnMWHfOHUF/wdZM6izAkF1pUn3DY+eV0=; b=Hq6GpZA0HnP8SHNru10Fe0Q496kqLnnjgAd4zHN+XuEwtMgwUYcymMgPOjrIxJ0L7g ureQLEmPFp9eazB/5c0oOEXJTf6M1d8sBMdXKimt+M4fUH/HQtFnd/drj5BTJ1rgYV9l Nus1/6X+v0PnxTrnZi2DGxpwP9fxFihwxZATpOcrofU1Xp5B8W+t6WjeKh1tpZUBRjHM NOkE6J/SNICTG1jLswh26nz2eCjhcCJGJreBzuuXo+O6WygxCvXB1GG9smSa5Cst/5td adY82wPqT7ki5A02i4mzuVuu2Ldh4c4ky1K9sBAi7ymfKWWl5KCkbXXCHobsaAgb1hcg TO/Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1756440699; x=1757045499; 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=EcVJ+u3sdC6BnMWHfOHUF/wdZM6izAkF1pUn3DY+eV0=; b=AqyLeewJcdWmRFyaEB9a4OLDLpdr2qfx9/3qCoEemq8vhurhJnpFj0hn6oJoyzy/BE FKkRvSi+uMgmAgoM0dd+D/CqgqY7yIQA0h5B6OVNho9t3mXOmto2Q2SXRfEPL1ZVapIB M2d9d+Col2eyalFn8x632HqFqEPSUvmhY2RW81bAncjWrHN1blm8PGqhQchtkX03/PhZ 3sBc0hTKDGfJYHuBFhBTkGPW6lxZIrjvsMVGUnh+CQ8BFejg8/+i0/tCazA3rgkYBtoe 63GOamXbXPMN9d8AM8aTltG7klnAvfjUr5ZpmO7byo/6DIkntVKB+TYA57jYzx/tu4Oq q0Mw== X-Forwarded-Encrypted: i=1; AJvYcCVWDkPVm1qjG8TLwZMhksvflrPyaIH8yfHD+mNweUJsGpA0/lI3RUel4FaksW0CJ3btwS3zsbYyLBl52Uo=@vger.kernel.org X-Gm-Message-State: AOJu0YzL9Bp/Mz8wPoJ6pFbYm3LUkLhBwuiidoZpBI+MfaSAys+Ws/ZP m6kqVYVuxmq2hadQjRRjgiStUU6ef8cZeZOiQxwd/2JyOCeBDpi2ddtKdVj0Dyb3BxVvv6zAsWw XRiikWOzL3w== X-Google-Smtp-Source: AGHT+IFMf2p7oY8yto0U37ftJV8URBCPGTUxXUA8ACJh9GFlq97G4+JtuI0Gz8WySzkyYotspgt5TUkUvgtt X-Received: from pjj6.prod.google.com ([2002:a17:90b:5546:b0:31f:6ddd:ef5]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a21:6d93:b0:243:27d2:61cd with SMTP id adf61e73a8af0-2438fad28f4mr14375530637.27.1756440698627; Thu, 28 Aug 2025 21:11:38 -0700 (PDT) Date: Thu, 28 Aug 2025 21:10:46 -0700 In-Reply-To: <20250829041104.4186320-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: <20250829041104.4186320-1-irogers@google.com> X-Mailer: git-send-email 2.51.0.318.gd7df087d1a-goog Message-ID: <20250829041104.4186320-6-irogers@google.com> Subject: [PATCH v5 05/22] perf jevents: Mark metrics with experimental events as experimental From: Ian Rogers To: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Namhyung Kim , Mark Rutland , Alexander Shishkin , Jiri Olsa , Ian Rogers , Adrian Hunter , Kan Liang , James Clark , Xu Yang , linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org, John Garry , Jing Zhang , Sandipan Das , Benjamin Gray , Perry Taylor , Samantha Alt , Caleb Biggers , Weilin Wang , Edward Baker , Thomas Falcon 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 --- 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 4f62f252abef..b77485b47666 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", "cycles", @@ -31,6 +33,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: @@ -60,6 +64,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 @@ -81,6 +97,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() @@ -248,6 +268,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( @@ -296,6 +319,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( @@ -344,6 +371,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) @@ -383,6 +413,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 @@ -415,6 +448,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 @@ -442,6 +478,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 @@ -464,6 +503,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 @@ -526,6 +568,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.51.0.318.gd7df087d1a-goog From nobody Thu Sep 18 04:01:57 2025 Received: from mail-pj1-f73.google.com (mail-pj1-f73.google.com [209.85.216.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 61F1B225417 for ; Fri, 29 Aug 2025 04:11:43 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.73 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756440704; cv=none; b=qdZRb2ES2saCUXtQ5h1+H5XEsvzLE0fCQqkJMLeFpJxKRHkQw1T3trBouvApIw8aUdLPJ7EIkwWkEF5BF92S7Ex8GeO39Y4TUyorTK+RvIJEsjkNDRSrEdM81+xaBFZP77EJQROboXG8X1OixXJfkc0bTuknhtQtidpdcdSxc4U= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756440704; c=relaxed/simple; bh=G/t4i0AD/wXY46jSWn8fPOGWm9EJPElV8fdpB14Hqqc=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=A3RuScuQYZi2LKXnNyBeMwe7yZuKSjKk58Sh0FhEtVIy7RAp5A0ggYEMFpVf1oaVPCjLaRbJT5yYVl5zS9ww0t3UgwNPhUitzPp4OKfuJsZjY+apcefzPPPQA8/tZfl7sGd3fYMSovjs1mlVIccV0JZb/rfm7dxzPlRNyTD0VKE= 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=KdOXeAuF; arc=none smtp.client-ip=209.85.216.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="KdOXeAuF" Received: by mail-pj1-f73.google.com with SMTP id 98e67ed59e1d1-32515e8e4cbso2780483a91.2 for ; Thu, 28 Aug 2025 21:11:43 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1756440700; x=1757045500; 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=VHLltxQv707jyq7uE7p0UrQqauyWghAPg6sL6mEpwW0=; b=KdOXeAuFbZeWMjQ0BC8c423t66frHN8IWkEAdcZsnYyqRjR/Q7/vKbARJ+zRbp5Zkj enBNGFhqQB517XPHfbY/130sI1qwlJ+aVy+mLGsVpkhOEdUWkNxU93pOyMR4d6hoSsUO SrjSHqT3A221u84MXdDqVMkmVGrg35NsNZNR3ti0O3Htd3aekCPOZK3m1hfVeimHDsHM GY3CWBAQVTDv0b2jaqTzDqNmaVAdG02pBWsy8QoEAR4txa3CHOpE6AeRwx9QKDUCZkC5 FptP16bgfEYSgZ/pUH6FWD3xMjO+gZwi6I/bEYnsSpEUP0Q8tCzgnDoVwHA4O3pWKyFI PUGw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1756440700; x=1757045500; 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=VHLltxQv707jyq7uE7p0UrQqauyWghAPg6sL6mEpwW0=; b=kgfA4sr85UzhLvjQDz9rcCHPVU6LpAGY2kO9TSm9ozthYL45Eq4HXpKX3AQgyT05Sw YcSjmAwuQMm6JGqQ+IpDuevNtsyWgyUxoDRC3kqqZyPZ122v1jEf9p57Okma2uSWTsfm PxQ6MDvz/X0dW5WtWcS2GX2ckDl5OF+Su/1aqlL1+7gcT8M/sZ72Zq2uUbRuajYATN5R IR7mGhGY21JWv5aUXPOShzez1DCB1CEPirD9N+7LimOzKzJeGdoeUZD+WtYw+qyaBWe2 zQsz5VfTbIWkexamSpxApDWfnezXmYbWoVdkkTeYAi61+D3oaVaP/oZ85VnWwjFoPIfR y5Rw== X-Forwarded-Encrypted: i=1; AJvYcCVFVQuRnWI4a1GrE+5rFACri7UVRlLgQdGJlEERYDYsllqDusrIjG9IuAdCHlhDn49oeS/Nr31GrX9MilU=@vger.kernel.org X-Gm-Message-State: AOJu0Yx8WZa2Sl7UD3B/uYxJIifzrSUe5EdPmDOl7KyoGQVowoNYQFHw STJOQJ+AlWLjpecU5vPJAhRYpIUnC6TFBZ7hzz2XvsFpSZN5leKTsRNHPCly6eTbS35TWtFrjWe K1T3og0hIoA== X-Google-Smtp-Source: AGHT+IFfpTgVoPoMxVch6at38Y2vDYbk+oRvzq0Cy165fE8ad3D5ZjTVH0tIcualVhI+K4bYl/JUesxhYn9O X-Received: from pju9.prod.google.com ([2002:a17:90a:d49:b0:327:b1f8:7689]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a17:902:db0c:b0:249:147:95bb with SMTP id d9443c01a7336-24901479934mr26325865ad.13.1756440700494; Thu, 28 Aug 2025 21:11:40 -0700 (PDT) Date: Thu, 28 Aug 2025 21:10:47 -0700 In-Reply-To: <20250829041104.4186320-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: <20250829041104.4186320-1-irogers@google.com> X-Mailer: git-send-email 2.51.0.318.gd7df087d1a-goog Message-ID: <20250829041104.4186320-7-irogers@google.com> Subject: [PATCH v5 06/22] perf jevents: Add tsx metric group for Intel models From: Ian Rogers To: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Namhyung Kim , Mark Rutland , Alexander Shishkin , Jiri Olsa , Ian Rogers , Adrian Hunter , Kan Liang , James Clark , Xu Yang , linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org, John Garry , Jing Zhang , Sandipan Das , Benjamin Gray , Perry Taylor , Samantha Alt , Caleb Biggers , Weilin Wang , Edward Baker , Thomas Falcon 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. 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 1e4790717cec..a353e682df96 100755 --- a/tools/perf/pmu-events/intel_metrics.py +++ b/tools/perf/pmu-events/intel_metrics.py @@ -7,6 +7,7 @@ import argparse import json import math import os +from typing import Optional =20 # Global command line arguments. _args =3D None @@ -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 transa= ctions.', + 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 number = 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 number = 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 @@ -101,6 +150,7 @@ def main() -> None: Idle(), Rapl(), Smi(), + Tsx(), ]) =20 =20 --=20 2.51.0.318.gd7df087d1a-goog From nobody Thu Sep 18 04:01:57 2025 Received: from mail-pl1-f201.google.com (mail-pl1-f201.google.com [209.85.214.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 D605523C4F3 for ; Fri, 29 Aug 2025 04:11:42 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756440704; cv=none; b=Tvi7WscB00CuWOzpDp4XuO1e3qpHjUwmVJepj4X/gvMgrX3LS1j1SWEE3LzKU33laMdQQ9MwTj/C0MzS590zT5Nhs1g0mEGQygE25j1YZmLZArFoq9KRBRbBxO7d2XUzjGuX+FmpyJqsgc7mLdlfN+oPnr/kIG/qaQdDS73THrs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756440704; c=relaxed/simple; bh=I5+OKq7qSksLoa9NxJiPDaTGBoDHLGP1QKRZKrM7N08=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=OHWNCNjyIu2in4+lXKEnPxWUl9vsD1U6OxmSkNbTPoC/THvFTdf9y22y0erY1LJx0ge3M7glJVgGea7wAg1mRdEXTVJO2uCpnwG+VlQVABoQ5Bhfem/rHN1m4kgmcr4BQPcLDJLNjiLl54dvEu8fmVEMnFpAKuMgIaoHAankTmc= 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=NasL4Fuv; arc=none smtp.client-ip=209.85.214.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="NasL4Fuv" Received: by mail-pl1-f201.google.com with SMTP id d9443c01a7336-2487543a4f9so33715075ad.1 for ; Thu, 28 Aug 2025 21:11:42 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1756440702; x=1757045502; 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=fQzzxVRb28+WKh4KU7BgWk34NSL03IvXJbHJ+fplBFM=; b=NasL4Fuv4W2uibJBIHFxSEHZkCjhmdqnyMEw+veUvS4a/1GaNldE+5dMFLRmsXfmCr vOsScAMVt74LMc9tgAn4dUMIoYuVPHM16GEFD73eilwG2KP8APfq1llxbL8WbdQX+UB1 sqcijUea6mLgeq7zsH9DQQw36xLGugNm37sxURATA61l1DR9Uh2fOhtm9liSyH1e/z1Y Fxn0QVmvM86z6vT12soWOx/osVEyQgiZyfOal10jco58AtHVLIXexTnU+cMOtdt8h29M vz9CxcUgUc+TSmZcGkKA6LLaTC4UMmvSy4c+2ykdSzk44HcscHPDAQl/adjbf46oBFlh qdKQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1756440702; x=1757045502; 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=fQzzxVRb28+WKh4KU7BgWk34NSL03IvXJbHJ+fplBFM=; b=TapXByQQkqVDX/nQOdGSmKNzs0N+gqLcLgZydbcHPW/iavucNQnIVC7w3p0HK1PcMI 2AsuI+0pF/SCN4EBGFoJV99bzkmLtATMa1/X1aKo33RmdspbZfs0X8TFPPC09xHL/5On Xvv20xk9WL6QvFDWipSGxP3y9JB6t49nRbDdAbnQ7tI4/qbQkKw9KP+rMLZy8OfvoBkH 2qq1tFq3GVwFls/3IcvAav6T5tG74AXYRRm5fx56MOoGl0V/cyJyhSE/zfWcVAhmwjuT x0G6ZJr+sWn+9utGuFt7/YvMXAOBXY7SLZFq6dMsaKW7zUKUG4XevlbWf8nbiSwDfCtO WCXQ== X-Forwarded-Encrypted: i=1; AJvYcCWs3l1QC9clwrNMI4HLspFJZ7t6Iu3Jxx/DaRPrpo2xOfnK2LtUpzACNKT9rEhvtjZK7WAV7+xppZevqYo=@vger.kernel.org X-Gm-Message-State: AOJu0YzRmswoDtWelW3rrmTyeOxR2y2EhWxUZlr8wh9zUWhFMUWgmf7P KKUg4D5QNl1fPGtQdr5Z2eSPFcE3uYh5J548fYD2CExOccqBceu7lnVbgUM0EN4PBEWBvaR3Oo3 27Te/Ht9wZg== X-Google-Smtp-Source: AGHT+IGo665Ew+lDhjsYx4+ikVjCW3asVY4ETWxT3+Qseq7vels4sVkpbO2ooqh/IMHXavmdP8kgSA0KOmA1 X-Received: from plmd12.prod.google.com ([2002:a17:903:ecc:b0:248:c91f:34f3]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a17:902:e945:b0:246:b157:5e01 with SMTP id d9443c01a7336-246b157697dmr224023085ad.61.1756440702262; Thu, 28 Aug 2025 21:11:42 -0700 (PDT) Date: Thu, 28 Aug 2025 21:10:48 -0700 In-Reply-To: <20250829041104.4186320-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: <20250829041104.4186320-1-irogers@google.com> X-Mailer: git-send-email 2.51.0.318.gd7df087d1a-goog Message-ID: <20250829041104.4186320-8-irogers@google.com> Subject: [PATCH v5 07/22] perf jevents: Add br metric group for branch statistics on Intel From: Ian Rogers To: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Namhyung Kim , Mark Rutland , Alexander Shishkin , Jiri Olsa , Ian Rogers , Adrian Hunter , Kan Liang , James Clark , Xu Yang , linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org, John Garry , Jing Zhang , Sandipan Das , Benjamin Gray , Perry Taylor , Samantha Alt , Caleb Biggers , Weilin Wang , Edward Baker , Thomas Falcon 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. 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 a353e682df96..53b9606ef1a2 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, that = were " + "not correctly predicted as a percentage of all branch instruc= ions.", + misp_r, "100%"), + Metric("lpm_br_total_insn_between_branches", + "The number of instructions divided by the number of branch= es.", + ins_r, "insn"), + Metric("lpm_br_total_insn_fe_resteers", + "The number of resync branches per second.", clr_r, "req/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 second.= ", + 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.", misp_r, + "100%") if misp_r else None, + Metric( + "lpm_br_taken_insn_between_branches", + "The number of instructions divided by the number of taken bra= nches.", + 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 instruct= ions.", + br_r, "insn/s"), + Metric("lpm_br_cond_insn_between_branches", + "The number of instructions divided by the number of condit= ional " + "branches.", ins_r, "insn"), + Metric("lpm_br_cond_mispred", + "Retired conditional branch instructions mispredicted as 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 branc= h instructions.", + br_r, "insn/s"), + Metric("lpm_br_cond_insn_between_branches", + "The number of instructions divided by the number of not ta= ken conditional " + "branches.", ins_r, "insn"), + Metric("lpm_br_cond_mispred", + "Retired not taken conditional branch instructions mispredi= cted as a " + "percentage of all not taken conditional branches.", misp_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 per se= cond.", + br_r, "insn/s"), + Metric( + "lpm_br_far_insn_between_branches", + "The number of instructions divided by the number of far branc= hes.", + ins_r, "insn"), + ]) + + return MetricGroup("lpm_br", [Total(), Taken(), Conditional(), Far()], + description=3D"breakdown of retired branch instructio= ns") + + def main() -> None: global _args =20 @@ -151,6 +288,7 @@ def main() -> None: Rapl(), Smi(), Tsx(), + IntelBr(), ]) =20 =20 --=20 2.51.0.318.gd7df087d1a-goog From nobody Thu Sep 18 04:01:57 2025 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 C2DC22264AB for ; Fri, 29 Aug 2025 04:11:44 +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=1756440706; cv=none; b=KQsc3LFVmmYxlSrttDFNsTYFXzSoM35ENcsSQpIEOH26vOEXqRpyhx0NQAFT8t9n6i91BTKbiqfKdLufQ9EG8G67B3Imx9nGyaizYmLnhmij1Xm1p8GfeMKNIW3/3bbLfEgZfoqjEqLKcpwuRUM/yAn6jSEbpKxLRqoYfLoMomM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756440706; c=relaxed/simple; bh=JVvQ5aWyqS8ABkGdJPYJAdFSP+crBiS5W5abbZcmtwk=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=eEo0HaWpLdKpCgFnT5ecjG485zq0KgD+2FSYIG1mXgaptSUTjByYaIQxMf2FeGpBduBW2rbcYwBaOZecxi27Y85rufeWUEOQ0KO5n9naClIfKHG7uyT+016do4CKAPpqmdxdDCqoJvGQIAAEISJnTeopeeToSCLuzr8j5i8TxGY= 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=mCJz0U6h; 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="mCJz0U6h" Received: by mail-pl1-f202.google.com with SMTP id d9443c01a7336-248f7745075so14038475ad.3 for ; Thu, 28 Aug 2025 21:11:44 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1756440704; x=1757045504; 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=J11/c7k6d7NRkZubqaZjO1lfgt3+pUlQA9Rm7sQ3hB8=; b=mCJz0U6hLGumUFn4lP0MQYSJJHtijwVASyoOSGH3SpOiiOwgzpZafvy4J8i3pW8u4P PprdkC0bo4ZZ0RV2j0vX7BoD1KEYmNdkFcFgM1UZxIv5egbxBXzV/7DQsD/5nbIdvcJI S7DPSr5g++mEVVTOWyV1TBnZK8Fy+PN09sr7LY5gIy3zsFgV2aL3xN/UpsTzkp64QTQW 2wC12NP1wb/MhHWUnIMaMpH0huVqoSlijwQeJmEW5LGTul8VtvnZM4mzK23oARwxUEoy AhYNCfGzPm/z7DhPhL71mGAIxzmCG8YixnXB1nwMsn8RG1rE49Y5cjDHcrxptG5GVTGi eRoA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1756440704; x=1757045504; 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=J11/c7k6d7NRkZubqaZjO1lfgt3+pUlQA9Rm7sQ3hB8=; b=cSOInvtVKM35tQsndaI2SIyj9IplpJI7OvOpPuZANYGkH/ynuJzMxQq5QVqsnEahtp OvNyaJ68npMshLyIlr/qayq1TPUZAELIaDDdnqa1J0yMCbnVVRiNXEjugzwZK8npz/1C QBfzc9mbVpy0b4yxk3ZUGg/WTB5WiPqM0ixz60l+eM7U1Kmx7IfnnwOy9p9qVTJBOsAO FHaMEEwcEJ4x5sxtTmbIKzTT8Rmqc6D+REAiz6KlNTXeQtdag5e4W6Bx83RbYrkc39nf XyZN5wtklPI3HXADyMrw27mXV1EAzg0dF3cAvoNmkWP6564NVY3uXEx8VZ2ju6oSYAY+ ESRw== X-Forwarded-Encrypted: i=1; AJvYcCXxVKCAB87H13OvkasCFPewIddw3y7RPTjCWn7MJwxXi7hHYJp9OPGnCSANTIxyaDU1gxYPUnRgFnIznKM=@vger.kernel.org X-Gm-Message-State: AOJu0YxWMaaw7Uz6kRvsTLU/kNx4QFRntLg0FwrgyMm8dm4N5+qW2gn9 OWWxaoPxDQDNswOx77QBdH3r7bJ0n2m0G+5SWWOgnJIGnjNnS5VZrk8uYJkvAeRCuk5e+4DndUW kqLYjPMnFkg== X-Google-Smtp-Source: AGHT+IHFTTxHsWmKNhUSnlrlYAzP8F9m9gYEW5W/LHMaOY+uFVOd1rPMKJ56T26sIn1vCi2rmYMG8qCLMFGo X-Received: from plbkg5.prod.google.com ([2002:a17:903:605:b0:246:9673:3625]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a17:903:2389:b0:249:18a:baad with SMTP id d9443c01a7336-249018abd51mr39805395ad.1.1756440704070; Thu, 28 Aug 2025 21:11:44 -0700 (PDT) Date: Thu, 28 Aug 2025 21:10:49 -0700 In-Reply-To: <20250829041104.4186320-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: <20250829041104.4186320-1-irogers@google.com> X-Mailer: git-send-email 2.51.0.318.gd7df087d1a-goog Message-ID: <20250829041104.4186320-9-irogers@google.com> Subject: [PATCH v5 08/22] perf jevents: Add software prefetch (swpf) metric group for Intel From: Ian Rogers To: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Namhyung Kim , Mark Rutland , Alexander Shishkin , Jiri Olsa , Ian Rogers , Adrian Hunter , Kan Liang , James Clark , Xu Yang , linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org, John Garry , Jing Zhang , Sandipan Das , Benjamin Gray , Perry Taylor , Samantha Alt , Caleb Biggers , Weilin Wang , Edward Baker , Thomas Falcon Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Add metrics that breakdown software prefetch instruction use. Signed-off-by: Ian Rogers --- tools/perf/pmu-events/intel_metrics.py | 65 ++++++++++++++++++++++++++ 1 file changed, 65 insertions(+) diff --git a/tools/perf/pmu-events/intel_metrics.py b/tools/perf/pmu-events= /intel_metrics.py index 53b9606ef1a2..cfeafb58e8b4 100755 --- a/tools/perf/pmu-events/intel_metrics.py +++ b/tools/perf/pmu-events/intel_metrics.py @@ -261,6 +261,70 @@ def IntelBr(): description=3D"breakdown of retired branch instructio= ns") =20 =20 +def IntelSwpf() -> Optional[MetricGroup]: + ins =3D Event("instructions") + try: + s_ld =3D Event("MEM_INST_RETIRED.ALL_LOADS", "MEM_UOPS_RETIRED.ALL_LOA= DS") + 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 p= er second", + swp_r, "swpf/s"), + Metric("lpm_swpf_totals_insn_per_pf", + "Average number of instructions between software prefetch= es", + 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 a= ll 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 al= l 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 percent= 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 all= 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 @@ -289,6 +353,7 @@ def main() -> None: Smi(), Tsx(), IntelBr(), + IntelSwpf(), ]) =20 =20 --=20 2.51.0.318.gd7df087d1a-goog From nobody Thu Sep 18 04:01:57 2025 Received: from mail-pg1-f201.google.com (mail-pg1-f201.google.com [209.85.215.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 610F4242D70 for ; Fri, 29 Aug 2025 04:11:46 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.215.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756440707; cv=none; b=VaEO1Eq/LOuhizztaLgscIu2qcUYcaJ6XZs/VsulLForpd2P/ZzYBTcwOk+hXLV5yBvzZPkA+9itFPQUXNcX3xyPVw7s5T1iimFc6/+Bs4cSoxDeroHVN08TucGFtvT93DwwI6gd4R4y3MaF9wRmOaGhLBZBdKrWoC1aEd9x3SQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756440707; c=relaxed/simple; bh=zfYwywDhmS19+ihI/5ySZ/K6DgzjXK/uqOpp9y8XCrQ=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=Mtqz4D4/JyAEPYdtxULSuDfYnT1NqqXy2ohgyICaBlEm2ssYv5IGG8Zkq8csx8WuJFs3kfPNMLDHTkrqk3SpZ8VXGuako7bSLK4dqGsgY+WuVPmcgSQz9Fbz94U9Zk1ElEZaY28IQpygaImgR0bQNc6JtGOipdxNv21wbluusvc= 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=t6cvOE4V; arc=none smtp.client-ip=209.85.215.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="t6cvOE4V" Received: by mail-pg1-f201.google.com with SMTP id 41be03b00d2f7-b4c54676185so1439379a12.3 for ; Thu, 28 Aug 2025 21:11:46 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1756440706; x=1757045506; 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=UhKeHAvUy0hnoIlAuEt/dp1Klyhju1nBf8M9CfS8ME0=; b=t6cvOE4VY7XkaqIGO8P0bSq+PMr9nOZc7VLUy7MMCTTsAPej3QpKM61a/c2tvF854T YY0YL5Hh1BSac3J0ooUiJg4FisQGBLuV4vOKZuZAdEwKAN7vkSQ6tH6ChdOja3m3LBcD CF3ENYUf29Jhu+6LZdGu0kHByPpFxcwtDINt7YrLeuX/MFmUEVZ3BeaDLv5haIO0Bjay XMHnb8Bofrrdi7Xm3EaGRc6Af2E3qP71k1SfgXeHUZE10+3PP9lpol4XQRcNlXSrZfxp hdYj1h6clqSDSe8jBSqD4T2OM/6vPrqHVOB4VuFKnZkOR64PDSWsh+tRsDqHttwB1TLB floA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1756440706; x=1757045506; 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=UhKeHAvUy0hnoIlAuEt/dp1Klyhju1nBf8M9CfS8ME0=; b=CNf9iaVUrEkdb71nb0U3HgQY/fRNlkgWyqRisBVVfIGnOv76qEK7z8UY+kalh24wdL sxyFMbZr6I+HPtFUK9Oz4+KeQeAXDeJ2JwOAhSwu+S1Tr9FeeyLkJk751p7gXU2kTE7G VaKoUXzWWL0VSmMPAAhFRNQHBxMTCjTk84hbT24KFmMVEdxtIIz3viXfmS19F0iD6W1a 3Gk9/SABTtvYlUBZ4T64UdV4w/Wx8cPnvyTSACNcM/TNtt9Ymae6/WWDO2qR3Xg5CjXZ XN2hl0HLRjOb9QjVxmYStTpTVEJgWDggpQo68Z2ZP5Zqzdo5sEnTfcLkNMzx+F7QD1OO 4Tcw== X-Forwarded-Encrypted: i=1; AJvYcCXnkWfYlgeHqO2sZYLmWki5auIF7Gq7YJZyvoa3FW4MFSNDh6YBwDx8kRFPC4+AWddREgZ/M5uL9vhCGNE=@vger.kernel.org X-Gm-Message-State: AOJu0Yy6nKMyR5lct91Zs7aTjIAYrpCeFAk3kwKCNWxCoedq7NO62Mvl pTwXmZTZhmvcF8Gwmup16ysH1HpUk/yVoTymZZacIG92NomLhv8r/QNLJm4QVLLMuedRJJ6Cc/0 1SiKFxYez0w== X-Google-Smtp-Source: AGHT+IEmlXJ0ceJYM48S+eToRHxpgYs5lELUmy1KTtYP3hiRwrvVoykzf2TNA73kX+gCQtzXj7UqdHnIIn31 X-Received: from pjx5.prod.google.com ([2002:a17:90b:5685:b0:31f:3227:1724]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a20:7286:b0:243:ae10:2433 with SMTP id adf61e73a8af0-243ae1026c0mr8637290637.40.1756440705784; Thu, 28 Aug 2025 21:11:45 -0700 (PDT) Date: Thu, 28 Aug 2025 21:10:50 -0700 In-Reply-To: <20250829041104.4186320-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: <20250829041104.4186320-1-irogers@google.com> X-Mailer: git-send-email 2.51.0.318.gd7df087d1a-goog Message-ID: <20250829041104.4186320-10-irogers@google.com> Subject: [PATCH v5 09/22] perf jevents: Add ports metric group giving utilization on Intel From: Ian Rogers To: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Namhyung Kim , Mark Rutland , Alexander Shishkin , Jiri Olsa , Ian Rogers , Adrian Hunter , Kan Liang , James Clark , Xu Yang , linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org, John Garry , Jing Zhang , Sandipan Das , Benjamin Gray , Perry Taylor , Samantha Alt , Caleb Biggers , Weilin Wang , Edward Baker , Thomas Falcon 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. Signed-off-by: Ian Rogers --- tools/perf/pmu-events/intel_metrics.py | 33 ++++++++++++++++++++++++-- 1 file changed, 31 insertions(+), 2 deletions(-) diff --git a/tools/perf/pmu-events/intel_metrics.py b/tools/perf/pmu-events= /intel_metrics.py index cfeafb58e8b4..288903707bc8 100755 --- a/tools/perf/pmu-events/intel_metrics.py +++ b/tools/perf/pmu-events/intel_metrics.py @@ -1,12 +1,13 @@ #!/usr/bin/env python3 # SPDX-License-Identifier: (LGPL-2.1 OR BSD-2-Clause) 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) import argparse import json import math import os +import re from typing import Optional =20 # Global command line arguments. @@ -261,6 +262,33 @@ def IntelBr(): description=3D"breakdown of retired branch instructio= ns") =20 =20 +def IntelPorts() -> Optional[MetricGroup]: + pipeline_events =3D json.load(open(f"{_args.events_path}/x86/{_args.mode= l}/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["EventNam= e"]): + 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 (higher is= better)", + d_ratio(Event(name), cyc), "100%")) + if len(metrics) =3D=3D 0: + return None + + return MetricGroup("lpm_ports", metrics, "functional unit (port) utiliza= tion -- " + "fraction of cycles each port is utilized (higher is = better)") + + def IntelSwpf() -> Optional[MetricGroup]: ins =3D Event("instructions") try: @@ -353,6 +381,7 @@ def main() -> None: Smi(), Tsx(), IntelBr(), + IntelPorts(), IntelSwpf(), ]) =20 --=20 2.51.0.318.gd7df087d1a-goog From nobody Thu Sep 18 04:01:57 2025 Received: from mail-pj1-f74.google.com (mail-pj1-f74.google.com [209.85.216.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 2CF9724503F for ; Fri, 29 Aug 2025 04:11:47 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.74 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756440709; cv=none; b=vFq7+SP6YU7RBWU3MKWpTTiY2+8ecS0T7rWmYxMxmabX4AAvDaMtvvB3yRh7TVQlLUBcemY17kwrqeSXwuf4wGVXPmiL8vF+NNeAOWBLUth0nRa1Nx9fHsObaCAPpbS1T7RovYlLIL0ECbioZzV8VNuj0pGZek9SSbYHC2moBfw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756440709; c=relaxed/simple; bh=gvDcjeOLTicwy7bFNk0EZzC8tlfe6ooyxBVvzKAOyhA=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=hdz3boU9DUX20N/ACboDLNlzuVeCsrsMLo2YezhTgn2QMot3ig2ubEWybpIfrPUQv2AhSn8rtftwHlYmgttH1kG7XaJ3SsDFHdd42qbtlu2FGO1B5X9LsBCVgDJhaZ7g482G3N70dt/vf/JVxcddOFmIixfv7skYi2U2ZmYxXIc= 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=3Ky7oZH7; arc=none smtp.client-ip=209.85.216.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="3Ky7oZH7" Received: by mail-pj1-f74.google.com with SMTP id 98e67ed59e1d1-325ce108e45so1715938a91.0 for ; Thu, 28 Aug 2025 21:11:47 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1756440707; x=1757045507; 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=mydIbqYmeD+M1E5aaMsoMeL1BEQRJsGP9G4Ak+dwwN4=; b=3Ky7oZH7sfPtJm/QGi1mhj+ULBoTbLiUSA6a2F0V+zcUvowsGXNDFwe9wXFSl/bWwu u/1aOs2BTmaZTLPu8+hH7ifZSXq8Ph15b7mK+igOn4dI8+NvP6ulTEqLmJ6Mm+9kw8HF J3gL8Ldefkj/X7KGnT8zwNaTyypa+s/DdQJcz1rLjGIjFcU3sY/D3YJ53p5FnkV6EZqB F+4HJ0ipK4+qKYWV0mppYQ5hMoCEwILXVTQy6ZIsRsXdYmmflH6fMls+OoSQMQ4kqvM9 M95v/uaUIxGY0qpLdFStP8Zcti/F+zpZ+94VZqhcCO4yKNtOGKsJmMExO8dtEeAJY35o WrHg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1756440707; x=1757045507; 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=mydIbqYmeD+M1E5aaMsoMeL1BEQRJsGP9G4Ak+dwwN4=; b=cHl/CXMxiWbUDFvRJpSNGZJQF5GPIoCHht+xHNq8oedvAvpSJEsyHDEoH8KGu+4V6s nd/XC4QoNz/ighVGVQlOCOSKG16zZAMTbntSuzocBNQCAcrDp+rCokoABdV4/aUrb7JE gYhviVQdJ5Lu1zk2uYSeaNppHDyQFsNd+lAE7ehuu1Q3/w6irLaCgLCjd2tKl674ZE24 c6SOsUR/Yavcm3Rq6PY0hLO4ssVS9CqYPyWdFF4bibBNHgQjN8bOqBhgmfeeRKfrOOrn nBqX7ry5heIYQ9fKv9v9GRbgX8X8ay0vb+p7l6D2BEQkrpvSMNzReIOnasR5SQeAmSHF hwmw== X-Forwarded-Encrypted: i=1; AJvYcCWwEIQXcHwZbYXtQ97zv616b20yoyQcEICezwjXtYJVPONarJo49ffIbgP999w7YVS9L7FHMX+szXJB4fU=@vger.kernel.org X-Gm-Message-State: AOJu0Yz8fgIkqi0gzE8/UBowdT8a9ONdSZWcwGsVSimXjC9dpXLEZDs5 7mEOKNmsOfpknhReN5UI52aJwCjczqOFptsW4e1xWImiEM39ccJmQ1GXtf/QaZaJe+SVifKl0IO ErgZT7z/kFw== X-Google-Smtp-Source: AGHT+IGBXv4x9Go3sBjwsmooSP0mKc90r/3w0gn0eX/4RYSA6tl0Im98SRzCkTyRv1oqlbkQKN1mq3wfsXpG X-Received: from pjcc15.prod.google.com ([2002:a17:90b:574f:b0:325:8e70:8d5e]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a17:90b:19cc:b0:327:be52:966e with SMTP id 98e67ed59e1d1-327be529936mr3287030a91.11.1756440707399; Thu, 28 Aug 2025 21:11:47 -0700 (PDT) Date: Thu, 28 Aug 2025 21:10:51 -0700 In-Reply-To: <20250829041104.4186320-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: <20250829041104.4186320-1-irogers@google.com> X-Mailer: git-send-email 2.51.0.318.gd7df087d1a-goog Message-ID: <20250829041104.4186320-11-irogers@google.com> Subject: [PATCH v5 10/22] perf jevents: Add L2 metrics for Intel From: Ian Rogers To: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Namhyung Kim , Mark Rutland , Alexander Shishkin , Jiri Olsa , Ian Rogers , Adrian Hunter , Kan Liang , James Clark , Xu Yang , linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org, John Garry , Jing Zhang , Sandipan Das , Benjamin Gray , Perry Taylor , Samantha Alt , Caleb Biggers , Weilin Wang , Edward Baker , Thomas Falcon 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. 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 288903707bc8..1bac424aca6a 100755 --- a/tools/perf/pmu-events/intel_metrics.py +++ b/tools/perf/pmu-events/intel_metrics.py @@ -262,6 +262,175 @@ def IntelBr(): description=3D"breakdown of retired branch instructio= ns") =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 second", + 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 misses", + d_ratio(DC_PFM, l2_pf_all), "100%"), + Metric("lpm_l2_hwpf_useless", "L2 cache hardware prefetcher useless = prefetches per second", + l2_useless_rate, "100%") if l2_useless_rate else None, + Metric("lpm_l2_hwpf_requests", "L2 cache hardware prefetcher request= s per second", + l2_pf_rrate, "100%"), + Metric("lpm_l2_hwpf_misses", "L2 cache hardware prefetcher misses pe= r 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 (RFO) mi= sses", + 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 (RFO) mi= sses 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 second", + 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 li= nes 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 l= ines 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 dr= opped 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.mode= l}/pipeline.json")) =20 @@ -381,6 +550,7 @@ def main() -> None: Smi(), Tsx(), IntelBr(), + IntelL2(), IntelPorts(), IntelSwpf(), ]) --=20 2.51.0.318.gd7df087d1a-goog From nobody Thu Sep 18 04:01:57 2025 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 0756C2472BA for ; Fri, 29 Aug 2025 04:11:49 +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=1756440711; cv=none; b=UHCWxR2v8dp0mfAkfQs+Am1RxDq7hRWS+LvBlaN1Vc0Bd0jTy4BRKoOwJcttGuGA5ldDB7uwgrw2qiV6qndyDhYnlavE0FEigHMFIXVxFXpPywMhwqgB9VplzZJwlipw81Fc9r50WZuc7Sj5LMxVcOVR9AkxcWjMReUFTq2sRdk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756440711; c=relaxed/simple; bh=iQ0JxbwfKDxqvEgTX3uSAYFB+KqUzk+ISHbXFJ36mxU=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=YU9lhqpyTGnPaRy01A0BxRJdPKsVy9gQ7DGRXpIaZIN+Fy73KcVEiwKKUBFaH1h5okRnMTwfx5OFJyzxK6AoYLOnmwqfaTpA/UTlf5q1psCqLDMkTGbZ4OFz0XjFOppFkuOAAiAOTTDsSsUwvhNfPHyF4XtLqL+eYpDOQUMnJJQ= 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=NiWGIvIz; 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="NiWGIvIz" Received: by mail-pg1-f202.google.com with SMTP id 41be03b00d2f7-b47174b3427so1420729a12.2 for ; Thu, 28 Aug 2025 21:11:49 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1756440709; x=1757045509; 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=7lU92ZApmkWPRDApvNzDuJBwqNr0PRLP3cl0lgj5yrM=; b=NiWGIvIzlpV4TD0r0clpp3qMgpETPHlDUkCtdmJBAcJS9s/fgXpXOx/i4s8MuHIwkc /RC6Ez4hSdgv1V1/lzKJJTGmcW19LbFssUGjLn7D8jRlOyWBtgu3xpyfD/ozsJRzJc5Y 1e/KOcwilkQ/TNs8XVyZnsnOniPfJulQ6sH2Snf0W/PLtJWFWuGzyLnzslzZLsp+9c8S iWqakVkAeJbml0VIzeUaTyfSrqr/uUNfeQdQTdNBxOR5kYw3R6MBF+rooAuLEwNhdvMp VjGM676FKchNmyk4TxlWzNajYkGSJxKepcb7Vb8lqiM6q69eZS6OPL/1JVN2P3MXYmLk iGUg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1756440709; x=1757045509; 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=7lU92ZApmkWPRDApvNzDuJBwqNr0PRLP3cl0lgj5yrM=; b=Saw26h+FPoj9rZK6Xfkl4NqOmmwVpolVIR+yfkKWniDu7/gN5rzwR02wJeDXnorCi6 pamhj7ZpAlGBVMtarWL2CKx1KValbS6IfyN13ii4DfdsT6UtnUYj/xqspcXqqZduL25J wcmFMyJ5K2PM0O8JniFaik4XsF66F0Kpg9aPKIAdy84LH+pYgqHQQjZEAjppzg59vzuV 5biVTa4ge71PTpfpR1NMdhEVaFAtepskDwqJdPt8P9GgaNmBScVgB+DpFpNMj2QThnMw KWgzNrgUyq8h+8PLKzttpnNvv4hFNdUJtF/vW0b8iGJA4sgFz/GcIkLJkP4kOmB7jdrE YMbg== X-Forwarded-Encrypted: i=1; AJvYcCUQGErKMrOQj8BM30gUjviBpIDEuY4oixSIUt520F2+OryGQmo9RZBt2pB9f+l5CKuJiaTCRFsKgNWwGYI=@vger.kernel.org X-Gm-Message-State: AOJu0Yz2l7K8n0wwoGecqoeuWlK+Oja0DLFAp7Ug8WrDzBVWywB2TKQH BZf8IleHOy23vMHQTfCr1YA3A9N66u+4GTxQQsOUpnPdQrp92hUO/miroEPqekAmSbC5edwIxOd 7VCwD7SHWzw== X-Google-Smtp-Source: AGHT+IFEdDkRRitZ8GEh7HxeyHdlak/t/w7h0SDQCKXO1VCeMBEVCX7vgWnKpqZrSQdfvYpWowv8d5mJsJ+k X-Received: from plrs18.prod.google.com ([2002:a17:902:b192:b0:237:cedc:1467]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a17:902:d2cc:b0:246:a543:199 with SMTP id d9443c01a7336-246a54304demr302132845ad.54.1756440709309; Thu, 28 Aug 2025 21:11:49 -0700 (PDT) Date: Thu, 28 Aug 2025 21:10:52 -0700 In-Reply-To: <20250829041104.4186320-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: <20250829041104.4186320-1-irogers@google.com> X-Mailer: git-send-email 2.51.0.318.gd7df087d1a-goog Message-ID: <20250829041104.4186320-12-irogers@google.com> Subject: [PATCH v5 11/22] perf jevents: Add load store breakdown metrics ldst for Intel From: Ian Rogers To: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Namhyung Kim , Mark Rutland , Alexander Shishkin , Jiri Olsa , Ian Rogers , Adrian Hunter , Kan Liang , James Clark , Xu Yang , linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org, John Garry , Jing Zhang , Sandipan Das , Benjamin Gray , Perry Taylor , Samantha Alt , Caleb Biggers , Weilin Wang , Edward Baker , Thomas Falcon 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. Signed-off-by: Ian Rogers --- tools/perf/pmu-events/intel_metrics.py | 86 +++++++++++++++++++++++++- 1 file changed, 85 insertions(+), 1 deletion(-) diff --git a/tools/perf/pmu-events/intel_metrics.py b/tools/perf/pmu-events= /intel_metrics.py index 1bac424aca6a..03983107c5c0 100755 --- a/tools/perf/pmu-events/intel_metrics.py +++ b/tools/perf/pmu-events/intel_metrics.py @@ -2,7 +2,7 @@ # SPDX-License-Identifier: (LGPL-2.1 OR BSD-2-Clause) 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) import argparse import json import math @@ -522,6 +522,89 @@ 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_LO= ADS") + LDST_ST =3D Event("MEM_INST_RETIRED.ALL_STORES", "MEM_UOPS_RETIRED.ALL_S= TORES") + 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 lo= ads", + ld_rate, "loads"), + Metric("lpm_ldst_total_stores", "Load/store instructions total s= tores", + st_rate, "stores"), + ]), + MetricGroup("lpm_ldst_prcnt", [ + Metric("lpm_ldst_prcnt_loads", "Percent of all instructions that= are loads", + d_ratio(LDST_LD, ins), "100%"), + Metric("lpm_ldst_prcnt_stores", "Percent of all instructions tha= t 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 =3D ldst_ret_constraint), + Metric("lpm_ldst_ret_lds_2", "Retired loads in 2 cycles", + d_ratio(max(LDST_LDC2 - LDST_LDC3, 0), cyc), "100%", + constraint =3D ldst_ret_constraint), + Metric("lpm_ldst_ret_lds_3", "Retired loads in 3 or more cycles", + 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 =3D ldst_ret_constraint), + Metric("lpm_ldst_ret_sts_2", "Retired stores in 2 cycles", + d_ratio(max(LDST_STC2 - LDST_STC3, 0), cyc), "100%", + constraint =3D ldst_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 sec= ond", + 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 @@ -551,6 +634,7 @@ def main() -> None: Tsx(), IntelBr(), IntelL2(), + IntelLdSt(), IntelPorts(), IntelSwpf(), ]) --=20 2.51.0.318.gd7df087d1a-goog From nobody Thu Sep 18 04:01:57 2025 Received: from mail-pl1-f201.google.com (mail-pl1-f201.google.com [209.85.214.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 3F13824E4A8 for ; Fri, 29 Aug 2025 04:11:52 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756440713; cv=none; b=k1piJstUW3Vz7EzFJJo9xTO0t1BEFALOY15Eeho849UgIp1pkJUwSXCFizcPRX58Y/tY61u5iwz5L7hF8Z6g3yIKFIP3fmXKYzPRjBaa5q5CU81l92TuLXs/tuA6fSvf1qJ1jwTvLnS4lzvTbRjMQtH4hSKfYCcUOvgM2831pU0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756440713; c=relaxed/simple; bh=Hp5WV0n8SnsdwaoqohkLH+hIH0gHJxo/yXPqFsFnseg=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=IFHcF4pxEc180aEt0YkFiOTzX/6IuoJi2R0Y4RraDCt54Ye8rziRbkFk3THG7WM1qWovLBAO9V6th9XJzM9EcI7hrR2TgQSP4C4b5VHTHEDWcE115LSzr354+kn1I5zr1WODuLy5qkRjKi21Uk9zlaFlHIsyh+CYUc1cmzAMdms= 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=RFUNEay+; arc=none smtp.client-ip=209.85.214.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="RFUNEay+" Received: by mail-pl1-f201.google.com with SMTP id d9443c01a7336-248ae61487aso18646485ad.0 for ; Thu, 28 Aug 2025 21:11:52 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1756440711; x=1757045511; 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=HhMZdtMjJhuzLc6gr9GuhAcC6OciUjcHbgWMOwK4Tk0=; b=RFUNEay+gPu0Mdj4bQ0ttfkLBO9q1dJFEfjRTpW0pEJWZqzIg5+qo3ZHK1sEwPjoto XkLMzuu5DFx1eVIEnY0Blz2G16O7xLmtkruXD5nYR+BHBiczYXEUXLLEzLABs1yjk6CR b6Zm/uM6vQ0chZQabu3zprgSg6qJq7lBoyYCb3CjJhpOEtmPYqZoO8BLqRZq0Z1/z88G geSF1DDwoBx0RgfDP/un7ztF4dfDrrT1z03IhiUe8botWpTHfshe35lYdcNtJny5uq4f oHSKG/hofBtwdQjFQLX/oTnyQnz3YBC8Q8m3Lwl7nZqYzJ/60o+UkrG9S18Fw4Kr03GW /1OQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1756440711; x=1757045511; 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=HhMZdtMjJhuzLc6gr9GuhAcC6OciUjcHbgWMOwK4Tk0=; b=PuMfdXTGUrtMyI/e1rc5v8YcXTa9Km3r8BF3q0S4M5iMB4T/9eOX8otxN8cPiYHsNs k+nzk04cZq6ulcPNpVTXlE1+/iuIZOmx0XUIBAioSvXZWvyHctB0gJeMKHEHEype/CNF 7VcG2O4l19cuW+RXLZY6kmJB0w3NyWtcP367quOJc+819gpbktXbDtqFgi7T5taM26y4 H28pGAZmj15PN6CKayb79O5HiI+rW35ZzZoaumrwfGSlLJSYo8Tpk/UI7U4yRyxVdF3s SGymEJ4WTguCf3rp2+ELC9RHYi3TYpcprn/pC9Kcf3G/xmjOMV/VIBwPukAqVPs3LRM8 FaXg== X-Forwarded-Encrypted: i=1; AJvYcCW4ITdiZPQEbAs3xJunX9fSSjnrQzh5y3lPhmMIvFeBWEbTvc3ow8pqnH/4+NTWDPO3DacxRJhErWhzKok=@vger.kernel.org X-Gm-Message-State: AOJu0YygJsXI3QrPp6PejucYbWyBsGecM/2sYBHkryY6YnpD/0Dr3CCq v8ipbKGGU0Ze80Dp7wqr0SNCMyNItz+kl7McC62u/yabTKtEldlbLJDrl7RBP6bRJUvtbn7zDYd oOIz4952F8A== X-Google-Smtp-Source: AGHT+IHF7CHbu3OvL/I74+5b3sbk1r/AjOT14kvv4VtBF/x1sIiXfR96ALsS6D+gUrOUzz1+usM/iTT4ggNj X-Received: from plbm11.prod.google.com ([2002:a17:902:d18b:b0:249:329:c51c]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a17:903:3843:b0:248:741f:2c31 with SMTP id d9443c01a7336-248741f2e2fmr166214065ad.18.1756440711503; Thu, 28 Aug 2025 21:11:51 -0700 (PDT) Date: Thu, 28 Aug 2025 21:10:53 -0700 In-Reply-To: <20250829041104.4186320-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: <20250829041104.4186320-1-irogers@google.com> X-Mailer: git-send-email 2.51.0.318.gd7df087d1a-goog Message-ID: <20250829041104.4186320-13-irogers@google.com> Subject: [PATCH v5 12/22] perf jevents: Add ILP metrics for Intel From: Ian Rogers To: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Namhyung Kim , Mark Rutland , Alexander Shishkin , Jiri Olsa , Ian Rogers , Adrian Hunter , Kan Liang , James Clark , Xu Yang , linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org, John Garry , Jing Zhang , Sandipan Das , Benjamin Gray , Perry Taylor , Samantha Alt , Caleb Biggers , Weilin Wang , Edward Baker , Thomas Falcon 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. Signed-off-by: Ian Rogers --- tools/perf/pmu-events/intel_metrics.py | 39 ++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/tools/perf/pmu-events/intel_metrics.py b/tools/perf/pmu-events= /intel_metrics.py index 03983107c5c0..df0e1dce041c 100755 --- a/tools/perf/pmu-events/intel_metrics.py +++ b/tools/perf/pmu-events/intel_metrics.py @@ -262,6 +262,44 @@ def IntelBr(): description=3D"breakdown of retired branch instructio= ns") =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_cycles)= 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 cy= cles", + d_ratio(low, tsc), "100%"), + Metric("lpm_ilp_inst_ret_0", + "Instructions retired in 0 cycles as a percentage of all cycl= es", + ilp0, "100%"), + Metric("lpm_ilp_inst_ret_1", + "Instructions retired in 1 cycles as a percentage of all cycl= es", + ilp[0], "100%"), + Metric("lpm_ilp_inst_ret_2", + "Instructions retired in 2 cycles as a percentage of all cycl= es", + ilp[1], "100%"), + Metric("lpm_ilp_inst_ret_3", + "Instructions retired in 3 cycles as a percentage of all cycl= es", + ilp[2], "100%"), + Metric("lpm_ilp_inst_ret_4", + "Instructions retired in 4 cycles as a percentage of all cycl= es", + ilp[3], "100%"), + Metric("lpm_ilp_inst_ret_5", + "Instructions retired in 5 or more cycles as a percentage of = all cycles", + ilp[4], "100%"), + ]) + + def IntelL2() -> Optional[MetricGroup]: try: DC_HIT =3D Event("L2_RQSTS.DEMAND_DATA_RD_HIT") @@ -633,6 +671,7 @@ def main() -> None: Smi(), Tsx(), IntelBr(), + IntelIlp(), IntelL2(), IntelLdSt(), IntelPorts(), --=20 2.51.0.318.gd7df087d1a-goog From nobody Thu Sep 18 04:01:57 2025 Received: from mail-pj1-f73.google.com (mail-pj1-f73.google.com [209.85.216.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 4D70B253B71 for ; Fri, 29 Aug 2025 04:11:54 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.73 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756440715; cv=none; b=YHEBBTLcanvB7yJXV4mvLfAzra1JXNkQJ6+OIMPnOvws4hZ33zNqpjV7g4/fbPSG3x8mzheqCjgUlwLm6Hyre2CYONQVVL89wtAv2R4BfgXQwk16f1sW2p00XlxNP2aXx8cDWQHxHbtqQ5bkwT1Kk7MjNlktXajFDq7Z6vaKCGI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756440715; c=relaxed/simple; bh=lan6OtYMxNeS1SjsmHeeU/NzNOqeBRB9k+2kHx/JzGs=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=SHbXL7NC/lsg57vyxT8mPgDqn5uVbYIUtB6vlgh4MQcSZWMj/qZ3gmxZ/TVnCk6zkVgjN1u6qQkPUiuUoSkl3z5K3QegUpvTh1RThxlAAvHU+DU6n6F+KWHZMr2XtXhxU8WvVoZNQelVvU1FNiizmSJjSCpGix8KhFxHfQ/bkPg= 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=PStj15HK; arc=none smtp.client-ip=209.85.216.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="PStj15HK" Received: by mail-pj1-f73.google.com with SMTP id 98e67ed59e1d1-327b5e7f2f6so1848621a91.2 for ; Thu, 28 Aug 2025 21:11:54 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1756440713; x=1757045513; 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=gS0ggSa3B78eXuzRtpBd8eGQQtYmBLlFFRtUxftkvfY=; b=PStj15HKSSuE4sEHRWNbMwpzUBSVF6t+m6GY7oAlRWi8mQibYofwOFwOvNrYBWaIRV 9tjIbvEmf2vmgwfs/b8qkX2wmSeZneO30kzMSBg0FXEuQi+lPceY7086Rt7WvZP/uQbY eB7tR/34DbGSHXCjf3Bvnvsh2krrsiswC5yBZSnDzn6RdmGWLtbCNbb4tyh+8SP/d3Q4 zXvSAqkuXJhTeq+u10wrfThvv4uSnreDCVhQpGDp8Ra1M8S/FZLdUbVwyEUbRLH/iYW2 HLQCSm6xFaIUETvQP5xXTymfJMjfJr9t4qj5hCo32qmfzWtIc/l0SOTRQ+r2oP7pWTqI 2KTA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1756440713; x=1757045513; 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=gS0ggSa3B78eXuzRtpBd8eGQQtYmBLlFFRtUxftkvfY=; b=lV/l3FV1aRMdrxFBUaZO6AT5iWtb9Mv1Aei/RbBuGYFba3jtsUSUMmMWKd4hBp7npJ vXlnW4SlLo9givJNwre8E1v8PMAI+ShgTOMhQOh5XKQIIleCodimnUQzZ/1hvR0DTjoV 0QeFojAR3kT8Yq/UkITFb0OR3dCVgUOMglxxJPJFjWdnjS2zoMwAHvVxNjdCSs9kzAUe VbVBhUBrD1UBlVRFZnapwH0GnEUjnUwVF3ZkDt/EGmQSbPAuU3/gdBemlDhykvTwF4Je RgKHEvdhMRVM1QwVx0LTNSCxgKZGH9IfA63urwwxzsIWOkXb0REr1/bWcfJlH4uQJyY7 KU2Q== X-Forwarded-Encrypted: i=1; AJvYcCUPY8sDZNqEr7XvECBzdS3Qw+ES+vjDHhrU0FaWw7Uw5pvfcRMmdKwZ4eAks8CqFUW3XgR77vPcfRVni+g=@vger.kernel.org X-Gm-Message-State: AOJu0Yw14CwKOVTDd+z+OmixbGd6Gi5Ws4hpxiSn5BrTvcH9HNMKS/NV cJ0QWScteusII55Y4j1VsFi4I6Ihc2pnqAiLrPyWh8uH2+sa0eQIOU2OdkTDks8e2Z/GAKLkJNV tqp3J9upddA== X-Google-Smtp-Source: AGHT+IHF3tfh1i3hXHmRmKdBVtbaz8DNMGNPO1B9d929xEINzZyfq597XDPtc+crdVx3L9yl7+eLf9OQ0Q5u X-Received: from pjbdb14.prod.google.com ([2002:a17:90a:d64e:b0:31f:b2f:aeed]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a17:90b:564f:b0:325:211b:da6e with SMTP id 98e67ed59e1d1-325211bdcb3mr31761618a91.32.1756440713558; Thu, 28 Aug 2025 21:11:53 -0700 (PDT) Date: Thu, 28 Aug 2025 21:10:54 -0700 In-Reply-To: <20250829041104.4186320-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: <20250829041104.4186320-1-irogers@google.com> X-Mailer: git-send-email 2.51.0.318.gd7df087d1a-goog Message-ID: <20250829041104.4186320-14-irogers@google.com> Subject: [PATCH v5 13/22] perf jevents: Add context switch metrics for Intel From: Ian Rogers To: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Namhyung Kim , Mark Rutland , Alexander Shishkin , Jiri Olsa , Ian Rogers , Adrian Hunter , Kan Liang , James Clark , Xu Yang , linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org, John Garry , Jing Zhang , Sandipan Das , Benjamin Gray , Perry Taylor , Samantha Alt , Caleb Biggers , Weilin Wang , Edward Baker , Thomas Falcon Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Metrics break down context switches for different kinds of instruction. Signed-off-by: Ian Rogers --- tools/perf/pmu-events/intel_metrics.py | 55 ++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) diff --git a/tools/perf/pmu-events/intel_metrics.py b/tools/perf/pmu-events= /intel_metrics.py index df0e1dce041c..31ef0373d982 100755 --- a/tools/perf/pmu-events/intel_metrics.py +++ b/tools/perf/pmu-events/intel_metrics.py @@ -262,6 +262,60 @@ def IntelBr(): description=3D"breakdown of retired branch instructio= ns") =20 =20 +def IntelCtxSw() -> MetricGroup: + cs =3D Event("context\-switches") + metrics =3D [ + Metric("lpm_cs_rate", "Context switches per second", d_ratio(cs, int= erval_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_LOADS= ") + 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_STOR= ES") + 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 context s= witch", + 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", "L= 2_RQSTS.PF_MISS") + except: + pass + + metrics.append(Metric("lpm_cs_l2_misses", "L2 misses per context switc= h", + 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/") @@ -671,6 +725,7 @@ def main() -> None: Smi(), Tsx(), IntelBr(), + IntelCtxSw(), IntelIlp(), IntelL2(), IntelLdSt(), --=20 2.51.0.318.gd7df087d1a-goog From nobody Thu Sep 18 04:01:57 2025 Received: from mail-pl1-f201.google.com (mail-pl1-f201.google.com [209.85.214.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 EBCCF2561C2 for ; Fri, 29 Aug 2025 04:11:55 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756440717; cv=none; b=rYfI2TiZU6ZTjdG+rMqkr+x0CZGUyHHNhHXsJDF6PXm2BLRAIioAmB6EW+X3bDOqY5SmPtSbuwjCfzTr3RF0fF5Kh++CHwrcrEBWcILXPUs8rwDoSqpodDGH4c5FWQhqpPoaVcI/QacvYtByT/GHL+jCADDJRpEYR6+XQ9hVTm8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756440717; c=relaxed/simple; bh=q83pyc9GwTrguYLrYC4MdMLJFIeKfzXqJnH4QUMmSJI=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=p7RHlqMUptfZvMX4QVJVHsSDtXe8n0ATTtJIY6bvdH8f7gzM4cKqE5+wR4089fRhZ+Kkz1nnxqG0+9of/VrQlEloJGPSy4I7l/7LP5V3v3bWSnxfyGFbfgfseRI98visjM/EzkaW9FnrxI+SdBB1PjJqSNPdEW0PAOFElGaplfY= 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=pj7+Qh4M; arc=none smtp.client-ip=209.85.214.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="pj7+Qh4M" Received: by mail-pl1-f201.google.com with SMTP id d9443c01a7336-2445803f0cfso22205515ad.1 for ; Thu, 28 Aug 2025 21:11:55 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1756440715; x=1757045515; 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=j0cMwOEM/cnBM/HBeAizuwInf3eDMHHlC2/oycrMsIo=; b=pj7+Qh4MKt0+8pd04SGb8waXgLXlalzROEBOZQgr2IJUBAfgKO/yRAnv7uNDimoI0u Ig901m5PRNdGOZPMK/3R+bnaRIncieUwcpPOcKN1jjxzzxN5Dpf1LE34Rn+6vgdPAOC/ 9aLXHRh927fRkINu9YrdSLEZESM99f3BepsstOupjhNqa0d5McCYQ/unRCAsMDmMSHx5 B/lCvupDG1GI8+gFwO8aBmwkoOyOFnPtbWniaAZSRIPZ0O9GEzB6oBsw2tJy0Q04LF3O AU3hVdATYriXCs7asvlrdUBIS+9r7fwrBLdYlRVehQrkYDOYOKiphvCkt2S6lTFRsfAr 9Ymw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1756440715; x=1757045515; 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=j0cMwOEM/cnBM/HBeAizuwInf3eDMHHlC2/oycrMsIo=; b=WxwN7NV+VX8uRaURghSmJZtkDHwCiX/W1gT/W9wcWaAZ2zQKeEKK/4NuiAp/3L42If /6XPeeiIQS+yqz5H2a8bhHUlUdH8Ikna/5IdJpmCgzVe4lJiLAmeRbBMIWSDk/8UOAZv t3IRmLsjJzTIOr5AIR69O8Qo6nV3xU26nklytwBWUa/0K0Q25yDEZ6x0AfGCIw3JvGyy Sd1se6h6D0k3bS1Di5NORwvvWM3V7fQ0YZi9KpGIl+yBnqAVm8/TitReSz3ly/MLoyGR 2IBELvN1874xAzSvURLhSaSJTMdu7SHLD22FDeLFM0LzzxLatZdkEn6D4GjAsh3t4u2T pqcg== X-Forwarded-Encrypted: i=1; AJvYcCVGZ8maaapSOVr/WQSkQfVC6QK+DkTuDHWkgTtxt5UvpnYUSeiaSItixfKH4ZxWwbPvNaacpWI0kfs8Kf4=@vger.kernel.org X-Gm-Message-State: AOJu0Yz54aNfrUrImEWAw9AwFdx+mlwVIoyT/9EdnkxmgzLcSBSz80OU KUj9hF+gtcg9gQTjSsNUsnbJjp9/muQusGKO7PSZnBMV6c7Xl0cUzjor4QJII+Arry6U98oZwyr ordczdqccqw== X-Google-Smtp-Source: AGHT+IFG1itPkTtQQbyHmTn92hb5Gzvbg2Y1UdKnwq/4E07DnXRMz62rPxrZ++zHt3/Of539sE4behT8oMfB X-Received: from plbml4.prod.google.com ([2002:a17:903:34c4:b0:246:8cb:7c1]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a17:903:1c5:b0:23f:df33:21cb with SMTP id d9443c01a7336-2462ef4bf58mr321491015ad.44.1756440715457; Thu, 28 Aug 2025 21:11:55 -0700 (PDT) Date: Thu, 28 Aug 2025 21:10:55 -0700 In-Reply-To: <20250829041104.4186320-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: <20250829041104.4186320-1-irogers@google.com> X-Mailer: git-send-email 2.51.0.318.gd7df087d1a-goog Message-ID: <20250829041104.4186320-15-irogers@google.com> Subject: [PATCH v5 14/22] perf jevents: Add FPU metrics for Intel From: Ian Rogers To: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Namhyung Kim , Mark Rutland , Alexander Shishkin , Jiri Olsa , Ian Rogers , Adrian Hunter , Kan Liang , James Clark , Xu Yang , linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org, John Garry , Jing Zhang , Sandipan Das , Benjamin Gray , Perry Taylor , Samantha Alt , Caleb Biggers , Weilin Wang , Edward Baker , Thomas Falcon Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Metrics break down of floating point operations. Signed-off-by: Ian Rogers --- tools/perf/pmu-events/intel_metrics.py | 90 ++++++++++++++++++++++++++ 1 file changed, 90 insertions(+) diff --git a/tools/perf/pmu-events/intel_metrics.py b/tools/perf/pmu-events= /intel_metrics.py index 31ef0373d982..f4d0676cdb77 100755 --- a/tools/perf/pmu-events/intel_metrics.py +++ b/tools/perf/pmu-events/intel_metrics.py @@ -316,6 +316,95 @@ 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 per se= cond", + 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 sec= ond", + flop_r, "flops/s"), + Metric("lpm_fpu_total_flopc", "Floating point operations per cyc= le", + 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 singl= e"), + FpuMetrics("lpm_fpu_128_double", d_128, 2, "128-bit packed doubl= e"), + ]), + MetricGroup("lpm_fpu_256", [ + FpuMetrics("lpm_fpu_256_single", s_256, 8, "128-bit packed singl= e"), + FpuMetrics("lpm_fpu_256_double", d_256, 4, "128-bit packed doubl= e"), + ]), + MetricGroup("lpm_fpu_512", [ + FpuMetrics("lpm_fpu_512_single", s_512, 16, "128-bit packed sing= le"), + FpuMetrics("lpm_fpu_512_double", d_512, 8, "128-bit packed doubl= e"), + ]), + 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/") @@ -726,6 +815,7 @@ def main() -> None: Tsx(), IntelBr(), IntelCtxSw(), + IntelFpu(), IntelIlp(), IntelL2(), IntelLdSt(), --=20 2.51.0.318.gd7df087d1a-goog From nobody Thu Sep 18 04:01:57 2025 Received: from mail-pj1-f73.google.com (mail-pj1-f73.google.com [209.85.216.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 0022A257AC7 for ; Fri, 29 Aug 2025 04:11:57 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.73 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756440719; cv=none; b=swH1imke8uiBRndwSk06TVN2AcuLtIz2rIfBP/7AnV6NL7DW6/FWAF+IZtrnxhyf82fCHQpEdnhqDE7ASmLAEItbKtFNI6IqKFOEpmWhO1PVCLS/RlTh0P899iWHsXmWbHO3fILlQKz0S2Mn2v399+wvjCwkFx9261HewV5/Dlc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756440719; c=relaxed/simple; bh=RAqBTlsz7iTfkuh3j5uys67bv7j8iaCJTuIX6mNvt/g=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=Mimdein/TFJnSPhj6N8MD4mToutFk4W7Qrxt8hvJd+rO01Z+m+qVHsNVzV+JV6cv5qmS0LRcqP4xZYEAo205qOrNwe9n8dRTXmcW4zA+kcM8dZdtCX244TWkrzARPaOYNz3Yd2Obvc+RYX6Wgq+vRSUuXjqB2GIwOPZ6cgWqYAk= 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=3golQaZf; arc=none smtp.client-ip=209.85.216.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="3golQaZf" Received: by mail-pj1-f73.google.com with SMTP id 98e67ed59e1d1-327594fd627so1693637a91.3 for ; Thu, 28 Aug 2025 21:11:57 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1756440717; x=1757045517; 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=M37/BCr0G7wFUjtgs9TA1CPDOATBHqDUNx+A2nDCLDk=; b=3golQaZfn9ZLUWwFQj37b/zzBBQ53wbnAi1ENsoiTFAVaGd5x2cJ2TsINelaNsRpXw PPkjUyeTlKPQvG1vQxra4cuupWh4eBmBsw4BlxgmSHMuc2FJfYlNQqBaGGESRGfwycFB 5whEPhsp23VIhVCyQUF2Nho+XHKUfXet3VIHZvCQwSfs66pWYIkSLcNyZMzL5xsXpPkU zslmgnJ4o9ZomnFD3u1ndgmmkfUlCLM6E3PToqyGZDmZntm7OjZZYc/hTS9ZLTyMT0UZ siGvoNvJwMxNRkAj+5MDiF4rMjGmHhsnPA44lnaFblA0jQtST/m14X0o0Ty6DHNjrivU QdWg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1756440717; x=1757045517; 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=M37/BCr0G7wFUjtgs9TA1CPDOATBHqDUNx+A2nDCLDk=; b=WfpqznCSIgncKgE+QbelgEO57I6UIRmKkmDX/6ayaEnI0JF1AQZT02yTefEFWZ1NBm HWx/e4tJHPawUfyCJlkgORSeadb7taq/xHzMSQrhLO3dTnKK+fokwdTmtsE9mz+/8Byl EYQB3elFbQvaG2vDzN18TQz7enwMpfdLgiTDKsagkNB8hTiG+JE0m7d8YGoF01DdcV19 nj2s10ou70Fwl0+gDSfLLDJOYFg/rCd4rxSV71WtTvbk6iVHihlZtkozyZbMqFl6FWgO fCLEFKcssTTXXxqx7NBVBacmQFkSU3gY0Pzfih0AWFSpxZ4ERfdTNvsApGY1NFm9xUE1 NlYw== X-Forwarded-Encrypted: i=1; AJvYcCWKxd6s2INiZ+9XhSfmUMMeCxSBIoSY03kV6ffyFxF34Y6Wjb539trFNWcXRTFhRKIQI0QKVut0wgYJrE8=@vger.kernel.org X-Gm-Message-State: AOJu0Yyr6Y20fpBymKQd/mo8/kPdJ58u5s9NvO20fLdUYxYu9BEIhDQI 3j93P/8Ipiu2Zqq8GGikFeeHqpjFGTH3l/PCDguRzG7UNyAN9H+SYMRLakT17kJ1cynJloa8Vft hPRK6pApPQg== X-Google-Smtp-Source: AGHT+IFaF8U3qHBbGql+g0XBidJWc2JoLHuvwPhanDRiVWnkGTBDVCZ99T8uFipFHHukDL9yt7SvOBC9ZHNg X-Received: from pjbnc12.prod.google.com ([2002:a17:90b:37cc:b0:31f:2a78:943]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a17:90b:3ece:b0:327:c0b6:305b with SMTP id 98e67ed59e1d1-327c0b632b3mr4490721a91.36.1756440717275; Thu, 28 Aug 2025 21:11:57 -0700 (PDT) Date: Thu, 28 Aug 2025 21:10:56 -0700 In-Reply-To: <20250829041104.4186320-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: <20250829041104.4186320-1-irogers@google.com> X-Mailer: git-send-email 2.51.0.318.gd7df087d1a-goog Message-ID: <20250829041104.4186320-16-irogers@google.com> Subject: [PATCH v5 15/22] perf jevents: Add Miss Level Parallelism (MLP) metric for Intel From: Ian Rogers To: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Namhyung Kim , Mark Rutland , Alexander Shishkin , Jiri Olsa , Ian Rogers , Adrian Hunter , Kan Liang , James Clark , Xu Yang , linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org, John Garry , Jing Zhang , Sandipan Das , Benjamin Gray , Perry Taylor , Samantha Alt , Caleb Biggers , Weilin Wang , Edward Baker , Thomas Falcon Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Number of outstanding load misses per cycle. 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 f4d0676cdb77..262bfd539262 100755 --- a/tools/perf/pmu-events/intel_metrics.py +++ b/tools/perf/pmu-events/intel_metrics.py @@ -612,6 +612,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 misse= s 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.mode= l}/pipeline.json")) =20 @@ -819,6 +833,7 @@ def main() -> None: IntelIlp(), IntelL2(), IntelLdSt(), + IntelMlp(), IntelPorts(), IntelSwpf(), ]) --=20 2.51.0.318.gd7df087d1a-goog From nobody Thu Sep 18 04:01:57 2025 Received: from mail-pj1-f73.google.com (mail-pj1-f73.google.com [209.85.216.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 A8550259CAB for ; Fri, 29 Aug 2025 04:11:59 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.73 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756440721; cv=none; b=NF+jKCijbtlZxZzisgo6rHCX7+2Qg28xLU0GDPM1aa4BkOZJgpxqF5J4McUB9GE/USdwXkOgiqhIOnoHUVhfKg3uiLoDz9DVB4n8eJB42j++UwQDSLg4K4MCevo+o0lDpTYWQaH35mALx/PkkCElc7s1BbfsPQHyiNUcjxG2wy4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756440721; c=relaxed/simple; bh=X3vDvjqvG35mcSBEKEiYMzoLULKRdAJqjV/Yzj+ZVkc=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=RkGIiIxsXeRK46IyDOdBHr1fZh76lQrXga4NtfepgWI7w3Q0KVgp6gOP2gPWsSJbLwMSD2HqbutCFY71bFHmVWPSc1+k8hSRA0IQ2PMFig3hRj3JeuMbBRpDRM/sUn/4CP1NN2qeLlu78Jf3j5aT+359/xGH9kTHnGmWLeFshuU= 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=oVnSI49j; arc=none smtp.client-ip=209.85.216.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="oVnSI49j" Received: by mail-pj1-f73.google.com with SMTP id 98e67ed59e1d1-327b00af618so1411706a91.1 for ; Thu, 28 Aug 2025 21:11:59 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1756440719; x=1757045519; 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=xGiCxp5GflCgGqMJOf1XbJaq5kTmFoGK28ybOIk7s4o=; b=oVnSI49j4UJI/QXwh9BnpFXWp31FNqRAz02CmbhzNA/MNZmyjQSNdaxs4sqJ4jBQCM 6yTRP21+2lnS7rNbs75V1Tr/r62KO8Pl/TeZhtKqdGL+4DJeoAdOMJTvSvqH4e926qzo Izfh8fIHgfdcplTh63xUc22yGA0Xn3EnfV4VR5id7q/BXQrPhM0ka3VtkwkNcUn03IXA 7L4oJLiudl7+1fwFetLx5BEzbnAvTJlfAWAKD2VYb7BPkPQhVe40w6VGbNl7/eUpawFb hCMOVWB65loMnRWIYbNIMGrpdn+HZV1GMnooT82GT6piwsKfPu4dk7gczrxCTq3bRX3d nEAQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1756440719; x=1757045519; 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=xGiCxp5GflCgGqMJOf1XbJaq5kTmFoGK28ybOIk7s4o=; b=Rzk1YOiWxO9gt6GtgpivBjl5K/RI6x7RCfE4VoltiQKw+QmcJN/LrujhO1c+Xgxj5V ha/QsnUAjt3uU7CTFhFIoIjz12eRSftXlfiaZIwke9aqPzPClP8UiyzwtHPP8zhRSwzf kyMCoLI/0AilzT+CtaB89TbWvE5t5Pk/M1GuK/4J/UY2xr12CMwGuPF5xxqSTPa/MVxO 42Ex5ThzUGoaQX/bpNPqt0A5xCMvCIJ7VkPuOcpdcG4GQmIZxrSSDyp9p64mZf258TOY hN0z/qToYt1J1PoGJUc4Ayoy5UPVeJastV6pGkjs6TipWGqKMwHWzZ3oQd4U9tgLaPte axIQ== X-Forwarded-Encrypted: i=1; AJvYcCV5E6VNISpE/nBtQJMiDx+3+LdU2q5xCcjyl1uWYi+3XuEZs4Ad+I02H3zxPXtdm7q1RxCkRUqttZQ2DgA=@vger.kernel.org X-Gm-Message-State: AOJu0YzC5rnV3YBuhbij5P86c5WBw8AL4vykra9G+u2Q3QpWvD047nM1 sIj+2+edxdfqgeqd5lKiJwezVeZq1xTfVLSBPb/6d1KmG4S/MYtZpNf5qnUMWBiVd3HZXxokF6L gzbGEe/ML7w== X-Google-Smtp-Source: AGHT+IFviBrND5KcpsivYt/iPIiB+1Bd1BHNBZ/v+eXs/k9kIhgmfVo1ny8/q2pD7hGreoWxfy79hHMDEwvb X-Received: from pjvf12.prod.google.com ([2002:a17:90a:da8c:b0:325:8fba:708c]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a17:90b:2f85:b0:327:734a:ae7c with SMTP id 98e67ed59e1d1-327734ab066mr9763475a91.13.1756440719022; Thu, 28 Aug 2025 21:11:59 -0700 (PDT) Date: Thu, 28 Aug 2025 21:10:57 -0700 In-Reply-To: <20250829041104.4186320-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: <20250829041104.4186320-1-irogers@google.com> X-Mailer: git-send-email 2.51.0.318.gd7df087d1a-goog Message-ID: <20250829041104.4186320-17-irogers@google.com> Subject: [PATCH v5 16/22] perf jevents: Add mem_bw metric for Intel From: Ian Rogers To: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Namhyung Kim , Mark Rutland , Alexander Shishkin , Jiri Olsa , Ian Rogers , Adrian Hunter , Kan Liang , James Clark , Xu Yang , linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org, John Garry , Jing Zhang , Sandipan Das , Benjamin Gray , Perry Taylor , Samantha Alt , Caleb Biggers , Weilin Wang , Edward Baker , Thomas Falcon 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. 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 262bfd539262..82a5b037edf9 100755 --- a/tools/perf/pmu-events/intel_metrics.py +++ b/tools/perf/pmu-events/intel_metrics.py @@ -800,6 +800,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(__fi= le__))}" + f"/arch/x86/{args.model}/uncore-memory.jso= n")) + 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 @@ -836,6 +897,7 @@ def main() -> None: IntelMlp(), IntelPorts(), IntelSwpf(), + UncoreMemBw(), ]) =20 =20 --=20 2.51.0.318.gd7df087d1a-goog From nobody Thu Sep 18 04:01:57 2025 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 9F10025B311 for ; Fri, 29 Aug 2025 04:12:01 +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=1756440723; cv=none; b=doe0StvGooTc/k4ow/DoEUW59aIeUPBMTwLMZ6vjgHB+oY9dGkD6R06Y+MOmK9SAGTZ8gZUwJ2bWag28lF3QMqrScrrm7wDKdEGKqr2Blv9aaXxn6/Fy6h/n38ywwWcUlxBHwc8eEAiCzHGH1l+d1q1r9RxF4oqpppXFmHemlz0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756440723; c=relaxed/simple; bh=K2TpTQA8GY3Yd80e1bmjkGeomITw8Ww5CSAf23qe2JU=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=Itbnd39IFh+vXiA0m+DG5tWtiHedoGqRTx1kDQW9XSc0+N/V2Nmc/jO50HREQ6u82CHH9Fg7CYV+T7G/zcPJe+58TvsAM2dN5DzQkWQw37T2t1MQjH06bF2tVKeaI0IDFG70r448uAhU7z6g0LblnpuOF0KgR1RS9ECOYHmX23U= 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=XsIE6Hl2; 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="XsIE6Hl2" Received: by mail-pl1-f202.google.com with SMTP id d9443c01a7336-24919af9fc7so113015ad.3 for ; Thu, 28 Aug 2025 21:12:01 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1756440721; x=1757045521; 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=RTPCvCoskLQ3ZZ1khwfyM6kRVB+5pf/yTpsT9eEs0Co=; b=XsIE6Hl2n0qXd2uxdAlEvCFm8+LW06I79DuzNv23YmrOsLcXM3bgu5phlPVj1WNz4T JuIsjmTY2UDE6oR/ACkgPPGSdFAzRWpDUtmohyk7rMDsq1KYUjy/8KlDbELS4w1wMdTO k3q6hlYh5G9zVOdaPUBW+o4TeBmQ8J6kFdwXRlK+/4f1eeacD6yJfZ6Nbk/gnMVMumnJ 10WOXqu1tgo0uTYgRkatc/FVwTY9vESHOaB9tVAl0AhkT/3a4zhxfBPKSGluV/g+k5vE P/okQ3/hUpAD8dyoSz772VIKuVxBa8ygXOVnjTNOvpGlPoEsiCDcfYkWpQhDArgkCuD/ kLhQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1756440721; x=1757045521; 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=RTPCvCoskLQ3ZZ1khwfyM6kRVB+5pf/yTpsT9eEs0Co=; b=UH0vJ5NqcGUKUH8XwD904bidMpDjZL1uKEudzVsCUJ77gty8rNeAF16vh+nGyToyYh kj+vLgXuGCDTMNuO5MgnWLx76hijKyrN5lf72sjKAjbeDaXOCzuSGJgMPC5tL+ZQ3OkR H7PUQKBHtQJd/DEgALgYYTzxSWeWIAcudp1KlvPZrf2KF1SDMHgcTE8x0k7gnkfJnNS7 fmLCSkwHXhcuC71PZQHjm5Jernki2VXJx/QV6F86lp1VI4dHi54zcg+gB6sQd8NSsRqW iwN6oGowVkZSAwpxJXU+lH/39SygmKjEH6Ac0E8LJyDfyqJcm5Vb+wkdq1RUXVkuLOnr natg== X-Forwarded-Encrypted: i=1; AJvYcCWm3SC05NLXF4Bi235BaGsERRKjkV+MRMZ/++l26iUp4z8w8brVgH1yMydK4rPqabsae7jMqqPJJlI43RU=@vger.kernel.org X-Gm-Message-State: AOJu0YzwlfBFDsE/PrXpof7+8MesAN04lM1fKpTaoWT1DNpSZBnIdc1i Y1EAJcE82Ohp1J5L+szOIVsso/JbbyF4lHQCv+jSV78NOsjNWMwgWX/vaTJdqJzyBhjyQOe5hl1 wBLEovzypZw== X-Google-Smtp-Source: AGHT+IH9APAmpFeGNYjEBTiAkwljAaOLhFvSr+80apzooIPzH19DkijO/EtBquNtHWMxbT2OolkU+ucaUlhq X-Received: from plfu3.prod.google.com ([2002:a17:902:e5c3:b0:240:670f:ad71]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a17:902:ef50:b0:248:614c:b8aa with SMTP id d9443c01a7336-248614cbb24mr188325795ad.15.1756440720889; Thu, 28 Aug 2025 21:12:00 -0700 (PDT) Date: Thu, 28 Aug 2025 21:10:58 -0700 In-Reply-To: <20250829041104.4186320-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: <20250829041104.4186320-1-irogers@google.com> X-Mailer: git-send-email 2.51.0.318.gd7df087d1a-goog Message-ID: <20250829041104.4186320-18-irogers@google.com> Subject: [PATCH v5 17/22] perf jevents: Add local/remote "mem" breakdown metrics for Intel From: Ian Rogers To: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Namhyung Kim , Mark Rutland , Alexander Shishkin , Jiri Olsa , Ian Rogers , Adrian Hunter , Kan Liang , James Clark , Xu Yang , linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org, John Garry , Jing Zhang , Sandipan Das , Benjamin Gray , Perry Taylor , Samantha Alt , Caleb Biggers , Weilin Wang , Edward Baker , Thomas Falcon 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. Signed-off-by: Ian Rogers --- tools/perf/pmu-events/intel_metrics.py | 27 ++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/tools/perf/pmu-events/intel_metrics.py b/tools/perf/pmu-events= /intel_metrics.py index 82a5b037edf9..782bc7f8926b 100755 --- a/tools/perf/pmu-events/intel_metrics.py +++ b/tools/perf/pmu-events/intel_metrics.py @@ -800,6 +800,32 @@ 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.READ= S_LOCAL") + rem_rds =3D Event("UNC_CHA_REQUESTS.READS_REMOTE", "UNC_H_REQUESTS.REA= DS_REMOTE") + loc_wrs =3D Event("UNC_CHA_REQUESTS.WRITES_LOCAL", "UNC_H_REQUESTS.WRI= TES_LOCAL") + rem_wrs =3D Event("UNC_CHA_REQUESTS.WRITES_REMOTE", "UNC_H_REQUESTS.WR= ITES_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 in= cluding directory updates", + d_ratio(loc_rds, interval_sec), f"{scale}MB/s"), + Metric("lpm_mem_local_write", "Local memory write bandwidth not = 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 not = including directory updates", + d_ratio(rem_rds, interval_sec), f"{scale}MB/s"), + Metric("lpm_mem_remote_write", "Remote memory write bandwidth no= t 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: @@ -897,6 +923,7 @@ def main() -> None: IntelMlp(), IntelPorts(), IntelSwpf(), + UncoreMem(), UncoreMemBw(), ]) =20 --=20 2.51.0.318.gd7df087d1a-goog From nobody Thu Sep 18 04:01:57 2025 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 91F0025D546 for ; Fri, 29 Aug 2025 04:12:03 +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=1756440725; cv=none; b=NFQR/uJ5dEESkYJvaeXQjCeg4qkGGS2t5hjRFJ9tUnNyQNv/B2bjB7kE1s8jgHku9CLkXEmLCpHeKq+rHmWXnzgucePddghMC6xd+M1XngwwZBXRfqjDZuKFW7Xc7SmcciCfMAyhuejUFUM/FhZaWmBc0Y+Zo9dLRZ/MLIr/nvw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756440725; c=relaxed/simple; bh=vf9NxO2PinCQQsEd0DvFHj+1PNzNsbqkEiru0ThpODE=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=Q6FmBgPZUnCNtTnTht9/oz1Fk7gJhfNETOombEOtk8dOR2J8RnJkZrvUfYVELlQ4qaKAa+v5TqlSqTQo13zua6X1tsRxrtKZ8FMCXvX1MGlAVz/beFJ/EWo07DomufEAkL0/f5Jt9wCxWiKpIA38kwZEQNla0YTNM/Z3HfMzJdU= 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=gaMHmoaw; 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="gaMHmoaw" Received: by mail-pl1-f202.google.com with SMTP id d9443c01a7336-244570600a1so19540545ad.1 for ; Thu, 28 Aug 2025 21:12:03 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1756440723; x=1757045523; 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=+0Vli+NKdcmDTDJurkTANCCd4S+V5izlUAV4FqwwqbY=; b=gaMHmoawO3bUmbcLMxWJ2nPJQhVn2mYDChy81wU/iMUTduIwCopmz7LOH0Vp2eQrYT RDoUsA+89LwP2nkSE4ohkeNzL1M32U68M666GR0ypBMENK9S1GXZloqwsTT0ZRuqOUzk k6Mdk64F6i3OmjzGnQjcgsP+OlMMTHaO9ooHl3bUu7qmwytN/aSYC54rzADXI+D7liyt xtzUIQ/PQvjNF3d0sIrTX3TpjNORFL4Wrr0Xy/XyODYQeOM+t4QvQK5OPNlDe3QEsJMx NS02aMC5wDoZMZPNrU2P7zjqX2Rv1/Zfjn58FAFzIGzdouWT1u3e8QXRTtO2dQUCpf74 VCQg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1756440723; x=1757045523; 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=+0Vli+NKdcmDTDJurkTANCCd4S+V5izlUAV4FqwwqbY=; b=PLbzan9JUmsNgdMCckp95bPLITy4EysEKoRJ1GvpxrNgbqWBHnjMU4G+R+QTD14D18 7wDfR3uE+CvCy6pkyW4FU9+0bDV/hLO+FFvhqbq+u74gjahQQaaogqnCYCFE1QNG13XW nG9u3JS2bg5teSICz14lshkM+W7W8Z8sH1aX3OO+RgFuUjkdTkNwcLOGyBjpspSqSUjC jQB/KyXnIMQL0GGANaytu7/si1ViOr6AwLl9Mao8g8nxztLUrQn/AgHBx+KYVtW5RHXd +mRIGM279pyEJjfhzcSzfhMsuUJB8d4ozLI3TrO0olwROx2uqXXY0k6JMcXvtQ0QmnMu oIOw== X-Forwarded-Encrypted: i=1; AJvYcCWU6HGT+DpOjy5WJc7HmttOVqypD0uH+emTIk6m/WIn4clK7Y+NLieBeaqpgj78odvnXr/6oQYnAUigMOY=@vger.kernel.org X-Gm-Message-State: AOJu0YyG2W3GdHzU5l+tAqYVe0gzwZxCeEMqKntx+fl2zHUHEsrbOXeb kc/v5631cB0A8/X/O3HRsX9iPIHO4CxahYXn/9ZOk5hO9MEq+kdwqwlarbFXCbRCNAe9QnPumPI wIi9MoFjxNQ== X-Google-Smtp-Source: AGHT+IFQnygiIn/u5drWuyF3c1r5WwGV2aObUmoqamTVxlg1PZliHyd7vXIq2fN1QjU+TK4SnglJL2B5AGcX X-Received: from pjcc15.prod.google.com ([2002:a17:90b:574f:b0:325:8e70:8d5e]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a17:902:e5cc:b0:246:d5b3:6310 with SMTP id d9443c01a7336-2487539f6b8mr132335905ad.23.1756440722758; Thu, 28 Aug 2025 21:12:02 -0700 (PDT) Date: Thu, 28 Aug 2025 21:10:59 -0700 In-Reply-To: <20250829041104.4186320-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: <20250829041104.4186320-1-irogers@google.com> X-Mailer: git-send-email 2.51.0.318.gd7df087d1a-goog Message-ID: <20250829041104.4186320-19-irogers@google.com> Subject: [PATCH v5 18/22] perf jevents: Add dir breakdown metrics for Intel From: Ian Rogers To: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Namhyung Kim , Mark Rutland , Alexander Shishkin , Jiri Olsa , Ian Rogers , Adrian Hunter , Kan Liang , James Clark , Xu Yang , linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org, John Garry , Jing Zhang , Sandipan Das , Benjamin Gray , Perry Taylor , Samantha Alt , Caleb Biggers , Weilin Wang , Edward Baker , Thomas Falcon 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. 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 782bc7f8926b..808e006addda 100755 --- a/tools/perf/pmu-events/intel_metrics.py +++ b/tools/perf/pmu-events/intel_metrics.py @@ -800,6 +800,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.ANY/" + 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", "UNC_H_REQUESTS.READ= S_LOCAL") @@ -923,6 +958,7 @@ def main() -> None: IntelMlp(), IntelPorts(), IntelSwpf(), + UncoreDir(), UncoreMem(), UncoreMemBw(), ]) --=20 2.51.0.318.gd7df087d1a-goog From nobody Thu Sep 18 04:01:57 2025 Received: from mail-pj1-f74.google.com (mail-pj1-f74.google.com [209.85.216.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 2A10F2609D4 for ; Fri, 29 Aug 2025 04:12:04 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.74 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756440726; cv=none; b=lscSyibf6pM+HJdGkOxNsSTGtfMfjqJDFmaPfMwtPioCBL604E24TvblnN6PDvf61RSTaLyagUmWM4FnC2SJeTdB8lbj4HeRxnzJ67VaODKh+gZGGX9VwHc+I9yvqAuf8oX52VnJvevaPRfqshyiwHK2NMuvm7Jut3rPySJXC14= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756440726; c=relaxed/simple; bh=Zmg5fiaGvVB2oAbAa8cyTmxLXHJNaqMAFuVzYAZ7E7A=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=Lni5O2mGKctvcFbRj+ZnqAghenABr+ZIKdqLEovAuVNX9rhqy+AuEzrMz9VuTd6YGqn+DNPIhyqMs3rW0BG0Y+C5azoypyV1/qQDTE+4a9wgsgZZZBBgS+AbrnZkJwIt6M9lvrldN/KSTxcEU2tSvk0P3vIPvdeHTEgcfpskpNA= 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=EociVruX; arc=none smtp.client-ip=209.85.216.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="EociVruX" Received: by mail-pj1-f74.google.com with SMTP id 98e67ed59e1d1-325e31cecd6so1548201a91.3 for ; Thu, 28 Aug 2025 21:12:04 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1756440724; x=1757045524; 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=E0n569qf5LRDqKDozKnwC4zMI79CFARCiF4XIPmnDZ4=; b=EociVruXVFnXOvBjvCVjzjYXMJKLj2cqF9s0SoxAX2PhMnHaipt6SFGjv8nUz6dB9s 26vjOLVSkLOp2H8VeILY6YQLGEeBVxDVhblKVssjmlSkB+q8eeD8ZYP2/9KFuUs4uB14 PvPfYJ0ua+IrmuQd55ABuS2HP2CBIQJMb+DJaFAJE9pB4lWGYaejwY6dtQn8bQkbJ3ds FCzl5aSgPakgVM4kJ1u+WR7VSc/b3+33t1fjmtAjTKdixJat60fYmm1QKt5vJ6HJo05A glxluFSg0kEVMY/XjsFzVRkO5PcHPBJ0qehVTbcFpldrxcJdQ1dSnk7FYrh7xFY5F3cS S2CQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1756440724; x=1757045524; 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=E0n569qf5LRDqKDozKnwC4zMI79CFARCiF4XIPmnDZ4=; b=ve4RBxxolcoYjBB9+E4kI6fSlTHoxliWZydEaon98/79NnUOAf4iCjNmwt6dn+YZRj b2a3RAsdqAowoFy/9/tf6+l+wwIUyzLL98tVLj7xBeWeuEB8qSyCjvPFIfeVihnWoAD/ cSmmf9PMFZUAO3yRdLcK12hehDbvxOjBzIsfsiu/Nf3aS6zczFx2QEIJcxT4iCsihGft 4zUuMOsANLGHva2wy7Lf4vZYJ6l/mvejqTcokprbGFInNc2bwMBOMkAwv7TRcJYipR0A m3VJiKaM6EZzyq/KFbPBFLm7fqndaAlsbWtKLPH9QcK9OnfIHBiDhsmJVXeY7irvyv0+ qrvA== X-Forwarded-Encrypted: i=1; AJvYcCUIp4C/BY4I18lCrOJ7Sv5I3ltAtibWjaWflGEethfj3pUKRsrSbq1ArM+0+es5HFpIvWZboQudoIGUCig=@vger.kernel.org X-Gm-Message-State: AOJu0YxmI0b9MWM8C+kV/dZ+sykz+rek6h1bqMqzJ/3vFYy/SsL8g3dj x/8mX9bK0tqO+wzL4NO3E4ko/k58SbFGd1y3pPnriFAQZiGifvDXxgJMev6Ws3IEFsBnizhJNzH +qEcLkv24VA== X-Google-Smtp-Source: AGHT+IE1G+MehOwF6KjzzHtb+fdHuNYJEKdpccHtKGcwif7meAE6X7UTGKKmVU+J2s7OKnVu9NUbR8+gbf3Z X-Received: from pjkk12.prod.google.com ([2002:a17:90b:57ec:b0:327:4fa6:eaa1]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a17:90b:58ce:b0:323:7e80:8819 with SMTP id 98e67ed59e1d1-32518b825b3mr29015147a91.36.1756440724439; Thu, 28 Aug 2025 21:12:04 -0700 (PDT) Date: Thu, 28 Aug 2025 21:11:00 -0700 In-Reply-To: <20250829041104.4186320-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: <20250829041104.4186320-1-irogers@google.com> X-Mailer: git-send-email 2.51.0.318.gd7df087d1a-goog Message-ID: <20250829041104.4186320-20-irogers@google.com> Subject: [PATCH v5 19/22] perf jevents: Add C-State metrics from the PCU PMU for Intel From: Ian Rogers To: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Namhyung Kim , Mark Rutland , Alexander Shishkin , Jiri Olsa , Ian Rogers , Adrian Hunter , Kan Liang , James Clark , Xu Yang , linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org, John Garry , Jing Zhang , Sandipan Das , Benjamin Gray , Perry Taylor , Samantha Alt , Caleb Biggers , Weilin Wang , Edward Baker , Thomas Falcon 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. Signed-off-by: Ian Rogers --- tools/perf/pmu-events/intel_metrics.py | 27 ++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/tools/perf/pmu-events/intel_metrics.py b/tools/perf/pmu-events= /intel_metrics.py index 808e006addda..d822352139f2 100755 --- a/tools/perf/pmu-events/intel_metrics.py +++ b/tools/perf/pmu-events/intel_metrics.py @@ -800,6 +800,32 @@ 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_ti= cks), "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_ti= cks), "cores"), + ]) + + def UncoreDir() -> Optional[MetricGroup]: try: m2m_upd =3D Event("UNC_M2M_DIRECTORY_UPDATE.ANY") @@ -958,6 +984,7 @@ def main() -> None: IntelMlp(), IntelPorts(), IntelSwpf(), + UncoreCState(), UncoreDir(), UncoreMem(), UncoreMemBw(), --=20 2.51.0.318.gd7df087d1a-goog From nobody Thu Sep 18 04:01:57 2025 Received: from mail-pj1-f74.google.com (mail-pj1-f74.google.com [209.85.216.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 EBB7E25F780 for ; Fri, 29 Aug 2025 04:12:06 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.74 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756440728; cv=none; b=XgFYJ5aWPLCtepn8sUTZBsRim6T5OkTUwg0rJ7kTLmC7rLsY3CT4n1Sah6P4hyRWZDpPQFfwUY0cooEnkVQhWvSvU93QUu0qUn4/Hf6zuUYh1qJ4HrBPTzisSsHaOPoOpAsZT3tkrU54B509Tyl50AJ5314lpxBvXKHf6wajwgE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756440728; c=relaxed/simple; bh=OveSSrsdbXUtm3DY8E88W/ENi6DeY6oLaGwJEVQiJUs=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=SjOhRYJJQUoEqWVLiJvArVXcfRtOscBXJoyTuKI6OvZ9R4U86dwdOr8UCP/ebk1ZTyNtkyLFYIjQiN6QgVJCy3bPCxOs7PXv5VGRfGFlg00Q6meqtvBOwIbr2YsWCaIiRb71DIZYGXbJy+Al1XGGz0FnOt6d1gar9ffKp3dNgxY= 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=1DJvXOx6; arc=none smtp.client-ip=209.85.216.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="1DJvXOx6" Received: by mail-pj1-f74.google.com with SMTP id 98e67ed59e1d1-327642d9c82so1914160a91.0 for ; Thu, 28 Aug 2025 21:12:06 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1756440726; x=1757045526; 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=FLWhA+ESO+kJCjoazYB79GJG2/P0CXeJDsddPE86eU0=; b=1DJvXOx6IKGu5S12Z07t7CwPYs6p+WeT13BQ+J55vyeRTWtexm6YRWpufgzB4G+/CW p2v3nju6hA/XiAroyukVe1P4UGRtGapIGW11tOBEGvVUMFBIyaARRiS9WaccukhVv4IO Iy4+cAmoxNx+MBJA1IW3dfFOCl+JOVgQV1ALfdZnGUGYhA8nEaU9hyS5PVaXagT0FIl5 66+PG0Yrq+AysyZbM1AWb0iZKkK/OHreWRa3HYTToY8eOTXjesZ0kjkbKh6bVAtPG2oQ x1NmvDxtIVqqPsxWoW/2HdGttDBfY5rL5NpaVD5cgUoiLcs+JiXgfGu57/xgJRbuKrBS 57mw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1756440726; x=1757045526; 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=FLWhA+ESO+kJCjoazYB79GJG2/P0CXeJDsddPE86eU0=; b=Ny7E+wvjn8M0sNKkKKhumqsoZABUF4m0T5vggmyC3b9GOY0deJAFNrxqwW/OorzDK4 ckh7ZnWiHb61rG62XTNE1WbzNyOss4eQvMgNixxJ8DSkesIc/zvB21f+BrW/1uvrl4GN tOSRfcTE7AMWqeI9Q4T3Sf6uZTzbF6YeuYFILQTlZOdnwfnXv6Jj2z9zX2AH+5m48AdC dMX7tqSGWpsShv+RFq9kGaNpTYlZpH/AxZAgV3tEun4SxuQpmyndOSUaSSXr6g540ipn OcC6Ap50JKofjnn0jPlEOl9C8jA978EmBIfCsbHZx0MFBESoHi/ALbLXg3yM6QH5koSE 61pA== X-Forwarded-Encrypted: i=1; AJvYcCXvir9R8wh82At/R44Md415eCBOXEzq3EIMiGA5peWtACSDmiQPhBOHkFDAUVmrDrEIUEh9JGIOVC3tlas=@vger.kernel.org X-Gm-Message-State: AOJu0Yx/n2uppnL9iuXUzUTQbNUWueV4Plc0kmAv6jpRH0vp4E/QX2V3 /wVPAcTgB4P0Gvf2UpfFwmM1V7lnmHgHHqAW17EXHyrwV24Ez2cvcymOYtBnzPnml1lCjWUMC9f JMtUK35aCPw== X-Google-Smtp-Source: AGHT+IH9HgCi1Q4YLlRI7Cu1K4HcV53M4C0wIWh386eRRsibCD+5otNOQxsgvKbC22GMUCR3f/pEeEIwXNQz X-Received: from pjbnc12.prod.google.com ([2002:a17:90b:37cc:b0:321:c567:44cf]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a17:90b:56c7:b0:327:f20b:90b5 with SMTP id 98e67ed59e1d1-327f20b914cmr48089a91.4.1756440726174; Thu, 28 Aug 2025 21:12:06 -0700 (PDT) Date: Thu, 28 Aug 2025 21:11:01 -0700 In-Reply-To: <20250829041104.4186320-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: <20250829041104.4186320-1-irogers@google.com> X-Mailer: git-send-email 2.51.0.318.gd7df087d1a-goog Message-ID: <20250829041104.4186320-21-irogers@google.com> Subject: [PATCH v5 20/22] perf jevents: Add local/remote miss latency metrics for Intel From: Ian Rogers To: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Namhyung Kim , Mark Rutland , Alexander Shishkin , Jiri Olsa , Ian Rogers , Adrian Hunter , Kan Liang , James Clark , Xu Yang , linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org, John Garry , Jing Zhang , Sandipan Das , Benjamin Gray , Perry Taylor , Samantha Alt , Caleb Biggers , Weilin Wang , Edward Baker , Thomas Falcon 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. Signed-off-by: Ian Rogers --- tools/perf/pmu-events/intel_metrics.py | 68 ++++++++++++++++++++++++-- 1 file changed, 65 insertions(+), 3 deletions(-) diff --git a/tools/perf/pmu-events/intel_metrics.py b/tools/perf/pmu-events= /intel_metrics.py index d822352139f2..ea7749d34081 100755 --- a/tools/perf/pmu-events/intel_metrics.py +++ b/tools/perf/pmu-events/intel_metrics.py @@ -1,8 +1,9 @@ #!/usr/bin/env python3 # SPDX-License-Identifier: (LGPL-2.1 OR BSD-2-Clause) -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) import argparse import json import math @@ -612,6 +613,66 @@ 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_REMOTE", + "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_r= em_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 nanose= conds", + loc_lat, "ns"), + Metric("lpm_miss_lat_rem", "Remote to a socket miss latency in nanos= econds", + rem_lat, "ns"), + ]) + + def IntelMlp() -> Optional[Metric]: try: l1d =3D Event("L1D_PEND_MISS.PENDING") @@ -981,6 +1042,7 @@ def main() -> None: IntelIlp(), IntelL2(), IntelLdSt(), + IntelMissLat(), IntelMlp(), IntelPorts(), IntelSwpf(), --=20 2.51.0.318.gd7df087d1a-goog From nobody Thu Sep 18 04:01:57 2025 Received: from mail-pj1-f74.google.com (mail-pj1-f74.google.com [209.85.216.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 C526225D546 for ; Fri, 29 Aug 2025 04:12:08 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.74 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756440730; cv=none; b=sD4LZvJtwxf4IfxejFFw8XuRZja7sq0hf3txVj6UvyenBXeyuApv5brRp8tWLFFEW2UtZfDz91cQ9ZNvYfQ/O8Rac0IfnXOeXzhhxEnQ9CgMx5xzmJ44t1xOByhMrbVkpd3zJMTO3tI9GpPMDBWlSfIsH4dDacVdoh7Og2rkCmw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756440730; c=relaxed/simple; bh=xIhJxu1okP+jiRU9C+WmdMmdDqHNc9R7YxUxYrfj3SM=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=TmtnmLX27YZu3Bz+jsVP2FqpC++RR+9SnbqLpQr97NOH+ziOGUKx/8McRXYTTFnZkun4FnZmqSMaE2TCqBHvIA6kSPnB3kkqy4gjxRKkaCJ1/I/nkeqryMyKkfEmyyAwtKq9E7gJRGESVDVWGdAJTwolixUKjjW1irIIRL27ClI= 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=i9GSKTtM; arc=none smtp.client-ip=209.85.216.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="i9GSKTtM" Received: by mail-pj1-f74.google.com with SMTP id 98e67ed59e1d1-327ceb05e9dso909192a91.0 for ; Thu, 28 Aug 2025 21:12:08 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1756440728; x=1757045528; 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=1A7jpEsvPE0kUPbvgwyciQy7SJ0zGAJFAhGVF7g/pGo=; b=i9GSKTtMBEjeZKqVarxWBZCawiQOvx+4KAnLxJbZYQj1Igcyg0ZwEoeiLsgCygSxDy UsWcvIq1SwBdo1WAp40TYFQHBbiBqaUzJT2cdcneGpyuy7UIf5cjzWkQd6oSV70HJ7Qd UGQbyMlCEMWGPVkQg5lDUDCQhf7CFH5JLZeGmbAJxC1u/27KaFqxMJWsUwhm2kdknA8q lQLL+oFlqF8IQ+8pwiRXqJW8ARzck+Jdsi+gibKKKItJA6gW7QsC7ATlb7eGVGscntTl //YALD5rR50Q1Q1IdGd5S4MXd1cWU8KpUR361aNlgyCG/F5j/vZMysOGAKlqiOiL15bQ 3uCw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1756440728; x=1757045528; 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=1A7jpEsvPE0kUPbvgwyciQy7SJ0zGAJFAhGVF7g/pGo=; b=I6le9F9uaAy4TbWqUc1f6vDl/i75kNxaD/F0lLR5uZ3q9U2XVNjbFcCVHHkzI6Q5qr GMhOl2X1ZZZEOuGiU1NxgGQcf5beDp2PKewz0/HpP/sfpDfVOm1WHVMvaoIaXT+a7UZB sP3HwBcKU/JSGMv56wUxlspkfJSeCpUxCbdQuVJllsq/FhHRogkWEEZn66enSaMOgjtP kOwH61ElHx5VbAOFpvo82CMShjssDQ/spb+p8YS2XEuy43XvW2pEESYCYf/CDcq2ni6d 6cefurkJwPYzeemwAUVA9N1/PkAUwKYglaOX9lp5vPZrfmY2KsGzrlCWk9l8Gy0cBTv+ g+cw== X-Forwarded-Encrypted: i=1; AJvYcCU/o0nZIxP+1yYIVuKCn/euiJGQxmqwRnwrqXyF5mlE+hj8jfgm0bVeNf+ecAKmy/N1KXCj7bnLA/SmSCA=@vger.kernel.org X-Gm-Message-State: AOJu0YwDIB//7rhImbfDVcXtSjQ9jJw4RVB0pT/hGM0jK2KC3GwCdhIJ JbZ4fm80kY049CKCfBe89AvwmhLw/GCyUzBz+COSBY+6yJ7WFHTkVQqnGnn9Rw6aK1XeBzB4fM+ 4PoqFS7YFFg== X-Google-Smtp-Source: AGHT+IEzLLnWtYKPlJDbm1c/YIWiALK7KVZJf/m9NNUyDV1q+iWH89NyCUe7GtxofPmfCB1d/dyAXN7CEpXm X-Received: from pjh15.prod.google.com ([2002:a17:90b:3f8f:b0:327:d54a:8c93]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a17:90b:3848:b0:327:e21c:dd6 with SMTP id 98e67ed59e1d1-327e21c0e50mr2232836a91.23.1756440728087; Thu, 28 Aug 2025 21:12:08 -0700 (PDT) Date: Thu, 28 Aug 2025 21:11:02 -0700 In-Reply-To: <20250829041104.4186320-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: <20250829041104.4186320-1-irogers@google.com> X-Mailer: git-send-email 2.51.0.318.gd7df087d1a-goog Message-ID: <20250829041104.4186320-22-irogers@google.com> Subject: [PATCH v5 21/22] perf jevents: Add upi_bw metric for Intel From: Ian Rogers To: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Namhyung Kim , Mark Rutland , Alexander Shishkin , Jiri Olsa , Ian Rogers , Adrian Hunter , Kan Liang , James Clark , Xu Yang , linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org, John Garry , Jing Zhang , Sandipan Das , Benjamin Gray , Perry Taylor , Samantha Alt , Caleb Biggers , Weilin Wang , Edward Baker , Thomas Falcon Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Break down UPI read and write bandwidth using uncore_upi counters. 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 ea7749d34081..19c7357c496a 100755 --- a/tools/perf/pmu-events/intel_metrics.py +++ b/tools/perf/pmu-events/intel_metrics.py @@ -1009,6 +1009,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 @@ -1050,6 +1071,7 @@ def main() -> None: UncoreDir(), UncoreMem(), UncoreMemBw(), + UncoreUpiBw(), ]) =20 =20 --=20 2.51.0.318.gd7df087d1a-goog From nobody Thu Sep 18 04:01:57 2025 Received: from mail-pl1-f201.google.com (mail-pl1-f201.google.com [209.85.214.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 C5ABC236435 for ; Fri, 29 Aug 2025 04:12:10 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756440732; cv=none; b=Y2726barH7WUmM6+2NMLu0YbH4V5xAQKdv9j0kJJIz3M5cUZCnLSpRiM/4TCwr/HnX8VLrcqwSUzsCzW87eA8ymMy9ON3XCJ1wBm4sbCzghrxN8TH74VuQEU8qSglsd+OIgHDb2sEtw6YGII3sTfTVZiw9oPpKsjaKCmNUy62lQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756440732; c=relaxed/simple; bh=qC9qZKKpYDUm+kJyCEJpPENdOECbimVQo+edYHDXXIc=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=o6vcoQjQHDe1UFu1bYag2yUMvg75aKzOc88B0MgSWN0NJsBEEG1utwIwO7jWWPqYiMPmpUrC8wiMztByM28P8GxQAXS9/FlWfVCmD7CmA7Fcn4+ZQs5TYax/7QoTDQpck3vjkp5ynzHkExwXzp19T++FW84beSD3IDrQXYLvWw8= 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=p97Magzl; arc=none smtp.client-ip=209.85.214.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="p97Magzl" Received: by mail-pl1-f201.google.com with SMTP id d9443c01a7336-244581953b8so17575915ad.2 for ; Thu, 28 Aug 2025 21:12:10 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1756440730; x=1757045530; 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=oLMEPbiOl1CA0uGgkj22XdQGVWtN3/kulLXNUlnyl2g=; b=p97Magzl/nKZgt0COjJuR2mu8LNzhjoPoIuFwDCA/vtxJNJ/nyjZ90Ck5VqdK+StU4 LIjDOW3fsNqmG2vCV9/n3ZaX6wXkXLrQsy/33sl2GeevMNk++mjXmQzINtp6vQIM4+0u fcUOZi19AFvu4AKeCjrLbzdNYo/n+ADPmocbCaWcIIqQuSJ1ZVdMKVXzwkwqWoun4sEx HGQbBooKilUn6yPULNctJH0mxHZz3jmyL0lmbm7Wy7MA6192vCU4ejEPRjuDrU7g5ZBP p92hGMTuZxXB/Y0cmglp6zqeuUGYXBYgLLSJ16jzWcxyniUo8Y0FWnbRKM9obM6B4Gtd VYag== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1756440730; x=1757045530; 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=oLMEPbiOl1CA0uGgkj22XdQGVWtN3/kulLXNUlnyl2g=; b=SMJqVYgxglwR7evHkhrtb5Om0PEWeDFZfTywtXX+gaJ1fTUT0+6ij2RXkSTwDoOnEC zNVfpDNQw1Enj9TTMdvDenqqUXa1fnvMz74E7YFhcKT9Hq0Z/PnObWc6iZB7sR0BKn4c jPMoQUfZYdwLMPLI2tbWj3zz28BV8r+3izT6v73k+0E4xdQxqq1rcymoGKkbFYAI93Xw WJc4pFJ4a3r0fiuDT2WwtM71w92Oc99K3e6pOVkEN7KKv6CzsDEV42qtyA8XmxAPy9Uj QbTosgPKz17H2EhdjEKJyJtZiULYqv5lxeKy8SxNsVoictuQHmF1mfjZW9vtlPBMAvdB ERTA== X-Forwarded-Encrypted: i=1; AJvYcCVCGJwcDTTXiWcqN6xSiNiyfB7L+deicJr5I8ndIG1cLbcgB24fjY9Fg1O9hujMGsn4251mstAITssNrPY=@vger.kernel.org X-Gm-Message-State: AOJu0Yz7Q3rPtcjfatUaoF4Xm+FUMoq4siUaFwvoHL6tYrf5jU0Zph06 qhb6keJKlYGuS01QIlKXZDuM+nRcqe4nprCsjZtBJUtn1xDFWOJwA/vyYEO98ZPmEbe6giL+Rmo VqUDpsOx2xQ== X-Google-Smtp-Source: AGHT+IHDsva2lKFanEaCvFFadJFWsw5tY+H9T7b+ytrl0xjAXY/bleP9SdCSpagPCUKeSl3MKOb5pT7fhOqm X-Received: from plbbg1.prod.google.com ([2002:a17:902:8e81:b0:248:7880:829c]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a17:903:17c3:b0:23f:f96d:7579 with SMTP id d9443c01a7336-2462ef446c2mr321044585ad.37.1756440729973; Thu, 28 Aug 2025 21:12:09 -0700 (PDT) Date: Thu, 28 Aug 2025 21:11:03 -0700 In-Reply-To: <20250829041104.4186320-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: <20250829041104.4186320-1-irogers@google.com> X-Mailer: git-send-email 2.51.0.318.gd7df087d1a-goog Message-ID: <20250829041104.4186320-23-irogers@google.com> Subject: [PATCH v5 22/22] perf jevents: Add mesh bandwidth saturation metric for Intel From: Ian Rogers To: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Namhyung Kim , Mark Rutland , Alexander Shishkin , Jiri Olsa , Ian Rogers , Adrian Hunter , Kan Liang , James Clark , Xu Yang , linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org, John Garry , Jing Zhang , Sandipan Das , Benjamin Gray , Perry Taylor , Samantha Alt , Caleb Biggers , Weilin Wang , Edward Baker , Thomas Falcon 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. 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 19c7357c496a..7250e8c8eeba 100755 --- a/tools/perf/pmu-events/intel_metrics.py +++ b/tools/perf/pmu-events/intel_metrics.py @@ -1009,6 +1009,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_ASSERTED= .VERT", + "UNC_C_FAST_ASSERTED") + except: + return None + + desc =3D ("Mesh Bandwidth saturation (% CBOX cycles with FAST signal ass= erted, " + "include QPI bandwidth saturation), lower is better") + if "UNC_CHA_" in sat.name: + desc =3D ("Mesh Bandwidth saturation (% CHA cycles with FAST signal as= serted, " + "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") @@ -1071,6 +1087,7 @@ def main() -> None: UncoreDir(), UncoreMem(), UncoreMemBw(), + UncoreMemSat(), UncoreUpiBw(), ]) =20 --=20 2.51.0.318.gd7df087d1a-goog