From nobody Thu Sep 18 04:01:58 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 E8B6B21D011 for ; Thu, 4 Sep 2025 04:46:59 +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=1756961221; cv=none; b=loCCp7bD7SswBWoefjtWV8+Z9jobft8AaKaFLw9nnaVexoRgZGDxpPDwWv8bgqwoiMrIIBgMNg04ABtjAX/nYYFO89TiEeVifujcMAf4fuhZ1TilubwDk1IEiXSCexn9uFEeGLj9bvjLJazcz5kFpvyW60D6PRKDYJj1txmOSyw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756961221; c=relaxed/simple; bh=6cSGTKSnTGH2Qc6S4lYcUebBr6/mwIVeBJ3QYJxoSN8=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=TRvFeR2o0mRIWTwA7yMS8egzr/LOztAfK4qhdiaqpXyy4R9DMW3HgwFXhQ53lW0KGKyXkCtg+9RjLK51cWtB0eE1Rhw4GUMIfUOgDZ8jy/Jh76kpNmRfqwEuOCFneX3lYIbTDk/flVXR3a5zm+WuiywdgKn3df49NuSiK85T5pU= 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=BDxeKVin; 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="BDxeKVin" Received: by mail-pl1-f201.google.com with SMTP id d9443c01a7336-24c99bd543aso9798055ad.3 for ; Wed, 03 Sep 2025 21:46:59 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1756961219; x=1757566019; 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=l8P/veAk1QofA7phTO6Z5L/IvYDAAxC26ISaoB1KMoo=; b=BDxeKVinZ0uezfCDb7rolRBtKR74QQZqvpTlCxLAkwvbOaEqKLbiPS8aS+pj9LZ+64 lSHqJYY91Rui3Mn6saSGZYhg8F9m+5fCCK/PGtUFdzbk50pJc2zXmLHE+51IEjNxdXWC JBbZN1VKd0/6DA3JH1t/qGIWuiHGKFejgsyuP7WlWR6uDzitq+xwRuHgEPh5PavIFXmE HPaG7zAc+bV4SwVmRZbrHmGV/jry+oq0Coew7FeIBKE1Nie3xSAfI+9sbvVSftSThzrT M0HYuatJ9Hua5l5L5sDwT3AalUzlpTo1WfZrqFLLdxIoGp8BTyJ/MRnxs/i0P5i1R4p2 /JYA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1756961219; x=1757566019; 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=l8P/veAk1QofA7phTO6Z5L/IvYDAAxC26ISaoB1KMoo=; b=iEqKk1LTyjbp3y5xT3Cl9rRgX6Ml58QPl9XkNb8/yQY5+vF9hRy7D6XGy2UPMBF3uN h38wfWgxmmgXmUuvgY6wWdn0FEVN2gO1ncVcF5DHo6bxC6PevzQloeLa+QGZymFgSfs1 e3azyDFGtHKezyHp4BF5uK9FiTyeAKdAiDcMOlO3k/z9N5tnpHGFJ/Cd710lqUq9c3Bo qgMkygIMQgDX/IJhSbzGrYX/wvpU0ztVtS/5YWttMEmx+zXzJcnpnNhZdcLDOFAJWMvr UQCgxbXfkAL+dhTFQNNOBv3ASdG2UNEs7uKtU+PAdvLLGMqLZcFFNyoGW7hoyg0awW/c 8e1w== X-Forwarded-Encrypted: i=1; AJvYcCWSjE60pJQT1xSuZncJfD2hlJb1BPRdxkdTQYUPLee5mFKSSRT2s4o4p2kQhLefJmEfqNUavp+W6bthvLk=@vger.kernel.org X-Gm-Message-State: AOJu0YxX4+E/NqAWJpaxATQUzUcy//pi9bUCK9Ukz3FskzGQtZBX4EoW loEJCCAQimjvIOar4TBktcC7x+fGTNTQUzJPfVs8m3vrccAf95L6WOfCVCaGlj5Dmio6lWW6KjX 0GVVafBtxiQ== X-Google-Smtp-Source: AGHT+IG3qXljQYBVs9jDwDu4dhi6m61Vg/y9HfuIddMKpjtXWzfjSppXhzZAxHG2Lds2q4QynEEpS0LpEltH X-Received: from plcb12.prod.google.com ([2002:a17:902:d30c:b0:24a:f84b:af0d]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a17:903:40d1:b0:24c:b83f:c6b9 with SMTP id d9443c01a7336-24cb83fcb3fmr28056375ad.7.1756961219284; Wed, 03 Sep 2025 21:46:59 -0700 (PDT) Date: Wed, 3 Sep 2025 21:46:32 -0700 In-Reply-To: <20250904044653.1002362-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: <20250904044653.1002362-1-irogers@google.com> X-Mailer: git-send-email 2.51.0.338.gd7d06c2dae-goog Message-ID: <20250904044653.1002362-2-irogers@google.com> Subject: [PATCH v6 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..1de3c2b2187e 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.338.gd7d06c2dae-goog From nobody Thu Sep 18 04:01:58 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 98E2423A99E for ; Thu, 4 Sep 2025 04:47:01 +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=1756961223; cv=none; b=JWY9irKNOwhBwJrvJcp1uWyw9jLAX2caixkXAEGNcz+P6mc5hjKs8gZR/MlQO4IVwebLLN+tYS0nTtL/zMQwFRBrJapts/UI9+nAtIgR855Nzs7BK9GX4x91UibxvF6r1nayHBnH9AhV2rDSNuIdvWWtUYYldrS7gWI+cWkxo7Q= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756961223; c=relaxed/simple; bh=Bkq0mEwyXQ6KgmslSqy7aU0tGebrGoz4a1iyDBPBJuA=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=MIjKTfGx8oPvSnID7WfeBZaGnyaf49dRShsF2JR0GAIKRP9XxEjBexxWPysNZTp7EOsWgPkGVH1Aj7+guYlzrAfvrEU7+qlfro4q6RXiLq3nfzZIDsZ4KfBpNl/427NJL3yYNv9Fjo0C8nHiwObW1/xIMOD5D3Gp6Glh4i/rR3U= 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=gaPWGZUE; 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="gaPWGZUE" Received: by mail-pf1-f202.google.com with SMTP id d2e1a72fcca58-76e2ea9366aso634242b3a.2 for ; Wed, 03 Sep 2025 21:47:01 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1756961221; x=1757566021; 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=y2MJ+/IfzyDNHViP3eQerYoyIt/1MlYkuZoI1bdvxsA=; b=gaPWGZUExL9BQGrRS5iFpRoJNn6EYEnonsF//RA2B6HQxR91MbfLKoxoAmNNX2XD4A nU7IRfk80rvceK6pCFTM3Jm8MDbLnBE81rkDsfB0pgPIqyxn2TKXco5u1DN0DBY0Yuz4 0S8b2hzdQNqzfgHt0ZoqsrdHKtVOg4yFaQtW64ogeVePVD5ob648+MyGtKv1r1X7CXAv /w2O3m0ACIR2qXf/huvlljUqlMEVirg7U5cpAsqpKY0bLzgu9sX36jlxxZziVu+EMIsk BT2suanySt+Lqcjxbry+aSCuo6ZRsYAUxOWpKkPlr9omRcf1/L+WyHssQNy2EaRT4Psk 0Itw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1756961221; x=1757566021; 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=y2MJ+/IfzyDNHViP3eQerYoyIt/1MlYkuZoI1bdvxsA=; b=TD1G6MXJF2IvTRSk7Lanj2qMLhOPkQjCXDfZ+yLs6eRRUqDhg56XbbIRX8D2oBvmGM ofoS//6/UkQinEEMQMlrXVKM/5DwPQjzQI3ebOcEvbEE5f+IBiYWX0/sV1DRpU4V5a5g +e03p1yJ9ZzPThVKhvdioEQB1oV51bEBiq4Pg9i3VwPqmCFDxMq9M/g+dbK5/XpOF38i tNgy+YJuBjhXr+htjIXYJ78TFsXfdThhpFMEgbBo8hDeReXVlR0zl1eyDE2h9tBEjG3T aX5/smeizKfEys8AnFsc+Lt+KnAgg26MHhV6l81G5H7kuTU2TkADDOH1WOOee4eIYBAo dI+g== X-Forwarded-Encrypted: i=1; AJvYcCUsB2Smt0Of9VO/iRN3SwFVX0QwrxIc8Eu/YTYrRx/NQjCU8H5ytZJZdUSKd5UXbk9bxM4x/runrH+fVAI=@vger.kernel.org X-Gm-Message-State: AOJu0YyCpcXmVft0hdyG86HZOxMqZvpEcEu8c7VJeIZAVsuGUwV+S7cp mfPVmc45ZS1kb3u9id5JAGh7m1k0Br1UChNeoCuibmvfMK3ruR2ezaMVVGJbSsg/zn0y32PLK/O IwzdWEUik1Q== X-Google-Smtp-Source: AGHT+IGm1h1Hef8FmLY8P3Oeo2u6tfpj8k/+uBKI4OWZ3/iy2YSJWyDiB9FlVKWsgXWt9sewhDb6CtA0/pEc X-Received: from pjss23.prod.google.com ([2002:a17:90a:1c17:b0:329:6cd6:660a]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a21:6d9a:b0:240:356:f06e with SMTP id adf61e73a8af0-243d6bca04cmr24044808637.0.1756961220929; Wed, 03 Sep 2025 21:47:00 -0700 (PDT) Date: Wed, 3 Sep 2025 21:46:33 -0700 In-Reply-To: <20250904044653.1002362-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: <20250904044653.1002362-1-irogers@google.com> X-Mailer: git-send-email 2.51.0.338.gd7d06c2dae-goog Message-ID: <20250904044653.1002362-3-irogers@google.com> Subject: [PATCH v6 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 1de3c2b2187e..b6d92e935c59 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.338.gd7d06c2dae-goog From nobody Thu Sep 18 04:01:58 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 94432241691 for ; Thu, 4 Sep 2025 04:47:03 +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=1756961225; cv=none; b=abdW4ZK97gObZmcrgo8tOqWWkODsP/36CwQSIoOdRPKsL0UV+1TTyEtGGAGilzjPGXUqjOxNXvRkNj8lVvbB2QW1xa6xO+5PGGJxy/eaHfkSo/n/qfQstWQ3ajhXRkOlTZwn7R+zr8o1a0oSbQEJplh9jxXGJoyaqY7Y9CuJ5q8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756961225; c=relaxed/simple; bh=6tOoJg4KWe2yZeGCw8xnj2DIBatU0NoVTYxxEyCfdms=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=kGIRn9EZZglrktm2VGDSPGI24ovrTKj1TcYOLeKh5IXjnJoposESewvJa2TpcEzP/6h8vz8g1yTAc23Fl6HLtLNptsrpNRZcKvdh5hbVFzZD+jb62EWuElAFgbKIMx0o3bs/i5iCbUOTTeCBX+SJsSwad/QUvVHnIkTCtZf6Uqg= 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=aTk2fHbe; 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="aTk2fHbe" Received: by mail-pj1-f73.google.com with SMTP id 98e67ed59e1d1-325ce108e45so534604a91.0 for ; Wed, 03 Sep 2025 21:47:03 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1756961223; x=1757566023; 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=LH7186V5/IqnZ4SzNaXMf39oYTvCKyvAIASH+gNRNt4=; b=aTk2fHbeVBmcLltguI7G38x/+LVgjXEHWFD+0/8SzXMxSgN4rHaGSYU/V2yIG/edRz z7Gmj1JYqWtJ9kFIW2AcktzTr5JiYUFbNVEhCDrIxE9hSdGJh4sUtRCB0x5K/OpfesiD SFC+GQ3NB2UDnbN16y7S8MSDo4iKXip4cycNiH1zfkHewsAwKWTvZxcJ6TjrvNW/x6du 9zeXwDVsSAiTVbjbkx4kXTf4BjNtk2lrneuKKAN2Bs3BpzpEV7juB2QxNu9Dj/sJKQuH apK4ludC3P1TkJMQj7niZrZlVe3Wy/9o1CujuvF0Untof/dzM7qhVfGZKKGxgr4OOrwm wccA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1756961223; x=1757566023; 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=LH7186V5/IqnZ4SzNaXMf39oYTvCKyvAIASH+gNRNt4=; b=JdLGQQ9vdQ7QD8Los/vsSI0DPowEzGQVK0MkzfsNRujrb3VAhhoUpF6B3FiD0A9Nzb U8zT+5Jt7aR4I6/86sxwpvqzghuBxC9QX4AQV/0NSHNdV1UbDdjcS055b/y6lJMcXfv0 ZxDLeE2W+C6baL9jGG4Jbh8gPkHDoJ3tTK9b+jik0D3cGQcU34zJ1k1QgX+C3Ct5zbfp vGPb3VrrJIcn3ZChNf5jS4zPCo/WwTaEyH6E3I36Nb2iyToaVJZEA8PRM4xeT2EO1g3x 0mH6iLyiCCdo0TK757RgjWr7SwJJa1KeXjvkBGM2BFuuphBFftG2rPpfNyBg4XGHiChm TrBQ== X-Forwarded-Encrypted: i=1; AJvYcCV/QlIH/WfO791jRylSv/3P+DBRHX+U/u/33I4r5mdt7/4tcluo0zZS8VV1xjwzya4lQxIxR8LR7LFB2Cs=@vger.kernel.org X-Gm-Message-State: AOJu0YyProUX+N/11yu/BiGMZSDjJhfxcbN3UTZu0/gLU2qM2YgTOoCe jWi4VuTZW8NAegU/0aUg9u9cKcE3F0cNPhUtRDJ879N6fv2RablxbXFOmsQ0B6VBqtsXoi9PzN4 BKcV+iBuAIg== X-Google-Smtp-Source: AGHT+IGbNBIZRRXlehmzTL2WQ8wGUyQD1mW1Qje7wUiLgUUmGWjGqvq48ym7ZTxCo6BwTdyJ7CuqFfkY7A0d X-Received: from pjjz1.prod.google.com ([2002:a17:90a:6d01:b0:329:7040:8862]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a17:90b:57e7:b0:32a:15cc:57d5 with SMTP id 98e67ed59e1d1-32a15cc9665mr9334729a91.13.1756961222947; Wed, 03 Sep 2025 21:47:02 -0700 (PDT) Date: Wed, 3 Sep 2025 21:46:34 -0700 In-Reply-To: <20250904044653.1002362-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: <20250904044653.1002362-1-irogers@google.com> X-Mailer: git-send-email 2.51.0.338.gd7d06c2dae-goog Message-ID: <20250904044653.1002362-4-irogers@google.com> Subject: [PATCH v6 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 e33e163b2815..62d1a1e1d458 100644 --- a/tools/perf/pmu-events/metric.py +++ b/tools/perf/pmu-events/metric.py @@ -8,10 +8,12 @@ import re from enum import Enum from typing import Dict, List, Optional, Set, Tuple, Union =20 +all_pmus =3D set() all_events =3D set() =20 def LoadEvents(directory: str) -> None: """Populate a global set of all known events for the purpose of validati= ng Event names""" + global all_pmus global all_events all_events =3D { "context\\-switches", @@ -26,6 +28,8 @@ def LoadEvents(directory: str) -> None: if filename.endswith(".json"): try: for x in json.load(open(f"{directory}/{filename}")): + if "Unit" in x: + all_pmus.add(x["Unit"]) if "EventName" in x: all_events.add(x["EventName"]) elif "ArchStdEvent" in x: @@ -36,6 +40,10 @@ def LoadEvents(directory: str) -> None: pass =20 =20 +def CheckPmu(name: str) -> bool: + return name in all_pmus + + def CheckEvent(name: str) -> bool: """Check the event name exists in the set of all loaded events""" global all_events --=20 2.51.0.338.gd7d06c2dae-goog From nobody Thu Sep 18 04:01:58 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 B12C3244685 for ; Thu, 4 Sep 2025 04:47:05 +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=1756961227; cv=none; b=XGs0mahrR20WjyaGocwJWI5D+bMN7qSrhgqB5UdB9etg0crGncDyJPle0Kwb2ghpajbCgOIaP6LzjdF5EOeJGhMTfAt8Qbfj8QDo90a0ThIH/2n0ff/VCG8l2tvzJ7aB+0QhTYMpn62Eg+FdMUP1AYdnJbw9QXMBRweoIeKD+PY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756961227; c=relaxed/simple; bh=DnCBmE4xK87Sv3hyk5xLp4ZbiKYtBCPdhaJpNRobkAk=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=WMSf3xmp6Lko0lgqwu0k0xMa1UUnw1x8osn3fyrwnoOfn3C6qkOeh3yUXj6GdARhZ6smhI9QvuGdA1RewhPuXmeWosn0Bv93gG3vaHreHeN+HmuLfUcvshSsIAbrn/vb7AEjw7ynUQRfI5+Q+61yVC2dBqYx0zFPhSA1HnKWnMo= 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=Ok3HM2uH; 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="Ok3HM2uH" Received: by mail-pg1-f202.google.com with SMTP id 41be03b00d2f7-b47174b3427so461170a12.2 for ; Wed, 03 Sep 2025 21:47:05 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1756961225; x=1757566025; 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=3G8zcYg9JGKOxRo4IqvzwI2DTd0mcQtugg6AtT15mRc=; b=Ok3HM2uHWvJM/vMKpX8zN+FZAhh+fKSC0L88TN9zq01HFF1aZgLKPj4+Hho4CV3Rt9 DtSY4ur3kW8uzqeGgouVk3cHKh5P4KT77S4cttkJbcMeeyuScyaUWru00kmwajDaLTiq 79+wz/5SbQ6XB2ExD0dgDtJTBDzx2jEY7JXzWrstSx2u0HX3yIyMaIWrUyE0bLw9MvHs s8E4rQ2ZDvsqyn4V83LHdTFqR8ON3goBkRKCjAI9er5D3XA4vHscDWyYQOc5O8CHFrZp W+XYcKljsnGfDLS+6FMg4B4jH6trZQyik3sBhAEYWkJDSHgtmXUFi683rZ8ayXwlb8D9 eakQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1756961225; x=1757566025; 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=3G8zcYg9JGKOxRo4IqvzwI2DTd0mcQtugg6AtT15mRc=; b=Owyn5l8dyferA9JWMZtI90/B784Pd+1Nk6dztnuGI3FIrN978i/IcXi8e4x+izQJbw g4K84s1xy2tPs87TbRAaDoE1U86biO1UZgHsc6+5rm1l9sxmh+0InxESho9a6KAZDXfd AYqbjs5ldpJ+YBMygFIGl30PwHhrPID0hIL1h2DixEaihgcajyFMcHTpwJKgPk7y2fwC EcqpuEDOzcwIvGkwq7ONiDcrUsCCAvZJPNqIzHoHYzSOpq03jCtTwBM1DvlaYnrxFsmo MmSSG5lMsJ0p6Lg9PcJ/gAdNlctI/UvjKyGwoyF7zqYPzNh39nXFNzF7xRNDxyJchXVq cS3w== X-Forwarded-Encrypted: i=1; AJvYcCVXpuvdlKd0TbTAPUHAXEdtwIEiv1QfPHDrs8s4TT3tKpAXDHzrgPL72Z9k86W/Al+K1HC/M9qyjJ3WsTY=@vger.kernel.org X-Gm-Message-State: AOJu0Yxt1Z4Ae0qdPkebfX7uDd2M3oVBKYir/Kqd2Ec0DYNqiAs8bJd6 N/42jfbJqufNut7fb9/ebjyEfn6N4O425Wzu7XTR4IP+fAmkCbRUIUZwJKTYCyKwT//WXcCYonK i5wnKp6nFfQ== X-Google-Smtp-Source: AGHT+IHpgcJVMNlEzLD5ocJ7Nx7ZlktfJkvFI1S/iIp2hbQTjXIwkBte/hjR6eWcD5TA6JOydPV14ik/5xjn X-Received: from plap20.prod.google.com ([2002:a17:902:f094:b0:24c:8b76:4f4b]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a17:903:22cf:b0:248:bae3:ecfb with SMTP id d9443c01a7336-24944b2940emr225476855ad.59.1756961224961; Wed, 03 Sep 2025 21:47:04 -0700 (PDT) Date: Wed, 3 Sep 2025 21:46:35 -0700 In-Reply-To: <20250904044653.1002362-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: <20250904044653.1002362-1-irogers@google.com> X-Mailer: git-send-email 2.51.0.338.gd7d06c2dae-goog Message-ID: <20250904044653.1002362-5-irogers@google.com> Subject: [PATCH v6 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 b6d92e935c59..7d1c4c21a786 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.338.gd7d06c2dae-goog From nobody Thu Sep 18 04:01:58 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 4AD8324678F for ; Thu, 4 Sep 2025 04:47:07 +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=1756961228; cv=none; b=MnQWTx49lL4VbEZcQji96CfMWlrtyWUEGuOC1/mzztsH0tEPq0xDSKMGPGZj6P59ktd3s4gNE+C8fxpl9uhvtLVEubGwcviPJFFDsvLVUyUOPLZfpLKLg8ehhObrW/bJ11dtU1v0kXS7st2CYoVw9dUoklGruRTMU3fHrhTsJDc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756961228; c=relaxed/simple; bh=UcY6aUQryoh8TWxf1R5rbeHWfSRESoDPu///WKm6rBQ=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=SWzZB5otVgFl1Z0cIN+Bc/eoXSg2A4YKazDC7njjUojf15pN/Em7ui6OCXZII5WtiDcIanRKwzKMiS8c7wgPmx/QReQuUN1kFqPQzB6P0uwR5E7X/KRxhGD1Z1Q/oo+iqxgOLzTs0Xf83lAbg+ugvoFq91HHptaOQstiaCtyMgE= 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=cpin8Zs5; 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="cpin8Zs5" Received: by mail-pl1-f201.google.com with SMTP id d9443c01a7336-244581953b8so7128875ad.2 for ; Wed, 03 Sep 2025 21:47:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1756961227; x=1757566027; 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=vy4CQkIGw7/lVdg6ICrys2SpjapcPPfaM0IjFTULfsw=; b=cpin8Zs5nAeBn31n/mLQMps/QqL3XKGsuiG799z9nO81a3FGaOIJcgMQsWP28oCZBZ a0vPb75c8IjKZj28k38kE4mbqEMhSBjRUf1b72WbeDJ7jfl8QbyIM32A6ek2wbYA4LTW /WMa0NRbYNGaGyIOY8MwpVK8R0NXRvZwWjoOA45CduVHrgjiVvGqflprk3l7uJn6VcKh sF7QjxiK0HY4fmM93lHrqgSLNFtfYM8WR6X6bEXxiqAh3NpeDw2rdme8yShhS3TEDCxJ s0f4FQO/a0xUQVgUPCJr1IumTH1NbZRCNDZmfEYPh5oE95Jz1clSKGKxw2amjiabLHm7 /7uQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1756961227; x=1757566027; 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=vy4CQkIGw7/lVdg6ICrys2SpjapcPPfaM0IjFTULfsw=; b=CGyM2BVfG0+4je7EMhIYczmzoMWdDmLUMTBzxOPOK58d3abKdUaqh9eGyweByaKJGg 5oNJUb00oGwWzGBTPcSlgkbT5dg3UihkG9tOaHIbTUAyERcnZypJn69LnUwjdaj244Hu h4gyZNgcVEEHkJ8+EkVTZPwpDTb9/stL25BXgzM2MX8cG1G7PgBQvsbBZmNOWTyXlkkQ mBurXIV/urxUNPcktB6H9FczaWRzzwEAUIKpUElOj13EQ91FjldSFsg8FYHJ9nr7aYX5 YGJ0f/kHxAIDLdec1Vg7dNeXXzzowTjPnM0BLAszK530uUuc6Y3I8mlyMjGEExarYr+y nG0Q== X-Forwarded-Encrypted: i=1; AJvYcCUnNijYUVrumnaMrTDCL2tX0b0emllk3oPeO2LK6sQ6sOZDtakBeh3V/ERNlimcwiSfyjI8zfPdjSvCf40=@vger.kernel.org X-Gm-Message-State: AOJu0Yy0l/V+C1dJFt+zWF9EXNlXYqkSxEPbYNOyUPohKBJhQEzICEw3 BtzMo/9t0loFO6zNRM9VLfOunCcYpS52uRRvvQ0VAu7G6KP5NusKjfoqDqVjePmbXp/kxjuF7os uz/TFaBWMFQ== X-Google-Smtp-Source: AGHT+IGvaXhWFgpP2gOrDYUhC9zmZZdEJSiWs2T/nzXa5g5BaVwyIBI+T2aP0gEM+R4bWkCrZ2xoOk8Um3rr X-Received: from pllm8.prod.google.com ([2002:a17:902:7688:b0:24b:66a:7448]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a17:902:ef4c:b0:246:8b9d:2519 with SMTP id d9443c01a7336-24944a73e9bmr216703555ad.23.1756961226639; Wed, 03 Sep 2025 21:47:06 -0700 (PDT) Date: Wed, 3 Sep 2025 21:46:36 -0700 In-Reply-To: <20250904044653.1002362-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: <20250904044653.1002362-1-irogers@google.com> X-Mailer: git-send-email 2.51.0.338.gd7d06c2dae-goog Message-ID: <20250904044653.1002362-6-irogers@google.com> Subject: [PATCH v6 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 62d1a1e1d458..2029b6e28365 100644 --- a/tools/perf/pmu-events/metric.py +++ b/tools/perf/pmu-events/metric.py @@ -10,11 +10,13 @@ from typing import Dict, List, Optional, Set, Tuple, Un= ion =20 all_pmus =3D set() all_events =3D set() +experimental_events =3D set() =20 def LoadEvents(directory: str) -> None: """Populate a global set of all known events for the purpose of validati= ng Event names""" global all_pmus global all_events + global experimental_events all_events =3D { "context\\-switches", "cpu\\-cycles", @@ -32,6 +34,8 @@ def LoadEvents(directory: str) -> None: all_pmus.add(x["Unit"]) if "EventName" in x: all_events.add(x["EventName"]) + if "Experimental" in x and x["Experimental"] =3D=3D "1": + experimental_events.add(x["EventName"]) elif "ArchStdEvent" in x: all_events.add(x["ArchStdEvent"]) except json.decoder.JSONDecodeError: @@ -61,6 +65,18 @@ def CheckEvent(name: str) -> bool: return name in all_events =20 =20 +def IsExperimentalEvent(name: str) -> bool: + global experimental_events + if ':' in name: + # Remove trailing modifier. + name =3D name[:name.find(':')] + elif '/' in name: + # Name could begin with a PMU or an event, for now assume it is not ex= perimental. + return False + + return name in experimental_events + + class MetricConstraint(Enum): GROUPED_EVENTS =3D 0 NO_GROUP_EVENTS =3D 1 @@ -82,6 +98,10 @@ class Expression: """Returns a simplified version of self.""" raise NotImplementedError() =20 + def HasExperimentalEvents(self) -> bool: + """Are experimental events used in the expression?""" + raise NotImplementedError() + def Equals(self, other) -> bool: """Returns true when two expressions are the same.""" raise NotImplementedError() @@ -249,6 +269,9 @@ class Operator(Expression): =20 return Operator(self.operator, lhs, rhs) =20 + def HasExperimentalEvents(self) -> bool: + return self.lhs.HasExperimentalEvents() or self.rhs.HasExperimentalEve= nts() + def Equals(self, other: Expression) -> bool: if isinstance(other, Operator): return self.operator =3D=3D other.operator and self.lhs.Equals( @@ -297,6 +320,10 @@ class Select(Expression): =20 return Select(true_val, cond, false_val) =20 + def HasExperimentalEvents(self) -> bool: + return (self.cond.HasExperimentalEvents() or self.true_val.HasExperime= ntalEvents() or + self.false_val.HasExperimentalEvents()) + def Equals(self, other: Expression) -> bool: if isinstance(other, Select): return self.cond.Equals(other.cond) and self.false_val.Equals( @@ -345,6 +372,9 @@ class Function(Expression): =20 return Function(self.fn, lhs, rhs) =20 + def HasExperimentalEvents(self) -> bool: + return self.lhs.HasExperimentalEvents() or (self.rhs and self.rhs.HasE= xperimentalEvents()) + def Equals(self, other: Expression) -> bool: if isinstance(other, Function): result =3D self.fn =3D=3D other.fn and self.lhs.Equals(other.lhs) @@ -384,6 +414,9 @@ class Event(Expression): global all_events raise Exception(f"No event {error} in:\n{all_events}") =20 + def HasExperimentalEvents(self) -> bool: + return IsExperimentalEvent(self.name) + def ToPerfJson(self): result =3D re.sub('/', '@', self.name) return result @@ -416,6 +449,9 @@ class MetricRef(Expression): def Simplify(self) -> Expression: return self =20 + def HasExperimentalEvents(self) -> bool: + return False + def Equals(self, other: Expression) -> bool: return isinstance(other, MetricRef) and self.name =3D=3D other.name =20 @@ -443,6 +479,9 @@ class Constant(Expression): def Simplify(self) -> Expression: return self =20 + def HasExperimentalEvents(self) -> bool: + return False + def Equals(self, other: Expression) -> bool: return isinstance(other, Constant) and self.value =3D=3D other.value =20 @@ -465,6 +504,9 @@ class Literal(Expression): def Simplify(self) -> Expression: return self =20 + def HasExperimentalEvents(self) -> bool: + return False + def Equals(self, other: Expression) -> bool: return isinstance(other, Literal) and self.value =3D=3D other.value =20 @@ -527,6 +569,8 @@ class Metric: self.name =3D name self.description =3D description self.expr =3D expr.Simplify() + if self.expr.HasExperimentalEvents(): + self.description +=3D " (metric should be considered experimental as= it contains experimental events)." # Workraound valid_only_metric hiding certain metrics based on unit. scale_unit =3D scale_unit.replace('/sec', ' per sec') if scale_unit[0].isdigit(): --=20 2.51.0.338.gd7d06c2dae-goog From nobody Thu Sep 18 04:01:58 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 764572309B2 for ; Thu, 4 Sep 2025 04:47:09 +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=1756961230; cv=none; b=oZ37KGErLRizZrS6AXUc/wXc3XLUdunhJKh1rKhGZeeec00sq/Du16bpi01PyrekvSg4IC6YovX3fex/eWt1KC7jMBNXcsFeOBTYy6nI/bQhn3zgg1CRMnxvfBwde6mIzM/NMhka4qyPTPDMaKeQLSO71hS2UTrSveTBJsQg4Ok= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756961230; c=relaxed/simple; bh=XqWtaIj6K0pucwkatrwiDZVEYWRyQheKPib6CZJKBqA=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=Oq6l1erCr6CCtTsRIG78vxgdD5ICPJFAvqxtlh65Gx8dU2Ul1gXxtGaqQHntNIaB8JB6dvacXWNhc9bhWFBlkXVpJwFw50AYGm20gSfIsgcrVvRlubvoG9WE1/KJE2IbS1FA8CBsK0xW5zL40v5tQJ8+BZ1y0lYbhSGqbaXeaE8= 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=FI3Cf0tp; 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="FI3Cf0tp" Received: by mail-pj1-f73.google.com with SMTP id 98e67ed59e1d1-32b58eeb874so508850a91.3 for ; Wed, 03 Sep 2025 21:47:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1756961229; x=1757566029; 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=3oN/oOalds6TOESEZO2XD43cMiUpOPUx/fjrARlRsWU=; b=FI3Cf0tpIfWeW6qXUQWDO+L/dArh0wW4aRRBHWK4UfopB1FM6nYVI1Ig5GDYs+98hk Vt39JTgbImsUy+3/RrCqqi8ZXaRrIq78jI8ZtchYZxOse0iPcro1/BYb0bH6vEOvgu3C 3MqCHOmoWIVlStOhQcWROAgVj/+8GqBW4sXdWogPAYbZTYUrqASAgbashejnBw0uby7j e02xJObZZ8hZkm0xDkcEMBqE2CnWkGvOa4ycBt65+l5kuljJ/G8NxJ8UvzygrpNnuLra teOuuKwRx5Wd19sgqdrsTxYWsn3bRJia75uyoVJSQCO0hMVRkYUpH/xK7HZLwTF5gV7c a6jw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1756961229; x=1757566029; 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=3oN/oOalds6TOESEZO2XD43cMiUpOPUx/fjrARlRsWU=; b=JRaL9v4Dy2COMMz3aVFDc9lD5LM2OnjjP/DUH2a9FJEbAsVRTmIFcM1bLnjT+bBvvs K0Mg2+Z0GdmYgihU2WdxWFyaXWY329iFnXvqiX1ez0CSyaja4+s+lPZ5wUDZqiKQfl6R BpAsxYtvAEpGW2BMk/eRptshAXpswPnNhNNU6UZeAiWtEp23fByi+KD+LVxNrJHREciN bq/9ghHiuMoUIfBXBHjrDNtQpnFXaylADRqA0FxU/slXrZcBrULSyHAe4HG8l0z6QZ6I gn4l9jUZBfNfG0rV17Po0s/de+M3kDNnH8kMOZHEQ9mbFMskDT0sOm6JTEm4a6yUOc0O 1LPg== X-Forwarded-Encrypted: i=1; AJvYcCXmXhm9ueg8wzsNIe8zTCR9i2kcCJSyoxsu8gXraQeKAvHpec33ZqBbMw7TXKbQR8mSAup+KaF9v8b22E0=@vger.kernel.org X-Gm-Message-State: AOJu0YwoWtKV9M/3lqU0m/jz9l7TFSK8gvOx2ljxTdeRgm5EkFX9LQkR cUHwGSpBfHoNbmcsTqToGZXDnl6Gh/GnzAPo2nD4uqE9oFyZYht0u2xIcRLdUZmFHhhx31PAfwF +1iJKNfxNLw== X-Google-Smtp-Source: AGHT+IHHKaCDn1qrZv8IGjhja+YWfuOiVcV/nZpMmjMikxjYSYE06l215FPdIN3sznwjmGN36scFjdFRIL9C X-Received: from pjss23.prod.google.com ([2002:a17:90a:1c17:b0:329:6cd6:660a]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a17:90b:4c81:b0:32b:95b9:3eb0 with SMTP id 98e67ed59e1d1-32b95b9430amr1428715a91.0.1756961228792; Wed, 03 Sep 2025 21:47:08 -0700 (PDT) Date: Wed, 3 Sep 2025 21:46:37 -0700 In-Reply-To: <20250904044653.1002362-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: <20250904044653.1002362-1-irogers@google.com> X-Mailer: git-send-email 2.51.0.338.gd7d06c2dae-goog Message-ID: <20250904044653.1002362-7-irogers@google.com> Subject: [PATCH v6 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 7d1c4c21a786..6d29d9ff0a48 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.338.gd7d06c2dae-goog From nobody Thu Sep 18 04:01:58 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 AE119238C10 for ; Thu, 4 Sep 2025 04:47:11 +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=1756961233; cv=none; b=qAtCn0xZj5FoojyV+FmhgCy80rUjBRVjIA3ngGkefn2VVBzAxCPW2ZITYUhiMU2IxiUnmPBWSiPUNabNGwmxpw3CEk74yMq2j8AYdswT6BED3Uqw99/JadgzXgwyjO/CRZqEE3ufJtzHrM2/LXVAU2xypmZhLCSKSsAG0GNsweE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756961233; c=relaxed/simple; bh=hKncWC1+jOuJpYM18phIZ2V0cd6uiJueX7lFB7eDbNI=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=QlOHx1ldkgAs4A2oYztI6dvvLmXP/BPeMBAT8VFBq8ttRz7+N5YOvHy2OT444KBxss+mzI+a4D4FbEn08sgFOHXfIrTd4Gm1fi0Jf0DCa6LIuZJTScyLTPXKh/SMOzjhEU5Yl5RlS8hR48TEjZ0Yz+/MrunI/FNveNHthzdxJUI= 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=cbqsjezq; 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="cbqsjezq" Received: by mail-pf1-f202.google.com with SMTP id d2e1a72fcca58-7724688833bso664110b3a.2 for ; Wed, 03 Sep 2025 21:47:11 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1756961231; x=1757566031; 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=bpXSfxqJuF7aaOwysDVqZNPh4NQdI3HR21+/0eUXRKQ=; b=cbqsjezqxz5pxZcOWk9gpoPI5X6Ggu3qe5NBAVVl/EWvhlYb58h4iQjr2ruwwREzM9 m98z0WTSVSVZ92YiBPXyhf4+3DnSaSVuROk5TyhF0HT0DHUvlqAj9NSzZu/JgY8CskuU GuG51gnwiFJp/jMXZkfo/VtuGI9iH0/gZEw6rIn6h1v5lY0wPvDUO6TPD4zbYZYXuVFE fAw2ylxg38sFG44Pw+hq3L0tsq9lEjBBnYtUcOff7VimIsnHS0y4PK9V3LKzKcg5TKPs l1LDvIUdGwCWGDJNhSWCid3J2ATOI9gQcdW83f0DAuIfgyF4yehmSNRNRbcJSz9bbbzS G1FA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1756961231; x=1757566031; 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=bpXSfxqJuF7aaOwysDVqZNPh4NQdI3HR21+/0eUXRKQ=; b=QesL6VJ2p3KBTTi2iXGmSNg3V7YBF984CcD5prhl3uOvTxxPRtcm9bGzNxkrX2D0o1 /aooY1bQayrypIH6K8a1sZ2qf6tt2zLs8NlZPb4rh32vg+uRw3/yNVpud4ydw2Ss0LIn fTuApMFlIyiFV6MKygcyTcPVPSDrzMP5+PX6pZP2NXBfsVOFrFpzirrcpYb7wSTgwuys xkUoJsLKpcZ7640qxoSVgnGN4KB4ejvvyH2fRk5y74ozEI9isoLVwJnJ5gYL8QOYtYSN Tv8tUw+iSCbuRpLEg0WlgFn5k6wMAlZFddG+o62EeyQocscKkWvEvVYvfD4gfu0OeyfI o1bQ== X-Forwarded-Encrypted: i=1; AJvYcCVYSzdaVDloiQlTeMOUjvU/DiYXojb17Cw6AlV93KMvd/n2qply298+fl/SP8NUUptrdQNmn1CvkS4ahgg=@vger.kernel.org X-Gm-Message-State: AOJu0Yxdgmhtocc+5FWAEK0tco8T0Q8tnBDqv+0nJJgaFGcz//LVkmNT 902zMJNbv8pSV6Uz37KGyaMsWmUQsjMZ8lZWQ4DjklXoWgll8aSBIiM/xdN3eKmoA2gy6kCHqT+ RlwEvTAQ94Q== X-Google-Smtp-Source: AGHT+IE3WF8uKyH/i78+XWYnMrtoROSsHBvKnIJOoUSzDL3290slXmHj3n1sXU953SKxKOItieAgnNlY7Mfe X-Received: from pjbpq12.prod.google.com ([2002:a17:90b:3d8c:b0:327:be52:966d]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a20:734a:b0:243:afbb:c9ee with SMTP id adf61e73a8af0-243d6dce669mr27385305637.7.1756961230725; Wed, 03 Sep 2025 21:47:10 -0700 (PDT) Date: Wed, 3 Sep 2025 21:46:38 -0700 In-Reply-To: <20250904044653.1002362-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: <20250904044653.1002362-1-irogers@google.com> X-Mailer: git-send-email 2.51.0.338.gd7d06c2dae-goog Message-ID: <20250904044653.1002362-8-irogers@google.com> Subject: [PATCH v6 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 6d29d9ff0a48..dfee782596e8 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.338.gd7d06c2dae-goog From nobody Thu Sep 18 04:01:58 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 649C1259C92 for ; Thu, 4 Sep 2025 04:47:13 +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=1756961234; cv=none; b=CwB40SNDs4yV7stNmxYW5hfG0cCIh9//rsn/ChGndm8NQQQM7wOVitNlRGPILMJ1a0HSCFPn04vCLgSGkJ0wrIExGh8EKXuLG3FbL8zBg06IMZxZFo0x9ZTB/RjP46+ZlLCBy8qgHxkc9z1kwGzki8ZmItZ5An+Y+fm9FY6+BzU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756961234; c=relaxed/simple; bh=JjlQaSBT7py0q7gDkb/E4YVFsgpF8smvn6xkGMOw5Lc=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=hhN+13ErfvQM0Hm95qWyknq0eaEDT7TaoflD4ICMeznBinIL+6jj7z5WTxtMC1Uyu1AdAKwOtRTkf4MHmH774NCh7G+WDtwgn9rClLosgB1w5seIIVfI0EiAjRvN0TyG68SLx8jo6jRTXnpS4LAVdx++M9ThqTI1wmT8EV32xUg= 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=0iZQuCoM; 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="0iZQuCoM" Received: by mail-pl1-f202.google.com with SMTP id d9443c01a7336-24c99f6521dso7964685ad.3 for ; Wed, 03 Sep 2025 21:47:13 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1756961233; x=1757566033; 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=Bu2m9NwYUYP+oZqOMmXinOl1d0NFMuknff+TFeF8Tok=; b=0iZQuCoMOYGVVlH3ZDag8ra/mGobVz0qVgm1J5+xt3FgoOPfStKlfvJu232BM3zmRh jQtXqx35m+W9tFs2CFMFMrof9a6S/6LXsNEqdyXOo6LiQbHczzBE7vW7SlaSTybyAjd5 dR1JG6kX4qBSPDTCZjj/eXVyBx+/+TG2t0ZyifiPOpw4QR/oHvjyDZXOMmAj6inoV7GC vaJY5Lidb9OXSsDHce7JWD777kMreO4RuDl4chG+Y2zazfz5RaZWvbdlqEkdKbpFhpwf XUupe8/r2uCfo8+cllT2l4/2sIk50Lo/b7HQdPFecrCkVHoPQLpZxUoK4xSkEGWDulaT L+lg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1756961233; x=1757566033; 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=Bu2m9NwYUYP+oZqOMmXinOl1d0NFMuknff+TFeF8Tok=; b=CfHYgeZ0uxez1sIr76p1OavSKSQXfs4GIxlNZaba9kH/fqwIo+acuvK6OwuP4u4+qq FDz5be3VmqswfpELJU3sKAx2Ivj10qGdbcwJeZggHoBVNK41EJe4xb5HiBEJc0nCIxOP YuaueRZDk3u3YQcBK2Qj8gmkSFRyqwguMas8U1SKW5t3VgRbnsRKe7Y4l8BA0PLglplU M4FvAlMVIQtCDlResBgSsPz6iLrcWiIX6ozRyp0uQLbcJYaOGr5eAfPEK3ez5TFJVihM hOjUJypHAo0KeNLm69PBCsiVkq7aR7w/Jc9uZKrBiSzgEWX4zol6OHE0ygXK8Qgd/Rt2 saSg== X-Forwarded-Encrypted: i=1; AJvYcCWIilAIFVcdNFH65dHFmJTOZzv7bAIH1w6b/2/W8STmgKl/KBAenZ6XCCELELW3aLbaCokCutkQLoXj7fE=@vger.kernel.org X-Gm-Message-State: AOJu0YwLBe8Wi3oIgDnqgmXND+kIsMlYGiS0gU/aZUlyUaY0y6Y5SBa3 y8c+Ail+7vii6EUDK9G4SXzG8wi/+wznuQh2lN97Kg+pOhokxlvKLQK1cuSgwYIRQ6v4XyggtI3 Sk73j4x8bXA== X-Google-Smtp-Source: AGHT+IHzLCkpxX3Zcx/kL6W/qra9cEEG3LIfm+BCxJr83u1VsSF+iyijelb38kCbkTKGBacQXP6ZT7i5XCat X-Received: from plhz7.prod.google.com ([2002:a17:902:d9c7:b0:24c:af07:f077]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a17:902:e5ca:b0:24b:1eb:857c with SMTP id d9443c01a7336-24b01eb87dcmr130196425ad.57.1756961232633; Wed, 03 Sep 2025 21:47:12 -0700 (PDT) Date: Wed, 3 Sep 2025 21:46:39 -0700 In-Reply-To: <20250904044653.1002362-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: <20250904044653.1002362-1-irogers@google.com> X-Mailer: git-send-email 2.51.0.338.gd7d06c2dae-goog Message-ID: <20250904044653.1002362-9-irogers@google.com> Subject: [PATCH v6 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 dfee782596e8..b4ed137c91b3 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.338.gd7d06c2dae-goog From nobody Thu Sep 18 04:01:58 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 F3E5725C818 for ; Thu, 4 Sep 2025 04:47:15 +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=1756961237; cv=none; b=iiUeDbT7OcnD1s2g/QAARfVIvHqR3D56K8yu4zEUO0wxudR22zqiZNEUXZa5SWcVzbabK3Wh9ZIw2E5Ba+Qy9PUirpCPn93pr3eQ3/JZ/dZFTyMKGpP7dL76p9GHxmlgFRjYY/FL7YG8/8OKB3KTT2I/1l9IbW68JJbk+N+Jotk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756961237; c=relaxed/simple; bh=o+Ieh5f7nEigRVrrQ1oFBbRlimMkO/0u27Jpnxj0Bd8=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=Wb08vIRgEzIaw2zMy5/aLtKZSNoh7RJROw2ScOnSUkT51twU22ta8Yat2pqViABiS7qjpI3RrBU06Fs3imQsYIryzmUGHOf7aEMqqz/PW9S6h80Zy6f/P+qFjHPu5kIDz+LJ2vZZjyiXB1cE0von4XIR9MNR6neZR8GRBI/qrVs= 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=ZuBnXXSz; 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="ZuBnXXSz" Received: by mail-pl1-f201.google.com with SMTP id d9443c01a7336-24868b07b5bso15160645ad.2 for ; Wed, 03 Sep 2025 21:47:15 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1756961235; x=1757566035; 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=kzi2AtTlZOwesAgn4m+DSLuE/Xk8AxtH2yHfI9nLvQs=; b=ZuBnXXSz6/2hBzn1S7dT+NXMOR8UoQcCDwp+qxJAT6O2Gnf/AKbi/0RURTbkjWz1MI c97xAguK4K/7pD95l1RLALnzCONWXo9UCFpHH7CF/x4sEgqZaIeL+xzLG6loFNSrN52u t+unAp5/N06k01BbdPYbwiR7ypdlEt6q20IrKWMmJhEEjjavMOA4vtSlsALWEJAowc44 0uoVy27OhEIqssriEEr/KNM5j4TsmtK8fXJArUymsjZEUFFmqfFy/MoABWNzcQD6j5IQ 84yU63BYP7pQFd3TljJkDxP7WhZUOzpGwLuv6uC2zi5v44vJzp8zByViaFiPiID+m8Ya 0rWQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1756961235; x=1757566035; 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=kzi2AtTlZOwesAgn4m+DSLuE/Xk8AxtH2yHfI9nLvQs=; b=l9HfTDMiQGEBG/46RhOac7W4hbbGvbU4IEe3+Aw5OHes4/mpUtr4svYQvuVrz0uOX+ lWM5kDiBFxOrOQPHyrS4e1hnr4CF6/JueXiS0xr0rBLJb6hH+P+dAEPVSeNHF5JKjQCC YZg4jDnSS/FnC1v67nvBaCxgp0neQ5TCKCCOigh1/XK110lnfPKaDuFgznpL06dJf8/A oeSrMzSMdQoJkpvKFE3Den3uw+0Q5rZiTFwFIgPX+2RIRMwOPp5iZi1Bu2p2+JO1zpDd /x/UtcKZl7K1tHCfIPtQjuxRI4Z7S1H8GufJPbcR1n5UW7p2sF/4CF5Zz1VsOYJHWyFn 3Czw== X-Forwarded-Encrypted: i=1; AJvYcCWbyTPEhO8zdFmFaF7hcnCLCR2BdC+S2GWICgCKtfrcavvj5Y2tCio84JVFDZJJZy85xkWMkw4n+6jLIs0=@vger.kernel.org X-Gm-Message-State: AOJu0Yzxp2eUQ7Y5PET3BXv6W71O5Ez1RmOOymropYkceepEYIqMfB0y zy4fSg1bn655DKB1FqhR4paLyMAUfAR/61cktGpVMEgu+NFyUG/D/yEpv0E7sRXHjRJXB/GoeEP gSHHUJfjudg== X-Google-Smtp-Source: AGHT+IEGzstwt9UTmaSuMIy+408+KXnAOSGoJNob6WBZfIdKqBTphBoO80XZXmpV3l/Csfez6aMfWBcNbhgk X-Received: from plbmj15.prod.google.com ([2002:a17:903:2b8f:b0:24c:c58a:c192]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a17:903:1cd:b0:248:a406:c818 with SMTP id d9443c01a7336-24944b3c3fbmr205372535ad.42.1756961234619; Wed, 03 Sep 2025 21:47:14 -0700 (PDT) Date: Wed, 3 Sep 2025 21:46:40 -0700 In-Reply-To: <20250904044653.1002362-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: <20250904044653.1002362-1-irogers@google.com> X-Mailer: git-send-email 2.51.0.338.gd7d06c2dae-goog Message-ID: <20250904044653.1002362-10-irogers@google.com> Subject: [PATCH v6 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 b4ed137c91b3..52c592112c13 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.338.gd7d06c2dae-goog From nobody Thu Sep 18 04:01:58 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 6A332261B64 for ; Thu, 4 Sep 2025 04:47:17 +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=1756961239; cv=none; b=MurLsOvItnraTIlBqmf2EuAPnn4BY7i2u6/hgbZXYKY8Dw1DZh/0dgoE4g6SpBWD+ZSLf1CdgfzcGe9KjdkZINT5zmpqV/51s81W1UduZ5khumvWlZAz+5tuYAVYnOIaQ+yTfRT+PU7gycLL29kvIgMhPlZ6hiIlhjDAydhXD8k= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756961239; c=relaxed/simple; bh=xaoyupMMTilaFjJvjKInJ55nFWSQH02YaM+rNbkJA7A=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=aNbAC6Ho7N47QwMw9tL3lbCl6VohFitR4/gzgkFYvswW7N3QaO0aMCo7/a2aO7xgxZuU3uzM+b0MQ7eYW12vnCphwm+TdGB7J/gsZ8fVhoavmMAEZizoCIDYWvLq72mmfdOmy7RsmoThuTMKR8TXqM9POWhZ5eqZlSNscw+axTM= 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=GcfaIp6I; 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="GcfaIp6I" Received: by mail-pl1-f201.google.com with SMTP id d9443c01a7336-24b4aa90c20so8491915ad.2 for ; Wed, 03 Sep 2025 21:47:17 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1756961237; x=1757566037; 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=/8j14N23nLFt2iLv3D1VvajDViJgG7KjVtQ4DAsNYGM=; b=GcfaIp6IRQeysnaZ+KutKHooC7B7FvQxiQomoSzApysTMNSxWlDqjUSowETh17AvZn RO6jbn/iQBDejRO3j3zM1OOY7j9tT6puRUYMp/zO4yMMKWNRGmVVcWX0+D+xdErIsQtk MT1brKCTFj6PL4rT/NdKsCKKzJAYmUx6ZTg9uQAOkCtJs1jqu3TsQGfCoXX8tC5UMOLQ xiSLdBwCDNx003XWCPsHXTb8dnbuEq3rMGBr9uFI2o5r6TcEDH/22XEf73iFbcu59jiY MI4Xr7A3PDzOjzPJUlpqd1vG0yjzTDoMWZbyXGb0An3m01r5+900WSTyjjVwvayqs9J6 kLKw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1756961237; x=1757566037; 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=/8j14N23nLFt2iLv3D1VvajDViJgG7KjVtQ4DAsNYGM=; b=dYf/Gpgd4L/hFonmonbcfxnP8tEJoSLC4ohGB1BAL3nGvkOjZWrHGBIrnMp7ODBf1/ 3nOt2uYKOujDDHDYwJvByXcwB2rCIY7xZNPxXwBHQa/ma73e1QAVH/9KbduF2WZctEuI vPUtNyV6lXSM57JY6Sdmy4PXoQf9oukA8jKfRW91QkqROgRz3PlFnHeAeWtu3kJnUbf9 8uKEBuJ6OMu7TWFHch/4N6gvgweIsHkVF40TAkMQrtO9Cgpy6m4evzrxZgowvCl/k2FD 9TCxyD54fUsuHNyXEtaHQhugM55yXCCzvktHcQN3s+6fEIVynjJAwY8sgrN5j3ereogO y1wA== X-Forwarded-Encrypted: i=1; AJvYcCXy7tJu13+P5ct0GN8DGVrpdUZAXELCAQATjDT5mHm2PfExI6S4yGQKUq5PqMuQn2JWDLZ1WPUcWE7EwFk=@vger.kernel.org X-Gm-Message-State: AOJu0YzPoyUA4/7SfrEv4ErUaXARguFUDRnlibzyMhrPYW04O/zvjygD l28gCllMZ25B+3isikYvwwBcsQgAXcIqxwbduyHylIGbU2rvM4IiB2yE00TYg6CjgAiiPn11bto wjHR6R5cYeA== X-Google-Smtp-Source: AGHT+IFA66Y5TbZXQ8aachh/JFnmpiXpFQPh4cTx1CCGUVPMxZwBH9G+DVkWlwXPayDHHVvRBKgevYzk1ygL X-Received: from plbkr7.prod.google.com ([2002:a17:903:807:b0:246:727:7f8f]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a17:903:2f89:b0:246:c816:a77c with SMTP id d9443c01a7336-2494488b157mr200713485ad.8.1756961236612; Wed, 03 Sep 2025 21:47:16 -0700 (PDT) Date: Wed, 3 Sep 2025 21:46:41 -0700 In-Reply-To: <20250904044653.1002362-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: <20250904044653.1002362-1-irogers@google.com> X-Mailer: git-send-email 2.51.0.338.gd7d06c2dae-goog Message-ID: <20250904044653.1002362-11-irogers@google.com> Subject: [PATCH v6 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 52c592112c13..c3677807136b 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.338.gd7d06c2dae-goog From nobody Thu Sep 18 04:01:58 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 81556269AEE for ; Thu, 4 Sep 2025 04:47:19 +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=1756961241; cv=none; b=fMWNPeb+XWMImFZ3lEeFuU8pcmFjnPQMt/wECiOjL8+wUkxzd6VAM7z8cO6ex3g0TWd/SfeJ3yFT0YHmiMvPQqZSOVJi+AfZZ1dFmnq9aOcjJ3ycIBS2RSQE7ZFhGM5yENv3KUJw+niKeHb/hSATyM+3hoqRKoVQgVEPbnbBjIY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756961241; c=relaxed/simple; bh=EE2z15ts/NqbyN6rtQ/GuVgF2ic+BRGEZfEG9IgdK0k=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=HhEA2hQAPtMHa1pmP36FjDF/ISGQU4eA5Qn9lcKiNrrjzcR/5Mxje5Mn9FsT1vlKkYGUysph6+UQtbcqWM7gXIyrJ50dGb9NQPkyX4h3EPgH8rVb70VhLqIvEIrFR6naiwjU4XbOnYfNcoZrQOJ83OCy+TzwS0iOpX9OZETduE8= 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=iTjILD/D; 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="iTjILD/D" Received: by mail-pl1-f201.google.com with SMTP id d9443c01a7336-24457ef983fso11135315ad.0 for ; Wed, 03 Sep 2025 21:47:19 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1756961239; x=1757566039; 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=Tl1q00Wukbhdt0sUNZX/FIHb4T0EyXRhrnNhUM4NP2E=; b=iTjILD/DklhhrQjCOeGB7nVMgBc+LZaWdeiGr/pFmtFVEVbprtdx680XS7CSn2qTXG Rd9DMXtCMgHDTu4ZMj5I1NP/BfLuJuqDeEE1crXlOJCQm9VA/pM8fSqgnEraiLzOBBMF ffjD95/KwrlHY3gvQemfLF4Yp4wcOdCOpomkb5Zxx4YJmE9DfcgWUNRbZmmVjumJDNYp 8ZcwAFwWw8kSpA/3Bg7uKNyJEwQ2y5z73eVGx6AW26XCgLNorF01xnMb5eqoo2ao7wb0 lFNccqOTjKok8lRRnkQ/HVr5Gmw4biNR9HsHalFgsXRmfjDBDoy/CDgggy83KAC/YSjF n/2Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1756961239; x=1757566039; 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=Tl1q00Wukbhdt0sUNZX/FIHb4T0EyXRhrnNhUM4NP2E=; b=VVQq6CuMvkwzRhkZKi+tsvry8VT0b/f/igwggT90sehNSwBc85wB1clakdLxhtGe2q pWQC3vzALshjSq0hYED9UNeCPWrd8yvTeJThlsxU9nJHrrz4RzAdvPdOoZTNoJ7qOUzc 68fxr0TZgnzV8ec15Pujxlg7FumTEuCaBrMlKUMSOMdmpcxyMGShzww3RXEgWgILVgLS q2K3+5fGzMqy6ePIPtL7eCZajEpM4rI/p4wwedb6hyhAQBdFxJEZ8yktQEaSoaoc5kL/ nmjOZZJTA/xVWNSnRN/jS86whCG9FAZe5dqgFewLm+6V9ZUYVyKoeb2HBsacohoNH3do E+WQ== X-Forwarded-Encrypted: i=1; AJvYcCVpkjCCpj1MLnkOE9+zn6uehIFJboffH/mMdeXZuCFItgKXJZZh2ENhaVeql9NQYiQSlNNHm7EFHZiHKXQ=@vger.kernel.org X-Gm-Message-State: AOJu0YxOkT6mlUeCF+xzULduT7PF83h9btoG0ZB3M8nSuggDXeFsa7rS KAEcCc0bbk+td7KFvHdwo/3VExFl0bKDuRrJxrRcXzhQvfFJwfDMsx1QDJl2PXUvUtXW2DEgd8s lMlJt+8+Q5Q== X-Google-Smtp-Source: AGHT+IHoS/tP8rMKrHLJT7dStJ5bpDC3epz4vkfMmgq5L2Tw4ODSuYSKv+PmSGpTBaEk2hlfPYjrm4OJlyAg X-Received: from plhu3.prod.google.com ([2002:a17:903:1243:b0:24b:1657:c088]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a17:902:ef11:b0:248:c8eb:9ae4 with SMTP id d9443c01a7336-24944b19dcamr220749805ad.33.1756961238438; Wed, 03 Sep 2025 21:47:18 -0700 (PDT) Date: Wed, 3 Sep 2025 21:46:42 -0700 In-Reply-To: <20250904044653.1002362-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: <20250904044653.1002362-1-irogers@google.com> X-Mailer: git-send-email 2.51.0.338.gd7d06c2dae-goog Message-ID: <20250904044653.1002362-12-irogers@google.com> Subject: [PATCH v6 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 c3677807136b..040dbca0a74e 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.338.gd7d06c2dae-goog From nobody Thu Sep 18 04:01:58 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 1CE2E26738D for ; Thu, 4 Sep 2025 04:47:21 +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=1756961243; cv=none; b=e/m3S/DtedSRvCbYtqJ+q9y5VZeBKRI2Jb3gnJyTUQOeOg03WmCv8SYnPrfuqKOwZ3hzRqXyRFka74PozQx8n2g5MpzJYf+ZvCIBmaIlcMjqsgXetxGzbgg1lYNdm9Cu/J3bogCrFCBKCZmtkzMW1P5WGRHLEPxYI3wIs3U2hi0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756961243; c=relaxed/simple; bh=PpQHL0d6V8xOg8pqWLbR7dUgsq0pVfL3clldVMyFhgQ=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=m4Eb+AN1UUbP4BtBmvn+jXPouXIoyoRw5FGy1yXkpbK7rVKXERcLDJL+JRRVVoq4uARPHRbvmlZJAFW5prvDRslRFubcZFngIMF6pBsTBp6c2gSVEwj909fYC3iM2UwgRYzy3yhrkWIV+IDs33DG4jNceqcLx9iiDQxOBCs+6Sk= 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=3av9POgR; 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="3av9POgR" Received: by mail-pj1-f74.google.com with SMTP id 98e67ed59e1d1-3280d0d4d11so795414a91.2 for ; Wed, 03 Sep 2025 21:47:21 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1756961241; x=1757566041; 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=kaKRGdUZa0HDA/qvm+gsWcBuhLqkSgUPDzW3C/x/7m4=; b=3av9POgREKovpo/YkLUrdf2xaDKQJyI3WweeahSDbfsSX5glwYyZ9Z4CoLj+/EUjSt GBUhRHsW7UHT5adZcSyzDWqBNuvrj7lOIlIziZEB5nFjWW/PQV1rZ0/YvkKbg0G8CKXl k1fZm24mioQBH0hSenixKoqOqCw9EWMuqNEN2q1HtXcl+egJ9vqpMFjWu3znV1ZxiYrJ KbQF2LmpUhRYnm+vmzKVyKmrd+O9xCFDOfzxgvruj6p+MqxqCgySmVGJjbD2HRFmvKtf OxMv8nPP9hrHKJUi1r2XobAvpygHJPYq5CaxxEsa06t72rw3mD0YuU+9gBmtr/kRLJQU UR1Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1756961241; x=1757566041; 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=kaKRGdUZa0HDA/qvm+gsWcBuhLqkSgUPDzW3C/x/7m4=; b=YtDdFjtu2aj8Xc/RzZaggHUitBsZGUlWcjXPzIS7617kVmsEInMNue+hUQ7HaMeQgA f3A36zXfvVcv8TXdZDASHOmZ7mAiJV66Mu6svHlJiKhvikP4yMxvUnec2Y2QESCWmR/a kVkLfNWtMiS2jp0L6MYDvCnFf7SQfp0VPj55Lqm5b71Ba+IDMe3EX31c8UwycWVNe2Dk ym6sTijmPrYh28/aBS/EV2nNsGNtjO79NPMnzsAE24sPfqB3W169a9YAQwTKzv0y4lfm BFmBWy22ebfvA4xS+sGKLCQB9ZPTVB5RqskhWRUTegVr84FSw39HokJR97SD2bg4TMf6 xqLA== X-Forwarded-Encrypted: i=1; AJvYcCUOcYAis3ztI/VDF7GCTslR9t1FT/TcfaHQZUjsXs6k2xAM5WVk75wwQqoApVXDj7sfdzhYxLbdUSmv1Po=@vger.kernel.org X-Gm-Message-State: AOJu0YxTEMvj7IUBTBNBPXi5+klUlgZxJvJ/rUjMPN7ev0W+Wb9lA2o4 U2bInCe7d8xTGu2TivQuLAuBSIT/4jXqgAynFqJLob2b3HbU5CBPaLyIB2W1+D6hodZVcJQoIK3 K7ALl1J60iA== X-Google-Smtp-Source: AGHT+IG45/fFeX93ZeKkr/HR2xvBZF93/+EcEx8cGfx8b5y0nWHANWDJQT98tSHklPaIuw4siWutt7ZLzEok X-Received: from pjbof5.prod.google.com ([2002:a17:90b:39c5:b0:32b:9b90:e87c]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a17:90b:524b:b0:32b:7e7e:8168 with SMTP id 98e67ed59e1d1-32b7e7e8228mr3977483a91.19.1756961240962; Wed, 03 Sep 2025 21:47:20 -0700 (PDT) Date: Wed, 3 Sep 2025 21:46:43 -0700 In-Reply-To: <20250904044653.1002362-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: <20250904044653.1002362-1-irogers@google.com> X-Mailer: git-send-email 2.51.0.338.gd7d06c2dae-goog Message-ID: <20250904044653.1002362-13-irogers@google.com> Subject: [PATCH v6 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 040dbca0a74e..ba3983920fb3 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.338.gd7d06c2dae-goog From nobody Thu Sep 18 04:01:58 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 AF2F326E6E1 for ; Thu, 4 Sep 2025 04:47:23 +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=1756961245; cv=none; b=nWJOI7BM6xoxFCh/6BNMXclnu/9W4UaTBk5lyTHmQRpd8xJmn2HsyrzKDUmpaRuHazz8HTAoBkeo5dZZzEiMTdV8Onku41Wddf01WpB0BseireUxdKlQTSKDkIlCfIfan8QGz4/SU4DZhcB+vdSY+QHZsN2boBdwHGZULN+SiAs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756961245; c=relaxed/simple; bh=n60h9NP/Hf9OHyJ+k5SWltRJwvKYO3C/A9l2sIoJhk8=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=BtoJcMdQHGDe/eVkBbeLCoRXoesxvgzNbffraRzqitnzqSaHp2xNCYUIXa9NVID/wEr89HnUnu1rVNQYcVANIVZ3nsm0qa56xhGrJsY++pX8iVpuimOhnDZsqoyhPrNzAcVKUpX/qim+Mme16R7EUt84BJCUR2g1mLWNKRDBkJk= 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=UQDy2Cur; 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="UQDy2Cur" Received: by mail-pl1-f201.google.com with SMTP id d9443c01a7336-24b18ad403eso13823405ad.1 for ; Wed, 03 Sep 2025 21:47:23 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1756961243; x=1757566043; 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=uVC36WXuz5x1uegL05XJgfKX8Djs0fungha3CnK4B2U=; b=UQDy2CurJRIuC/BfgbMsTPDSNPm+a+M/I7UGvkiUnEdjlfCHKJawlKpe5xfA8+MqnG D61W9YqRlTJ+2//AasB8Rc3538uIzla6whNgKdHazf7n+WIqYO1OLzb8IxpbuEZgNm77 2BLpT7eF45RudbJ0QMslNLNN+R3N1ACWfoWtQGuJypm+8YONbkrT0CIDQI2W3jyR7Egk +1KP42/B8QJtmAy7k1+F3gPJ17LF2hl0LSOBpT0ZsiwnlAk6ICj/a9QlaXK5DvwSgT0X aPis8M4nMgampNBqss4RI7HYYsLS5VsuHmxDKHj256FXJEhDbAUz0uO9EjYD21e5Ikft ZPZQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1756961243; x=1757566043; 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=uVC36WXuz5x1uegL05XJgfKX8Djs0fungha3CnK4B2U=; b=mtghWrd2QEibpNYqWkWJZxAczp3WFAdHYXh2jv6OeER8hsR7elICq2aUnJwCb50deK doGhrdSxpNfQRuoQO3dM4eU/gl9RDvkyesjGN9em7i/i4On1y8yVHCY78fwkrTx+1co2 WjGluckmks2j0kv/hkgY+OVwrKdFqVANJ6UBdHPGNLLMKTis/ssvp3HBEr5yS4NZQNmB 08m2ehsaAWSJPCxJv/CKesXkftwWbp8T9DcM+4N0DKyYGNe7nm3mklHYQylkJaU4izpF FKfbKU+7YtHt6nu/2LxeRKcqwnGgEf05BYy9qEzm5GXVn/DGPACTRKwXHS3xuzpkJbNr Te6Q== X-Forwarded-Encrypted: i=1; AJvYcCXkdSzmzvSdqHi5RwvtuasXJ9H1mRlNA2puCIJ2D5giGBmDH4eMW6wiFpzL3kLxlUsKOTNJ4dHb8daZZcQ=@vger.kernel.org X-Gm-Message-State: AOJu0YxlaPHylwowqtpkRTRgO8iwOp+z/6+R1XmSecEkfMoRdUlj5+1E cic0aMze4StUWMprg/ptRxZXG+UlsX6nio3XLuiDbd+HuMaeARDV/AM5U5yHhlAOnAIsClZANMi 5Dufz88DvvA== X-Google-Smtp-Source: AGHT+IEWpTo6R6F5xNv8E2FSFVaz9D3lER1KgG8Sj9jbaMMlUKwpr1OXoalmoMzFPjtamkej/hn6F80lbWjo X-Received: from plrr1.prod.google.com ([2002:a17:902:c601:b0:248:882d:5788]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a17:903:18c1:b0:24b:1b5f:1c0a with SMTP id d9443c01a7336-24b1b5f1f2cmr59640035ad.21.1756961243179; Wed, 03 Sep 2025 21:47:23 -0700 (PDT) Date: Wed, 3 Sep 2025 21:46:44 -0700 In-Reply-To: <20250904044653.1002362-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: <20250904044653.1002362-1-irogers@google.com> X-Mailer: git-send-email 2.51.0.338.gd7d06c2dae-goog Message-ID: <20250904044653.1002362-14-irogers@google.com> Subject: [PATCH v6 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 ba3983920fb3..4f8dc054ad98 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.338.gd7d06c2dae-goog From nobody Thu Sep 18 04:01:58 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 6A395270576 for ; Thu, 4 Sep 2025 04:47:25 +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=1756961247; cv=none; b=aeFFG3Aoh59iK/la0Dgg1pHZpDt4gZRA8qiAI3rN/BsisdaXvlsaQsKdf21/bxjxFOcEsq4yHbrPo7PkccxSC4ulaxXpUJ2TUIyqEkCZg/DXoKidjoQVGVgw34hhOqDIsPg2uE8XaB+YGkjTYa70VVSUC1bPUEDwqhgN8xz7yfI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756961247; c=relaxed/simple; bh=YdTxH6y9frl+TnZ/HrOjpMGClf5sE6yVwuacJCa6Jxw=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=tBsAhdnZXZJkiWD5UJPI7gNTBT/XrU6Z4RWPBh4ErhmuYTwFP5d9DnkO02lBKSzlOv+UyehPBzsn+klrjnzBzd6UPJ2NsryNXNBo5yvo2EdGEqoCR/tsXpyj9X75Cll1Xlx9YNS8o7lhxK2ZYuxqHm7BsfFG9tv0uQz646xkMHU= 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=UEr/1zLB; 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="UEr/1zLB" Received: by mail-pl1-f202.google.com with SMTP id d9443c01a7336-24ca417fb41so8034365ad.1 for ; Wed, 03 Sep 2025 21:47:25 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1756961245; x=1757566045; 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=9mmPdAGXEOE7KWx2biXig5nimTGrLZ/rJCGEveCUCIo=; b=UEr/1zLBHeob6ZkVriqMCM84I7JFPzq79heSp8XIbiavrwfXraZOGRurikUSDG/LRY x6piW0V1cG0zCRK8YHCHe9+S9S7SmoBXb00oOiVWT1dzv9SlJ7uabtjAUJOnkXP5fnCX rIeJuY/RnWjhTl/lcSEn8/40aJ6sZFVnbH2kQEr114QJdZbMu+g3q+2IBDS1M/ifzRhl gBeTyiGgX8+FqNas2RELQodOkGudbndo0i2YT+U8bSuEZPT9/BYz8n7YsUeEixXgKfUh ctoDSVjDrNrwSOWWBl3TIVrQiUOKK4mGxABfmfRMgo+bN0BkX6IvpspMfu0H/byrYHh4 3SGw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1756961245; x=1757566045; 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=9mmPdAGXEOE7KWx2biXig5nimTGrLZ/rJCGEveCUCIo=; b=osbQ2EiUak0aK1fGDwnkRjPHScx+VBHpVW4FqgWTnpMBw58z6ERW7N7xA3Pc1K9jvB br/vA+EmupBjvIjvL4aTeu36Z92YXkAkNcKIKIJ6+lrzSLyOYVza2bihyop0Df8biCqB 04fN7AQW2nm2349r+JuFMhMhbN2qJBA0oHTYOBFPALUkAHKCtbyKl4WqCbYs9pJ0VgRh 1fhWa0uAvUavTGCeZUdecdRDQNiZQPxpmKTpoaw76nKDvhzp61ltFQ5DPPmZyk2uIzPr 5/TOdcjiqvuwH2JPD+XiLWL8UDtCzgppClq7iMcMOT+mH2UtzZoOR3rvB0jvtUIKLz0Y LcuQ== X-Forwarded-Encrypted: i=1; AJvYcCWWb+zYPABpU4zZqHSf6NMsGumR3ON2VWXl5jTNbqhubQnzyyfDDbIc2KrVpDzFYa/w/P8Mrwz1X7llc/4=@vger.kernel.org X-Gm-Message-State: AOJu0YwS/ho4hiKFd1ElJMVxLEAgEGn5r/NEdpw8aEyr3nDtBmtxnhbN 7+ZeTCh2Ayb0Kvx8A820Xp8DmaWVQOMUQ62nmlyX3ccDmbxFrEit8ngDJyTUKGL0GoqD+oXjTov 4gD/o/ELf9w== X-Google-Smtp-Source: AGHT+IFSb7A1naP6p2n4aNPq8tRsJFKT5ufQ2kKcOl1qT+JbNNjd6iTpSw07G6Grzp6VvWF4c2ILkSFUSRPL X-Received: from pjbst6.prod.google.com ([2002:a17:90b:1fc6:b0:32b:95bb:dbc]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a17:903:32c8:b0:24c:cf7e:e48b with SMTP id d9443c01a7336-24ccf7eea02mr2859345ad.8.1756961244796; Wed, 03 Sep 2025 21:47:24 -0700 (PDT) Date: Wed, 3 Sep 2025 21:46:45 -0700 In-Reply-To: <20250904044653.1002362-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: <20250904044653.1002362-1-irogers@google.com> X-Mailer: git-send-email 2.51.0.338.gd7d06c2dae-goog Message-ID: <20250904044653.1002362-15-irogers@google.com> Subject: [PATCH v6 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 4f8dc054ad98..ff571256e100 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.338.gd7d06c2dae-goog From nobody Thu Sep 18 04:01:58 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 2E665272E56 for ; Thu, 4 Sep 2025 04:47:26 +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=1756961248; cv=none; b=NZ4p1LqgDVHfGbQ3Q9e6VnQGP8an2um7soEXujEotT5A3FxF2y+L01qYSu3svDoHhEh7d56AMpNvSdF74p2UToOUgPgjz5EEJcMqWhg56dsMHIsGH85Jwg+Q89kXTKsaRAmKK2bZKwXs6xLBOmGUFt9LglvNxmszKXFOuPoqKTg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756961248; c=relaxed/simple; bh=RWxTmP9bErTpRh3MiSreSF6Ijc5xe2sVs1oxl7J9cPY=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=E3uvwUPxJKebvM1sNTj6H6fjigCAJGvBltnBb33i1JhRKsnmSEEyjUnyX8oSNOXthtoH62pFKk/cT0WVLZd6XS+FCPyEJH9MoPT+7pZAXnOpKzttQFMJwrC5W+VaxdP6xETUQ53T/N/pU60qsZA0zdGK8FUTdJy4clduqcK4U8w= 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=ChqCHghZ; 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="ChqCHghZ" Received: by mail-pj1-f73.google.com with SMTP id 98e67ed59e1d1-324e41e946eso948288a91.0 for ; Wed, 03 Sep 2025 21:47:26 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1756961246; x=1757566046; 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=SDydOVVnbrc6TFkbkF/HCcYpcaepdAwyY0x1g/ePwfs=; b=ChqCHghZWgQ/4CGeH3xltHk67U4kT/yT7QAdFyKBni+D6XlalpZxxL67Zea4EIen0V ZLFAAaqjlL/L0WsXzq+mMFObwlz59Eud9NMrSQWpOV+Kz7aiDOWQEFrUbID+6FXMm+Dd 1Chkf06rBLuHkrmYBforDDbe02YII9c3JDq3+RYU9uDD88IS8nbHLEIDboLFyMUnLEPZ l99SfHt/lxLnrB2FED4uYMPzrR/KHieyZI4pqGfdWpbaILSktl/plF8s+p+QH0ullkfh JswxPDSXMD5r/nh+IjNNHJRjl6p4a/ZafPTsjSRsezPqK2Sjf1KysBskkDlyk2ykVSJ9 3oiQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1756961246; x=1757566046; 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=SDydOVVnbrc6TFkbkF/HCcYpcaepdAwyY0x1g/ePwfs=; b=SXKnTxM2W4yUTRMxsJCXRi8CJDnEIFdRXhYkfFnqX5YuVdXN41tBjC7fhqewHAZeUX u35m3Wk/0VAGMkfyImCjL11Do7KUCmK88Hdbee2V3pf2SvdPfTHaTSDNL8IkxoQObRwW aX2AMWkicssyMC/imHWg1luRA32Bk8QrGk7WhdHcjQekJKX9Xu1/dNaaXKogOL11XlMQ fAiDTKWFOfDudl/FZoLnhA8+LEgCZjp8hYK88rQSf2aigfGqHf5mIER/9IgSOQOOFhyS L5XTuXL2v8YwCGua1AT7TpUz6jx03dikG7Q+O8uFT+okZKgMlDphu1qVAOifZlNHvzAm EQrA== X-Forwarded-Encrypted: i=1; AJvYcCXV6L5GrrkwQexXYC7zX/oI/JGFlpl/gKnBgeGXWhHS7S3fSPZJxTDXLQ9UqhVKtFhuq/dmn9Jx8PWBWuk=@vger.kernel.org X-Gm-Message-State: AOJu0Yw3kEzz5B91XR7mkTVxWwtEl5BV6Ir+E1iJsFaI4hOZPIfVgKLD 1mJk0FTF8HdW0V65OFpBkGuDrmOxlcfCDghbUp76EivRHW/x8UUXQH3TmZfg5P4i9ezRC/IDrk0 cFim8F9gNgw== X-Google-Smtp-Source: AGHT+IE6Y+fdsaIR18oM/DotikYbuFy1clsPgX/Q/otYDx0TymT9tgfvaSNYdaWhSNkqxMPbDYK+liV0WBSn X-Received: from pjbsm7.prod.google.com ([2002:a17:90b:2e47:b0:329:d09b:a3f2]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a17:90b:4b51:b0:327:8bb0:4338 with SMTP id 98e67ed59e1d1-32815414094mr22756248a91.2.1756961246462; Wed, 03 Sep 2025 21:47:26 -0700 (PDT) Date: Wed, 3 Sep 2025 21:46:46 -0700 In-Reply-To: <20250904044653.1002362-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: <20250904044653.1002362-1-irogers@google.com> X-Mailer: git-send-email 2.51.0.338.gd7d06c2dae-goog Message-ID: <20250904044653.1002362-16-irogers@google.com> Subject: [PATCH v6 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 ff571256e100..fb15ba6b9f90 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.338.gd7d06c2dae-goog From nobody Thu Sep 18 04:01:58 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 236AD274B56 for ; Thu, 4 Sep 2025 04:47:28 +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=1756961250; cv=none; b=EUpdHBeYpHKKmcsOHCMoIUg6XrNUAVseZ9uPlx25L+uGzc/L6xr10tRko/adOg2FkmA3PzU7ggGfCIqeWH09YmT9Yx/m8ukQH7wRyWnximfHB7JC7h5ozcLJnuszyJwJQFGIs1rA4kxbHhv5ct+BJELzpyhZDzXiqShpG7FPsac= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756961250; c=relaxed/simple; bh=4id6qW52RVk7CeazVVAcMIC89FYm5r4jYb0uX897eSE=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=iiL6vNQrnSQlHpXpdNS+wu0jTT4vFDX8G5SvGcdaaTMUMw/OtPMLfrri2nho/68KON/nrAdBjW6LNCxbcMPa5ZkRi9vxrMKVxCx/HoNY/bwTDBhsT+BNLW9OZYOYoQrMNWHTtrebK/8f5H+7LcyeHKNVrqsoeyEUyG/ilTghJwk= 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=DNjFcAR5; 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="DNjFcAR5" Received: by mail-pj1-f74.google.com with SMTP id 98e67ed59e1d1-329dbf4476cso471433a91.1 for ; Wed, 03 Sep 2025 21:47:28 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1756961248; x=1757566048; 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=N+5O5k9vf/egK0S2NKVuj4To6PYUImPr8SKd2g1CviQ=; b=DNjFcAR5HUEcxFju64W5VtSgCbuKD09wX5BE+gj8sduBPGdZWWasfxS4A9dXYRCfQR neAWdHuKaR4QxFtOebHDryjjnVCh0tmjh390EeBlyBWoKJGdSLOTXtMPHSX/8x39vXq8 DWGaIWF2p8NVPIZNntr1QJ54q0lExJ8UbaSt46HwMqgibQjaiKJVXTZyx3WNvfEs5N3a O0t9U3XobLJfoeANLQ12hwXnSmOIEJl717mylk704QKRmB2Ko6jYeM7AlMpujhhu1pC/ ptkV9snNdRjus7UWzFdUWsj2zMwz+FzhQ+BTx7cylGxXqvckmwO3W85vJooyXpkzXLxw tWUw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1756961248; x=1757566048; 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=N+5O5k9vf/egK0S2NKVuj4To6PYUImPr8SKd2g1CviQ=; b=P255m0yi4EFoPOP1krSIbB3By+2tOaL93Y3Qo8er+frD5Kl5OWhYsbDRQlQj2NpdSl 0/jk76w4O3mzfodrdGI4+oAQ8atQkOCtyh2JI8w5EjqVQ2CHykX4oWliN0R4rVqroV5F SU84CJZc1kuz7KlXwyBZkFegwkbqkcVuaUSEqutm+6g4wRjBaqxd8bF7KfHpyee9NNaB elPZKyK5RcfxwpUVWv5kzMhg5d7TYFJBnAWsLI/OKhcYLEdRhFNEx+7SN388ZfTgwzyw pA5NFwuIoZVr+y8yUquOMVJhek4aHVHSebpCgP6BDLpn3tCiqLwGy2ZdqBuHgkmSTkve 6o8A== X-Forwarded-Encrypted: i=1; AJvYcCXCcoGxI2HbPfhR2GxFKVsiyKmZIW8/wSMYGfOZzuE/jxhGbasetBcXp1yrPr+1v9+H4lPvJivcfEDRdLc=@vger.kernel.org X-Gm-Message-State: AOJu0YxMsHVBr2IiieZ4P/shrN7ctQGekkM1aILfEdHQt8fpyXFOJgWb GxOausnZ7PlNfmPab4sjwDIE1c3HgQIGVg/gCw41oE1NL3zGeSktN8M0pZMvsX2CLxSnPMxGaGh ksR8MnYAkng== X-Google-Smtp-Source: AGHT+IFYziPi1GDhMclIV4oWwi7zK4Wp+hElBtFL1C1PkD+rIIM0YRmOjZ9tGKC4vg/FKO7NR0NYP3N6XOn5 X-Received: from pjtu6.prod.google.com ([2002:a17:90a:c886:b0:320:e3e2:6877]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a17:90b:5828:b0:329:f7fe:19a5 with SMTP id 98e67ed59e1d1-329f7fe1a6amr8716450a91.29.1756961248464; Wed, 03 Sep 2025 21:47:28 -0700 (PDT) Date: Wed, 3 Sep 2025 21:46:47 -0700 In-Reply-To: <20250904044653.1002362-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: <20250904044653.1002362-1-irogers@google.com> X-Mailer: git-send-email 2.51.0.338.gd7d06c2dae-goog Message-ID: <20250904044653.1002362-17-irogers@google.com> Subject: [PATCH v6 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 fb15ba6b9f90..f7a9186bdf40 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.338.gd7d06c2dae-goog From nobody Thu Sep 18 04:01:58 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 03244276020 for ; Thu, 4 Sep 2025 04:47:30 +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=1756961252; cv=none; b=X7YmxS0fllE3eiMtPve3stHa0/BluXTA0UdOTj8OcbLUhl1eg+W1BXQ1plzLlg/O4hfkbEJwv4dBt50lEk2mSWPc6Pu0Qf9UDFWIQxPL7oDgxCwNCH9Rw1XlVeHG5h8ycMI/aAN7eZxfgpCOCcJlGz8p+B++mGCWo9COueAvQBc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756961252; c=relaxed/simple; bh=60AxySV/dmMVoRCj/GcMPkU9qf75oRSvrC+cz4keYjQ=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=N0jXgLHlGHqmpoaPKkiofe0uLKuQhhJsyksY3jOdnnPpLcuLchwC9hJV1NS6NGw9YaV9RHdJJyiPfFCPeIcHk6J6UqCO15rUifbHgfo3k84rHwiVZEed6DDYWQc33wQ++k3jqoEnXkEtifPzecI95BQxXHYUrLMPBpvMVAowNd0= 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=cZRj5VL/; 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="cZRj5VL/" Received: by mail-pl1-f201.google.com with SMTP id d9443c01a7336-24ca417fb41so8035055ad.1 for ; Wed, 03 Sep 2025 21:47:30 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1756961250; x=1757566050; 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=Io76sF4baxRad2N7SLfDof4lYFnNY5EeWNuGzy0T8Ug=; b=cZRj5VL/uyYT3a6s6UtjbZv/xZaOOFiJlSOEpEKU6GP0KM2yevqgxCuZboRuCHeH/8 Go6nhbi7bhYVwQPwPQE9N+33+qSxrE/ZS0iMAJWo5PzBfwRcLAmTCWSWlXg2fqB/0z/D BX9LMeU7sNEVcnDcYkyArLJuKpLTOkXDo6tcwvlqriE0UKYhIE1tNf56FxhRFSMUmD6F zHal/34E9QRQpQz3pjZusCBVEQOGD3fr01ByWyTHdxWxbS30WlAWpN26qgwZr6NkOMlu eh2pIVUSsg+4DNVGo53pbiR8H/6yjrU2rL/eTKAz8pyY75BHyaIWNsXyKWr+vNub5vsu Rkiw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1756961250; x=1757566050; 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=Io76sF4baxRad2N7SLfDof4lYFnNY5EeWNuGzy0T8Ug=; b=ElG4c+KtZRc9LJSzFJmR/dd6LN/ppFGukSm1yf7+YsCxMJajAJcoHzGZISGE+3cAsJ xQX+Qtp1cQjdeHMO3u5+StiPij9REM3PslTWHfFii60hmq29gva/bPMDkRrWdCBP9ucx JTCZnoaTvAzFgCe09iRLbZYTUdRXGQLTXF9iXf2hcFuFjeyO9d9zFeJIqj2tZHTMeyuJ jL7gf1xMoCj1HDYspZELZZkb+y4oBzhdfNo9vzVkURJcnHGaAmPo3XrdL58evz9DjU4U f3bN6azSYohPOUzjIjFfgOFVXCp6JimcJzYG3ZmZ5PrtPraqhbOIgj5TXSWRux/VP7/F KeNA== X-Forwarded-Encrypted: i=1; AJvYcCXt5Lpcz2v39rnkNuPLpc7FyF4vUrInZYdX7LfhjvgfJQD1UBhCiQE54CvZoD74GtT2dXOWVj/5NXCp6Ao=@vger.kernel.org X-Gm-Message-State: AOJu0YzfxjugIUuI823R5IkOoNVKZZhP8Ruac2KImHptG4BTSR1Rllkl GyU+/C/HAcbQMkzJsadozI8+xJIvtBwegRtoVjiSNUlP2adWyRCX7viQ+DRru6MDka5af4JOtBq c3ZuvRnsIrA== X-Google-Smtp-Source: AGHT+IEVnXY/B5S1r8J+Ny8OVcr+d21wc7YVRwjOD7omQGHy9M7EgkbvrV73G95LnJfRePnt7fmYqhAG4VrG X-Received: from plbkk13.prod.google.com ([2002:a17:903:70d:b0:240:718d:564a]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a17:903:1a28:b0:24c:bd9f:211c with SMTP id d9443c01a7336-24cbd9f24bdmr27679775ad.54.1756961250104; Wed, 03 Sep 2025 21:47:30 -0700 (PDT) Date: Wed, 3 Sep 2025 21:46:48 -0700 In-Reply-To: <20250904044653.1002362-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: <20250904044653.1002362-1-irogers@google.com> X-Mailer: git-send-email 2.51.0.338.gd7d06c2dae-goog Message-ID: <20250904044653.1002362-18-irogers@google.com> Subject: [PATCH v6 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 f7a9186bdf40..30cf668c7769 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.338.gd7d06c2dae-goog From nobody Thu Sep 18 04:01:58 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 09DFB277C8C for ; Thu, 4 Sep 2025 04:47:32 +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=1756961254; cv=none; b=Nqf0xN9YDZHAwk6dC/+LM00DBBA7rWJVvHEPNHMGAICRnOZrJJPXVgSgrf4uzStc3cEOspG1Ia1A4vlF62lOBqCv9PfcYv2Pl89FynXYogmEd6CP8zMON2trOq1vvreAxTNby5G5Hi1FdZm714IGiOdhvMyToJbCMZs5GDbk2sg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756961254; c=relaxed/simple; bh=eCeE/2YA1gW3yikph8tyIv9Qo87llAzuCgL/jet0ORQ=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=fEvNi2i+jzt16J0g7Bn1Trfa6FGecpVr67wen/Ra0S6wxWBGfd3DqMhXO7lWAF+5KzPP0LVbIXPmCxOFGre8FjeanwAjmmnjKHyXsELit7yRrWsRFaERbUWirYMquaxCO0hD16bP6OgRfjZg4S5KbiUPF+q0jpHd7cNzgq5CPc4= 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=g/RSaRXT; 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="g/RSaRXT" Received: by mail-pj1-f74.google.com with SMTP id 98e67ed59e1d1-329e3db861eso549937a91.0 for ; Wed, 03 Sep 2025 21:47:32 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1756961252; x=1757566052; 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=41eHmEOBCKxz0FQX8SK2j27zDRY5OHr/EQpAd6DfRhw=; b=g/RSaRXTs7UZ23v/atNMPUhIFiVHNPRDjhkcjQiokjzOlb5CTO3TtakqiiMmwXQ1ZU NJQohxytIzPtIZVsiqIDe422iCcZLGYYp+DBH0NGlmYmxCeUjQiLqaYvFEwy7wNHhRqu JPW7VtCL+0tdRMFeuTexIM5pt9vGI9xhenhWTtRv3XuZ2qTzcE6NW23KVhFpxMwg179S diPUVCgo3Kse2dLozfeRIRF8jSBI7SZk++3ARmFIbiJQX/x0yVExEjUeEEn8zPC94+Cm jHx+H0Rfc2JFqlXeTFKYtzPetNHM8jfcu67OUhOtFm1Uc84ObVkp47zs+fRVtCEexEB8 mIEA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1756961252; x=1757566052; 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=41eHmEOBCKxz0FQX8SK2j27zDRY5OHr/EQpAd6DfRhw=; b=ZP1TkUdSH8dHy2cK3VAmRwu5eYQ6MP/M5We07Ztk4R1l0rqDokxA9TLQq1MbnuV9+J 24FFEBRtUNDOy/wINpSmp2jpgGLtwg+IAHPHS8g5spebfuog1IkJtcM2prJku1qp3GNY J4HCTje5Y4fo5u7lYf3C3C9FP6uzfnPRCaa9GtweZkXJfW9AP0st0Mfq9YVK5xJ+vh5I hh4sct+AFADVC/SV/64ObHUdMSZ0sCB1pQZ4Ukr+UmXij3fLI9hvZafFG7HTej2FF68I xvXYIwJLJ61a5/50IcmO2xkdW4TIYFSDWCU7HHGK6VV4P07mKjYgDHDNh6TuFuWoIQpR /piQ== X-Forwarded-Encrypted: i=1; AJvYcCXEi4R6/zyDmKYWYpAIfVBb6rxX7NMeJXyyWca55ayTc952cu6tAobJgJIX1pdeOL2310GBGnE4m6oxGKk=@vger.kernel.org X-Gm-Message-State: AOJu0YwfSBxWTMfRZNXh6Vw1d7q6Otl3ZDLHNqE8pKYiMiWnHVZmXRUB jh/ZQjmExDT3dKyF18Q8ZfoRkZZ1HCmXSDCy4nuVq6jCjtOZoOj/t5FnosAy15xIAs3Mr17lYAP gIjpREimV9A== X-Google-Smtp-Source: AGHT+IFMGvdDOM894XFlRC4C8ABn2l/2js1gvMdb3naZGms4QkhWcuW7svL1yywkey+lraXUjRQta+HUkNvQ X-Received: from pjhu32.prod.google.com ([2002:a17:90a:51a3:b0:329:7dfc:f4e1]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a17:90b:1b4b:b0:32b:656f:5a5d with SMTP id 98e67ed59e1d1-32b656f5b5fmr5026346a91.29.1756961252229; Wed, 03 Sep 2025 21:47:32 -0700 (PDT) Date: Wed, 3 Sep 2025 21:46:49 -0700 In-Reply-To: <20250904044653.1002362-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: <20250904044653.1002362-1-irogers@google.com> X-Mailer: git-send-email 2.51.0.338.gd7d06c2dae-goog Message-ID: <20250904044653.1002362-19-irogers@google.com> Subject: [PATCH v6 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 30cf668c7769..669b5668a753 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.338.gd7d06c2dae-goog From nobody Thu Sep 18 04:01:58 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 CBE27242D79 for ; Thu, 4 Sep 2025 04:47:34 +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=1756961256; cv=none; b=Xf3kSAnmwlEdckRaivEQHtoa+lffEZx448ACD6O7ohkSMNF9IhRVKjkLJxY5tQ/d7ZHMKKv/x4IiHVdmLbi2wKEDR5dcfq5YwQCL4KMsNmhWW+xfGPYo9Bybhcz7SlfI3GJaOZm37lAZfiIf1qUSnRznQuwOuBe0ZcJF68olPxQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756961256; c=relaxed/simple; bh=k/LoRE9LKJb9pgXdFQrX4Vgw4BybtXTPIpuakLBhaK8=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=pwMk51y10+ibGjzNrsTARjs7vF9rw/zLfBGALLv5gwMbGQhlZh1pd183xLB9JNKih5vvZTiI2NVpE2Dbe4BXvlsOqUOrgAuZwb1PFI1a0xoXbTi8LQl1LCgmiEJ5KhiL7P+wgfdpuTIAaJ1MR8gd8cJ97z8IuAo0cfnql2oiVS8= 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=dfn2ymuF; 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="dfn2ymuF" Received: by mail-pl1-f201.google.com with SMTP id d9443c01a7336-24a94fef521so11174295ad.1 for ; Wed, 03 Sep 2025 21:47:34 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1756961254; x=1757566054; 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=a/I9QWCdSsiagbzi91mQV5Lxu5w6XmpsGaYWx/t/qFo=; b=dfn2ymuFCJXp++Yww2SK+BUbXtSa/BKmbIBwxWaG7/tzrbqRG//tdnhL42+uMmtPpV PNQCi19F4xEQOyYah864wNNcBtP0NYuHf46q/hDFmqPhF+3ETI3N4gKzcezP/HHt+zoz 5Y6oGdnFEmQfO3ErrZhIcLKkJyuPQxEuTMCRaiHtNCyhPI+6eVu+9FRFaUEDPhXAT5Vj oi6AaSwsXYmd4+UxpwbsV3Flstb7cL/VTU9gnimVKW2QEaENOcb3OO9Ov3nAOrnPN3xD 2zB9XjHpyR0nwsjtMh6KtDUiqUzUY3El0kP94VuJHZvESRhIaXNJXgsSOBpjiEs2aqcC 2Y5w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1756961254; x=1757566054; 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=a/I9QWCdSsiagbzi91mQV5Lxu5w6XmpsGaYWx/t/qFo=; b=H0J75xcp+qPID2thU2S+mkYvFRNHEXGh0fRUOiy9iEzz/WSdVWXrg2Vno272xK7BFO 0GEqr9IJq74mX+0zHFyWl4+H6pBFArQZxtiqxv0QEU5079w0iD/p/GyzN4wq2bCGHrmt OtV8xbPZs2J2UO0Pln3olJQivftji2xaQaIwkaXMBr3QwKu9gJzctuurj/Ncm+okdJve uyzJ6MMs1Mga2uxqrRmrkLbpP4rf7J6bt8x+kSkCaXk6HiHGQpUqMq/PTVxqaUOkL2jb 8AB8OBe4i7c8l5yVL1KOppUuHGemOL8R7I4lKYSIIC5bEqLGQQ4qV+/sI8hKx2Ea0N7a +pcQ== X-Forwarded-Encrypted: i=1; AJvYcCWSf+FULq4pOzxtNdWCXzqvi1VYiW2WreH/AiL3wc++2FamscSWYnLbrwyL9wCyJtHW3QWWOzLTAQzxoyo=@vger.kernel.org X-Gm-Message-State: AOJu0YyN5OEa6BRo6+2S/ydnqMol5bt/DG30b5Xe+AzU8n5LGWkr8ixo 8Gj2WwSqyjCaA9OboGt5mG/Dz4SXwp6gqSObkt68quoKeWHQDqfNTwsYFgSXIXH0rJ6gNPdGq/J mVAH/mLEkPA== X-Google-Smtp-Source: AGHT+IE/N6MAKEsx+XK77LYz++Lo9hdGu6bLFSU5sb1Lb2ne7u2hi/FDM1GhURNwOObmL2M/3v+fFsv7zKmk X-Received: from plbh15.prod.google.com ([2002:a17:902:eecf:b0:24c:c013:50b5]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a17:902:c94d:b0:246:bce2:e837 with SMTP id d9443c01a7336-24944b55120mr261214965ad.49.1756961254122; Wed, 03 Sep 2025 21:47:34 -0700 (PDT) Date: Wed, 3 Sep 2025 21:46:50 -0700 In-Reply-To: <20250904044653.1002362-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: <20250904044653.1002362-1-irogers@google.com> X-Mailer: git-send-email 2.51.0.338.gd7d06c2dae-goog Message-ID: <20250904044653.1002362-20-irogers@google.com> Subject: [PATCH v6 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 669b5668a753..befaf0fcd961 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.338.gd7d06c2dae-goog From nobody Thu Sep 18 04:01:58 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 650BA279DD3 for ; Thu, 4 Sep 2025 04:47:36 +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=1756961257; cv=none; b=XZndfQRJQodebH8Qox8LcJuwsiSrXITZj7wA5YCKleBvBdFe+vnFdib0lPGPrr0DkDK0Z55QCEcExTOp8DjqlTrkD8N1cuZeepiWVnGH2xLFNliTQSVSYe/QCxvhe0/dmCRBYlEX4KUhqYdIW/Mws5F1SlJenYRQa/IVq79dc7g= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756961257; c=relaxed/simple; bh=PhjYGNLvD4zEEZi7oDaQYcv2vT4Zw20WeOE4Vsw+JSM=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=fvZZFZnUHW5XooM/r+PkiBigtVFGRXvKBnvb/OvyPJR6Cy+/tF4IGT/8AO6qVD/3sBync875h1EoiBXEztbWDazchW0f4+lKjaui2o3YHehxIyd01tQnyhymXd7jl2du8kPobTbZ9blY9yaJdoUfuhMuiGt9bRedj50j8iqqAsE= 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=nbfyk0J6; 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="nbfyk0J6" Received: by mail-pg1-f201.google.com with SMTP id 41be03b00d2f7-b4c949fc524so431679a12.2 for ; Wed, 03 Sep 2025 21:47:36 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1756961256; x=1757566056; 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=Joaj1dmh69gNOIsDVm4DeSw8c1Ye9sxRKnnkqlDn7P0=; b=nbfyk0J6nUTGZ0D1WhoLB1gr4bgNhmbzMcscArQwIj70BFpNMxU7LaI7sQ98DE4Clh qXHp7f/R2sNixZmLImjwg+yDomBbBc+jd0iI2Y3BxvX7eWSXGYwXpT7z8+YvQnkEqozH J8yRIu7zE6WHY7GlOxZrxgD00w0RpxDRaPJGeIQNP/A+FfYSYonoSnwFVDKMLaA0PaoB oIus3QW977rvx9of8CKRklF6/Mud1EglAJo0hUPbtgeP4bokoZWnHI0N/TLyCyv7IKth zAcyQssYJ8NeaRhQMC51OA9jAdnFw6R62+hAYNB3VC0TgTDVtiFd2hb3w6kFXEI4CMXk Y0zw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1756961256; x=1757566056; 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=Joaj1dmh69gNOIsDVm4DeSw8c1Ye9sxRKnnkqlDn7P0=; b=IWw5jMKlMscizorYxXZIhfIomxPkgwJt6Fe0AdROf34sul/hiIPQuDJWRD/VTCXexd pyU76vwtCaij68LefiQgqDFB6EPnuZ3aKFmatzR1WVNpaMXOoE3LFrG57ZCgfI7wUI+q H+hBi4G22wNFYMKM+zLNZOD9e1cBpGP4MvDlCmxmux/Bl0igdhoyJBfbZnYtLaTdhtzZ /mqoAeY+9FQ+5o67/6yNbvQNCC52kKAr7BKhfCz5hp5gLnMCzBqzkqyQKJaSQaVP8lPH iDHDXNM0Rpl6qq2jdGkkLKdLBjhoUGyjx0wL0FFsBZC3POSewnJw+7hgs7+PYZhH6K/g 5ydg== X-Forwarded-Encrypted: i=1; AJvYcCVlq04cqA3+/d9WE5CgSr8Ft9lvQ7f+yfWwB1QKedWv7hR+G5cuc3VeueAwQ0EMJslmcHpQ9ckciEP7idM=@vger.kernel.org X-Gm-Message-State: AOJu0YxFiMT7bAGPT3yRZqiWn65PtQKO/kz+tbK2PORpjxCnrAuWg3zv 1xhDuqfing5k772Kel8vyY4X6AeNtHGC1fFj1WAqJh23BGIbIesDOgjNIzx0yCTzsoJVcvVgmX7 WUd27HEmFXQ== X-Google-Smtp-Source: AGHT+IEmZNfiMVD/3xe+7QRYe6qAfgQJqHO95HuuH8Ysp/rSU+HfIpJ020Jwz/aG5S4Jr1v4s+nCsWJI2Mg/ X-Received: from pjur7.prod.google.com ([2002:a17:90a:d407:b0:31f:b2f:aeed]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a17:90a:d603:b0:311:b413:f5e1 with SMTP id 98e67ed59e1d1-328156e4731mr21339560a91.32.1756961255792; Wed, 03 Sep 2025 21:47:35 -0700 (PDT) Date: Wed, 3 Sep 2025 21:46:51 -0700 In-Reply-To: <20250904044653.1002362-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: <20250904044653.1002362-1-irogers@google.com> X-Mailer: git-send-email 2.51.0.338.gd7d06c2dae-goog Message-ID: <20250904044653.1002362-21-irogers@google.com> Subject: [PATCH v6 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 befaf0fcd961..47e8f1166870 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.338.gd7d06c2dae-goog From nobody Thu Sep 18 04:01:58 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 6789127BF7E for ; Thu, 4 Sep 2025 04:47:38 +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=1756961259; cv=none; b=TtayanQq1wRDndQkELE7s3GSsNBxX2adCQu/RA5x4BzhQl24FdSEoiyS1Fcx7zlPtu9L024dtuHvX4T+P0pp6Ubnc4fhJdWSHhYXwjmOMlYlYh/pmscEbfzEh/Abe6w9tKPkuypicnYT/kiMnbOte0YzW8R8PqRzAZf8BOyCNvw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756961259; c=relaxed/simple; bh=WgVcgUdPY54/oQ+eQT+NZOGinWPMmAbwiaLX87/GM0E=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=gyeBc+N1xPtPFi2WAsAl5loC0gvVWPgrDmxNVHVZ7to1GOJK623lu3rvvCx/0lgfpREgSwqW3d/xwWmesYyDVIbBSFa3H+DegSvZXXyk1W6bWI2cnVcG9ubFdbPHHhzj7UT71Zff4J+Q8n9ziwHYm+577tOShPmuVeUquGgQ1lU= 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=yAR3xII1; 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="yAR3xII1" Received: by mail-pl1-f202.google.com with SMTP id d9443c01a7336-2445803f0cfso9811805ad.1 for ; Wed, 03 Sep 2025 21:47:38 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1756961258; x=1757566058; 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=QeKqI6ebNZk2OSGf7DnIa24sXNm81pvOyP36Y1EWvxI=; b=yAR3xII13+c7nxK6jXxpaeWXk+YtpYYRsxaahrS5ddVl68UhVRAYKTl4CePZ6WJIef 3lgvvSCTmgCf8LV8ZOXhayMVNrwDeHZqpMdFLQVRNNQonpjeP8JJ3onj5cHTVGzIUUQk nDJsODthAxFZHgI/eO0iBSJZ5jP4TZoPsaMONj4YUnAynhu6Tmk2KJW2YWxyNVSTpMKB bO6qWXohSvBXA5ssSoEZx721q8E+TlsT2I0HrSnjfCWyUVtTMQAYnAnZgwNum8XEF81F XEtU9pqYzb8Cwgw1I07kmNb33NSvAJnJ+brfXN9D5VOWrv/kod0RXJavrM0CNWwBdr2b c2iQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1756961258; x=1757566058; 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=QeKqI6ebNZk2OSGf7DnIa24sXNm81pvOyP36Y1EWvxI=; b=E43T11XqD0LRmNPxGdTzjerrGTadwRlxYeLJXUFXKi3+ZH9bt6/JYqIE80Mp43Uefo bGEVzN616sgdD7nuM5TQB84NMBzOKa4N5VWoUWg2u75zzDB0peiRPtH8F2yXmprEYegO 7lJ17v2BBo0yMrrlWzWa1v6GOFqALTZ2f7jIPSGgeeMqjTshTwgug81i2vym1ioznFpA qbczfZe9yFw/5v+8nidT2w1Kmf38u73HRCWImQXKsl7XIART1zww1JD7oiBCx71vxf23 TEZhlbb5EdQmIsD+32eQ4rWCx6yqroNrQYaheZdfYqTlKs9aLDtQxCt0B5qlixNxg9IZ nZ8Q== X-Forwarded-Encrypted: i=1; AJvYcCXxi/+7y0uWyTGiPcD9CIspEmnCEJqnpQgSkdXx0HJ7HnaGHoGvAk4LJqroas4GjmbThmVgFuBoraxOINc=@vger.kernel.org X-Gm-Message-State: AOJu0YySC6VcSfHV33gRCP8KSCbvXyWM+LuYLMxuaI4xAY6I3aRXVjjB oVj7kRhbEwwWtPRtWWO0nFWjjmdDEwYyGxwO5jX6YR4yG2v7MlCek4QOwMcd4f7xYxd7mntK0G0 jCfLBP+dmSA== X-Google-Smtp-Source: AGHT+IGoORPmYjgWxJS10suOpl3A8FHJZo0ncTb0Cn+5QwvLUoT3l8NO/UcjqQFK/RincPcsu8phd8kZmz9j X-Received: from ploc11.prod.google.com ([2002:a17:902:848b:b0:24b:bbf5:4bc7]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a17:903:22cf:b0:246:80b1:8c87 with SMTP id d9443c01a7336-24944b2a6d0mr202623705ad.43.1756961257708; Wed, 03 Sep 2025 21:47:37 -0700 (PDT) Date: Wed, 3 Sep 2025 21:46:52 -0700 In-Reply-To: <20250904044653.1002362-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: <20250904044653.1002362-1-irogers@google.com> X-Mailer: git-send-email 2.51.0.338.gd7d06c2dae-goog Message-ID: <20250904044653.1002362-22-irogers@google.com> Subject: [PATCH v6 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 47e8f1166870..e639e8998d87 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.338.gd7d06c2dae-goog From nobody Thu Sep 18 04:01:58 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 7521527E076 for ; Thu, 4 Sep 2025 04:47:40 +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=1756961262; cv=none; b=b+KdkUEV2R2kwaUXWna1fqU85MehdcRKVQjZNoHOW9bpokMERWalynXvTIC21bMOVOsOyAESdLR0q+pXcSYMSvgBBtpqC2ebB1SXklShyEd5JOwH1Q/hOyxzWxmwF1ci38TTokDpDXPbqxSEPyB77irExBgm/YxI4/MnBVTpSXs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756961262; c=relaxed/simple; bh=RistnuAgHd4NCL4l0yE6lEPBFwvSNadT93kj/NUVg6M=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=TgvKDO76E1OGhgbELCA7Bxz0TbsSVaV1fnsxpTwsssjfF8SaFvQwc6J67D/AaHQzsYFV0iAHMPba8tWlVLenNhHm6FEc0DtUw9OcB7GNkD2mg+71Gspt7WukYfWxBC55fhO5ANInOgwiK0jvep7juA/XW1jF6wVdnrU5LnZXHTc= 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=p+DOnwEq; 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="p+DOnwEq" Received: by mail-pl1-f202.google.com with SMTP id d9443c01a7336-24cc4458e89so7475215ad.1 for ; Wed, 03 Sep 2025 21:47:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1756961260; x=1757566060; 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=VgqEItY9A2DTGkflolDC2RygmVecc1iPe1xmOKI5+pQ=; b=p+DOnwEqjd3OMbeS4uKh98kWBw3mEHnKD5ZV/irmAvW2uLtDkahIHubQEU0zKIwx8J PuWw5P6dfpyz7goXYgN9A8KbuwHEWAT2H8i/cZDQm8MZR+9nNM+HPcTKElkVEU9Unrck IQ7F89IiC77r8HFhs58liJ9LUUQRe3LEpu6BEY1ulhfsSsKCO5ZoPBuhvLT3cOQXXmm+ JUQNdy30pDZ3h8MsBlZrVYkhQmIRnHZDmj13DPtCPunJRCHx7tKGeQGxXCtnUkJC/3YU m5Nsiy7+Xalyzi8MzwI5h6IF7g1+Jt9/Apmpa3+wqigeH0qh37sBU4UZS5z3yazy8j9c aZbg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1756961260; x=1757566060; 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=VgqEItY9A2DTGkflolDC2RygmVecc1iPe1xmOKI5+pQ=; b=FXTxw7i7PGV/eQ/JasweELQzRatI9Xf9SFLgQsNCw8rEOm2nMcKtmciJbxvXin+C5J +7q1tS274nx4xs60p+4DCP7NhHDVxx08/t2qs80IYBdyNTrjQFRYQp6l/mZeSGenWKRD r7e+XL7p8zXgO5RO36Mi9RBamjfOluOtVVW3vjmWqO8DsGQwh0WFij3RbM2b4pDPGlNs tf4ibfmWLuv/q+cPUQwkDNTj+u4/s92Sql5zDBFylcc2CA5crTs9NvfHJjEimbUKOZ72 6Xp8Qnn3fyfSgfgI54XARO+6au28y1oXFpns1xU/1ku2p0JWCx/DnTjwO4VC7r8skIBB hXsw== X-Forwarded-Encrypted: i=1; AJvYcCV5rSd+4t9LXV4oYPutQdpFNGoZ5WWlbWo4R/EcI9y4XdBn/GPoegij333DtOpksSfLwtRIyVo8zLy5iRM=@vger.kernel.org X-Gm-Message-State: AOJu0YyXcIyR5ORZ9igBcPc3XxdDUha86dkRG/EetmTrLQM0/BK/8ceC SK6MAdLfODh86tZ4BSnUBYA36PvVqMsrP9sZFzOd5VGHw2HqQSa711jJC82cY6jVwb38R2VP6RI kIeUc1Iy5/A== X-Google-Smtp-Source: AGHT+IF0wYPqg7zlSl1qx2A5P6s9Rtb4ovc11SlDLv1+Ceku358dlTNxKQe5YNKmsHdiFgykM9R6GbvmqjAn X-Received: from plbkz7.prod.google.com ([2002:a17:902:f9c7:b0:248:7327:44b8]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a17:903:2f0d:b0:249:f16:f080 with SMTP id d9443c01a7336-24944afb3ccmr226252725ad.52.1756961259744; Wed, 03 Sep 2025 21:47:39 -0700 (PDT) Date: Wed, 3 Sep 2025 21:46:53 -0700 In-Reply-To: <20250904044653.1002362-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: <20250904044653.1002362-1-irogers@google.com> X-Mailer: git-send-email 2.51.0.338.gd7d06c2dae-goog Message-ID: <20250904044653.1002362-23-irogers@google.com> Subject: [PATCH v6 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 e639e8998d87..36b6c4704522 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.338.gd7d06c2dae-goog