From nobody Wed Dec 10 20:09:24 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 6487D2C0F78 for ; Tue, 2 Dec 2025 17:50:58 +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=1764697860; cv=none; b=ib2oTny+4e/8ZRwJmk+EvdaA+G3blcQzIgArlHwuNkcaHhe9zwfAN2CBe7qUzAYlgCYKoMwwWhip5x1IIMiwF6eVZ9aCO0Uak9iLRFaz38ghsoS8RU5S3Y9dWgtLDbmQdT7R30GQ3YBFtJ5UXt96Yy9mf5Uqbe9X8NYmMGP4ng8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764697860; c=relaxed/simple; bh=4CvaCz7sbpDCz++WfvIXEkDI8xHMo6XbhLawTO7rjqo=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=mn8sp60jCKVMQ5A/rXn65Q0ADG9KHUvP1SNCEb92Gz5PMkvrqUNyhvIwtwAG0WjRB8yx+Vh+U8GAaHR62/l4o4+lKUVAksq5gEyj9XS05sN8lv3xH8X1zXrLRcNSlL2FWJwW1WP46vOgCg4/RkaLRZBQkDz3zjFQAtAH9xLy2Pk= 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=AvJ/Q2Xu; 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="AvJ/Q2Xu" Received: by mail-pl1-f202.google.com with SMTP id d9443c01a7336-297dde580c8so146764265ad.1 for ; Tue, 02 Dec 2025 09:50:58 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1764697858; x=1765302658; 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=DDGobjwIqYzfve+t1fxiKI0fetJRkLtvhmfsLaeAgOw=; b=AvJ/Q2XuSQ26SahLH1Xrf2m7bLrUnRQZS+KXZTsY8xfnVFu+sI2DMK2YBtSl7muUvK dIfhMxYIo/oDtXtzNhB0AZEB+q2QoUFdKBq3cnsclj552AjxLboJrP2dj7p3Z6Se93w4 IrEezJHHT7IuNaScD1f7GUBx0Vpr7GT/sfzh58GgOJHNqlLoB+xsWJ9lZcknBjkCoZhl lTZsVAZSY3Bt0wyVx/numWn9CPj2Ljs6KUiGfmJZPj2gOSmNE+KI4arITGlewiUKQXdt JNT6nRHv5Xp89efORDWl35HxqnSGJZhMaxfF9SNCG1IBfwy+7MZzjOfJeeqVuvpGu1Em osqg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1764697858; x=1765302658; 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=DDGobjwIqYzfve+t1fxiKI0fetJRkLtvhmfsLaeAgOw=; b=snjK7TkwkrEhYPClhieutcV06nUwmFOh6O3RE2TfkRzyGMN1JfpE6mE5LOPw5kNdxk pdKIwsW4D4X6JY8HrpQ2ob9Naq9JyXBMgFVJbvyW5wH7lDAh0qUzHh30UawDFNEB17Eb S1ICwW4X16WvZcb8vlJGlR3or946IONSRiggACimBH7op/lVW9FR/lDhLY8BTJ4xQ8fL LJ1XZk1rxGA9kAeCRYupikxbhy+F4n6Bw2/EFaXr2Nbmc8m4d7YWQIf/2wqmj74xZjJ5 1PDwH5mHlkqYd5cqfbuL+pm3Fm1raORQ3y+7a9moykcaxjKiz3G0c8E6aXT4elyFky5r Gf+A== X-Forwarded-Encrypted: i=1; AJvYcCUBEq6bgfONKfM/M6UdTnlKoJUyAqTwaP4fnD3V6OCWyJAY2viWGlt+VGH+3N07ZCnz8HUrSaU6UPjwWnM=@vger.kernel.org X-Gm-Message-State: AOJu0YzihH7d+hR+BTqmyh+iDTg9bWwxiwDtLF/phhAWVlkHzDbDVCMv xamqboiB8T+ZS1IyyGJUzqhL23jsPEbf7XIu1NTFnbMpq0t/7rYEPuhGvfhP/Cdp9kRPVgM54yF yWtb9CcShrA== X-Google-Smtp-Source: AGHT+IFCmzu4P282ZrlfK9u3zPs89z4MHL3d7/7NBW74ANhLhqLty/ukvj63Nr6NGN5Cacuv5MkKFQ3iYgr8 X-Received: from dlee33.prod.google.com ([2002:a05:7022:62a1:b0:119:78ff:fe0f]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a05:7022:4423:b0:119:e56b:c745 with SMTP id a92af1059eb24-11cb3ec27efmr24058630c88.10.1764697857614; Tue, 02 Dec 2025 09:50:57 -0800 (PST) Date: Tue, 2 Dec 2025 09:49:56 -0800 In-Reply-To: <20251202175043.623597-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: <20251202175043.623597-1-irogers@google.com> X-Mailer: git-send-email 2.52.0.158.g65b55ccf14-goog Message-ID: <20251202175043.623597-2-irogers@google.com> Subject: [PATCH v9 01/48] perf python: Correct copying of metric_leader in an evsel From: Ian Rogers To: Adrian Hunter , Alexander Shishkin , Arnaldo Carvalho de Melo , Benjamin Gray , Caleb Biggers , Edward Baker , Ian Rogers , Ingo Molnar , James Clark , Jing Zhang , Jiri Olsa , John Garry , Leo Yan , Namhyung Kim , Perry Taylor , Peter Zijlstra , Samantha Alt , Sandipan Das , Thomas Falcon , Weilin Wang , Xu Yang , linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Ensure the metric_leader is copied and set up correctly. In compute_metric determine the correct metric_leader event to match the requested CPU. Fixes the handling of metrics particularly on hybrid machines. Signed-off-by: Ian Rogers Tested-by: Thomas Falcon --- tools/perf/util/evsel.c | 1 + tools/perf/util/python.c | 82 +++++++++++++++++++++++++++++----------- 2 files changed, 61 insertions(+), 22 deletions(-) diff --git a/tools/perf/util/evsel.c b/tools/perf/util/evsel.c index aee42666e882..5aae7f791bc2 100644 --- a/tools/perf/util/evsel.c +++ b/tools/perf/util/evsel.c @@ -538,6 +538,7 @@ struct evsel *evsel__clone(struct evsel *dest, struct e= vsel *orig) #endif evsel->handler =3D orig->handler; evsel->core.leader =3D orig->core.leader; + evsel->metric_leader =3D orig->metric_leader; =20 evsel->max_events =3D orig->max_events; zfree(&evsel->unit); diff --git a/tools/perf/util/python.c b/tools/perf/util/python.c index fa5e4270d182..cc1019d29a5d 100644 --- a/tools/perf/util/python.c +++ b/tools/perf/util/python.c @@ -1340,27 +1340,48 @@ static int prepare_metric(const struct metric_expr = *mexp, struct metric_ref *metric_refs =3D mexp->metric_refs; =20 for (int i =3D 0; metric_events[i]; i++) { - char *n =3D strdup(evsel__metric_id(metric_events[i])); + struct evsel *cur =3D metric_events[i]; double val, ena, run; - int source_count =3D evsel__source_count(metric_events[i]); - int ret; + int ret, source_count =3D 0; struct perf_counts_values *old_count, *new_count; + char *n =3D strdup(evsel__metric_id(cur)); =20 if (!n) return -ENOMEM; =20 + /* + * If there are multiple uncore PMUs and we're not reading the + * leader's stats, determine the stats for the appropriate + * uncore PMU. + */ + if (evsel && evsel->metric_leader && + evsel->pmu !=3D evsel->metric_leader->pmu && + cur->pmu =3D=3D evsel->metric_leader->pmu) { + struct evsel *pos; + + evlist__for_each_entry(evsel->evlist, pos) { + if (pos->pmu !=3D evsel->pmu) + continue; + if (pos->metric_leader !=3D cur) + continue; + cur =3D pos; + source_count =3D 1; + break; + } + } + if (source_count =3D=3D 0) - source_count =3D 1; + source_count =3D evsel__source_count(cur); =20 - ret =3D evsel__ensure_counts(metric_events[i]); + ret =3D evsel__ensure_counts(cur); if (ret) return ret; =20 /* Set up pointers to the old and newly read counter values. */ - old_count =3D perf_counts(metric_events[i]->prev_raw_counts, cpu_idx, th= read_idx); - new_count =3D perf_counts(metric_events[i]->counts, cpu_idx, thread_idx); - /* Update the value in metric_events[i]->counts. */ - evsel__read_counter(metric_events[i], cpu_idx, thread_idx); + old_count =3D perf_counts(cur->prev_raw_counts, cpu_idx, thread_idx); + new_count =3D perf_counts(cur->counts, cpu_idx, thread_idx); + /* Update the value in cur->counts. */ + evsel__read_counter(cur, cpu_idx, thread_idx); =20 val =3D new_count->val - old_count->val; ena =3D new_count->ena - old_count->ena; @@ -1392,6 +1413,7 @@ static PyObject *pyrf_evlist__compute_metric(struct p= yrf_evlist *pevlist, struct metric_expr *mexp =3D NULL; struct expr_parse_ctx *pctx; double result =3D 0; + struct evsel *metric_evsel =3D NULL; =20 if (!PyArg_ParseTuple(args, "sii", &metric, &cpu, &thread)) return NULL; @@ -1404,6 +1426,7 @@ static PyObject *pyrf_evlist__compute_metric(struct p= yrf_evlist *pevlist, =20 list_for_each(pos, &me->head) { struct metric_expr *e =3D container_of(pos, struct metric_expr, nd); + struct evsel *pos2; =20 if (strcmp(e->metric_name, metric)) continue; @@ -1411,20 +1434,24 @@ static PyObject *pyrf_evlist__compute_metric(struct= pyrf_evlist *pevlist, if (e->metric_events[0] =3D=3D NULL) continue; =20 - cpu_idx =3D perf_cpu_map__idx(e->metric_events[0]->core.cpus, - (struct perf_cpu){.cpu =3D cpu}); - if (cpu_idx < 0) - continue; - - thread_idx =3D perf_thread_map__idx(e->metric_events[0]->core.threads, - thread); - if (thread_idx < 0) - continue; - - mexp =3D e; - break; + evlist__for_each_entry(&pevlist->evlist, pos2) { + if (pos2->metric_leader !=3D e->metric_events[0]) + continue; + cpu_idx =3D perf_cpu_map__idx(pos2->core.cpus, + (struct perf_cpu){.cpu =3D cpu}); + if (cpu_idx < 0) + continue; + + thread_idx =3D perf_thread_map__idx(pos2->core.threads, thread); + if (thread_idx < 0) + continue; + metric_evsel =3D pos2; + mexp =3D e; + goto done; + } } } +done: if (!mexp) { PyErr_Format(PyExc_TypeError, "Unknown metric '%s' for CPU '%d' and thre= ad '%d'", metric, cpu, thread); @@ -1435,7 +1462,7 @@ static PyObject *pyrf_evlist__compute_metric(struct p= yrf_evlist *pevlist, if (!pctx) return PyErr_NoMemory(); =20 - ret =3D prepare_metric(mexp, mexp->metric_events[0], pctx, cpu_idx, threa= d_idx); + ret =3D prepare_metric(mexp, metric_evsel, pctx, cpu_idx, thread_idx); if (ret) { expr__ctx_free(pctx); errno =3D -ret; @@ -1996,6 +2023,17 @@ static PyObject *pyrf_evlist__from_evlist(struct evl= ist *evlist) else if (leader =3D=3D NULL) evsel__set_leader(pos, pos); } + + leader =3D pos->metric_leader; + + if (pos !=3D leader) { + int idx =3D evlist__pos(evlist, leader); + + if (idx >=3D 0) + pos->metric_leader =3D evlist__at(&pevlist->evlist, idx); + else if (leader =3D=3D NULL) + pos->metric_leader =3D pos; + } } metricgroup__copy_metric_events(&pevlist->evlist, /*cgrp=3D*/NULL, &pevlist->evlist.metric_events, --=20 2.52.0.158.g65b55ccf14-goog From nobody Wed Dec 10 20:09:24 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 65AB22C0F78 for ; Tue, 2 Dec 2025 17:51:04 +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=1764697866; cv=none; b=rLiTDD61z8A8wqdXpx5mVLFDsFz9zFA3KBYbmOrhkwSKC9IN5sr/yNQv1ETiNFbP4B5GIy8JbyitoMdrbdOg4EW8Dm1rp8EKNcffuC+trtw5lLGhSUkJrSj9lPLHgdTR6SOkJJPrxQsa7ILEoaiIEgeuDY41JbJgJHjSEb8q7rY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764697866; c=relaxed/simple; bh=1MGEg68OAPpnEDOXdOpIbV+hPW6P24DxL9Ap9Ef0JVc=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=nOO0Toin8c5s94NSsCMeNFkAP60OnB2I0yer+7wH8uSIuDDE9/8dtlH/JOmy/aCJQwECPNEeg/LQWNycA6C+QOVM4dCulNHgF7BsY3M6Osf+D1P7JflbznFtGNAkYm8pn8mEv+qM7S2BUN9nq+YX7CkojpqR1rsPiBSTKOye6Aw= 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=xu3ykvmP; 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="xu3ykvmP" Received: by mail-pg1-f202.google.com with SMTP id 41be03b00d2f7-b6097ca315bso8343782a12.3 for ; Tue, 02 Dec 2025 09:51:04 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1764697864; x=1765302664; 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=9j2nD9pKAg4HaspT9MBZ6CGU49fK4DzkCnN37LNxG9w=; b=xu3ykvmPkp1xiL74edEcstnUpgQDM8DAXap5rAOUthWkUN1u5qXpzGYryO0idI2FET rsAAnZ7zZBPiBWl1XzQtQyfw/JPMt9YBpI+UsXCvjPZp4po/g+LRIgA6RTAfo/NTpJat dD6jYa1+qwZUiKCeMiNnEqhP7KrvQoHMTjvY9hOCcoEbnzspKxrWgeVDqdJC3n/x+Hfk +lRFJ+O4PdQBxDhs9XBiIGtfaQdY85VWJNFp8KiQpGhTvrnEoLVALULpIo9vxXze/fWj mvnj5FdheQ/fINCAuVHv/LSUtsS8hrBFasSgct2W2H9tVAIb0AG/HWf9srzMtyfOJrog gpeA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1764697864; x=1765302664; 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=9j2nD9pKAg4HaspT9MBZ6CGU49fK4DzkCnN37LNxG9w=; b=IM7ezx5Fx1AmJPhlcyuv/HhnQZb657/mZwvnB6hdojF3y9TUIzxj1iq2lhGih8kfjv zfoqsKpbtkroF/XVCdIgLV0NyT5j5E+W9gHaQjqGgFjIhvRirZ4ejCw6g2p3kgaYHcNC +n6xwT/0rr03QZ6aQGInPNxT4m4bOJTXUZVMl7xpdcL8bVTHfJQujaTcbT1u4nrF7oa4 t/HCQIbK560kBmqHZfvmbtg1h0NtFgyFEBnWZ6S+jGMqIWAXIW9y2HrpkPaykKqfXcl/ XsQCOWe/fwuj+iiVZ1V2fEVOh32vx+POeXIQsgNlqQRRt2C508OWqP8GqwqYp9rRZHOU irZw== X-Forwarded-Encrypted: i=1; AJvYcCXu+QzcU83yEIB/shwqMJ141Ng7iiwoND/JCqu96NepIfWeiIwTr/VhO2U1bXA8CpyUVomlEY45mMzcdmc=@vger.kernel.org X-Gm-Message-State: AOJu0Yx2Ol7c/p3DwcGdWWuYvXZYAkhQRO59hV3kIqcQ18TNXfrv27sN oCUtVX0p/wukZgmssOKGGVJgiLEPmjpzjYkvAtWwuQk9R7Zrs0Z9dcZ4P66DNVH8z8sS0U66vg7 SxDBWNJb7DA== X-Google-Smtp-Source: AGHT+IG9UvfE78E1OdBtiqQkaphk9mKjtLJwuhCfyL1TztsqLedsiK3sZFbFmUdXc5+L2ln2AzEOp5wGyNYM X-Received: from dybqr10.prod.google.com ([2002:a05:7301:608a:b0:2a4:7c1a:3e18]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a05:7300:50ef:b0:2a4:7fb3:7a96 with SMTP id 5a478bee46e88-2a7192d82b0mr23551111eec.36.1764697863587; Tue, 02 Dec 2025 09:51:03 -0800 (PST) Date: Tue, 2 Dec 2025 09:49:57 -0800 In-Reply-To: <20251202175043.623597-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: <20251202175043.623597-1-irogers@google.com> X-Mailer: git-send-email 2.52.0.158.g65b55ccf14-goog Message-ID: <20251202175043.623597-3-irogers@google.com> Subject: [PATCH v9 02/48] perf ilist: Be tolerant of reading a metric on the wrong CPU From: Ian Rogers To: Adrian Hunter , Alexander Shishkin , Arnaldo Carvalho de Melo , Benjamin Gray , Caleb Biggers , Edward Baker , Ian Rogers , Ingo Molnar , James Clark , Jing Zhang , Jiri Olsa , John Garry , Leo Yan , Namhyung Kim , Perry Taylor , Peter Zijlstra , Samantha Alt , Sandipan Das , Thomas Falcon , Weilin Wang , Xu Yang , linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" This happens on hybrid machine metrics. Be tolerant and don't cause the ilist application to crash with an exception. Signed-off-by: Ian Rogers Tested-by: Thomas Falcon --- tools/perf/python/ilist.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/tools/perf/python/ilist.py b/tools/perf/python/ilist.py index eb687ce9d5a6..0d757ddb4795 100755 --- a/tools/perf/python/ilist.py +++ b/tools/perf/python/ilist.py @@ -77,8 +77,12 @@ class Metric(TreeValue): return perf.parse_metrics(self.metric_name, self.metric_pmu) =20 def value(self, evlist: perf.evlist, evsel: perf.evsel, cpu: int, thre= ad: int) -> float: - val =3D evlist.compute_metric(self.metric_name, cpu, thread) - return 0 if math.isnan(val) else val + try: + val =3D evlist.compute_metric(self.metric_name, cpu, thread) + return 0 if math.isnan(val) else val + except: + # Be tolerant of failures to compute metrics on particular CPU= s/threads. + return 0 =20 =20 @dataclass --=20 2.52.0.158.g65b55ccf14-goog From nobody Wed Dec 10 20:09:24 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 3EB412D0283 for ; Tue, 2 Dec 2025 17:51:10 +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=1764697871; cv=none; b=V21EANRNyGfRRwmJUk+7RMK3WQIgeiH18fx7klxnZS1APt2ZUhP6CSIGalHo7EPv286FadiNtIRfsQ6+V4BvZHm9P1cylrBjc2HtV1F5AOUisU9bxTUmtIg++qmQXZgKjTweoRyEzSBSpf/Beg/gNMmsIhBfHE8EfBD5S/tffO0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764697871; c=relaxed/simple; bh=TEv1/HAzSLHeBA3NWyF7DX5ZlJzYioSuwudoqiQdkGg=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=TMqSrGlWa1efhkKaoLbMNypIdgJq/d4FLD93T4ZX+ACZCgYu5SP+v7RoZg+Hy9rnnNuLF96mkgRk47Atw5v6ufQiboLcD7BM+c/0nVE0vqOVFvJpkgUZvaHRwhlr6ueBjtSwbgQ/DsgmXiuyYSDUj3VYWOnHB380dIgtTo4dEBE= 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=m3oPlgIT; 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="m3oPlgIT" Received: by mail-pl1-f202.google.com with SMTP id d9443c01a7336-297e5a18652so61901775ad.1 for ; Tue, 02 Dec 2025 09:51:10 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1764697869; x=1765302669; 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=NH2u4VUQ3fj61HenZr1UXZRG+xsck/DPqaTtHXUTkxo=; b=m3oPlgIT2RWA1EQ8RnEnd17DyFOMuQs7dS/QnQj8cLqVvI5157uh1J/0j/xTfwJxf8 7YvLHnavT4PZsLZLdGgS8CuEaS1fKtf66iDNs2klVy8x0ZGjbKq7uvyf2Ly3B6N0H6Vp 5z7yhPC78FFkCYFajhE459evNCwuBMcDSDfQghiCBjNC7ftoAF4egTVfrvTr5BoWmdwi vXZzbBk5fC9/2TYiZtPQQUHvUmxGSUoRflre91E/PO64JOTnJSCi7qqA7PDFMSAtU4Aq ZTpXN4xWqpGK//ToDIAUe5tge9FXQdy5qZ/qctbVk6ILSGIYkML7Pbwyy39X8F+n+Xug FbaA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1764697869; x=1765302669; 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=NH2u4VUQ3fj61HenZr1UXZRG+xsck/DPqaTtHXUTkxo=; b=nfX1D/UhE6BEohjRoxubyYOm3a/OrDNS4A/Ob//RsPbGU0DyAj+oIK0HdvRYkLxexI piSDJt667lut7P40+Mk8CnYqq0URQlwP0YLZcJD6UJB/hvhrWVFdgp7YvyUkVgZKFpbH 8gOKxwRmwhAWFhiyEpJupdEuwrMn1ec2IJvYt8YQ2G5YMLunKSsvScwqs1QZckLhnzen d2ObeEsImErOKH3yal64jTcYZButdpIOFME0Z2GjsA3X5kjpvFtx5+XFpOTbNUcw4HYP 9H4s/6lxTTs+UUQ4VKsr/nC/H/PfK4waFGUXlKG0JailjABas7Nsd8u5ORqvY+YcLSUr P5ww== X-Forwarded-Encrypted: i=1; AJvYcCWgdwwA1+pKNr33uJVOQU4a+2mtdXoG2sRWTN9P1buKd7/7yGsn4Fw0hlzgCBXPJLGEgAmxyQ7eleCzBgE=@vger.kernel.org X-Gm-Message-State: AOJu0YyFgysQYXv9SD/+9a3CZuKRbwEk5/RE3ULrIDcXGcg2CwfcESRs Hf+FyRtzsQZXflg7wmfzE1Vy7efPhnJZ/w8uNIifMsv6q/UbxnvRYTs3NigpduPpZKalWV6iHSW 7xGfE0kIYwg== X-Google-Smtp-Source: AGHT+IFlGTmkGGNi+SC78cD9hWU6PN0Yrfo0gXOZw0nJvl3+hn9RGHqM3/7qCGozUF6udTtmu99BfqGzB1gx X-Received: from dlag16.prod.google.com ([2002:a05:701b:2510:b0:11b:998d:bdf4]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a05:7022:1e03:b0:11b:e21e:5653 with SMTP id a92af1059eb24-11defca66c3mr132520c88.19.1764697869345; Tue, 02 Dec 2025 09:51:09 -0800 (PST) Date: Tue, 2 Dec 2025 09:49:58 -0800 In-Reply-To: <20251202175043.623597-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: <20251202175043.623597-1-irogers@google.com> X-Mailer: git-send-email 2.52.0.158.g65b55ccf14-goog Message-ID: <20251202175043.623597-4-irogers@google.com> Subject: [PATCH v9 03/48] perf jevents: Allow multiple metricgroups.json files From: Ian Rogers To: Adrian Hunter , Alexander Shishkin , Arnaldo Carvalho de Melo , Benjamin Gray , Caleb Biggers , Edward Baker , Ian Rogers , Ingo Molnar , James Clark , Jing Zhang , Jiri Olsa , John Garry , Leo Yan , Namhyung Kim , Perry Taylor , Peter Zijlstra , Samantha Alt , Sandipan Das , Thomas Falcon , Weilin Wang , Xu Yang , linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Allow multiple metricgroups.json files by handling any file ending with metricgroups.json as a metricgroups file. Signed-off-by: Ian Rogers Tested-by: Thomas Falcon --- tools/perf/pmu-events/jevents.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tools/perf/pmu-events/jevents.py b/tools/perf/pmu-events/jeven= ts.py index 3413ee5d0227..03f5ad262eb5 100755 --- a/tools/perf/pmu-events/jevents.py +++ b/tools/perf/pmu-events/jevents.py @@ -640,7 +640,7 @@ def preprocess_one_file(parents: Sequence[str], item: o= s.DirEntry) -> None: if not item.is_file() or not item.name.endswith('.json'): return =20 - if item.name =3D=3D 'metricgroups.json': + if item.name.endswith('metricgroups.json'): metricgroup_descriptions =3D json.load(open(item.path)) for mgroup in metricgroup_descriptions: assert len(mgroup) > 1, parents @@ -693,7 +693,7 @@ def process_one_file(parents: Sequence[str], item: os.D= irEntry) -> None: =20 # Ignore other directories. If the file name does not have a .json # extension, ignore it. It could be a readme.txt for instance. - if not item.is_file() or not item.name.endswith('.json') or item.name = =3D=3D 'metricgroups.json': + if not item.is_file() or not item.name.endswith('.json') or item.name.en= dswith('metricgroups.json'): return =20 add_events_table_entries(item, get_topic(item.name)) --=20 2.52.0.158.g65b55ccf14-goog From nobody Wed Dec 10 20:09:24 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 00D882D0601 for ; Tue, 2 Dec 2025 17:51:15 +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=1764697877; cv=none; b=flOOCPGnIgw2sELzdM1OcPqczFchFzwyfaXBHWdDoluz6ZJMnFixP2lPTrxGex3MW/TR4E66vKyV0r9+oh3eKPqojmI0GUdIU6qV7k1+vgCHTIrNRLoThV28bXPoZKrMmeiqkXWBDFXFisbEX2BJpCl5eKKI3NEDVcIBl1Ssi+o= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764697877; c=relaxed/simple; bh=zWsUZ4Jd4Lkf2jf3z0CVAWHU02kQFxP6PvAOmYI09OI=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=KOhW4hC2HHiEy4bpnpI3cPc47EGHK7TV83Hm1ZpmfOtfgUqWzn0v+sAwv1dc56QgSntW1Kvm+miICH0e3lmnlDRi3KSS1k3PD+THSoioJx1SbpUvfm85N+5KsWUZ4EaOnylrjyBPZRrV698eKK7CMqPbbO5n3uQ0wm5I8HjeOyQ= 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=QKqxWUS3; 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="QKqxWUS3" Received: by mail-pg1-f202.google.com with SMTP id 41be03b00d2f7-b99f6516262so13924946a12.3 for ; Tue, 02 Dec 2025 09:51:15 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1764697875; x=1765302675; 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=6aZdi80Fw/yhQHCdjNqAk6626PinK1Z/Zi9xmvaQPrs=; b=QKqxWUS3EQfFd2MP14UFXPIpXBNeinF5//MY4+uRHuYCBNnU9GO/eBtIyd+rhsmadF Ggc2epk1CbCPUbmUGdzxCUFSFb1nDqTp4WJy388doM384N5Y+/K1ORxt9OusnIx45xlr UxzPD60R8VcRm/wXZ7Amwbng3XgPOLqQHec2FRni/msKiD10sl0K9V9lYi7JTRLJBdTg RNwt3zduM34gDnPtkq0sP4FOs+W4a5aTNssEkFS6zcK7QfqGuwLqUfvsDA4Utpm0BP6V dlRhjoBKB21vOklHAZEOAEq4nkwOudvv2LOMiUWlGAtBzugj19npoxRY9FJ8JYCBhLLc ev8w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1764697875; x=1765302675; 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=6aZdi80Fw/yhQHCdjNqAk6626PinK1Z/Zi9xmvaQPrs=; b=w/IS8tA1q5CPLztkI6aktAmj1JHLujMsAi3lQSTUK54HDFqxXL7trzLiWmzCQiChcX 6GRFfDWn3UvUZdN65PzYqo352CreGo/MExfXjh8XL7xq8LGkuUs2g6UPYayVybaNuvQA irwJtJwqZ19hnifo6/56vJBihSJIluqcwZz3BmyccIZ3uV31ni2D45BViv0Ncgv7b0Uo gUHssFFLZpTUztm4FySjaT6622lK04imCM7YN6AxaDzh2zu5xz4FcnBGrkaWqVcdAMiB n4mfuzmDvXyT/uLd8ToLlVEBAckAgGzn1xRNZpLA+ae0sXlPSAOg6VX4X/AFyhphauqc 655w== X-Forwarded-Encrypted: i=1; AJvYcCU3Rxt8orjXPYeefZ3pxoZtoqUAHzJM9bbABsh73us8yTI62avKbGzdjXNtLTZrrQIcA3O2ppCE0acGLfo=@vger.kernel.org X-Gm-Message-State: AOJu0Yz7miaUVwX/vgmX4tlwEXvm1N3dEnM7Ab1izczEgZA91piGcMws hCChwf1FmgX+oMttuZZ/XSLtQXMWr6HZmKxaKmthBjIjDJ6Ip2VSRGiyN+wAg5y1vtlv3rn0oZr HgxByEB3lOg== X-Google-Smtp-Source: AGHT+IHQ3drzwVFWP9Rr4fIeRTF6kB1LO25LBjckRv84mcshBe+KzpJd8FyPPHJt4tRinWRy6ElTcBm0c6S3 X-Received: from dycsa11.prod.google.com ([2002:a05:7301:10cb:b0:2a7:2596:88c5]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a05:7300:3c15:b0:2a4:3592:cf79 with SMTP id 5a478bee46e88-2a94189a935mr23692758eec.29.1764697875166; Tue, 02 Dec 2025 09:51:15 -0800 (PST) Date: Tue, 2 Dec 2025 09:49:59 -0800 In-Reply-To: <20251202175043.623597-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: <20251202175043.623597-1-irogers@google.com> X-Mailer: git-send-email 2.52.0.158.g65b55ccf14-goog Message-ID: <20251202175043.623597-5-irogers@google.com> Subject: [PATCH v9 04/48] perf jevents: Update metric constraint support From: Ian Rogers To: Adrian Hunter , Alexander Shishkin , Arnaldo Carvalho de Melo , Benjamin Gray , Caleb Biggers , Edward Baker , Ian Rogers , Ingo Molnar , James Clark , Jing Zhang , Jiri Olsa , John Garry , Leo Yan , Namhyung Kim , Perry Taylor , Peter Zijlstra , Samantha Alt , Sandipan Das , Thomas Falcon , Weilin Wang , Xu Yang , linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Previous metric constraints were binary, either none or don't group when the NMI watchdog is present. Update to match the definitions in 'enum metric_event_groups' in pmu-events.h. Signed-off-by: Ian Rogers Tested-by: Thomas Falcon --- tools/perf/pmu-events/metric.py | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/tools/perf/pmu-events/metric.py b/tools/perf/pmu-events/metric= .py index 92acd89ed97a..8a718dd4b1fe 100644 --- a/tools/perf/pmu-events/metric.py +++ b/tools/perf/pmu-events/metric.py @@ -4,8 +4,14 @@ import ast import decimal import json import re +from enum import Enum from typing import Dict, List, Optional, Set, Tuple, Union =20 +class MetricConstraint(Enum): + GROUPED_EVENTS =3D 0 + NO_GROUP_EVENTS =3D 1 + NO_GROUP_EVENTS_NMI =3D 2 + NO_GROUP_EVENTS_SMT =3D 3 =20 class Expression: """Abstract base class of elements in a metric expression.""" @@ -423,14 +429,14 @@ class Metric: groups: Set[str] expr: Expression scale_unit: str - constraint: bool + constraint: MetricConstraint =20 def __init__(self, name: str, description: str, expr: Expression, scale_unit: str, - constraint: bool =3D False): + constraint: MetricConstraint =3D MetricConstraint.GROUPED_E= VENTS): self.name =3D name self.description =3D description self.expr =3D expr.Simplify() @@ -464,8 +470,8 @@ class Metric: 'MetricExpr': self.expr.ToPerfJson(), 'ScaleUnit': self.scale_unit } - if self.constraint: - result['MetricConstraint'] =3D 'NO_NMI_WATCHDOG' + if self.constraint !=3D MetricConstraint.GROUPED_EVENTS: + result['MetricConstraint'] =3D self.constraint.name =20 return result =20 --=20 2.52.0.158.g65b55ccf14-goog From nobody Wed Dec 10 20:09:24 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 CC25E2D0637 for ; Tue, 2 Dec 2025 17:51:21 +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=1764697883; cv=none; b=UOjKreF0ejDnaxkBL/twrXKo7/TtBH2iU8BVgl59yXV4ex0eZXIEKeN9z9Wa5OfdGBSQloC1xfIgdWEyJgm+cehV5dngahrVaFgLg1GEPB00wWTAiO8bTuYg46e0W/Un+PYvClaFfp9lTPTtpqHKiuEQ6KcHQy1ZmlFzkVaPNnc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764697883; c=relaxed/simple; bh=vwxaZkM3LBAu55vgpCR4qV7SddK8e04I8IvB0hGoBfU=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=Vb5KC1FZ1EHBXN/oWmekpyHcR1HZIag+6Vg6nQKtwafpyDfAAUvUMQ5+gB9NuRu/nk0EPMo2Bhq+4GWTOiLgpmyUKqV1PpoLKzuTMA8wL5nY3VfQIbyis7MmFB5H+hB98X3fI3TcooVP0Ef0r/stA2PZ9ZtQc9/XHy14Bgevgj4= 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=vxHkB4K+; 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="vxHkB4K+" Received: by mail-pj1-f73.google.com with SMTP id 98e67ed59e1d1-343fb64cea6so10420810a91.3 for ; Tue, 02 Dec 2025 09:51:21 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1764697881; x=1765302681; 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=4eBuhL77TFL2fSnXXmgwBIbmmZ7aXIBI5vM+VUiCEJ0=; b=vxHkB4K+lzs6qbByHJz6+9oQVt5/C8Ya9Sx9q3/RwboEktw4uIloJ1FAaPcBAcKotm j/R1YthDoWeZAYs9pX/AJJW3vA9vprMHPR51lRdbRUn6rc20n44ck96bFnDVJm9KUySk YWX6kKs/qw5+el3vFAhl4GXCp53S18pjHHYJyAVRaLcqklPLtsM/9S7bXx0uwebMRQ1h kNDH3hH8pw7aEIsycHHJH3wO69asp2NMghtCOaGv8c5fMb0XEnAMgfT3FTkNNOsEoQYS oeoI/YckrGGsDh2ASoDPQz94MwtxRNJJOCuEJ7HSPNKPrAgWoyw49zAbv+3HLLz9bzmr 4VmQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1764697881; x=1765302681; 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=4eBuhL77TFL2fSnXXmgwBIbmmZ7aXIBI5vM+VUiCEJ0=; b=i+K08IVuq3wIhtzH86MfassN22jVWoGnRcxTAsuUNp9022oNIamuePC8KIoVFYD/4V +73NTzoNzjMgThjOFBK6F8R8HHdYogMOrZMKIqJRdmhdSpzXwnEioLqSetUghsZhe26g NR4LHfb5cudlVHHaVBNhpahmZBW8FAWzBE2oO4vOtcsOej+GiHeojTR0WrstPNc0Ti6z JZ4j7UZzVxTLty6ZV1WRLKuvQqQHay9Gle38mxV2XnCZHRrJkVzcaoWf7Arkym8Qqlle 203VYGKhl6OOZ0LEYDMhmY1sAMBnocaMsTj848jkz3J0OQWF2Y1OBnaD+be8ueblqgZ1 MJkw== X-Forwarded-Encrypted: i=1; AJvYcCUkb7GiswN1DnA5gr+rcwT/+vdhPRAEVS0gyptFfV/VXWLWljuuuUNxar7uF459qikpB/xy87IIYbRKR3k=@vger.kernel.org X-Gm-Message-State: AOJu0YxQv8NuQY1a+J94DhU4UALQM7TTQbjRkeVrOIxb9VVG+SgKrUl6 ggANrbrBIa7MJd/wWSi6xud3s2BETsJqdCziRVtv5v5kBE0vEWMnJ+jOuIrpmxHgWOagHpcR0rk DKDEU07eM9w== X-Google-Smtp-Source: AGHT+IFpPPMC8C+B7mNoVMCero6QU+UEKyvKRKDZtS8SLABIWE/LpQ3VkrqrcNR6ZV/Sqev0I4QBjmsZCyNy X-Received: from dlqq34.prod.google.com ([2002:a05:7022:63a2:b0:119:49ca:6b8b]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a05:7022:ea48:10b0:11a:e426:911a with SMTP id a92af1059eb24-11defca8b3fmr140040c88.15.1764697881004; Tue, 02 Dec 2025 09:51:21 -0800 (PST) Date: Tue, 2 Dec 2025 09:50:00 -0800 In-Reply-To: <20251202175043.623597-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: <20251202175043.623597-1-irogers@google.com> X-Mailer: git-send-email 2.52.0.158.g65b55ccf14-goog Message-ID: <20251202175043.623597-6-irogers@google.com> Subject: [PATCH v9 05/48] perf jevents: Add descriptions to metricgroup abstraction From: Ian Rogers To: Adrian Hunter , Alexander Shishkin , Arnaldo Carvalho de Melo , Benjamin Gray , Caleb Biggers , Edward Baker , Ian Rogers , Ingo Molnar , James Clark , Jing Zhang , Jiri Olsa , John Garry , Leo Yan , Namhyung Kim , Perry Taylor , Peter Zijlstra , Samantha Alt , Sandipan Das , Thomas Falcon , Weilin Wang , Xu Yang , linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Add a function to recursively generate metric group descriptions. Signed-off-by: Ian Rogers Tested-by: Thomas Falcon --- tools/perf/pmu-events/metric.py | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/tools/perf/pmu-events/metric.py b/tools/perf/pmu-events/metric= .py index 8a718dd4b1fe..1de4fb72c75e 100644 --- a/tools/perf/pmu-events/metric.py +++ b/tools/perf/pmu-events/metric.py @@ -475,6 +475,8 @@ class Metric: =20 return result =20 + def ToMetricGroupDescriptions(self, root: bool =3D True) -> Dict[str, st= r]: + return {} =20 class _MetricJsonEncoder(json.JSONEncoder): """Special handling for Metric objects.""" @@ -493,10 +495,12 @@ class MetricGroup: which can facilitate arrangements similar to trees. """ =20 - def __init__(self, name: str, metric_list: List[Union[Metric, - 'MetricGroup']]): + def __init__(self, name: str, + metric_list: List[Union[Metric, 'MetricGroup']], + description: Optional[str] =3D None): self.name =3D name self.metric_list =3D metric_list + self.description =3D description for metric in metric_list: metric.AddToMetricGroup(self) =20 @@ -516,6 +520,12 @@ class MetricGroup: def ToPerfJson(self) -> str: return json.dumps(sorted(self.Flatten()), indent=3D2, cls=3D_MetricJso= nEncoder) =20 + def ToMetricGroupDescriptions(self, root: bool =3D True) -> Dict[str, st= r]: + result =3D {self.name: self.description} if self.description else {} + for x in self.metric_list: + result.update(x.ToMetricGroupDescriptions(False)) + return result + def __str__(self) -> str: return self.ToPerfJson() =20 --=20 2.52.0.158.g65b55ccf14-goog From nobody Wed Dec 10 20:09:24 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 5B7E22C21F8 for ; Tue, 2 Dec 2025 17:51:27 +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=1764697888; cv=none; b=Qcz5LyJmNXsVin8eXHX/T01/lzP72ymsUSxAiiF/RMPh8lOinbiQ4rnIWUCC8vanc6LeLCEBr8ii0Yhv6pVE6qbyJSOVlxuOyyJ82PwkztZhuFCHmArXb9OXSs8NCYxz9KKX1yMmwfJvTd64soVo4hTnOQYwqeNYjgHH7UxnHzw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764697888; c=relaxed/simple; bh=jd+f/2HDR7Yv2ofQrQteGkOCEZEv0T7jdJ3f6k+9zHE=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=SJQWssoA/5X7SkboeNwHBtQQWV+UxbpLnk3vYAUuNbLIx4qNEHQDdb/bRR3y5bUd5xMVjyqtuBNVMwcewAOSMrFfPQ55wNrnpCbxnGT7MGHnxmaE3WvM6ZyrCfR06vzDKAN4KP2Fz8F+nqa+HI0KEC6/EO8dTNP6KS6dVX2Gpio= 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=j0AxZygn; 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="j0AxZygn" Received: by mail-pg1-f201.google.com with SMTP id 41be03b00d2f7-bc240cdb249so5141951a12.3 for ; Tue, 02 Dec 2025 09:51:27 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1764697887; x=1765302687; 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=EbMmwWSw3365Ms5mX/vunge3ckeTzfHYCxhgJpyRXsk=; b=j0AxZygnZLthDhYO/ibHXcPruO8jG7gg+XDla5P/Hyw5uhpP1HV/zjMK208tXunoXp jHmkkYuzMTtu6DYEINZ9WdTq/zN23bAdNDQT4b6eq3jutpVir4FtGgnA0hdFWGKl3wtj 7/htWlN7XIHlCMEcCOLsCq+0RWapQrjVG/7fIwWwWZhfEGZRnwXMTXRUg0mlxW0TdGK6 AZJopDLRHZ6N6rCdN3psv3nJqnMOefrErvoDn0oonBJznC4tX0RZkOQv89GWcOqODypI QtKe2HO46sTyzf2waQ0YBPQsUekWExq+pNjq46+IMdrwn/xETH/4YEx3AsNDFx7lDUa6 lLAg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1764697887; x=1765302687; 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=EbMmwWSw3365Ms5mX/vunge3ckeTzfHYCxhgJpyRXsk=; b=BGgaNQZHJjjcp/Va0wHEyqO7iUtVbFBwwvfPl+y4yNHU24AP9cSuhplxZBaFoAlwG7 oeK9qpS1k2Wqlij0mky4ocY9Ecqb+27fY4AU2X2xFwDrP0ZaWjtituY5INrU2tYKacG5 tCuMiboISPUGodSItGJ8mTrDRXXl2WtccvGT3kHgGU4Y8wZErcb98eM2NXj3hU7wSf95 feRi9zaqzxILWOts5LN9j/IAItqvFz6pts8Ym810AXkePVeQCpb2YjOYiDJrz1G33Fc2 5vtUUywPl+oADVyZr57SX3EcpVRTCgG7wtKj7R/a9GtIOgwYizUijywCN/Eno0E/GdRa t7Dg== X-Forwarded-Encrypted: i=1; AJvYcCXfHxELo+XecYo5l7o4WE1aKSmZ0iyz+dt8tyZn6CdjG9nm1Luuaijbe3i9mqz4qTTkSnu/Wkp40IQHxMM=@vger.kernel.org X-Gm-Message-State: AOJu0YwL30kPwf/Qb7fTxQ1cezeQOUPpZcYD9gVjA2wFsxSp7xUyZ/3D loKAPqnjClahBow6VpXzQkCweT0YJIRxtrZA+LarmKuoChUrE9bVmLC1wEobZOgJqLs4v/iJp2p W9EQyeWyGOg== X-Google-Smtp-Source: AGHT+IEPCJbe4xhivSD4VOVmkKDqSSL5N19KSaMH5pXp+sDwmhKRdM9bRebMPbLDdbbE22jyUXyW79hXKRjo X-Received: from dyng12.prod.google.com ([2002:a05:7300:7f0c:b0:2a2:3f59:eef5]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a05:7300:cf88:b0:2a4:3593:4686 with SMTP id 5a478bee46e88-2a9418bc574mr13696140eec.34.1764697886637; Tue, 02 Dec 2025 09:51:26 -0800 (PST) Date: Tue, 2 Dec 2025 09:50:01 -0800 In-Reply-To: <20251202175043.623597-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: <20251202175043.623597-1-irogers@google.com> X-Mailer: git-send-email 2.52.0.158.g65b55ccf14-goog Message-ID: <20251202175043.623597-7-irogers@google.com> Subject: [PATCH v9 06/48] perf jevents: Allow metric groups not to be named From: Ian Rogers To: Adrian Hunter , Alexander Shishkin , Arnaldo Carvalho de Melo , Benjamin Gray , Caleb Biggers , Edward Baker , Ian Rogers , Ingo Molnar , James Clark , Jing Zhang , Jiri Olsa , John Garry , Leo Yan , Namhyung Kim , Perry Taylor , Peter Zijlstra , Samantha Alt , Sandipan Das , Thomas Falcon , Weilin Wang , Xu Yang , linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" It can be convenient to have unnamed metric groups for the sake of organizing other metrics and metric groups. An unspecified name shouldn't contribute to the MetricGroup json value, so don't record it. Signed-off-by: Ian Rogers Tested-by: Thomas Falcon --- tools/perf/pmu-events/metric.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tools/perf/pmu-events/metric.py b/tools/perf/pmu-events/metric= .py index 1de4fb72c75e..847b614d40d5 100644 --- a/tools/perf/pmu-events/metric.py +++ b/tools/perf/pmu-events/metric.py @@ -455,7 +455,8 @@ class Metric: =20 def AddToMetricGroup(self, group): """Callback used when being added to a MetricGroup.""" - self.groups.add(group.name) + if group.name: + self.groups.add(group.name) =20 def Flatten(self) -> Set['Metric']: """Return a leaf metric.""" --=20 2.52.0.158.g65b55ccf14-goog From nobody Wed Dec 10 20:09:24 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 822AC2C21F8 for ; Tue, 2 Dec 2025 17:51:33 +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=1764697894; cv=none; b=YR+YfWe5HFKtrFgy7P27ypgqDko6gwIoUZb13O4fWutNDxu5Ec6vKKm26HZQz0MDXeigkAwRp7oMoas1tFDyW6mVMNpKfDQq9EwEN02vsAXUtm304gLZB3EnpIKamo906uWbSZlfB1vuDh1Kf6ZCL8X95BPj5qGRlD1cuyYnSQA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764697894; c=relaxed/simple; bh=dSBO8zU/g3mPU06tLqLyC/GIRciUN2rdNIopz+Gc6Yc=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=fJDGvZ/kvvlqJDqKMd3+pzV5lgXI3is3RBy91JoThqVBubuttwZCZdbXHCdAOPAuaBfLgpsKIVgMbRjHkzAeNCz6NNNa2TGTUp2TcAiNNn692Rp/LJ52io/7aL4fWdvTitQWOlewEv7lafbOG3YMzIUuym8y444WnO7PqozSGF8= 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=1OAJf23P; 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="1OAJf23P" Received: by mail-pg1-f201.google.com with SMTP id 41be03b00d2f7-bc240cdb249so5142019a12.3 for ; Tue, 02 Dec 2025 09:51:33 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1764697893; x=1765302693; 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=SWXwpn1Bdj0vV31tEseVJuMADmOQ9ZqTGDxa2hpD15M=; b=1OAJf23PbdjymJ7Om/gGq34Dn4HLnrL/zGl/K8mxqiGXKT1PKKZ0OF2PSn+bnwQrfV eGKBGmjjGWwzbwwiNN4tag2llKZNl5tdE6p+kOQaS3HpxTwy70FgHhRh/+icyXTxIgpS vElm8XHekwLckcbeF/evxfp8aLHdSPdhK64stFdYHKR6TUyyOLN5zeO6UbbCsuNpDpTF b+ilGDPt31YNs1tHAKHnwDRgMqm2bhnr4h/0CCFYgVPxVTFZUMyAJ9QXpuI9yEbeNeTb aZVy92nTD2hUs3/EptuRNB+gceaoHvPZUm4PsRpyKczTUPLIRLYnlF4JJ983cdnsO9Uu 3Mxg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1764697893; x=1765302693; 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=SWXwpn1Bdj0vV31tEseVJuMADmOQ9ZqTGDxa2hpD15M=; b=vTxuslK3fYFVYQEVaDI+dR3xo+h7wacMuHVJZ95R7guHde0QaqhcZfgpvhglk7B8fQ 0mRkekiKkTIvu7bAaSlwWi4b9kSbzvQvPRkxb//UkUnF2Jdegj3LIjZcKk7N5yZVbCHi m++0LrzswLLZhzvn+JADbZIQcxCimOJgdOA6nhgCRXXHQehIhwQFYJRDO2WeuIRW/zAc w4FjlPUXoBuFQafzVN5fDkfLN5JweqOZzvZVc0A1JLfcyDG6uICBwKv2KpCVyr2F38d0 lQHeP4TRYpyPUe5l9TAR2qd1IqmL0k9gH7Mwa0dsoHmzXbsgXMV8gifPiFwkgvpM7bdS IBoQ== X-Forwarded-Encrypted: i=1; AJvYcCX34GOCcAHk/vtx+80yPKPgdrlmPCxFQ8D04sUCvc1I48+r5Y2BMb+lDM3bgm0H5Dw/zPI33/w5wCMIjVU=@vger.kernel.org X-Gm-Message-State: AOJu0YxPh4A6V9rAMXffq07feNcng204yCZKbhrsnekRdY/oTrD2b6cX T+QTAPlofvgjJC1N90AaPbNdDNZSio7CfkRRirPyQYFqG8LqkERDo9f2m81Idei52gE4GkiDZ3h TZE6Y6XqrRw== X-Google-Smtp-Source: AGHT+IH32DlUfru/jZ3w8kB9n4KPWgbxgG2eL603tXP0Gyqx2n0LHx+3xkx53wh9VOYYN+lxAlTh3U8q7iAJ X-Received: from dycqv11.prod.google.com ([2002:a05:7300:df4b:b0:2a4:63df:76a5]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a05:693c:800d:b0:2a4:3593:4674 with SMTP id 5a478bee46e88-2a9415a4876mr15036126eec.16.1764697892776; Tue, 02 Dec 2025 09:51:32 -0800 (PST) Date: Tue, 2 Dec 2025 09:50:02 -0800 In-Reply-To: <20251202175043.623597-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: <20251202175043.623597-1-irogers@google.com> X-Mailer: git-send-email 2.52.0.158.g65b55ccf14-goog Message-ID: <20251202175043.623597-8-irogers@google.com> Subject: [PATCH v9 07/48] perf jevents: Support parsing negative exponents From: Ian Rogers To: Adrian Hunter , Alexander Shishkin , Arnaldo Carvalho de Melo , Benjamin Gray , Caleb Biggers , Edward Baker , Ian Rogers , Ingo Molnar , James Clark , Jing Zhang , Jiri Olsa , John Garry , Leo Yan , Namhyung Kim , Perry Taylor , Peter Zijlstra , Samantha Alt , Sandipan Das , Thomas Falcon , Weilin Wang , Xu Yang , linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Support negative exponents when parsing from a json metric string by making the numbers after the 'e' optional in the 'Event' insertion fix up. Signed-off-by: Ian Rogers Tested-by: Thomas Falcon --- tools/perf/pmu-events/metric.py | 2 +- tools/perf/pmu-events/metric_test.py | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/tools/perf/pmu-events/metric.py b/tools/perf/pmu-events/metric= .py index 847b614d40d5..31eea2f45152 100644 --- a/tools/perf/pmu-events/metric.py +++ b/tools/perf/pmu-events/metric.py @@ -573,7 +573,7 @@ def ParsePerfJson(orig: str) -> Expression: # a double by the Bison parser py =3D re.sub(r'0Event\(r"[xX]([0-9a-fA-F]*)"\)', r'Event("0x\1")', py) # Convert accidentally converted scientific notation constants back - py =3D re.sub(r'([0-9]+)Event\(r"(e[0-9]+)"\)', r'\1\2', py) + py =3D re.sub(r'([0-9]+)Event\(r"(e[0-9]*)"\)', r'\1\2', py) # Convert all the known keywords back from events to just the keyword keywords =3D ['if', 'else', 'min', 'max', 'd_ratio', 'source_count', 'ha= s_event', 'strcmp_cpuid_str'] for kw in keywords: diff --git a/tools/perf/pmu-events/metric_test.py b/tools/perf/pmu-events/m= etric_test.py index ee22ff43ddd7..8acfe4652b55 100755 --- a/tools/perf/pmu-events/metric_test.py +++ b/tools/perf/pmu-events/metric_test.py @@ -61,6 +61,10 @@ class TestMetricExpressions(unittest.TestCase): after =3D before self.assertEqual(ParsePerfJson(before).ToPerfJson(), after) =20 + before =3D r'a + 3e-12 + b' + after =3D before + self.assertEqual(ParsePerfJson(before).ToPerfJson(), after) + def test_IfElseTests(self): # if-else needs rewriting to Select and back. before =3D r'Event1 if #smt_on else Event2' --=20 2.52.0.158.g65b55ccf14-goog From nobody Wed Dec 10 20:09:24 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 84B5D2D0C9F for ; Tue, 2 Dec 2025 17:51:39 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.215.202 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764697900; cv=none; b=q9UVPZe5gTAbSFN8Fk5zk1GwpX/7HnyKo7KwaunGBwLsG1kFrfBRqjWEpPXUh+hJG7DFzARF2ae1aysytxjr3wCv/rxfcpOye8q+Cb01S6epqs7xA+mpHnuKzMXhm4khs9hlyABb7DSynK1Qe9KIvdxv1sCC526S+rw7J0i2RaQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764697900; c=relaxed/simple; bh=jDM2keAq6JzZV0xeWQw8r6/oNg7uOTPVE1rsKGWrjvM=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=Zz7DvO4s6vdZRL9RGLfhBL7jh9hQNjQmh+2Qn4pcWLYLPQKGnqQ+34uY07ighcMHFxlTljBDMbaDfRI40JFrOsWW3g+QRfktvT/A70qo3r+YK6pE24/fmsF/iCXhYJRH38d20qoZMmrolAst8zg1NpdpQeitqqAQ19JhdUAOXS4= 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=zF16tJMT; 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="zF16tJMT" Received: by mail-pg1-f202.google.com with SMTP id 41be03b00d2f7-bf06c3426b7so2087849a12.3 for ; Tue, 02 Dec 2025 09:51:39 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1764697899; x=1765302699; 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=X8m+1Rep2c6fy/eFqYgnfb5iZa+BxpCo5oTQZvaCNcw=; b=zF16tJMTN0oCMoW6r5dsZ5zVylpgzoFn1uWFKolyD4dR8WmOVrm0MlEI1SRWkOV3F7 DNpS9lnwuf0vzb0xHxTprYjejfY4pXRaQ2LFgFsl2+u3xini6A+Be1I5nPSQE5n/QZcC M3rolm5yNnG8OHL/BuW6HppNOvHGx36gZ0mQuyhX0eAyEXDcy/xwM0N5LxQHoHO2M/Ss udXy4A1+Jhy0X62hWg2kkQ9nEzsPWCTVr8hzOC5cie36P87mewLgFc5RIteTlvEubbSE cC9GTd8KW1DNWEMwYsxNWgX089irpOGc8WKCkhRM8yyQBFn56Ru3eXWAiWVj4zAV5VJP etjg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1764697899; x=1765302699; 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=X8m+1Rep2c6fy/eFqYgnfb5iZa+BxpCo5oTQZvaCNcw=; b=SV8MW2t7nwXYUR7j061a3x5CS/1vh7XiPEaugRC2r4cY2z8FTAoaoTstoC3y+ggD8v dThTmlCcIATQCFm5Yj/2njHJi8nNjIiQYpIEe7LMZAgf4PUsAxovtTUtCD4FjYV9K1/a Gtl0IIK4dSmfzZyL7JW3bHREq8G0ZyPl6trZif59BCxJJJiuZNpolbK8lieOBOFQ3xLf mZdJFjBaydRsgddRJr5DcOZ5x8ZTxV7cDYL8eCTVXkQ4weflQfA4m4Iu+TCBorpDn1pO jf9jgpVvM8lesajfxV/EjLiEuJnS3ZQ7CpnbXg4kzJw5uQDbwkchNLLI7wDcaXHf433B ls+w== X-Forwarded-Encrypted: i=1; AJvYcCUxnA8Dz1t5teamHW6YR7Y+tEzTUyzltbV/1hwKzmZE9e6nmMu6hqAdVIsZcBLhO9O/GNc+nS4l4A3A1Q0=@vger.kernel.org X-Gm-Message-State: AOJu0YxmugDnLf+md4t4eHyLQXj9Q1jWx81NAX6MDw/PS+WvGChybZwv FXWcNHETkn0MrnofcmA3C4j+sOlhDMn5MqX8A6og973WpEwUHlUJJsOiP8BgzLiJ5zZgKy7Z4eB 1EvGIi2hKbg== X-Google-Smtp-Source: AGHT+IFkCd9N6NIhwzGIwZmLg4mlvjlGzmjd171cvG4Dxf6lfWAM/Po6Fh7WLEOOcKuLpJDmX8ZrpKBrYGmJ X-Received: from dyer27.prod.google.com ([2002:a05:7300:231b:b0:2a4:6899:e5f0]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a05:7301:db04:b0:2a7:27d:66e3 with SMTP id 5a478bee46e88-2a7190739f4mr21115142eec.2.1764697898880; Tue, 02 Dec 2025 09:51:38 -0800 (PST) Date: Tue, 2 Dec 2025 09:50:03 -0800 In-Reply-To: <20251202175043.623597-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: <20251202175043.623597-1-irogers@google.com> X-Mailer: git-send-email 2.52.0.158.g65b55ccf14-goog Message-ID: <20251202175043.623597-9-irogers@google.com> Subject: [PATCH v9 08/48] perf jevents: Term list fix in event parsing From: Ian Rogers To: Adrian Hunter , Alexander Shishkin , Arnaldo Carvalho de Melo , Benjamin Gray , Caleb Biggers , Edward Baker , Ian Rogers , Ingo Molnar , James Clark , Jing Zhang , Jiri Olsa , John Garry , Leo Yan , Namhyung Kim , Perry Taylor , Peter Zijlstra , Samantha Alt , Sandipan Das , Thomas Falcon , Weilin Wang , Xu Yang , linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Fix events seemingly broken apart at a comma. Signed-off-by: Ian Rogers Tested-by: Thomas Falcon --- tools/perf/pmu-events/metric.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/tools/perf/pmu-events/metric.py b/tools/perf/pmu-events/metric= .py index 31eea2f45152..0f4e67e5cfea 100644 --- a/tools/perf/pmu-events/metric.py +++ b/tools/perf/pmu-events/metric.py @@ -568,6 +568,12 @@ def ParsePerfJson(orig: str) -> Expression: r'Event(r"\1")', py) # If it started with a # it should have been a literal, rather than an e= vent name py =3D re.sub(r'#Event\(r"([^"]*)"\)', r'Literal("#\1")', py) + # Fix events wrongly broken at a ',' + while True: + prev_py =3D py + py =3D re.sub(r'Event\(r"([^"]*)"\),Event\(r"([^"]*)"\)', r'Event(r"\1= ,\2")', py) + if py =3D=3D prev_py: + break # Convert accidentally converted hex constants ("0Event(r"xDEADBEEF)"") = back to a constant, # but keep it wrapped in Event(), otherwise Python drops the 0x prefix a= nd it gets interpreted as # a double by the Bison parser @@ -586,7 +592,6 @@ def ParsePerfJson(orig: str) -> Expression: parsed =3D ast.fix_missing_locations(parsed) return _Constify(eval(compile(parsed, orig, 'eval'))) =20 - def RewriteMetricsInTermsOfOthers(metrics: List[Tuple[str, str, Expression= ]] )-> Dict[Tuple[str, str], Expression]: """Shorten metrics by rewriting in terms of others. --=20 2.52.0.158.g65b55ccf14-goog From nobody Wed Dec 10 20:09:24 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 1AEDF2D192B for ; Tue, 2 Dec 2025 17:51:44 +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=1764697906; cv=none; b=N2TxRqOABsatVmryF5kmixiOMxpd5AOOT0B3MHghWz9WAS/saEJYCzQbm1WsI3QwNIZw8g0MW8T8TMq82fV26TD2Zdyki9IljV6H8v+7yTtD0LCB836vWR+xw6TV5CotQAM8iP2g7dM8D6r1zyDLU8+WYkbHUPplSGviNNveBKQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764697906; c=relaxed/simple; bh=BP5K1yNmV+fzvwoM7+qXdRZARDVkRPG6KnFEWZqwj8M=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=RKerWsGEHha1CD10Rn0NtbrOCfVaQkZlZyGwEslWBCe/XUVwhTUcS4C3WJHy4kR317LlFZ282LaVV2u7UjgGb6qsynXIs4O0euiHgDSMI8JlrD8su6bUULmzlU07UXEof7J+tiua83S1C21pYkXUue0vjJCYVT9QXzy4PWq3U78= 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=ED9vMH5Y; 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="ED9vMH5Y" Received: by mail-pf1-f202.google.com with SMTP id d2e1a72fcca58-7b82c2c2ca2so8784629b3a.1 for ; Tue, 02 Dec 2025 09:51:44 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1764697904; x=1765302704; 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=MIeUnJ76mKBdAthG0dR8rS5beZM54LxeWcR6Dr60V84=; b=ED9vMH5YQ+mO61r436I57XXM53OrvePH6qY/X4CREaeRcq0QfXjKmpqLjKaS6mpsTT RP1C7BJb7UwN/+ESMdnZs53vGkI9caLHdrofy/2+Wwdq63vj6iTlQTKgWmi3r3vQLhdq CqKbApSjbLMHopDMSeO117UoccJmuOWOcyeEjSUuhlLc8nBGA+tkO/GTD7SdcUDheD44 pgreP5xaEdXTVcHsEyv/OHaORR1nBnt/jtnrwzvGTTqJpz2FNzdHFyY2ym1JMHMbLloj f50Ia9v/lxAe0J6EwB6ajwhIZwQkONjMbw/rsisnFhiDZEnphgKBOqWtue/wfndHTAqc l8NQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1764697904; x=1765302704; 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=MIeUnJ76mKBdAthG0dR8rS5beZM54LxeWcR6Dr60V84=; b=qZViLeraNDzT1BAwuqwLm0ENAU5/SmvBHFcUr6OOrh5TWROYKulJS6PvvFjhwDn33V CEQ7IyW049wgf/2Jx6IAokq3oT9Ee8su99x3jk3k+XjHoe+fy50DStiibP98XN+63If8 n7KEHJSWOBVu1pUbAMFc3dpwWb51IyCM/+3/PUmtR/Ie3DEqSW1I1I+OQHenQFKk24gx w5Z/qya7r7+ONftPmJssarG1M+888Z5BiLDXUStwPZejMA2/pQYRJu2t2xHH8rqI1ErK OfbGmOxoP6rbUTLzMyEWuh7ONTkAJ5sT/wdxL/kwMdUJNl0PAJHNJFIQC5P4WnqJStr3 OSag== X-Forwarded-Encrypted: i=1; AJvYcCVVOmZUda5tpIxNxav6TH3Q186Ve05VVN69JkYnYQISfiTLG3MlLMeVbYCJGHoilIJbNACwJPf5XgnSTZg=@vger.kernel.org X-Gm-Message-State: AOJu0YxcFg7QBpuE6xTIRcS/vNhMI7YlcLfZyo9zJ4OcdsenyQM9hC8C WUbOoAkNg+y/09uSrzLqB04bolYbXBsm4xTeVgo29DvSKbSTGPK45TRgv5iHSH0DArFAy1r2ciC ZzUsDJbB1dQ== X-Google-Smtp-Source: AGHT+IHvb1qeaxiTG81I4noZ/gle4HLUSIqMbbC+FqzFhdsIxKzhepumNWxOHgHA+a0wGz5hw9lu4ub+cam7 X-Received: from pfblg22.prod.google.com ([2002:a05:6a00:7096:b0:7dd:8bba:63a0]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a21:3291:b0:35f:aa1b:bbfb with SMTP id adf61e73a8af0-363f3a15315mr440587637.50.1764697904358; Tue, 02 Dec 2025 09:51:44 -0800 (PST) Date: Tue, 2 Dec 2025 09:50:04 -0800 In-Reply-To: <20251202175043.623597-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: <20251202175043.623597-1-irogers@google.com> X-Mailer: git-send-email 2.52.0.158.g65b55ccf14-goog Message-ID: <20251202175043.623597-10-irogers@google.com> Subject: [PATCH v9 09/48] perf jevents: Add threshold expressions to Metric From: Ian Rogers To: Adrian Hunter , Alexander Shishkin , Arnaldo Carvalho de Melo , Benjamin Gray , Caleb Biggers , Edward Baker , Ian Rogers , Ingo Molnar , James Clark , Jing Zhang , Jiri Olsa , John Garry , Leo Yan , Namhyung Kim , Perry Taylor , Peter Zijlstra , Samantha Alt , Sandipan Das , Thomas Falcon , Weilin Wang , Xu Yang , linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Allow threshold expressions for metrics to be generated. Signed-off-by: Ian Rogers Tested-by: Thomas Falcon --- tools/perf/pmu-events/metric.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/tools/perf/pmu-events/metric.py b/tools/perf/pmu-events/metric= .py index 0f4e67e5cfea..e81fed2e29b5 100644 --- a/tools/perf/pmu-events/metric.py +++ b/tools/perf/pmu-events/metric.py @@ -430,13 +430,15 @@ class Metric: expr: Expression scale_unit: str constraint: MetricConstraint + threshold: Optional[Expression] =20 def __init__(self, name: str, description: str, expr: Expression, scale_unit: str, - constraint: MetricConstraint =3D MetricConstraint.GROUPED_E= VENTS): + constraint: MetricConstraint =3D MetricConstraint.GROUPED_E= VENTS, + threshold: Optional[Expression] =3D None): self.name =3D name self.description =3D description self.expr =3D expr.Simplify() @@ -447,6 +449,7 @@ class Metric: else: self.scale_unit =3D f'1{scale_unit}' self.constraint =3D constraint + self.threshold =3D threshold self.groups =3D set() =20 def __lt__(self, other): @@ -473,6 +476,8 @@ class Metric: } if self.constraint !=3D MetricConstraint.GROUPED_EVENTS: result['MetricConstraint'] =3D self.constraint.name + if self.threshold: + result['MetricThreshold'] =3D self.threshold.ToPerfJson() =20 return result =20 --=20 2.52.0.158.g65b55ccf14-goog From nobody Wed Dec 10 20:09:24 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 D10612C21FA for ; Tue, 2 Dec 2025 17:51:50 +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=1764697912; cv=none; b=gZxVTnhBJuaDRxI8ADfbaM8mvsYb0JOQfso7cbLhfyyXon0AB9Kn82CGDgFMN10cVBw7ty6yBI0hOaNJiK/qWLB+Tzkb12xVlXLa+ozbks2EdT4X02U0if6jmjPuiGH5hufTAat1fadT5h9bkiDzIHjJV+ygvP0vZjY2ZUrg818= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764697912; c=relaxed/simple; bh=XLsJTgjagka2dsiamNyAZTU9RaBavEfkkTGJy4uPs7U=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=LbUTJ2NI/cNMuxYBN7vd0w2rM2pdbB501qNPSjmhSAzYfxq7yoHF3kOTzJbhwlGk/bjT94/mQD9Ask3sxGQhJwT1uj3y8HzBLZW5kCLH9SqiVqbS4U6otI/BbWfO7LjgHqQEh2n+PpsqzFg2T/o9t7mo9CGrFFqWRcUidI9Z7TE= 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=x4xkHrKV; 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="x4xkHrKV" Received: by mail-pf1-f202.google.com with SMTP id d2e1a72fcca58-7a9fb6fcc78so4164971b3a.3 for ; Tue, 02 Dec 2025 09:51:50 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1764697910; x=1765302710; 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=BEKPKSXJVqEyBo5v+XF1vkq0zQUQV06pYRMl8tmk8ts=; b=x4xkHrKVhIztLfD/7I9ESPYOa78Ot9D3Lcc8q7gxQD9TvCffZT8IAr13ZoiY8SvpvX jv5BWKVQDoBr77lKCOpvstiyYWb95HjWGIgo1TF5pwhhRYDppY2+DIXugDTiJfIcPdic KTf6yB8XLUkxJV/uxTqY52nfsQHZ+Kf3GCE3XrBtzohZsSS1mkX6iRfWi450mbQHjvvW jW4c3asvpG/YQlqFpkVWvhxq4CtbXPce0imCeEH4sVK2H7YSb90oLHty3jnV8PXueLQu ghfEUVvXAOkqjaAtOKhdAMza1sFNoR3fRJyb41xMIvB5RaePBh4v4sosEKi+/5djPNGp sHdA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1764697910; x=1765302710; 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=BEKPKSXJVqEyBo5v+XF1vkq0zQUQV06pYRMl8tmk8ts=; b=qAwRCH/0MOtpRllPiijxnBSmrnu/vPiXwZfDXn/vFC5j6iDtWotHf1JlpIJXhKRmHq cnqdrEdp6BIDBctLUHtuA0po4BsT5qvvBYwz+13d5NB5TNsfV5iAL1yDZ6WdbNaxorz1 j3VtSiYrdLiKf29+LK3bpYOzc/PbUp2cfuRVTh7KLfl+exTDsz+8yp5ht9FS8+kPV2t2 BSYmaGTzrYI4NkTxXSKCoZW4fW9PpoBw4O64p38wKb6P1e+9h4nXfHmaKSJ+xjSF2Nfq xWCFPa6EaGWN8csHNJgXoNQvkUla2xxJf93MvSsrwW8nVkdKZnzQvcFvPfKwcO4lmQpS vDaQ== X-Forwarded-Encrypted: i=1; AJvYcCXlKt7GQK5E7z8HJP/kVAoFHVvcYOrC/T82oaxiliArVIfMd+vpoROSclmmee8ABA51PIwXKbThLp58ZYE=@vger.kernel.org X-Gm-Message-State: AOJu0Yyihg9OfvX7ay+TY7VrSok2g3KcDNjywZWp7fTMjcqksJt4bPL6 SDEeJ0S6qJAG1aWkCbn0NilSqqAdVEQZDkHMC1Y7jKc2acKgZDR7oBGBc08RhzUAMEbhqdUXPLV dv4rEg3n8+g== X-Google-Smtp-Source: AGHT+IHLhgeIjP3E8w1A3UKCxPJWw8wcYDNmWLJmWTgrvrXbVIWvAt263kx6nbrqRlfiJN7YfVnDcqL9+if3 X-Received: from pfbmy26-n2.prod.google.com ([2002:a05:6a00:6d5a:20b0:7ba:3994:c73f]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a20:728e:b0:35f:6e12:1851 with SMTP id adf61e73a8af0-3637dafd94emr31725961637.16.1764697909980; Tue, 02 Dec 2025 09:51:49 -0800 (PST) Date: Tue, 2 Dec 2025 09:50:05 -0800 In-Reply-To: <20251202175043.623597-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: <20251202175043.623597-1-irogers@google.com> X-Mailer: git-send-email 2.52.0.158.g65b55ccf14-goog Message-ID: <20251202175043.623597-11-irogers@google.com> Subject: [PATCH v9 10/48] perf jevents: Move json encoding to its own functions From: Ian Rogers To: Adrian Hunter , Alexander Shishkin , Arnaldo Carvalho de Melo , Benjamin Gray , Caleb Biggers , Edward Baker , Ian Rogers , Ingo Molnar , James Clark , Jing Zhang , Jiri Olsa , John Garry , Leo Yan , Namhyung Kim , Perry Taylor , Peter Zijlstra , Samantha Alt , Sandipan Das , Thomas Falcon , Weilin Wang , Xu Yang , linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Have dedicated encode functions rather than having them embedded in MetricGroup. This is to provide some uniformity in the Metric ToXXX routines. Signed-off-by: Ian Rogers Tested-by: Thomas Falcon --- tools/perf/pmu-events/metric.py | 34 +++++++++++++++++++++------------ 1 file changed, 22 insertions(+), 12 deletions(-) diff --git a/tools/perf/pmu-events/metric.py b/tools/perf/pmu-events/metric= .py index e81fed2e29b5..b39189182608 100644 --- a/tools/perf/pmu-events/metric.py +++ b/tools/perf/pmu-events/metric.py @@ -484,15 +484,6 @@ class Metric: def ToMetricGroupDescriptions(self, root: bool =3D True) -> Dict[str, st= r]: return {} =20 -class _MetricJsonEncoder(json.JSONEncoder): - """Special handling for Metric objects.""" - - def default(self, o): - if isinstance(o, Metric): - return o.ToPerfJson() - return json.JSONEncoder.default(self, o) - - class MetricGroup: """A group of metrics. =20 @@ -523,8 +514,11 @@ class MetricGroup: =20 return result =20 - def ToPerfJson(self) -> str: - return json.dumps(sorted(self.Flatten()), indent=3D2, cls=3D_MetricJso= nEncoder) + def ToPerfJson(self) -> List[Dict[str, str]]: + result =3D [] + for x in sorted(self.Flatten()): + result.append(x.ToPerfJson()) + return result =20 def ToMetricGroupDescriptions(self, root: bool =3D True) -> Dict[str, st= r]: result =3D {self.name: self.description} if self.description else {} @@ -533,7 +527,23 @@ class MetricGroup: return result =20 def __str__(self) -> str: - return self.ToPerfJson() + return str(self.ToPerfJson()) + + +def JsonEncodeMetric(x: MetricGroup): + class MetricJsonEncoder(json.JSONEncoder): + """Special handling for Metric objects.""" + + def default(self, o): + if isinstance(o, Metric) or isinstance(o, MetricGroup): + return o.ToPerfJson() + return json.JSONEncoder.default(self, o) + + return json.dumps(x, indent=3D2, cls=3DMetricJsonEncoder) + + +def JsonEncodeMetricGroupDescriptions(x: MetricGroup): + return json.dumps(x.ToMetricGroupDescriptions(), indent=3D2) =20 =20 class _RewriteIfExpToSelect(ast.NodeTransformer): --=20 2.52.0.158.g65b55ccf14-goog From nobody Wed Dec 10 20:09:24 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 7DCC92C21FA for ; Tue, 2 Dec 2025 17:51:56 +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=1764697917; cv=none; b=e95KjKKuqBxroNXx3jCLeSL3BdnSBpakPblkit/XmXDKmjaak8PMYCoeU8cXYmTaf6HkPiAag9mUJJGBXsv6M/XaCsoApxYzNCf7DdSM4tCHpoAL4cY0UGG+rKnYYv7MUdA+LFj/lUMittAjQ3MrjoorELKor2lfKY0YV8llCc0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764697917; c=relaxed/simple; bh=9rsT8ncoWqyJyQ7nwr+E7hBrtYBywRQ32oouuk6dvU8=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=TWijLkMwIZLyhqgtZIAmR/GTwqFQz3g7GkybEMySnYz39h1elpm/H1dxKAbrlR00Uf/FIUaME2AvxfUOtvri+1+0KzLE8rxm1wO9kbDQCkJIAEztqgU6+stzDvgFtBvmdaCm0h5gvrtimc8JHqXcn4K6LClb5qrhCUzigSOCtds= 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=Wy+qeRmU; 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="Wy+qeRmU" Received: by mail-pg1-f202.google.com with SMTP id 41be03b00d2f7-b471737e673so6466827a12.1 for ; Tue, 02 Dec 2025 09:51:56 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1764697916; x=1765302716; 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=chffPpIGVoN2jtkWf66gf8jxJ2q6txF/MGepK7+1bz4=; b=Wy+qeRmUNdVLHWMVRKP89QMjbL26ASN4KUpdpGP9fu3J+yAnS3EtTOuNpxYcuq/9kR aXDu0+7eve27yy1tPqrFSbCidcjL6kIzl1jVCSx9INMEztmkpEXKRphsHjeowqjKV1bo M2N0HHX0WLWhXpErnmTpB8Jj8i9mwbjafTZNcsLhikBpcvtsNS22jHgVNPpYT5QimSHj nd0dqXydJ99BzJNc+BENxFCYw6oI6jzRQDeL7kKSUvOlTbcHt6bxUAKqE+fWhfyX+tpD ZUPMCebzeD2ALk+5LunJ3w75cM6p5dVXgyMnlb2N+BxtPMIDWI2ZKhOWdpSEu+XCDHkL fYkQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1764697916; x=1765302716; 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=chffPpIGVoN2jtkWf66gf8jxJ2q6txF/MGepK7+1bz4=; b=qdldBai3kpdiWPpp8bSIiorzdJus9PeTDD5sMC2iSQeuYrREWMbVFfkpUT0g1R358B A5tCgpbJ2y/g6RThV5tq7xix6EhuMkbxFZy2rEAafYoKpmqeM/4A6iBddc7Rm4ldzYI8 t7G8OgnOWNfA5LY0CtflvSeFKORmzmBTw6vZeaw4eIXuj3b3O2vm5rJPIB9Xd6Atx1k1 fxaa+6Xz14ULbbaVYwX3lIUNHQQckr3gKXdepnepNCE+rv4oz0Bv3Oi/zFMacTao+HKz 8DrQP1HVsKTs4d20QK6oQtsh2s9+2dfp9USvB0Mcjv8O3tT5jsXxRczvmcEFA2Uw1tSw qJug== X-Forwarded-Encrypted: i=1; AJvYcCW7xNHTLD3dcd/FnegMmxOYcWahEeifV11H+hBGOamBBvAeB/5FuCzPS3++3dTdjEPMbrC0KMcdtq19zDo=@vger.kernel.org X-Gm-Message-State: AOJu0YzyZ6SnIYqxjixALl+7kxd82RuvFr/KFqtDkTTdZDcYjmWJFZQv 3UyMiKNeyhLm/D5swgGnVfs+yemBvMlTEdEFw8mVA1R+LpEmTZzuwuzH2h6aJYroboBsy0HoiUu R8MHrosFUww== X-Google-Smtp-Source: AGHT+IGZbE0tHHNZ5KQzidjw1HssP4aJnIt2qxPmCEqD/zPS9eZSJWVQh8N5FRoj7mRUatF92kp8yZGviBzn X-Received: from dlbdm15.prod.google.com ([2002:a05:7022:6b8f:b0:119:49ca:6ba8]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a05:7022:b96:b0:119:e569:f611 with SMTP id a92af1059eb24-11defc9e5fdmr183254c88.10.1764697915672; Tue, 02 Dec 2025 09:51:55 -0800 (PST) Date: Tue, 2 Dec 2025 09:50:06 -0800 In-Reply-To: <20251202175043.623597-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: <20251202175043.623597-1-irogers@google.com> X-Mailer: git-send-email 2.52.0.158.g65b55ccf14-goog Message-ID: <20251202175043.623597-12-irogers@google.com> Subject: [PATCH v9 11/48] perf jevents: Drop duplicate pending metrics From: Ian Rogers To: Adrian Hunter , Alexander Shishkin , Arnaldo Carvalho de Melo , Benjamin Gray , Caleb Biggers , Edward Baker , Ian Rogers , Ingo Molnar , James Clark , Jing Zhang , Jiri Olsa , John Garry , Leo Yan , Namhyung Kim , Perry Taylor , Peter Zijlstra , Samantha Alt , Sandipan Das , Thomas Falcon , Weilin Wang , Xu Yang , linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Drop adding a pending metric if there is an existing one. Ensure the PMUs differ for hybrid systems. Signed-off-by: Ian Rogers Tested-by: Thomas Falcon --- tools/perf/pmu-events/jevents.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tools/perf/pmu-events/jevents.py b/tools/perf/pmu-events/jeven= ts.py index 03f5ad262eb5..3a1bcdcdc685 100755 --- a/tools/perf/pmu-events/jevents.py +++ b/tools/perf/pmu-events/jevents.py @@ -501,7 +501,8 @@ def add_events_table_entries(item: os.DirEntry, topic: = str) -> None: for e in read_json_events(item.path, topic): if e.name: _pending_events.append(e) - if e.metric_name: + if e.metric_name and not any(e.metric_name =3D=3D x.metric_name and + e.pmu =3D=3D x.pmu for x in _pending_metr= ics): _pending_metrics.append(e) =20 =20 --=20 2.52.0.158.g65b55ccf14-goog From nobody Wed Dec 10 20:09:24 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 5217E2D0636 for ; Tue, 2 Dec 2025 17:52:02 +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=1764697923; cv=none; b=Gb3VoVSDJm/3pS6v/Lde+9pi30dZHK/bstZJFqklL34hL04bUjvkqT+WvnD9Mwptr5up/p4HpUL2sTgPlWzeQV8AorsWoEq1AyWGiVqfzahMfwKH9NSot8/5G3+eDkt2+Cm7PxD7Y5VAO/lb4Jt/iGWIvsunuw6xSY4JJ5jo1RI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764697923; c=relaxed/simple; bh=IcQE33lXjfPpknRvMrGb82o9KD6o/Bm0xpa0LZXKGxg=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=YUrswy5iz283adaIT1Lu3gCv7ZngvyFE1qwu7VfFkDthgaYMY+MwJOKdE9cTOHdrtOjat21fAwGYg3Vn7SmIhfBSoZL7t3jMOHrpCKwu+bseDYBPfZuVRqYBuXPNOlhX8h56VWx0OStk3roshJqmY1O6Y28QbeD6AVnenm21cQQ= 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=mnKOJjWT; 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="mnKOJjWT" Received: by mail-pf1-f202.google.com with SMTP id d2e1a72fcca58-7b8ed43cd00so5731147b3a.2 for ; Tue, 02 Dec 2025 09:52:02 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1764697921; x=1765302721; 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=+ANYUwQ4vRnr8Tfeed0nEXZFt9sI8XctpT0STC6xRp8=; b=mnKOJjWTRWLcZrwlBfW7ofKEoNgeRjJJNq5vu3z1YZZTIguD0Qw64lVzbCzDXUUx7E aMDkSuXR0E2ABJ3egmvKsKOzNlkDe6MsZeofpUdlpyUlgKWfM63HjUmb0IsEe/qg2nDz oIDv8zzfR+6UofFGz7xOZatgKhXpg/IXwgFTkv3xZ8GTjLCTs+NQy5Mtisqybe/yZU/P riiv7WcIQJPsdNLrApSyIPoFv4aqnU9Kvc8ToltJfvW5wYBlI2onsLQhKdPZfcwql9DD Dwnf8o3Ajua9h2X7NAfkE2MQIU3Toe4muuKtLO34Nx+QMFjlibnWSfBvaBFPXnaoTYN+ KTiA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1764697921; x=1765302721; 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=+ANYUwQ4vRnr8Tfeed0nEXZFt9sI8XctpT0STC6xRp8=; b=era3hu742b0i/vLgyGjMiPyiCg+8QsqHfnFz//pwyhrIpzZtRdYvP3JtlXihUiuVUK hanmrGXp7RHkGrddv3/VygE/b3mH2OmWAXdqkmtoqQNiJu0PSiDf3na6C2Xy/7iN2e4C /YFdxG/4IIBYrnGpeDbNi/eI1T+MSRkv9BB6cqYk58fpRhL+EjLcYOPcEJs83dPjCG0j MwXEVo4bAEfj8mvny15gdjViF2sCEOXnb8LWOqtCUO9swth+sCHL//Wlx0wpqZgUg6Kz 0p5EliM3LEp0IhB2V2SamR4yndzKksjTJlsRDK5gApvF6vb1WMWB3V6NPA6V0NLhdYBO HhVw== X-Forwarded-Encrypted: i=1; AJvYcCU6DCfI9ymcIburZIozYTygpUpTVklh95hHIAC9oEg6/Qb4gtD8190N4wKAbd4x2B15XfLcv6ErGdqVBFk=@vger.kernel.org X-Gm-Message-State: AOJu0YxSwXb/qGCuL1wwwQhzUGKCFqjsI+VGW+sr4lQAP7whaL31gUP5 aLgZ17rMVXdIO+ocnDfkxQP33QOuVTQ1ySx391+KbXe6DUe6gwVvrnH3JOZ2C/wf3FgHExgmgNA 9dJOJY+QjIw== X-Google-Smtp-Source: AGHT+IF+DOJx23D3lIKPsLM9PwfUaC1iydcEBsjdhnTa5mfDQHg7tgKGyPQBcl3Uj78bLyMSGQEXYzT5e5tS X-Received: from pfmm22.prod.google.com ([2002:a05:6a00:2496:b0:7dd:8bba:63a7]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a20:939f:b0:35e:9b66:9376 with SMTP id adf61e73a8af0-363f3a37c24mr419509637.60.1764697921400; Tue, 02 Dec 2025 09:52:01 -0800 (PST) Date: Tue, 2 Dec 2025 09:50:07 -0800 In-Reply-To: <20251202175043.623597-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: <20251202175043.623597-1-irogers@google.com> X-Mailer: git-send-email 2.52.0.158.g65b55ccf14-goog Message-ID: <20251202175043.623597-13-irogers@google.com> Subject: [PATCH v9 12/48] perf jevents: Skip optional metrics in metric group list From: Ian Rogers To: Adrian Hunter , Alexander Shishkin , Arnaldo Carvalho de Melo , Benjamin Gray , Caleb Biggers , Edward Baker , Ian Rogers , Ingo Molnar , James Clark , Jing Zhang , Jiri Olsa , John Garry , Leo Yan , Namhyung Kim , Perry Taylor , Peter Zijlstra , Samantha Alt , Sandipan Das , Thomas Falcon , Weilin Wang , Xu Yang , linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" For metric groups, skip metrics in the list that are None. This allows functions to better optionally return metrics. Signed-off-by: Ian Rogers Tested-by: Thomas Falcon --- tools/perf/pmu-events/metric.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/tools/perf/pmu-events/metric.py b/tools/perf/pmu-events/metric= .py index b39189182608..dd8fd06940e6 100644 --- a/tools/perf/pmu-events/metric.py +++ b/tools/perf/pmu-events/metric.py @@ -493,13 +493,15 @@ class MetricGroup: """ =20 def __init__(self, name: str, - metric_list: List[Union[Metric, 'MetricGroup']], + metric_list: List[Union[Optional[Metric], Optional['MetricG= roup']]], description: Optional[str] =3D None): self.name =3D name - self.metric_list =3D metric_list + self.metric_list =3D [] self.description =3D description for metric in metric_list: - metric.AddToMetricGroup(self) + if metric: + self.metric_list.append(metric) + metric.AddToMetricGroup(self) =20 def AddToMetricGroup(self, group): """Callback used when a MetricGroup is added into another.""" --=20 2.52.0.158.g65b55ccf14-goog From nobody Wed Dec 10 20:09:24 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 120A52D24A9 for ; Tue, 2 Dec 2025 17:52:07 +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=1764697931; cv=none; b=kFcPq4EeWutF5JJ26ModtbhFQz3XvpWIdvp8D+QTv3kK5j7zJmcMcIx6qw9oCRzIUfncUGhMhEWUT6nwFJ6dfLbdHFVUGiS/MAPhkdD0nTfHqAp2zs3sum+jD3JTmFbafE4p7esn9NNRIDZtUMZmiBXcs2K3XzjJ4Cev87BAw1k= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764697931; c=relaxed/simple; bh=XU8iZIUdDXmn4q6EkwaImSAjzbGtzQ3lNBSz+E0Q7Uc=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=nz0j0BOw2pmYtnzXkSpnSKm3v0j2bK/F4dcv5pQxRYN6nBlfZoK4zWY3AiwpJm0SUr7rBDdyGGzde989JEiguWYvm+nv0h9YCC96vEfN8utQm2MtfpLvfRAH41RTNnSZDaLYgCBYDLJ2ERxyFa3pO+9yD1js7dDodwghcAx+onc= 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=hQk64bC0; 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="hQk64bC0" Received: by mail-pg1-f202.google.com with SMTP id 41be03b00d2f7-b630753cc38so7468141a12.1 for ; Tue, 02 Dec 2025 09:52:07 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1764697927; x=1765302727; 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=FhsC3vL0JqFkwlmy2nMeLakiM9yqOXbDExRyj5c1I9U=; b=hQk64bC0t88fdCtnSAmvIX3V3xVnGcVZzlgLPuYgC2FGZdp7yh8FLgrR/dfD3vox9k 7JTtic/LpdNUSwvl5yw4YdUIikzJLwX1Zx76FMp11RXWjn/0FmdwWOjL11q0FlUthrUO Ea6v866HSDjsuRlYAvuVmYP+sq0SVSJ7oWT6pwveMOtbTrh7r2N1lt6UAdV4LfrJ2k4b AJfiiPtaOU2j0xeLwmDY/at3EwJ/OAvC3lN641yC2E/mRto2uZXbnRc0nq2KNhVvUU23 4w1eunwiQRYAGQqAZaRUGR9zidoTehF/NZavopN5tCOWaqg7QW267VjpJU9x/pZt+n4d PxVg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1764697927; x=1765302727; 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=FhsC3vL0JqFkwlmy2nMeLakiM9yqOXbDExRyj5c1I9U=; b=fY+SD2ECZ/VI8R6RTW3SS6YYn7+dSJrzE0XGtWH/6uUEifIZOEWOd612r6L6XT4f6v O9igzUG2mV1Oz5uY8ooLi1EaxQnowp0XDHOoAG7yrSV1wD5nuZGQ9OwOXqftsBgYjB3L YbZJ4CO8y/sH+yBhqMOKxFF7G7UXuroyiuRYRxpTphEYWaYVxoqbNsJvzAv9ToWxkTJR McYO6Drc/txEROx7Am9w6q1At5i9x2idB2rVk8VgGbQhmwdGB5kjHSPvXbbwU1aW/kXh OSS0TUBvRrGh38YfrJ+OlHwuQpKXdl6RnkI+NIkHSFjEiCGr2SOqIA06d9sA3MuWEce9 U5nw== X-Forwarded-Encrypted: i=1; AJvYcCX/Ya7RPTYSXjzNuK3WMTtAugy+G+lei1SYyAM4pkVa++H/lj74lnHWVUstop4pdlTcgNcVRFMXwq6ardU=@vger.kernel.org X-Gm-Message-State: AOJu0YzYjkJ0fhHDGJpx9oDAh7VRMq5q2hHlWOYprWTYnixZ2Aan8Ugh nE9DjrGZwd1yTWf1RW5FZI+eKTerA6F4PPRpdXqXkC12VFlDRfR0aEOaD9BhfPV4/3GZ2pwzQDr b/meqajZoLg== X-Google-Smtp-Source: AGHT+IE8NmXotDcmMxvYw2dyBgppaugCsReXo8qIOaXgMS+dzBeqLW2CPo7XqP7k3bmZRrekhMaQzqod07tl X-Received: from dybrq3.prod.google.com ([2002:a05:7301:4683:b0:2a4:6b08:61f1]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a05:7301:454b:b0:2a4:3594:72d5 with SMTP id 5a478bee46e88-2a719097d14mr23351783eec.4.1764697927208; Tue, 02 Dec 2025 09:52:07 -0800 (PST) Date: Tue, 2 Dec 2025 09:50:08 -0800 In-Reply-To: <20251202175043.623597-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: <20251202175043.623597-1-irogers@google.com> X-Mailer: git-send-email 2.52.0.158.g65b55ccf14-goog Message-ID: <20251202175043.623597-14-irogers@google.com> Subject: [PATCH v9 13/48] perf jevents: Build support for generating metrics from python From: Ian Rogers To: Adrian Hunter , Alexander Shishkin , Arnaldo Carvalho de Melo , Benjamin Gray , Caleb Biggers , Edward Baker , Ian Rogers , Ingo Molnar , James Clark , Jing Zhang , Jiri Olsa , John Garry , Leo Yan , Namhyung Kim , Perry Taylor , Peter Zijlstra , Samantha Alt , Sandipan Das , Thomas Falcon , Weilin Wang , Xu Yang , linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Generate extra-metrics.json and extra-metricgroups.json from python architecture specific scripts. The metrics themselves will be added in later patches. If a build takes place in tools/perf/ then extra-metrics.json and extra-metricgroups.json are generated in that directory and so added to .gitignore. If there is an OUTPUT directory then the tools/perf/pmu-events/arch files are copied to it so the generated extra-metrics.json and extra-metricgroups.json can be added/generated there. Signed-off-by: Ian Rogers Tested-by: Thomas Falcon --- tools/perf/.gitignore | 5 +++ tools/perf/Makefile.perf | 2 + tools/perf/pmu-events/Build | 51 +++++++++++++++++++++++++- tools/perf/pmu-events/amd_metrics.py | 42 +++++++++++++++++++++ tools/perf/pmu-events/arm64_metrics.py | 43 ++++++++++++++++++++++ tools/perf/pmu-events/intel_metrics.py | 42 +++++++++++++++++++++ 6 files changed, 184 insertions(+), 1 deletion(-) create mode 100755 tools/perf/pmu-events/amd_metrics.py create mode 100755 tools/perf/pmu-events/arm64_metrics.py create mode 100755 tools/perf/pmu-events/intel_metrics.py diff --git a/tools/perf/.gitignore b/tools/perf/.gitignore index b64302a76144..133e343bf44e 100644 --- a/tools/perf/.gitignore +++ b/tools/perf/.gitignore @@ -42,6 +42,11 @@ pmu-events/metric_test.log pmu-events/empty-pmu-events.log pmu-events/test-empty-pmu-events.c *.shellcheck_log +pmu-events/arch/**/extra-metrics.json +pmu-events/arch/**/extra-metricgroups.json +tests/shell/*.shellcheck_log +tests/shell/coresight/*.shellcheck_log +tests/shell/lib/*.shellcheck_log feature/ libapi/ libbpf/ diff --git a/tools/perf/Makefile.perf b/tools/perf/Makefile.perf index 80decc7ce13c..a6040e09cead 100644 --- a/tools/perf/Makefile.perf +++ b/tools/perf/Makefile.perf @@ -1277,6 +1277,8 @@ ifeq ($(OUTPUT),) pmu-events/metric_test.log \ pmu-events/test-empty-pmu-events.c \ pmu-events/empty-pmu-events.log + $(Q)find pmu-events/arch -name 'extra-metrics.json' -delete -o \ + -name 'extra-metricgroups.json' -delete else # When an OUTPUT directory is present, clean up the copied pmu-events= /arch directory. $(call QUIET_CLEAN, pmu-events) $(RM) -r $(OUTPUT)pmu-events/arch \ $(OUTPUT)pmu-events/pmu-events.c \ diff --git a/tools/perf/pmu-events/Build b/tools/perf/pmu-events/Build index a46ab7b612df..c9df78ee003c 100644 --- a/tools/perf/pmu-events/Build +++ b/tools/perf/pmu-events/Build @@ -29,6 +29,10 @@ $(PMU_EVENTS_C): $(EMPTY_PMU_EVENTS_C) $(call rule_mkdir) $(Q)$(call echo-cmd,gen)cp $< $@ else +# Functions to extract the model from a extra-metrics.json or extra-metric= groups.json path. +model_name =3D $(shell echo $(1)|sed -e 's@.\+/\(.*\)/extra-metric.*\.json= @\1@') +vendor_name =3D $(shell echo $(1)|sed -e 's@.\+/\(.*\)/[^/]*/extra-metric.= *\.json@\1@') + # Copy checked-in json to OUTPUT for generation if it's an out of source b= uild ifneq ($(OUTPUT),) $(OUTPUT)pmu-events/arch/%: pmu-events/arch/% @@ -40,7 +44,52 @@ $(LEGACY_CACHE_JSON): $(LEGACY_CACHE_PY) $(call rule_mkdir) $(Q)$(call echo-cmd,gen)$(PYTHON) $(LEGACY_CACHE_PY) > $@ =20 -GEN_JSON =3D $(patsubst %,$(OUTPUT)%,$(JSON)) $(LEGACY_CACHE_JSON) +GEN_METRIC_DEPS :=3D pmu-events/metric.py + +# Generate AMD Json +ZENS =3D $(shell ls -d pmu-events/arch/x86/amdzen*) +ZEN_METRICS =3D $(foreach x,$(ZENS),$(OUTPUT)$(x)/extra-metrics.json) +ZEN_METRICGROUPS =3D $(foreach x,$(ZENS),$(OUTPUT)$(x)/extra-metricgroups.= json) + +$(ZEN_METRICS): pmu-events/amd_metrics.py $(GEN_METRIC_DEPS) + $(call rule_mkdir) + $(Q)$(call echo-cmd,gen)$(PYTHON) $< $(call model_name,$@) arch > $@ + +$(ZEN_METRICGROUPS): pmu-events/amd_metrics.py $(GEN_METRIC_DEPS) + $(call rule_mkdir) + $(Q)$(call echo-cmd,gen)$(PYTHON) $< -metricgroups $(call model_name,$@) = arch > $@ + +# Generate ARM Json +ARMS =3D $(shell ls -d pmu-events/arch/arm64/arm/*) +ARM_METRICS =3D $(foreach x,$(ARMS),$(OUTPUT)$(x)/extra-metrics.json) +ARM_METRICGROUPS =3D $(foreach x,$(ARMS),$(OUTPUT)$(x)/extra-metricgroups.= json) + +$(ARM_METRICS): pmu-events/arm64_metrics.py $(GEN_METRIC_DEPS) + $(call rule_mkdir) + $(Q)$(call echo-cmd,gen)$(PYTHON) $< $(call vendor_name,$@) $(call model_= name,$@) arch > $@ + +$(ARM_METRICGROUPS): pmu-events/arm64_metrics.py $(GEN_METRIC_DEPS) + $(call rule_mkdir) + $(Q)$(call echo-cmd,gen)$(PYTHON) $< -metricgroups $(call vendor_name,$@)= $(call model_name,$@) arch > $@ + +# Generate Intel Json +INTELS =3D $(shell ls -d pmu-events/arch/x86/*|grep -v amdzen|grep -v mapf= ile.csv) +INTEL_METRICS =3D $(foreach x,$(INTELS),$(OUTPUT)$(x)/extra-metrics.json) +INTEL_METRICGROUPS =3D $(foreach x,$(INTELS),$(OUTPUT)$(x)/extra-metricgro= ups.json) + +$(INTEL_METRICS): pmu-events/intel_metrics.py $(GEN_METRIC_DEPS) + $(call rule_mkdir) + $(Q)$(call echo-cmd,gen)$(PYTHON) $< $(call model_name,$@) arch > $@ + +$(INTEL_METRICGROUPS): pmu-events/intel_metrics.py $(GEN_METRIC_DEPS) + $(call rule_mkdir) + $(Q)$(call echo-cmd,gen)$(PYTHON) $< -metricgroups $(call model_name,$@) = arch > $@ + +GEN_JSON =3D $(patsubst %,$(OUTPUT)%,$(JSON)) \ + $(LEGACY_CACHE_JSON) \ + $(ZEN_METRICS) $(ZEN_METRICGROUPS) \ + $(ARM_METRICS) $(ARM_METRICGROUPS) \ + $(INTEL_METRICS) $(INTEL_METRICGROUPS) =20 $(METRIC_TEST_LOG): $(METRIC_TEST_PY) $(METRIC_PY) $(call rule_mkdir) diff --git a/tools/perf/pmu-events/amd_metrics.py b/tools/perf/pmu-events/a= md_metrics.py new file mode 100755 index 000000000000..5f44687d8d20 --- /dev/null +++ b/tools/perf/pmu-events/amd_metrics.py @@ -0,0 +1,42 @@ +#!/usr/bin/env python3 +# SPDX-License-Identifier: (LGPL-2.1 OR BSD-2-Clause) +import argparse +import os +from metric import ( + JsonEncodeMetric, JsonEncodeMetricGroupDescriptions, MetricGroup) + +# Global command line arguments. +_args =3D None + + +def main() -> None: + global _args + + def dir_path(path: str) -> str: + """Validate path is a directory for argparse.""" + if os.path.isdir(path): + return path + raise argparse.ArgumentTypeError( + f'\'{path}\' is not a valid directory') + + parser =3D argparse.ArgumentParser(description=3D"AMD perf json genera= tor") + parser.add_argument( + "-metricgroups", help=3D"Generate metricgroups data", action=3D'st= ore_true') + parser.add_argument("model", help=3D"e.g. amdzen[123]") + parser.add_argument( + 'events_path', + type=3Ddir_path, + help=3D'Root of tree containing architecture directories containin= g json files' + ) + _args =3D parser.parse_args() + + all_metrics =3D MetricGroup("", []) + + if _args.metricgroups: + print(JsonEncodeMetricGroupDescriptions(all_metrics)) + else: + print(JsonEncodeMetric(all_metrics)) + + +if __name__ =3D=3D '__main__': + main() diff --git a/tools/perf/pmu-events/arm64_metrics.py b/tools/perf/pmu-events= /arm64_metrics.py new file mode 100755 index 000000000000..204b3b08c680 --- /dev/null +++ b/tools/perf/pmu-events/arm64_metrics.py @@ -0,0 +1,43 @@ +#!/usr/bin/env python3 +# SPDX-License-Identifier: (LGPL-2.1 OR BSD-2-Clause) +import argparse +import os +from metric import ( + JsonEncodeMetric, JsonEncodeMetricGroupDescriptions, MetricGroup) + +# Global command line arguments. +_args =3D None + + +def main() -> None: + global _args + + def dir_path(path: str) -> str: + """Validate path is a directory for argparse.""" + if os.path.isdir(path): + return path + raise argparse.ArgumentTypeError( + f'\'{path}\' is not a valid directory') + + parser =3D argparse.ArgumentParser(description=3D"ARM perf json genera= tor") + parser.add_argument( + "-metricgroups", help=3D"Generate metricgroups data", action=3D'st= ore_true') + parser.add_argument("vendor", help=3D"e.g. arm") + parser.add_argument("model", help=3D"e.g. neoverse-n1") + parser.add_argument( + 'events_path', + type=3Ddir_path, + help=3D'Root of tree containing architecture directories containin= g json files' + ) + _args =3D parser.parse_args() + + all_metrics =3D MetricGroup("", []) + + if _args.metricgroups: + print(JsonEncodeMetricGroupDescriptions(all_metrics)) + else: + print(JsonEncodeMetric(all_metrics)) + + +if __name__ =3D=3D '__main__': + main() diff --git a/tools/perf/pmu-events/intel_metrics.py b/tools/perf/pmu-events= /intel_metrics.py new file mode 100755 index 000000000000..65ada006d05a --- /dev/null +++ b/tools/perf/pmu-events/intel_metrics.py @@ -0,0 +1,42 @@ +#!/usr/bin/env python3 +# SPDX-License-Identifier: (LGPL-2.1 OR BSD-2-Clause) +import argparse +import os +from metric import ( + JsonEncodeMetric, JsonEncodeMetricGroupDescriptions, MetricGroup) + +# Global command line arguments. +_args =3D None + + +def main() -> None: + global _args + + def dir_path(path: str) -> str: + """Validate path is a directory for argparse.""" + if os.path.isdir(path): + return path + raise argparse.ArgumentTypeError( + f'\'{path}\' is not a valid directory') + + parser =3D argparse.ArgumentParser(description=3D"Intel perf json gene= rator") + parser.add_argument( + "-metricgroups", help=3D"Generate metricgroups data", action=3D'st= ore_true') + parser.add_argument("model", help=3D"e.g. skylakex") + parser.add_argument( + 'events_path', + type=3Ddir_path, + help=3D'Root of tree containing architecture directories containin= g json files' + ) + _args =3D parser.parse_args() + + all_metrics =3D MetricGroup("", []) + + if _args.metricgroups: + print(JsonEncodeMetricGroupDescriptions(all_metrics)) + else: + print(JsonEncodeMetric(all_metrics)) + + +if __name__ =3D=3D '__main__': + main() --=20 2.52.0.158.g65b55ccf14-goog From nobody Wed Dec 10 20:09:24 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 4045E2D640A for ; Tue, 2 Dec 2025 17:52:14 +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=1764697936; cv=none; b=Oo2W6kOn8m0ZyH77IyF3izcLnc8+fv1pPYfd7sMHiCM9YaHODgdqRRCJBqF2fS5yo4D1uDctS6BG8rDJqHvf1wWS+1/wwtOtuHsqNclYPxN724Bnl2Hww6cdqHq5+PCxrOO9gjKV7CX7Ey+qF8ZcQLi3iW0L8yar5Utw6dEmjOo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764697936; c=relaxed/simple; bh=ehrs+/F8JrGJwHb6e21kRYPXDhJ9lTQsrrw6hHtxPW0=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=JwYP6V9ZQeb6cjqL+7hS2HufkDiOFMtCV2oRb839/xP+2iH9sBFogR5Tpc+ITKB0cB0WbS2X54a31qB9BEJRpx7kUZYbP1kS0wB7kTOBBquNRijFhPNquxr/jmkanNc9Y+RE7HWpi5ta+Ku9EWwH0LJrS+GnzqG8gwxpLOtfPMU= 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=SB6AAMlB; 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="SB6AAMlB" Received: by mail-pg1-f201.google.com with SMTP id 41be03b00d2f7-b609c0f6522so8942551a12.3 for ; Tue, 02 Dec 2025 09:52:14 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1764697933; x=1765302733; 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=pz62a7ZgMEb4AWZjPxLI7D/0iC9MdIiBaBDumHgEdfQ=; b=SB6AAMlBpmdHWvbS6S2JMC+CWoUW2c2/spLsAWnEMlzYk6sm348M7S6MM30XGPukff Em+GwjbpVHTj2YSH4BiWSS3R8iLe+v42PYUJL433CtNXHtRq+U6wAD5GsYG+XXZBzp5w jWSS27PWGwx7H8KSr5jiFB8wjT2I0BphIACyTVcXrjpVgHHPVSGUZnVlMSy4wk5ODebt a6TVCdp0uToiYJYSjqu5nJk5cSUrtIKqX5z89rZCnuANbn9aWyY/BTLAJy8OfVHNl2S9 KsTdSncdMLzAHSdJ6G/RF804ddXRTR+NnVet7b265ajFx4wN2mTQ+F+eJX1Qq69WP6tl qGbQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1764697933; x=1765302733; 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=pz62a7ZgMEb4AWZjPxLI7D/0iC9MdIiBaBDumHgEdfQ=; b=Qz2h3QVLjMWgqb/HyHhQN/BY8Ow3Op+oni01ag4ZjhN3fZavuRI7EWT/kYgM8H7BR8 wggOc7hjc2VY71FVEJJuij4f1CqrEfXX1BZ+OZv7QAupGC6fXiZSqWRj74dTmTai2H45 l2/qoxsZW1U041kbXiejeVuRvBH4wBNTVSlNcFSu4TGvmyOgETs5+XovB+a526Rxzeev aA0t09PVlkPJhEQ3zABj1M3uTP0sAIClnEeVVGuafhHoJ31D/7uE0flpUB+IaXrnL+Jp 4Sc1MbNlpOq0qmEub++gXQ9zG68sfGljkVMCpqZXhIYTFHatW5BA3H9iX9MhP+nJ6UbS +Npg== X-Forwarded-Encrypted: i=1; AJvYcCXGnRcN3p08ApcBQYO0UkSUMnvnYJu/XdNB6B9dHSCtzZQEiMCjhEsZumicpw3pqkaB98YZLprQlQX18PE=@vger.kernel.org X-Gm-Message-State: AOJu0YxWzaWP7cqM5C0NQin+Kv7+29LWRmaJnfvGCtFety2qGN4zVRH6 z0GS0qeN04M8ZS7ZLHKPz549VnXjQ5ppk5x8wm3gv91AfYIz/p/ciQygIY2nQVQ0BG7MUQv1vsv WEpYEFHbdWw== X-Google-Smtp-Source: AGHT+IFxViD50p4Nqfgo0gNFspfuVjlIbdpCE09Jtj1ilzmBcEem02TWBqOcewhaB+fw7KBNXDn7LLupjMEI X-Received: from dyctx12.prod.google.com ([2002:a05:7301:5f8c:b0:2a4:7052:5652]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a05:7300:e78c:b0:2a4:65b5:9868 with SMTP id 5a478bee46e88-2ab8fb87b19mr198813eec.38.1764697933303; Tue, 02 Dec 2025 09:52:13 -0800 (PST) Date: Tue, 2 Dec 2025 09:50:09 -0800 In-Reply-To: <20251202175043.623597-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: <20251202175043.623597-1-irogers@google.com> X-Mailer: git-send-email 2.52.0.158.g65b55ccf14-goog Message-ID: <20251202175043.623597-15-irogers@google.com> Subject: [PATCH v9 14/48] perf jevents: Add load event json to verify and allow fallbacks From: Ian Rogers To: Adrian Hunter , Alexander Shishkin , Arnaldo Carvalho de Melo , Benjamin Gray , Caleb Biggers , Edward Baker , Ian Rogers , Ingo Molnar , James Clark , Jing Zhang , Jiri Olsa , John Garry , Leo Yan , Namhyung Kim , Perry Taylor , Peter Zijlstra , Samantha Alt , Sandipan Das , Thomas Falcon , Weilin Wang , Xu Yang , linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Add a LoadEvents function that loads all event json files in a directory. In the Event constructor ensure all events are defined in the event json except for legacy events like "cycles". If the initial event isn't found then legacy_event1 is used, and if that isn't found legacy_event2 is used. This allows a single Event to have multiple event names as models will often rename the same event over time. If the event doesn't exist an exception is raised. So that references to metrics can be added, add the MetricRef class. This doesn't validate as an event name and so provides an escape hatch for metrics to refer to each other. Signed-off-by: Ian Rogers Tested-by: Thomas Falcon --- tools/perf/pmu-events/Build | 12 ++-- tools/perf/pmu-events/amd_metrics.py | 7 ++- tools/perf/pmu-events/arm64_metrics.py | 7 ++- tools/perf/pmu-events/intel_metrics.py | 7 ++- tools/perf/pmu-events/metric.py | 83 +++++++++++++++++++++++++- 5 files changed, 101 insertions(+), 15 deletions(-) diff --git a/tools/perf/pmu-events/Build b/tools/perf/pmu-events/Build index c9df78ee003c..f7d67d03d055 100644 --- a/tools/perf/pmu-events/Build +++ b/tools/perf/pmu-events/Build @@ -53,11 +53,11 @@ ZEN_METRICGROUPS =3D $(foreach x,$(ZENS),$(OUTPUT)$(x)/= extra-metricgroups.json) =20 $(ZEN_METRICS): pmu-events/amd_metrics.py $(GEN_METRIC_DEPS) $(call rule_mkdir) - $(Q)$(call echo-cmd,gen)$(PYTHON) $< $(call model_name,$@) arch > $@ + $(Q)$(call echo-cmd,gen)$(PYTHON) $< $(call model_name,$@) pmu-events/arc= h > $@ =20 $(ZEN_METRICGROUPS): pmu-events/amd_metrics.py $(GEN_METRIC_DEPS) $(call rule_mkdir) - $(Q)$(call echo-cmd,gen)$(PYTHON) $< -metricgroups $(call model_name,$@) = arch > $@ + $(Q)$(call echo-cmd,gen)$(PYTHON) $< -metricgroups $(call model_name,$@) = pmu-events/arch > $@ =20 # Generate ARM Json ARMS =3D $(shell ls -d pmu-events/arch/arm64/arm/*) @@ -66,11 +66,11 @@ ARM_METRICGROUPS =3D $(foreach x,$(ARMS),$(OUTPUT)$(x)/= extra-metricgroups.json) =20 $(ARM_METRICS): pmu-events/arm64_metrics.py $(GEN_METRIC_DEPS) $(call rule_mkdir) - $(Q)$(call echo-cmd,gen)$(PYTHON) $< $(call vendor_name,$@) $(call model_= name,$@) arch > $@ + $(Q)$(call echo-cmd,gen)$(PYTHON) $< $(call vendor_name,$@) $(call model_= name,$@) pmu-events/arch > $@ =20 $(ARM_METRICGROUPS): pmu-events/arm64_metrics.py $(GEN_METRIC_DEPS) $(call rule_mkdir) - $(Q)$(call echo-cmd,gen)$(PYTHON) $< -metricgroups $(call vendor_name,$@)= $(call model_name,$@) arch > $@ + $(Q)$(call echo-cmd,gen)$(PYTHON) $< -metricgroups $(call vendor_name,$@)= $(call model_name,$@) pmu-events/arch > $@ =20 # Generate Intel Json INTELS =3D $(shell ls -d pmu-events/arch/x86/*|grep -v amdzen|grep -v mapf= ile.csv) @@ -79,11 +79,11 @@ INTEL_METRICGROUPS =3D $(foreach x,$(INTELS),$(OUTPUT)$= (x)/extra-metricgroups.json =20 $(INTEL_METRICS): pmu-events/intel_metrics.py $(GEN_METRIC_DEPS) $(call rule_mkdir) - $(Q)$(call echo-cmd,gen)$(PYTHON) $< $(call model_name,$@) arch > $@ + $(Q)$(call echo-cmd,gen)$(PYTHON) $< $(call model_name,$@) pmu-events/arc= h > $@ =20 $(INTEL_METRICGROUPS): pmu-events/intel_metrics.py $(GEN_METRIC_DEPS) $(call rule_mkdir) - $(Q)$(call echo-cmd,gen)$(PYTHON) $< -metricgroups $(call model_name,$@) = arch > $@ + $(Q)$(call echo-cmd,gen)$(PYTHON) $< -metricgroups $(call model_name,$@) = pmu-events/arch > $@ =20 GEN_JSON =3D $(patsubst %,$(OUTPUT)%,$(JSON)) \ $(LEGACY_CACHE_JSON) \ diff --git a/tools/perf/pmu-events/amd_metrics.py b/tools/perf/pmu-events/a= md_metrics.py index 5f44687d8d20..bc91d9c120fa 100755 --- a/tools/perf/pmu-events/amd_metrics.py +++ b/tools/perf/pmu-events/amd_metrics.py @@ -2,8 +2,8 @@ # SPDX-License-Identifier: (LGPL-2.1 OR BSD-2-Clause) import argparse import os -from metric import ( - JsonEncodeMetric, JsonEncodeMetricGroupDescriptions, MetricGroup) +from metric import (JsonEncodeMetric, JsonEncodeMetricGroupDescriptions, L= oadEvents, + MetricGroup) =20 # Global command line arguments. _args =3D None @@ -30,6 +30,9 @@ def main() -> None: ) _args =3D parser.parse_args() =20 + directory =3D f"{_args.events_path}/x86/{_args.model}/" + LoadEvents(directory) + all_metrics =3D MetricGroup("", []) =20 if _args.metricgroups: diff --git a/tools/perf/pmu-events/arm64_metrics.py b/tools/perf/pmu-events= /arm64_metrics.py index 204b3b08c680..ac717ca3513a 100755 --- a/tools/perf/pmu-events/arm64_metrics.py +++ b/tools/perf/pmu-events/arm64_metrics.py @@ -2,8 +2,8 @@ # SPDX-License-Identifier: (LGPL-2.1 OR BSD-2-Clause) import argparse import os -from metric import ( - JsonEncodeMetric, JsonEncodeMetricGroupDescriptions, MetricGroup) +from metric import (JsonEncodeMetric, JsonEncodeMetricGroupDescriptions, L= oadEvents, + MetricGroup) =20 # Global command line arguments. _args =3D None @@ -31,6 +31,9 @@ def main() -> None: ) _args =3D parser.parse_args() =20 + directory =3D f"{_args.events_path}/arm64/{_args.vendor}/{_args.model}= /" + LoadEvents(directory) + all_metrics =3D MetricGroup("", []) =20 if _args.metricgroups: diff --git a/tools/perf/pmu-events/intel_metrics.py b/tools/perf/pmu-events= /intel_metrics.py index 65ada006d05a..b287ef115193 100755 --- a/tools/perf/pmu-events/intel_metrics.py +++ b/tools/perf/pmu-events/intel_metrics.py @@ -2,8 +2,8 @@ # SPDX-License-Identifier: (LGPL-2.1 OR BSD-2-Clause) import argparse import os -from metric import ( - JsonEncodeMetric, JsonEncodeMetricGroupDescriptions, MetricGroup) +from metric import (JsonEncodeMetric, JsonEncodeMetricGroupDescriptions, L= oadEvents, + MetricGroup) =20 # Global command line arguments. _args =3D None @@ -30,6 +30,9 @@ def main() -> None: ) _args =3D parser.parse_args() =20 + directory =3D f"{_args.events_path}/x86/{_args.model}/" + LoadEvents(directory) + all_metrics =3D MetricGroup("", []) =20 if _args.metricgroups: diff --git a/tools/perf/pmu-events/metric.py b/tools/perf/pmu-events/metric= .py index dd8fd06940e6..e33e163b2815 100644 --- a/tools/perf/pmu-events/metric.py +++ b/tools/perf/pmu-events/metric.py @@ -3,10 +3,56 @@ import ast import decimal import json +import os import re from enum import Enum from typing import Dict, List, Optional, Set, Tuple, Union =20 +all_events =3D set() + +def LoadEvents(directory: str) -> None: + """Populate a global set of all known events for the purpose of validati= ng Event names""" + global all_events + all_events =3D { + "context\\-switches", + "cpu\\-cycles", + "cycles", + "duration_time", + "instructions", + "l2_itlb_misses", + } + for file in os.listdir(os.fsencode(directory)): + filename =3D os.fsdecode(file) + if filename.endswith(".json"): + try: + for x in json.load(open(f"{directory}/{filename}")): + if "EventName" in x: + all_events.add(x["EventName"]) + elif "ArchStdEvent" in x: + all_events.add(x["ArchStdEvent"]) + except json.decoder.JSONDecodeError: + # The generated directory may be the same as the input, which + # causes partial json files. Ignore errors. + pass + + +def CheckEvent(name: str) -> bool: + """Check the event name exists in the set of all loaded events""" + global all_events + if len(all_events) =3D=3D 0: + # No events loaded so assume any event is good. + return True + + if ':' in name: + # Remove trailing modifier. + name =3D name[:name.find(':')] + elif '/' in name: + # Name could begin with a PMU or an event, for now assume it is good. + return True + + return name in all_events + + class MetricConstraint(Enum): GROUPED_EVENTS =3D 0 NO_GROUP_EVENTS =3D 1 @@ -317,9 +363,18 @@ def _FixEscapes(s: str) -> str: class Event(Expression): """An event in an expression.""" =20 - def __init__(self, name: str, legacy_name: str =3D ''): - self.name =3D _FixEscapes(name) - self.legacy_name =3D _FixEscapes(legacy_name) + def __init__(self, *args: str): + error =3D "" + for name in args: + if CheckEvent(name): + self.name =3D _FixEscapes(name) + return + if error: + error +=3D " or " + name + else: + error =3D name + global all_events + raise Exception(f"No event {error} in:\n{all_events}") =20 def ToPerfJson(self): result =3D re.sub('/', '@', self.name) @@ -338,6 +393,28 @@ class Event(Expression): return self =20 =20 +class MetricRef(Expression): + """A metric reference in an expression.""" + + def __init__(self, name: str): + self.name =3D _FixEscapes(name) + + def ToPerfJson(self): + return self.name + + def ToPython(self): + return f'MetricRef(r"{self.name}")' + + def Simplify(self) -> Expression: + return self + + def Equals(self, other: Expression) -> bool: + return isinstance(other, MetricRef) and self.name =3D=3D other.name + + def Substitute(self, name: str, expression: Expression) -> Expression: + return self + + class Constant(Expression): """A constant within the expression tree.""" =20 --=20 2.52.0.158.g65b55ccf14-goog From nobody Wed Dec 10 20:09:24 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 D62252D77F5 for ; Tue, 2 Dec 2025 17:52:19 +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=1764697941; cv=none; b=Z05MPyLYeuDH8KzX0YJ+QpCPw2WkjWRmblj3/NRmltL0PI+Yf6O8XHXeLAtxZ6jBGpcfDDz0ZOhC7yJQ3Rv4PY1O/nmUSdESFQBG3l+3zs3Z8NQrzJan3NeZH7u+vU5O6DhUlM6EIgHMbF8llWyD3sRTdk4ynDmV4BhjzknLXng= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764697941; c=relaxed/simple; bh=aC0ClnaOCDbka6f2nE4FIDoOpTexC/qr6xL0cZlaMLQ=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=ZtAqxIM7xyw8E4NhEzAFdfTjDpjiVOj1seubEpG7z9mQ0Y1X+vhZC05kk13Ar5FUYHFdwrG5AOT9C67vxZ4tcZ7jldRKABjUXruGDcuceEXI64YIbs6Zr79CI2t8BTdVX8yBtJHRof8sUpBr/AADl/gW7Yl4lTwoz/ebAJSNm7E= 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=E8ASHopn; 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="E8ASHopn" Received: by mail-pg1-f202.google.com with SMTP id 41be03b00d2f7-bddf9ce4935so4544392a12.1 for ; Tue, 02 Dec 2025 09:52:19 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1764697939; x=1765302739; 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=5aC/ZNL6aOKThcJb9XJfnDozw+ZaZ4uOwoV5u7yjR4g=; b=E8ASHopnuX/z8R8pgLINrAw4tAg9P9Fa2Nxf3QxLqUMaeKtYdBqdhTcTF1+1BTkm2M /mlRkfFnh1p9u5aa+u4xWfpH9PK9QA+C7KsEHQxy1NEDW/PTgp3YN6uC3aMglorV06WK emDdP6cqwCXEW8pJLmKbCvRU3gucY2W+d1pAUvp0J0IF7mPwAgkPro6huUu9Rd0CObJh Xb6jADrCEK9HAxIzLzw+qcmr0tdBZwvUiEcuM/+PQszmOVOAgaUBl0k66hfY+ecOgahd alJJ6s8e3GBaU9Y+K0fcMEaTXAPPYpabNj3KWylHxxDdMPBy0coG5ejOoiqg79Mr52j1 Po1g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1764697939; x=1765302739; 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=5aC/ZNL6aOKThcJb9XJfnDozw+ZaZ4uOwoV5u7yjR4g=; b=wBE9AOO7W1sQv/fQN7m60gu0MK8G+KwyZ8SVEuk8FMpenMaBt4oZLa8TbGxh8jFxv8 pM55/bcon3Qa2qs8QptxFJ3RTlHEIBAphNzTOL76ceBm3GAIJUCXh8kggYe6PhljD+N+ Lx1HuwQhoa6N2/v8TSQJPn+F9XtbUJ77DRXaBML1JTDEqh2s6T+3JGgEWYPBLE4xzVIK dvIqWmtcNy9qKKaSiVluuR4+jDY0heMd2Va6zaTTyAcTxd1HqktEGdukIPe3Nemaf1fi B4Msx7D/4MyETg2HhtNCBKSkH+lmwC4kjm97OiwmRJ0gqYWGqjNVQfMJHDO8IhgYVfZF DE9A== X-Forwarded-Encrypted: i=1; AJvYcCU4ibDQ+OD3xdb9QYbHML+GT4EVHzllID0Ut2rCZeU56MYNjv1gYSbYn5UKEuOQXUVEIoVoAG0n3G9m0o8=@vger.kernel.org X-Gm-Message-State: AOJu0YxY2Qc5NgGB/DUEshnHkmBArSvpsjaYl9wuvCSn4V3qmlYOWJlu gMaf9lJh6o9qn2yivu7ZNNArHtS2MY8YTwnDr+y+EH586EleL0H+57aNUloT3ETsJE3M8Wlvebg lGj2wBOi3gw== X-Google-Smtp-Source: AGHT+IEr2zTfjSV0R8S290usnwVG6hx5qBVtmwN91OndNlA0hS2VO+EG7I+di1Z4TXBKtu798+++4CZvsYVt X-Received: from dybhe38.prod.google.com ([2002:a05:7300:e1a6:b0:2a4:6ccf:64c6]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a05:7300:7fa5:b0:2a4:4bbe:4a94 with SMTP id 5a478bee46e88-2a94188c823mr20914804eec.29.1764697939002; Tue, 02 Dec 2025 09:52:19 -0800 (PST) Date: Tue, 2 Dec 2025 09:50:10 -0800 In-Reply-To: <20251202175043.623597-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: <20251202175043.623597-1-irogers@google.com> X-Mailer: git-send-email 2.52.0.158.g65b55ccf14-goog Message-ID: <20251202175043.623597-16-irogers@google.com> Subject: [PATCH v9 15/48] perf jevents: Add RAPL event metric for AMD zen models From: Ian Rogers To: Adrian Hunter , Alexander Shishkin , Arnaldo Carvalho de Melo , Benjamin Gray , Caleb Biggers , Edward Baker , Ian Rogers , Ingo Molnar , James Clark , Jing Zhang , Jiri Olsa , John Garry , Leo Yan , Namhyung Kim , Perry Taylor , Peter Zijlstra , Samantha Alt , Sandipan Das , Thomas Falcon , Weilin Wang , Xu Yang , linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Add power per second metrics based on RAPL. Signed-off-by: Ian Rogers Reviewed-by: Sandipan Das --- tools/perf/pmu-events/amd_metrics.py | 31 +++++++++++++++++++++++++--- 1 file changed, 28 insertions(+), 3 deletions(-) diff --git a/tools/perf/pmu-events/amd_metrics.py b/tools/perf/pmu-events/a= md_metrics.py index bc91d9c120fa..b6cdeb4f09fe 100755 --- a/tools/perf/pmu-events/amd_metrics.py +++ b/tools/perf/pmu-events/amd_metrics.py @@ -1,13 +1,36 @@ #!/usr/bin/env python3 # SPDX-License-Identifier: (LGPL-2.1 OR BSD-2-Clause) import argparse +import math import os -from metric import (JsonEncodeMetric, JsonEncodeMetricGroupDescriptions, L= oadEvents, - MetricGroup) +from metric import (d_ratio, has_event, Event, JsonEncodeMetric, JsonEncod= eMetricGroupDescriptions, + LoadEvents, Metric, MetricGroup, Select) =20 # Global command line arguments. _args =3D None =20 +interval_sec =3D Event("duration_time") + + +def Rapl() -> MetricGroup: + """Processor socket power consumption estimate. + + Use events from the running average power limit (RAPL) driver. + """ + # Watts =3D joules/second + # Currently only energy-pkg is supported by AMD: + # https://lore.kernel.org/lkml/20220105185659.643355-1-eranian@google.= com/ + pkg =3D Event("power/energy\\-pkg/") + cond_pkg =3D Select(pkg, has_event(pkg), math.nan) + scale =3D 2.3283064365386962890625e-10 + metrics =3D [ + Metric("lpm_cpu_power_pkg", "", + d_ratio(cond_pkg * scale, interval_sec), "Watts"), + ] + + return MetricGroup("lpm_cpu_power", metrics, + description=3D"Processor socket power consumption e= stimates") + =20 def main() -> None: global _args @@ -33,7 +56,9 @@ def main() -> None: directory =3D f"{_args.events_path}/x86/{_args.model}/" LoadEvents(directory) =20 - all_metrics =3D MetricGroup("", []) + all_metrics =3D MetricGroup("", [ + Rapl(), + ]) =20 if _args.metricgroups: print(JsonEncodeMetricGroupDescriptions(all_metrics)) --=20 2.52.0.158.g65b55ccf14-goog From nobody Wed Dec 10 20:09:24 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 48F762D7DCB for ; Tue, 2 Dec 2025 17:52:25 +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=1764697946; cv=none; b=gkIx1Jp4dtFjsin8W+CE16gnIt5J/NcRvcui8zmfEvPJl2loNmsLs44KEuT811P1cIRP1t36zGvuk6+K6+9fyuVk7EL6VTq6JWeQOm4TXPMfi4u+R/qYZvgKuI8qnOVnqyrk2Y5+9vcyX47pD1ja8oJbDVT6TvcAlUdbz1Z6G90= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764697946; c=relaxed/simple; bh=AyZA4nD7jh5kb1lPGF2MDaVZ/tkGQEyjyH8++oUHFGM=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=S/5UX+q4iJxeIAbwAk+XhItLAgyghf+QsoxNKDDhLXvzoNTS+RLcWIGIQylcENYYbq2x7ggs1ZR1/8hHzKC4IHjF6/UX7qS4D4OqedlD2bJFm0SYPyiYfZ1Ouvs4pWfHwz/IBrJO8Jj6UnCpKRCf5KQKiW6aKiqAqSo50zwOlOI= 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=faKp60jZ; 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="faKp60jZ" Received: by mail-pg1-f202.google.com with SMTP id 41be03b00d2f7-bc0de474d4eso11550338a12.0 for ; Tue, 02 Dec 2025 09:52:25 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1764697944; x=1765302744; 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=6lWESTB2UTGcAg+Bqss+YoR/rSNf4J9eOBW+DXHV/2E=; b=faKp60jZtmY3yxYtU4oIAcP9k7qBVZ3QxYAdhl38/5kagD5YLQvluPVdQ+a6xvuxy9 S/9C54di55Jb5TOWxrEvmVgU/SvTYNTT8zp55s99yc2CE3ghasJefEOix2vELUrcwnYo HQ94Uhbbcprt3CQz7UU2K+TjHG1B+KEKZQnMq2tA/v5/jDkCubpDzUP+qM1v5tVG90KH FF2oNKsGc480n0ILft27hwR4p8G8Q4R5dz/W9/15nyC8JIJNPd/gQ5ED7r54Pi48kCbX q5/u3DQjV4Uw27zci/5SMjQryx/L2YxwUP4ssoLh4+oLDzht6P5Zd93oglnDC7UC1rmv I1eA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1764697944; x=1765302744; 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=6lWESTB2UTGcAg+Bqss+YoR/rSNf4J9eOBW+DXHV/2E=; b=dFAK7H4TD0bzND7cd0S7MPuppb6AqmL5KHT3hCXP0i+Q9hPnAzHvnDUSiSviHt/MKc ana2Z8uls1iB4LTaZa1rymZK73DVGPyGpvY8hiOGFR9kRa+MST9lXdrNUcQ1xZOtn2G+ 1pWLlMo3lBj4MY3MF/oVg620xzVvo2LX7AFn2aBJHpeiMDhn4FzPl3T4p+68zVBXnmpu xfHWHZDWpXqrCTg/voWxeeM0YYWR+hiboAj93pR3UM5b4FJm++skThNe1eZQueBgKkQ0 29vPhWJYHbmBz19HRrqORk/gFVJBg4GtS1A+aLF3Mrhz5woLp3w7uOi9rRmLNHcp7R9G px3Q== X-Forwarded-Encrypted: i=1; AJvYcCXdyV9GYx8gk8I0Vo4Xc2teWeawUgfkm3O4K3/Hu1MZYhz20ncxrSPWu3TtnN8KP2RrCZmk4325yHJrMmo=@vger.kernel.org X-Gm-Message-State: AOJu0YyV7XDMbF9/95MhpWtPV57lA3KbAaoSOoQmiw9NEmx8cUHZ9aq6 hqQ1sd2QRX25Jz89BJ2/F9DPza+/GoX+RtZh5h4akC+6BLLC+aZusP8fs10AHHhVirEqg3SIv+0 7g0RbZv5oEw== X-Google-Smtp-Source: AGHT+IGHRBUPQQI/Ixl6furUweurkhLLHHi+K7hWEgwf6CovRvn8iSd9kk5hxy9K0HFykKH3Edpqp6VZSQlX X-Received: from dybms17.prod.google.com ([2002:a05:7300:d511:b0:2a4:559f:7c4e]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a05:7300:ec96:b0:2a6:a306:eff5 with SMTP id 5a478bee46e88-2a941581a8dmr17218723eec.5.1764697944468; Tue, 02 Dec 2025 09:52:24 -0800 (PST) Date: Tue, 2 Dec 2025 09:50:11 -0800 In-Reply-To: <20251202175043.623597-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: <20251202175043.623597-1-irogers@google.com> X-Mailer: git-send-email 2.52.0.158.g65b55ccf14-goog Message-ID: <20251202175043.623597-17-irogers@google.com> Subject: [PATCH v9 16/48] perf jevents: Add idle metric for AMD zen models From: Ian Rogers To: Adrian Hunter , Alexander Shishkin , Arnaldo Carvalho de Melo , Benjamin Gray , Caleb Biggers , Edward Baker , Ian Rogers , Ingo Molnar , James Clark , Jing Zhang , Jiri Olsa , John Garry , Leo Yan , Namhyung Kim , Perry Taylor , Peter Zijlstra , Samantha Alt , Sandipan Das , Thomas Falcon , Weilin Wang , Xu Yang , linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Compute using the msr PMU the percentage of wallclock cycles where the CPUs are in a low power state. Signed-off-by: Ian Rogers Reviewed-by: Sandipan Das --- tools/perf/pmu-events/amd_metrics.py | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/tools/perf/pmu-events/amd_metrics.py b/tools/perf/pmu-events/a= md_metrics.py index b6cdeb4f09fe..f51a044b8005 100755 --- a/tools/perf/pmu-events/amd_metrics.py +++ b/tools/perf/pmu-events/amd_metrics.py @@ -3,8 +3,9 @@ import argparse import math import os -from metric import (d_ratio, has_event, Event, JsonEncodeMetric, JsonEncod= eMetricGroupDescriptions, - LoadEvents, Metric, MetricGroup, Select) +from metric import (d_ratio, has_event, max, Event, JsonEncodeMetric, + JsonEncodeMetricGroupDescriptions, LoadEvents, Metric, + MetricGroup, Select) =20 # Global command line arguments. _args =3D None @@ -12,6 +13,16 @@ _args =3D None interval_sec =3D Event("duration_time") =20 =20 +def Idle() -> Metric: + cyc =3D Event("msr/mperf/") + tsc =3D Event("msr/tsc/") + low =3D max(tsc - cyc, 0) + return Metric( + "lpm_idle", + "Percentage of total wallclock cycles where CPUs are in low power = state (C1 or deeper sleep state)", + d_ratio(low, tsc), "100%") + + def Rapl() -> MetricGroup: """Processor socket power consumption estimate. =20 @@ -57,6 +68,7 @@ def main() -> None: LoadEvents(directory) =20 all_metrics =3D MetricGroup("", [ + Idle(), Rapl(), ]) =20 --=20 2.52.0.158.g65b55ccf14-goog From nobody Wed Dec 10 20:09:24 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 5B2132D7DFE for ; Tue, 2 Dec 2025 17:52:27 +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=1764697948; cv=none; b=ZJah+wjAN7n74MhUm4ZvEio/yrDfR0ltcwXSX8IZQ8W5HWKEoyQ3YNPpQnjQETDn1aSNfgudqrJywotf4C/Oaw8BgUMaLhUbrW31v6RF5pn/7iHSIXDR7oVGRRPGCNIcou+CTXHpYpZcGokccjAmUQLDjRZ1wTX2MBHVaEokzTo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764697948; c=relaxed/simple; bh=ToHaD1gpwP1uWL3U7MH+po+mxnuGTW8jd1YqF5p7UWk=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=iR5OlqLeK7g+7v3JqAK9FSZwGlwTwecLn4XXsEe4S/XHs+js365/nCrn59UOZIn79UOnYkv1o6E/39bJDJStbIaS83HsemPl/kWS0LJoMCCHHCDCzx636XhoK9PuBfww0R9bbWhgCcv5dy4zt2KQ/enDDne/wpJgfydLgxEmcTg= 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=R3rtjZBf; 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="R3rtjZBf" Received: by mail-pg1-f201.google.com with SMTP id 41be03b00d2f7-bc0de474d4eso11550402a12.0 for ; Tue, 02 Dec 2025 09:52:27 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1764697947; x=1765302747; 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=UBraLOuppoKBMvtTbUVI8ZVtGBuCTR4b8oDGHI+adOo=; b=R3rtjZBf2SIpI3qZ0gNzORMQLgJytbySbRx/agnMYzx7u0j8CqkbU59+VOsBxyILvR R6/o0sS9Ns2Vq/lFT31XeMjOkTGUJJp1VAl6ETyvFWxzzjcy/dmxuhHoSmr2p82wwhxd 9fFzaX2P1edJYnJiAu1a/P+SsdbuSHO5F7q/GeiHDnI4rODQcs+eSLZ2A2HcKMIXqzlK WFWNGOe9kjFpObsl1qM3yIYUwI1p7Nx+C6vLexQOIXUgofq3mMpjCbqdxSqa9KbNgUQ2 PeVRlxfLCDx6sCpUM3p4QR2bDCrYupG1feqB5Qq8CVAylKqskJGSNGvyhpYCX5vHck2j fGGg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1764697947; x=1765302747; 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=UBraLOuppoKBMvtTbUVI8ZVtGBuCTR4b8oDGHI+adOo=; b=BN/ifJWrC1Yk99EDKXXQ/wwYd4f+EiLjxRuNp+QV6yXsCnpBHiVpgus/kbb272Usus ecM1omdx3+qjzpJFSE51+nMEFht3eVoawUGa5M+tPDjSF1qKCA4ol2tKrBcty4jzPn2f 6xtm7qqqcWYSAJGRUT5b7uZFNZOZL58daGhM1LuH6XxTFVFRpYblSlYMJAmA9OChfX74 1iF4aJYcNw4I8gLUgqa0UN2kv1+P7agWmMP+t0B3lKdliNvnVEugQMZru5rzRNzF7ZCF Puk3W3sxKUWi54EHT6+Ssg6jdp1WNa7Hoi7NNj0c+eAUl9MJkiNU9pfc74IXzH4VNbli V/nA== X-Forwarded-Encrypted: i=1; AJvYcCUWd2o7wbPzxP3a3C8F5Sc9/ofv3QwG87cP92canCnIsfsEPM/Ru/BWqExWi7Ck/462vyFPvPjz9qx75hQ=@vger.kernel.org X-Gm-Message-State: AOJu0YxT2yQH8V7B0Tihv6NqVZTRP4TuoXfgliC3QPfB+FKRTrgH/PE1 W8IwVFvGU1w9WH7K3Ohr6HIN1ktVZQ2DeUg8+SbCSzdt2CHDROt6TO/iJfBN7PmOG/KSn6FbFMN SN1tDtFHJNw== X-Google-Smtp-Source: AGHT+IHW0Cp5GyrrR3flEmMg7aEQH7+Qv/G5/JFMzVnN2vAu3XjJnL31sjK7xy4r/8WNN9p0O57Jheo5vojq X-Received: from dycnl9.prod.google.com ([2002:a05:7300:d109:b0:2a2:2846:c4f7]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a05:7300:570b:b0:2a4:3592:cf64 with SMTP id 5a478bee46e88-2a9415819f9mr20281218eec.8.1764697946550; Tue, 02 Dec 2025 09:52:26 -0800 (PST) Date: Tue, 2 Dec 2025 09:50:12 -0800 In-Reply-To: <20251202175043.623597-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: <20251202175043.623597-1-irogers@google.com> X-Mailer: git-send-email 2.52.0.158.g65b55ccf14-goog Message-ID: <20251202175043.623597-18-irogers@google.com> Subject: [PATCH v9 17/48] perf jevents: Add upc metric for uops per cycle for AMD From: Ian Rogers To: Adrian Hunter , Alexander Shishkin , Arnaldo Carvalho de Melo , Benjamin Gray , Caleb Biggers , Edward Baker , Ian Rogers , Ingo Molnar , James Clark , Jing Zhang , Jiri Olsa , John Garry , Leo Yan , Namhyung Kim , Perry Taylor , Peter Zijlstra , Samantha Alt , Sandipan Das , Thomas Falcon , Weilin Wang , Xu Yang , linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The metric adjusts for whether or not SMT is on. Signed-off-by: Ian Rogers Reviewed-by: Sandipan Das --- tools/perf/pmu-events/amd_metrics.py | 22 +++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/tools/perf/pmu-events/amd_metrics.py b/tools/perf/pmu-events/a= md_metrics.py index f51a044b8005..42e46b33334d 100755 --- a/tools/perf/pmu-events/amd_metrics.py +++ b/tools/perf/pmu-events/amd_metrics.py @@ -3,14 +3,26 @@ import argparse import math import os +from typing import Optional from metric import (d_ratio, has_event, max, Event, JsonEncodeMetric, - JsonEncodeMetricGroupDescriptions, LoadEvents, Metric, - MetricGroup, Select) + JsonEncodeMetricGroupDescriptions, Literal, LoadEvents, + Metric, MetricGroup, Select) =20 # Global command line arguments. _args =3D None - +_zen_model: int =3D 1 interval_sec =3D Event("duration_time") +ins =3D Event("instructions") +cycles =3D Event("cycles") +# Number of CPU cycles scaled for SMT. +smt_cycles =3D Select(cycles / 2, Literal("#smt_on"), cycles) + + +def AmdUpc() -> Metric: + ops =3D Event("ex_ret_ops", "ex_ret_cops") + upc =3D d_ratio(ops, smt_cycles) + return Metric("lpm_upc", "Micro-ops retired per core cycle (higher is = better)", + upc, "uops/cycle") =20 =20 def Idle() -> Metric: @@ -45,6 +57,7 @@ def Rapl() -> MetricGroup: =20 def main() -> None: global _args + global _zen_model =20 def dir_path(path: str) -> str: """Validate path is a directory for argparse.""" @@ -67,7 +80,10 @@ def main() -> None: directory =3D f"{_args.events_path}/x86/{_args.model}/" LoadEvents(directory) =20 + _zen_model =3D int(_args.model[6:]) + all_metrics =3D MetricGroup("", [ + AmdUpc(), Idle(), Rapl(), ]) --=20 2.52.0.158.g65b55ccf14-goog From nobody Wed Dec 10 20:09:24 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 A7C5E2D7DFE for ; Tue, 2 Dec 2025 17:52:32 +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=1764697954; cv=none; b=tHuAxpp0Tryb8HJ2LEYXcvBZ4stZcjYQmNw/seAlSiMKG6WN8t+O+kEvs2z8IxWQE1EDbPvfp2pB2o/oQZjgUL99fpJyMyPo7hTz3oJOmZ93fFBMOwMRLGGTWx2eYFlp2uc8NHFav9UHmlWXU27mPKVpFhljYyv5fRmBXepIIJc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764697954; c=relaxed/simple; bh=7RnGkPZOpGKGatjj+MFrqJQE14RNbTv5rkqCzRl2MH0=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=UcMVZcCb5l4uO9TI+r11I7n+ZbdXrIfkl3nSYg8PJaYbgcSOT1QhtGOo79c3sdOUE+RO+1NRkqjXd3ZX7cu3VvpkgamHuaUQivPec3IDpjpq7WWOxll/KmzCTU/5DjdBUxAAqNTPltbOjH4HJtf+yclAnLUZLf2Xs9RAv3ve1A4= 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=wsgK+mru; 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="wsgK+mru" Received: by mail-pg1-f202.google.com with SMTP id 41be03b00d2f7-b9d73d57328so6395704a12.1 for ; Tue, 02 Dec 2025 09:52:32 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1764697952; x=1765302752; 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=kKDA0IrKz790dnyekDQWaFWB3MnJqfzTphK128DE4rY=; b=wsgK+mru92dCpHxwE5g9zGy31nZdqWeFGGyVG68DgesGeMfaxktMe0sgWm4aaW2fep NFAyoGArqU+s/YRl/yEs2d1TtdalAy+SBxbHUwJtbccojlBCKzMmEXzYF4/sESUi5qoM geQL5SPktU+aagi/mdgfoz1RGLzokyoaMX9/Pcs4cHvRsuJNDo7TP///FUuIE/SrFU9f Pt8wuJw1HWh+piMh4Rh7Crwz4jsz7oNeF7mBgQ12TMePJW7xCIgPI73Ksm958gxTHOMA gncLvEhNM1jTRB9prfv+2KTCFI2zss2hG2YxaosL0LNdNsq92aznFCbtNQIe9nJww6PO uRBw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1764697952; x=1765302752; 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=kKDA0IrKz790dnyekDQWaFWB3MnJqfzTphK128DE4rY=; b=ceqgNuRZi2xeSyw2OV+fYIg+QWoyQGNKlzmLxpitQHIywODHeJHu2kx2jRh5nJHTlL i6VWk0yWCbKkiVsrO5ShlB+/IsbNiZ0cEywdkgsupN0GcxocGpRaosJcU5NV94lGHeuX i0LW58S6PAbfh5zt/hmuxafL2z5Di+lzgBEzHSo2pdQMNoHap6yytQG0dfj9d4jtoB7t wEkjI+Ru5VCYCtuaO+Cg5mfu3SezkBAKlL4x5q8+MC4KS7HCqbpEUSba5ZdskWic9xHR 5qZ/G+F9ilB5nsQqxmyG+TqFSM2mw4AjACIcR81LqRCVQ1VjiFU5ETko1LvsnNEJ2keg S45Q== X-Forwarded-Encrypted: i=1; AJvYcCU00M0luusGxmzHXLYpfYsKvUI1llstm8Si1jzE9JJCK2DqcJ/pswDa9afRXvlkdTovq9LlFRmZb9aGZKI=@vger.kernel.org X-Gm-Message-State: AOJu0YyQdQPq66wd6giUm5jUNSF6FpJhyPmYW/QwMJ/k/4pYm7Q0nfy9 tzY02hXowEz7L02b9uYjkw8CO/IWbViYaC1PK0/Wn1WTbJvMQVj/WJBa55OVbOvE3KZJuo9eVIO DwH9gMAArsA== X-Google-Smtp-Source: AGHT+IFWM63cnWnkLe7ok63yjTdk6eHNw0ET7DDAEa0omGoKQKoWY4gPGg8hY8IO9Zc5sulUb+hNnVzRfsqe X-Received: from dycou23.prod.google.com ([2002:a05:7300:dc97:b0:2a4:6577:68f1]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a05:7301:9c91:b0:2a4:4f86:822a with SMTP id 5a478bee46e88-2a941887a80mr12900570eec.33.1764697951923; Tue, 02 Dec 2025 09:52:31 -0800 (PST) Date: Tue, 2 Dec 2025 09:50:13 -0800 In-Reply-To: <20251202175043.623597-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: <20251202175043.623597-1-irogers@google.com> X-Mailer: git-send-email 2.52.0.158.g65b55ccf14-goog Message-ID: <20251202175043.623597-19-irogers@google.com> Subject: [PATCH v9 18/48] perf jevents: Add br metric group for branch statistics on AMD From: Ian Rogers To: Adrian Hunter , Alexander Shishkin , Arnaldo Carvalho de Melo , Benjamin Gray , Caleb Biggers , Edward Baker , Ian Rogers , Ingo Molnar , James Clark , Jing Zhang , Jiri Olsa , John Garry , Leo Yan , Namhyung Kim , Perry Taylor , Peter Zijlstra , Samantha Alt , Sandipan Das , Thomas Falcon , Weilin Wang , Xu Yang , linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The br metric group for branches itself comprises metric groups for total, taken, conditional, fused and far metric groups using json events. The lack of conditional events on anything but zen2 means this category is lacking on zen1, zen3 and zen4. Signed-off-by: Ian Rogers Reviewed-by: Sandipan Das --- tools/perf/pmu-events/amd_metrics.py | 104 +++++++++++++++++++++++++++ 1 file changed, 104 insertions(+) diff --git a/tools/perf/pmu-events/amd_metrics.py b/tools/perf/pmu-events/a= md_metrics.py index 42e46b33334d..1880ccf9c6fc 100755 --- a/tools/perf/pmu-events/amd_metrics.py +++ b/tools/perf/pmu-events/amd_metrics.py @@ -18,6 +18,109 @@ cycles =3D Event("cycles") smt_cycles =3D Select(cycles / 2, Literal("#smt_on"), cycles) =20 =20 +def AmdBr(): + def Total() -> MetricGroup: + br =3D Event("ex_ret_brn") + br_m_all =3D Event("ex_ret_brn_misp") + br_clr =3D Event("ex_ret_msprd_brnch_instr_dir_msmtch", + "ex_ret_brn_resync") + + br_r =3D d_ratio(br, interval_sec) + ins_r =3D d_ratio(ins, br) + misp_r =3D d_ratio(br_m_all, br) + clr_r =3D d_ratio(br_clr, interval_sec) + + return MetricGroup("lpm_br_total", [ + Metric("lpm_br_total_retired", + "The number of branch instructions retired per second."= , br_r, + "insn/s"), + Metric( + "lpm_br_total_mispred", + "The number of branch instructions retired, of any type, t= hat were " + "not correctly predicted as a percentage of all branch ins= trucions.", + misp_r, "100%"), + Metric("lpm_br_total_insn_between_branches", + "The number of instructions divided by the number of br= anches.", + ins_r, "insn"), + Metric("lpm_br_total_insn_fe_resteers", + "The number of resync branches per second.", clr_r, "re= q/s") + ]) + + def Taken() -> MetricGroup: + br =3D Event("ex_ret_brn_tkn") + br_m_tk =3D Event("ex_ret_brn_tkn_misp") + br_r =3D d_ratio(br, interval_sec) + ins_r =3D d_ratio(ins, br) + misp_r =3D d_ratio(br_m_tk, br) + return MetricGroup("lpm_br_taken", [ + Metric("lpm_br_taken_retired", + "The number of taken branches that were retired per sec= ond.", + br_r, "insn/s"), + Metric( + "lpm_br_taken_mispred", + "The number of retired taken branch instructions that were= " + "mispredicted as a percentage of all taken branches.", mis= p_r, + "100%"), + Metric( + "lpm_br_taken_insn_between_branches", + "The number of instructions divided by the number of taken= branches.", + ins_r, "insn"), + ]) + + def Conditional() -> Optional[MetricGroup]: + global _zen_model + br =3D Event("ex_ret_cond") + br_r =3D d_ratio(br, interval_sec) + ins_r =3D d_ratio(ins, br) + + metrics =3D [ + Metric("lpm_br_cond_retired", "Retired conditional branch inst= ructions.", + br_r, "insn/s"), + Metric("lpm_br_cond_insn_between_branches", + "The number of instructions divided by the number of co= nditional " + "branches.", ins_r, "insn"), + ] + if _zen_model =3D=3D 2: + br_m_cond =3D Event("ex_ret_cond_misp") + misp_r =3D d_ratio(br_m_cond, br) + metrics +=3D [ + Metric("lpm_br_cond_mispred", + "Retired conditional branch instructions mispredict= ed as a " + "percentage of all conditional branches.", misp_r, = "100%"), + ] + + return MetricGroup("lpm_br_cond", metrics) + + def Fused() -> MetricGroup: + br =3D Event("ex_ret_fused_instr", "ex_ret_fus_brnch_inst") + br_r =3D d_ratio(br, interval_sec) + ins_r =3D d_ratio(ins, br) + return MetricGroup("lpm_br_cond", [ + Metric("lpm_br_fused_retired", + "Retired fused branch instructions per second.", br_r, = "insn/s"), + Metric( + "lpm_br_fused_insn_between_branches", + "The number of instructions divided by the number of fused= " + "branches.", ins_r, "insn"), + ]) + + def Far() -> MetricGroup: + br =3D Event("ex_ret_brn_far") + br_r =3D d_ratio(br, interval_sec) + ins_r =3D d_ratio(ins, br) + return MetricGroup("lpm_br_far", [ + Metric("lpm_br_far_retired", "Retired far control transfers pe= r second.", + br_r, "insn/s"), + Metric( + "lpm_br_far_insn_between_branches", + "The number of instructions divided by the number of far b= ranches.", + ins_r, "insn"), + ]) + + return MetricGroup("lpm_br", [Total(), Taken(), Conditional(), Fused()= , Far()], + description=3D"breakdown of retired branch instruct= ions") + + def AmdUpc() -> Metric: ops =3D Event("ex_ret_ops", "ex_ret_cops") upc =3D d_ratio(ops, smt_cycles) @@ -83,6 +186,7 @@ def main() -> None: _zen_model =3D int(_args.model[6:]) =20 all_metrics =3D MetricGroup("", [ + AmdBr(), AmdUpc(), Idle(), Rapl(), --=20 2.52.0.158.g65b55ccf14-goog From nobody Wed Dec 10 20:09:24 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 4A8962D948F for ; Tue, 2 Dec 2025 17:52:38 +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=1764697959; cv=none; b=oSN1KKENlbpPka+aHSR/AHK/LeX4UwCKbJZkyNb1bp1MMyC+bs3JFpo1nJzLtF8i7Xc6XZ9azyBEo52Fvpf2qkxqvhCuVmYkgTL594XA/5kTwsVzB5i8OyRsp/xO2OfKzzP5s+66gC5i4Mvps0rSPSL3eDMIIc7vc5LvKp7xvZY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764697959; c=relaxed/simple; bh=ze5jnZtbkhH6OYlHfCLGTcVj7KNVPDJCGJWmpSE1Bpg=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=Px1sRNuy+n9WBBYSyysQjr99CkMeZOL2srmUJOnHGYVkXmcZwms5iRIbq4oIfEIDdmHKyk+WeVYe34NS35fiMCAZgCImIAlvKy9xuSHBXYAFu192HvNOWTS5YIJGNAvKQTVRm+XPsp1y+wXdqvqR8XAKfJ+Xmc3/2BdpjeGkZIA= 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=0yo7ANp0; 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="0yo7ANp0" Received: by mail-pg1-f202.google.com with SMTP id 41be03b00d2f7-b609c0f6522so8943012a12.3 for ; Tue, 02 Dec 2025 09:52:38 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1764697957; x=1765302757; 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=J/hbUPmZ5FMVdDEJCamHYgfhVXRys0g5jFfadrw1lr4=; b=0yo7ANp0l+Q2setXtOiYtVRQZOi76qa5uoStrxJgT6ilsmSOstEvE22MhMSvZq9KoP BXSQwJuSZeWUg/XscluLHmocwltx9g1SFTb1KpSASwdHo9eyXBZmkgVAudmXdCHyFlRJ 6J0vTogIMLxeGLfKKeTEntTAspeuAqfTXQlx0ldlPgKxXc6dSBcfKsfnuzk0lCXzbIcL AxKosjwM6GoLOHs7Zqse45/atnSv01B5FY2lWP408dl49HiLg3otaPbyz8rcM5MNfCer xe4xlfdZ2I48bEquUibGG/PaYnWFmy0mpUXWDaMmOZqubZ6AceP8WdC72HhtoS3aIjq6 y/bg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1764697957; x=1765302757; 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=J/hbUPmZ5FMVdDEJCamHYgfhVXRys0g5jFfadrw1lr4=; b=wc5/2F6ZsMOzPE66rqbNF42bMsH9xg7GVULOr0k4AffDGT31mf/S7Fo8eI2VYgOQj6 dh+6NpyMs57Fpfj1v4gH51fXmaWEp1dO3UaD0t2eQF6qO0Q2MsBqcgVEPQxPYjCl6uhH rxGREbe0VlFEHvlDHoYDB1a9Ui5igZQeRwVy7qHhDmDNHQfhbvCMAhlHQP9xzqasN0ZD +NghrXog0objzq7ZIXTb3lsDqpNbakvHIMWdPhxr8u6hKc6jq4niTnEUqusfKFygnv4Q se02FeMDyh9wPjvE19MyI+P/U+1EHX8n+zcerRhYfc7VCO9sWvDhpOO5brVTrTe2IRGm 3wIg== X-Forwarded-Encrypted: i=1; AJvYcCV8zb9yTbd0MeXMIIUnFBXMYcZstSCRTXYejm3IJAvAKb0FJJcUESqho/a44E0dnnXOQQ9peD7GUzxhwb4=@vger.kernel.org X-Gm-Message-State: AOJu0YypKbjnC+lIwHyDBnL0XlEFvD7uIlt1RQW0uePP5TY2pkY0eS8I T//8f38efxIldl3BFh/PVBxtIClUgwfOaoMobMv/R+pR/oGkym+lDmXBpXkKZuVfzcQ9CKhtRIj l9h4qAS0kXw== X-Google-Smtp-Source: AGHT+IGYHX32N/rzSedA1c1sGGe18VImlT/w0RF+zEf1P2hVbs71K4/9EBvzKUkI3Z91j+ZCRTwk94n80u5F X-Received: from dycro14.prod.google.com ([2002:a05:693c:2b0e:b0:2a2:454c:f92]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a05:7301:1c:b0:2a4:3593:c7c1 with SMTP id 5a478bee46e88-2ab8fa78c34mr177619eec.1.1764697957460; Tue, 02 Dec 2025 09:52:37 -0800 (PST) Date: Tue, 2 Dec 2025 09:50:14 -0800 In-Reply-To: <20251202175043.623597-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: <20251202175043.623597-1-irogers@google.com> X-Mailer: git-send-email 2.52.0.158.g65b55ccf14-goog Message-ID: <20251202175043.623597-20-irogers@google.com> Subject: [PATCH v9 19/48] perf jevents: Add itlb metric group for AMD From: Ian Rogers To: Adrian Hunter , Alexander Shishkin , Arnaldo Carvalho de Melo , Benjamin Gray , Caleb Biggers , Edward Baker , Ian Rogers , Ingo Molnar , James Clark , Jing Zhang , Jiri Olsa , John Garry , Leo Yan , Namhyung Kim , Perry Taylor , Peter Zijlstra , Samantha Alt , Sandipan Das , Thomas Falcon , Weilin Wang , Xu Yang , linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Add metrics that give an overview and details of the l1 itlb (zen1, zen2, zen3) and l2 itlb (all zens). Signed-off-by: Ian Rogers Reviewed-by: Sandipan Das --- tools/perf/pmu-events/amd_metrics.py | 49 ++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) diff --git a/tools/perf/pmu-events/amd_metrics.py b/tools/perf/pmu-events/a= md_metrics.py index 1880ccf9c6fc..7a418990a767 100755 --- a/tools/perf/pmu-events/amd_metrics.py +++ b/tools/perf/pmu-events/amd_metrics.py @@ -121,6 +121,54 @@ def AmdBr(): description=3D"breakdown of retired branch instruct= ions") =20 =20 +def AmdItlb(): + global _zen_model + l2h =3D Event("bp_l1_tlb_miss_l2_tlb_hit", "bp_l1_tlb_miss_l2_hit") + l2m =3D Event("l2_itlb_misses") + l2r =3D l2h + l2m + + itlb_l1_mg =3D None + l1m =3D l2r + if _zen_model <=3D 3: + l1r =3D Event("ic_fw32") + l1h =3D max(l1r - l1m, 0) + itlb_l1_mg =3D MetricGroup("lpm_itlb_l1", [ + Metric("lpm_itlb_l1_hits", + "L1 ITLB hits as a perecentage of L1 ITLB accesses.", + d_ratio(l1h, l1h + l1m), "100%"), + Metric("lpm_itlb_l1_miss", + "L1 ITLB misses as a perecentage of L1 ITLB accesses.", + d_ratio(l1m, l1h + l1m), "100%"), + Metric("lpm_itlb_l1_reqs", + "The number of 32B fetch windows transferred from IC pi= pe to DE " + "instruction decoder per second.", d_ratio( + l1r, interval_sec), + "windows/sec"), + ]) + + return MetricGroup("lpm_itlb", [ + MetricGroup("lpm_itlb_ov", [ + Metric("lpm_itlb_ov_insn_bt_l1_miss", + "Number of instructions between l1 misses", d_ratio( + ins, l1m), "insns"), + Metric("lpm_itlb_ov_insn_bt_l2_miss", + "Number of instructions between l2 misses", d_ratio( + ins, l2m), "insns"), + ]), + itlb_l1_mg, + MetricGroup("lpm_itlb_l2", [ + Metric("lpm_itlb_l2_hits", + "L2 ITLB hits as a percentage of all L2 ITLB accesses.", + d_ratio(l2h, l2r), "100%"), + Metric("lpm_itlb_l2_miss", + "L2 ITLB misses as a percentage of all L2 ITLB accesses= .", + d_ratio(l2m, l2r), "100%"), + Metric("lpm_itlb_l2_reqs", "ITLB accesses per second.", + d_ratio(l2r, interval_sec), "accesses/sec"), + ]), + ], description=3D"Instruction TLB breakdown") + + def AmdUpc() -> Metric: ops =3D Event("ex_ret_ops", "ex_ret_cops") upc =3D d_ratio(ops, smt_cycles) @@ -187,6 +235,7 @@ def main() -> None: =20 all_metrics =3D MetricGroup("", [ AmdBr(), + AmdItlb(), AmdUpc(), Idle(), Rapl(), --=20 2.52.0.158.g65b55ccf14-goog From nobody Wed Dec 10 20:09:24 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 425332C3274 for ; Tue, 2 Dec 2025 17:52:44 +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=1764697965; cv=none; b=eMD+n2bUNggI38fbZE+70jVxT9pDPOc/cxgT8VwBgSSUbXlQMVd/yY8J1XvZCoDxan8q5KUwDwu9L52w77Ragssr2k3QPKlAa1zM8Pcj875WLG2Rxj1kEmUG1jJ3FnAMWhbbcLvmn/xSfAAIg+2JlXsEsUrtBg1s3afynvlWRyA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764697965; c=relaxed/simple; bh=cnN28YgDZXQukPdyU43RwJGiMTKXLOK9A4I9IcbNxOU=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=nh3xieiEOfWVrdU35kKVXPqCxglWM0tLP3/A91BTVG3xJQLyj/JEn3TL0ZdGkIoYaqrMSK0DNIQjGcfXOrSCjCmQVM+ekmW2wgzcjKjSQZskav3zIyVsj2ozUaOXvfz+f4bCdwbR5bPWUUsG3tC8AIZ3ol7RAoRLI3qxKi4Y6ps= 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=0wmZaMzI; 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="0wmZaMzI" Received: by mail-pg1-f202.google.com with SMTP id 41be03b00d2f7-b9b9e8b0812so8298078a12.0 for ; Tue, 02 Dec 2025 09:52:44 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1764697964; x=1765302764; 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=SS4YW8sLI9htj+EOc60XF89HsfUzPAe2mr9sCDtgbKM=; b=0wmZaMzIdQeD10MvPErYob5obymA9KlkKrZfkEMlRkMLS9OaEJjWgDAxf50rfO0PRw EGKgR/sz68SUSM6KwH0XlDpAoj9A9B5irL0QqrFRiSwF9m+/6KrY3/ahBBX/wWJ5aYaI 32+7nT0JVNgVrSFV9Hk1r6EVFiQZAxwK8g2NDodaIHUFxfnGwQ7MA93poICVfOxZ5sRa y9ulCg/lE4s49ckKwIdUjlfgZFMFG5o3wCGK2jGagH3mhUL+SU9NlwGBZxy5Tc4TO3P6 0VLM9L4M3kDjRQ4n5+6sc67PDhuRQzlB8tR5r6Ovd+AyLXbG16cPWjdqtOjtWdu/Hq+o wrvg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1764697964; x=1765302764; 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=SS4YW8sLI9htj+EOc60XF89HsfUzPAe2mr9sCDtgbKM=; b=gZa+i3R0lVwVqmTLVVSEfLUWhBx0DhC3MnyMpd4llUVSLzDlQZkbwacdr2Wy3qvhl9 zGIicWB2av84ET9+a3mDN7ntyNYMdph+v6HDh/Y02P2lZ9cyAFMZk51FvbN3yko37nD3 VEyeHVb9jbSrxCLL1Ve+NJxJ/hHebcr1lUiheWm6Lz+qk62KTfEV+4lQ9dKLh5bKUY+s Zf6JUq+KrATwL2v9o+B8mAgtPt982PBnKt7sngvpswzAGSp7fzvt/XEnbLF12OQxGpwe y1/DZwgddC91O8iF6TPtYhlop4ma+uS7t8ejY4+h1cOyagQEoCSmeqhnJrVYc3AUqgjx LxgA== X-Forwarded-Encrypted: i=1; AJvYcCVj9Zwt8r/1RjjaEG8lR+bgQPGiFj75X6H4QVS+6FLN9macsEPnN9j/YwC13OylG+Ni4txXC6vSKWW5BFA=@vger.kernel.org X-Gm-Message-State: AOJu0YzsW02OfmpfMmPQjXSB5YspD4BPNSqRWh6PRXWLRuAkmQHf+XtA edOiHG4CRSzldvML0Pzcy5HDosdvpS0zLXgF6/2S+L3lR4u7BiuFRXyfKH07eqlgABVnCOeNwGW rNdzEx1xzzA== X-Google-Smtp-Source: AGHT+IFbO090MPtUKeOBcaX+KQGDkyCln6i9NwXnUXKHCxgAt3d2X5Mov5nlDJSvt0oJKMnRHG/xVaD1fZaX X-Received: from dyau25.prod.google.com ([2002:a05:7300:6019:b0:2a2:53a5:570f]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a05:7301:da10:b0:2a4:617a:418a with SMTP id 5a478bee46e88-2a7190f25ecmr22820939eec.13.1764697963387; Tue, 02 Dec 2025 09:52:43 -0800 (PST) Date: Tue, 2 Dec 2025 09:50:15 -0800 In-Reply-To: <20251202175043.623597-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: <20251202175043.623597-1-irogers@google.com> X-Mailer: git-send-email 2.52.0.158.g65b55ccf14-goog Message-ID: <20251202175043.623597-21-irogers@google.com> Subject: [PATCH v9 20/48] perf jevents: Add dtlb metric group for AMD From: Ian Rogers To: Adrian Hunter , Alexander Shishkin , Arnaldo Carvalho de Melo , Benjamin Gray , Caleb Biggers , Edward Baker , Ian Rogers , Ingo Molnar , James Clark , Jing Zhang , Jiri Olsa , John Garry , Leo Yan , Namhyung Kim , Perry Taylor , Peter Zijlstra , Samantha Alt , Sandipan Das , Thomas Falcon , Weilin Wang , Xu Yang , linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Add metrics that give an overview and details of the dtlb (zen1, zen2, zen3). Signed-off-by: Ian Rogers Reviewed-by: Sandipan Das --- tools/perf/pmu-events/amd_metrics.py | 111 +++++++++++++++++++++++++++ 1 file changed, 111 insertions(+) diff --git a/tools/perf/pmu-events/amd_metrics.py b/tools/perf/pmu-events/a= md_metrics.py index 7a418990a767..2d1d25cb40b2 100755 --- a/tools/perf/pmu-events/amd_metrics.py +++ b/tools/perf/pmu-events/amd_metrics.py @@ -121,6 +121,116 @@ def AmdBr(): description=3D"breakdown of retired branch instruct= ions") =20 =20 +def AmdDtlb() -> Optional[MetricGroup]: + global _zen_model + if _zen_model >=3D 4: + return None + + d_dat =3D Event("ls_dc_accesses") if _zen_model <=3D 3 else None + d_h4k =3D Event("ls_l1_d_tlb_miss.tlb_reload_4k_l2_hit") + d_hcoal =3D Event( + "ls_l1_d_tlb_miss.tlb_reload_coalesced_page_hit") if _zen_model >= =3D 2 else 0 + d_h2m =3D Event("ls_l1_d_tlb_miss.tlb_reload_2m_l2_hit") + d_h1g =3D Event("ls_l1_d_tlb_miss.tlb_reload_1g_l2_hit") + + d_m4k =3D Event("ls_l1_d_tlb_miss.tlb_reload_4k_l2_miss") + d_mcoal =3D Event( + "ls_l1_d_tlb_miss.tlb_reload_coalesced_page_miss") if _zen_model >= =3D 2 else 0 + d_m2m =3D Event("ls_l1_d_tlb_miss.tlb_reload_2m_l2_miss") + d_m1g =3D Event("ls_l1_d_tlb_miss.tlb_reload_1g_l2_miss") + + d_w0 =3D Event("ls_tablewalker.dc_type0") if _zen_model <=3D 3 else No= ne + d_w1 =3D Event("ls_tablewalker.dc_type1") if _zen_model <=3D 3 else No= ne + walks =3D d_w0 + d_w1 + walks_r =3D d_ratio(walks, interval_sec) + ins_w =3D d_ratio(ins, walks) + l1 =3D d_dat + l1_r =3D d_ratio(l1, interval_sec) + l2_hits =3D d_h4k + d_hcoal + d_h2m + d_h1g + l2_miss =3D d_m4k + d_mcoal + d_m2m + d_m1g + l2_r =3D d_ratio(l2_hits + l2_miss, interval_sec) + l1_miss =3D l2_hits + l2_miss + walks + l1_hits =3D max(l1 - l1_miss, 0) + ins_l =3D d_ratio(ins, l1_miss) + + return MetricGroup("lpm_dtlb", [ + MetricGroup("lpm_dtlb_ov", [ + Metric("lpm_dtlb_ov_insn_bt_l1_miss", + "DTLB overview: instructions between l1 misses.", ins_l, + "insns"), + Metric("lpm_dtlb_ov_insn_bt_walks", + "DTLB overview: instructions between dtlb page table wa= lks.", + ins_w, "insns"), + ]), + MetricGroup("lpm_dtlb_l1", [ + Metric("lpm_dtlb_l1_hits", + "DTLB L1 hits as percentage of all DTLB L1 accesses.", + d_ratio(l1_hits, l1), "100%"), + Metric("lpm_dtlb_l1_miss", + "DTLB L1 misses as percentage of all DTLB L1 accesses.", + d_ratio(l1_miss, l1), "100%"), + Metric("lpm_dtlb_l1_reqs", "DTLB L1 accesses per second.", l1_= r, + "insns/s"), + ]), + MetricGroup("lpm_dtlb_l2", [ + Metric("lpm_dtlb_l2_hits", + "DTLB L2 hits as percentage of all DTLB L2 accesses.", + d_ratio(l2_hits, l2_hits + l2_miss), "100%"), + Metric("lpm_dtlb_l2_miss", + "DTLB L2 misses as percentage of all DTLB L2 accesses.", + d_ratio(l2_miss, l2_hits + l2_miss), "100%"), + Metric("lpm_dtlb_l2_reqs", "DTLB L2 accesses per second.", l2_= r, + "insns/s"), + MetricGroup("lpm_dtlb_l2_4kb", [ + Metric( + "lpm_dtlb_l2_4kb_hits", + "DTLB L2 4kb page size hits as percentage of all DTLB = L2 4kb " + "accesses.", d_ratio(d_h4k, d_h4k + d_m4k), "100%"), + Metric( + "lpm_dtlb_l2_4kb_miss", + "DTLB L2 4kb page size misses as percentage of all DTL= B L2 4kb" + "accesses.", d_ratio(d_m4k, d_h4k + d_m4k), "100%") + ]), + MetricGroup("lpm_dtlb_l2_coalesced", [ + Metric( + "lpm_dtlb_l2_coal_hits", + "DTLB L2 coalesced page (16kb) hits as percentage of a= ll DTLB " + "L2 coalesced accesses.", d_ratio(d_hcoal, + d_hcoal + d_mcoal), = "100%"), + Metric( + "lpm_dtlb_l2_coal_miss", + "DTLB L2 coalesced page (16kb) misses as percentage of= all " + "DTLB L2 coalesced accesses.", + d_ratio(d_mcoal, d_hcoal + d_mcoal), "100%") + ]), + MetricGroup("lpm_dtlb_l2_2mb", [ + Metric( + "lpm_dtlb_l2_2mb_hits", + "DTLB L2 2mb page size hits as percentage of all DTLB = L2 2mb " + "accesses.", d_ratio(d_h2m, d_h2m + d_m2m), "100%"), + Metric( + "lpm_dtlb_l2_2mb_miss", + "DTLB L2 2mb page size misses as percentage of all DTL= B L2 " + "accesses.", d_ratio(d_m2m, d_h2m + d_m2m), "100%") + ]), + MetricGroup("lpm_dtlb_l2_1g", [ + Metric( + "lpm_dtlb_l2_1g_hits", + "DTLB L2 1gb page size hits as percentage of all DTLB = L2 1gb " + "accesses.", d_ratio(d_h1g, d_h1g + d_m1g), "100%"), + Metric( + "lpm_dtlb_l2_1g_miss", + "DTLB L2 1gb page size misses as percentage of all DTL= B L2 " + "1gb accesses.", d_ratio(d_m1g, d_h1g + d_m1g), "100%") + ]), + ]), + MetricGroup("lpm_dtlb_walks", [ + Metric("lpm_dtlb_walks_reqs", "DTLB page table walks per secon= d.", + walks_r, "walks/s"), + ]), + ], description=3D"Data TLB metrics") + + def AmdItlb(): global _zen_model l2h =3D Event("bp_l1_tlb_miss_l2_tlb_hit", "bp_l1_tlb_miss_l2_hit") @@ -235,6 +345,7 @@ def main() -> None: =20 all_metrics =3D MetricGroup("", [ AmdBr(), + AmdDtlb(), AmdItlb(), AmdUpc(), Idle(), --=20 2.52.0.158.g65b55ccf14-goog From nobody Wed Dec 10 20:09:24 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 409BC2C3274 for ; Tue, 2 Dec 2025 17:52:50 +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=1764697971; cv=none; b=dLL38prWZQncAY1mNpuR5R6pQ0hEU8YfOyrB24dUxuwYndH4jk7kKPcpT3mhqeI3dytqTgYQzNDyF6EqGK6yaid77GmcIW4IU+6+wEZCV/h5r07IbcFvMM9desVQVSIibKFMJmoECSA41PB5VXWM4jyhQopyo7nPwXvqA3NLiMk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764697971; c=relaxed/simple; bh=+pOn+zu3ZMd+JYcU1w4+L4lKvgGjOMjt9xp2MKZedUo=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=Na0L7XeI5PGGKH3kJsQIfWG/mjFbAxazy5Zri8Q1cwXX61A5UrqwW/CURr/Gz1N9xGj0NNXJdNcrRSP2wZUaOxOCRL7kaqcoQgxshRbLtKoCxXiSr1vvncv22syk6DDsn72trrpHlJLWnrJ3tcSD2LnKb8EuuJjsxQdRUaDfBrE= 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=3gBZlsdH; 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="3gBZlsdH" Received: by mail-pg1-f202.google.com with SMTP id 41be03b00d2f7-b98e6ff908aso12793577a12.2 for ; Tue, 02 Dec 2025 09:52:50 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1764697969; x=1765302769; 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=ymsXPDRF6YZ1D0Jlzoanxx7gKwtKybhdHB3aACDzbKk=; b=3gBZlsdH9hT5lEIzgOkoeUIJ0/84ID1k52WrQKjc/ezbEbQpcIdRroCVjK+1j2zHqp ErGT/DvH4uOEGIoDBwg5/dXCBChD3vW6znQNOJpeinJ+zdQp06hvo38DWTD1Fbc+BX3E P1dkvjVU0u1e4wJiEB8EhBkEx99qPfeboNDPbUqiK+7zsCISZlixHvDbXn/Euy79G5Gj MV2oOwG0kEc+lBTKwOVEVWIj31Arn43Cw7C429PgD5Ri0xe6pggSMnHn4GP3wH/NFgZ+ vk/qQjmAnWgKK1gDOrU90KqR8sLXMJ7c/w32Ez7SSyGb9LUSN7rCtQyzIztclWCnhbmb +x5A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1764697969; x=1765302769; 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=ymsXPDRF6YZ1D0Jlzoanxx7gKwtKybhdHB3aACDzbKk=; b=UXJTFW9ZdgTis4/npKH0+eT5mT1Y6CTPowNRXZgfWTvGLlNvTYMFoqUkUohGlr+EMS CYSmRACHpl8kckYvy3Nk2t28BLcslKYvlMD1FKk0G6cJ++MubrPQ/Xq5GZ84yjSL9geD +nASy20xGWI/Af6GTWrly4uqK7ea18IsqdJpnMFHx2NFBdKKf4bEFnRKMHoH2xNj+XQV abNGLrL3P9HQmgWts9DmeitquqmoUigvpdxVvMj13ULDCpJ4U5ZzPVqCUU+XukfC0atp CgAPq2gnMUFg2VZu4Ccf/EPNavJV5AVoZJfrlvhxl/VZxUBlyzrdwoP48kD08XQ4TQ9J jMgA== X-Forwarded-Encrypted: i=1; AJvYcCW34wrrU5o+MDa6ojsWrhS1pCR2bBsabwrng7qcLF+dy0irzGgzL99ZT0q7rSm+EoreSwv4r462GJBTxX0=@vger.kernel.org X-Gm-Message-State: AOJu0YzGL3ZU0UB0wq8z/gViudRds0/8BohlzVRFlacsUfN/kMbC9wgR 9oV9w0JcRHiERAwq7WXp/V5QaWe5oGtwZAAy4SwUN/r5zM1aZ/2Pra27K37E/DJxBd7wMfLc525 29qTrcFfhtg== X-Google-Smtp-Source: AGHT+IEHfjaTZRZfDMJYPck6kXnX1JBWaLcqkkhslMQleRPP0Pkq3lI5GI5FsmPDNJcncd51cq2pjG5tjEd5 X-Received: from dybpz21.prod.google.com ([2002:a05:7301:6895:b0:2a4:7f69:5b62]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a05:693c:8007:b0:2a4:3592:cf76 with SMTP id 5a478bee46e88-2a941894aebmr14804539eec.26.1764697969412; Tue, 02 Dec 2025 09:52:49 -0800 (PST) Date: Tue, 2 Dec 2025 09:50:16 -0800 In-Reply-To: <20251202175043.623597-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: <20251202175043.623597-1-irogers@google.com> X-Mailer: git-send-email 2.52.0.158.g65b55ccf14-goog Message-ID: <20251202175043.623597-22-irogers@google.com> Subject: [PATCH v9 21/48] perf jevents: Add uncore l3 metric group for AMD From: Ian Rogers To: Adrian Hunter , Alexander Shishkin , Arnaldo Carvalho de Melo , Benjamin Gray , Caleb Biggers , Edward Baker , Ian Rogers , Ingo Molnar , James Clark , Jing Zhang , Jiri Olsa , John Garry , Leo Yan , Namhyung Kim , Perry Taylor , Peter Zijlstra , Samantha Alt , Sandipan Das , Thomas Falcon , Weilin Wang , Xu Yang , linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Metrics use the amd_l3 PMU for access/miss/hit information. Signed-off-by: Ian Rogers Reviewed-by: Sandipan Das --- tools/perf/pmu-events/amd_metrics.py | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/tools/perf/pmu-events/amd_metrics.py b/tools/perf/pmu-events/a= md_metrics.py index 2d1d25cb40b2..6542c334a82b 100755 --- a/tools/perf/pmu-events/amd_metrics.py +++ b/tools/perf/pmu-events/amd_metrics.py @@ -316,6 +316,24 @@ def Rapl() -> MetricGroup: description=3D"Processor socket power consumption e= stimates") =20 =20 +def UncoreL3(): + acc =3D Event("l3_lookup_state.all_coherent_accesses_to_l3", + "l3_lookup_state.all_l3_req_typs") + miss =3D Event("l3_lookup_state.l3_miss", + "l3_comb_clstr_state.request_miss") + acc =3D max(acc, miss) + hits =3D acc - miss + + return MetricGroup("lpm_l3", [ + Metric("lpm_l3_accesses", "L3 victim cache accesses", + d_ratio(acc, interval_sec), "accesses/sec"), + Metric("lpm_l3_hits", "L3 victim cache hit rate", + d_ratio(hits, acc), "100%"), + Metric("lpm_l3_miss", "L3 victim cache miss rate", d_ratio(miss, a= cc), + "100%"), + ], description=3D"L3 cache breakdown per CCX") + + def main() -> None: global _args global _zen_model @@ -350,6 +368,7 @@ def main() -> None: AmdUpc(), Idle(), Rapl(), + UncoreL3(), ]) =20 if _args.metricgroups: --=20 2.52.0.158.g65b55ccf14-goog From nobody Wed Dec 10 20:09:24 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 E39DB2D0C9F for ; Tue, 2 Dec 2025 17:52:55 +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=1764697977; cv=none; b=r7GNCrO10hDiRiKRuTyaNyvGu1jXxYQeeGrRD2Sph0uyJQ/NfgV/TEeQGiFHzmFhLobuCf0V1+FVUmV2DAy8JuFHHyIbt+7oFpJfV7YYBMwWSk5y0B177ZLflnZ6ODqre1H5p3TCoQl+/qWaBeqEBGWsnKdWZGTfHKak+mIyq7o= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764697977; c=relaxed/simple; bh=kTkOlBIJKFVpgDZYQVXbOsVlRCh+YA44NAPEapYMCdE=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=tl08FxzhJqLNqj/wbDJCcNGUZL3pZnNJWhK7Gm0ZvDqSWx+/Lx5+kSChxOt5qVgkys6fae2LWxhELue7bw6urTKGb74nAG5qRhOt7BoBw/77ldmOpmXzIaoJbhKcURbXbhH5ZX72/OsGJvF2ecWP1f0L3YUrkyLZ9uU6xiUB9mc= 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=zycqXALp; 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="zycqXALp" Received: by mail-pl1-f202.google.com with SMTP id d9443c01a7336-2956a694b47so76176445ad.1 for ; Tue, 02 Dec 2025 09:52:55 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1764697975; x=1765302775; 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=TS+Q5DB4gJiG0aFc7TcLfBzsroYZtgDDk57R7SBmbvE=; b=zycqXALpcuQ+haMc0F/rq7tiEXxmzzxJVj/2nN1cqlJkdySQJIhiaM2QYc1AAmP4wv /3oLbbabNcR5MRhMic4DPvMTiqrJY2ImS5hTg9FUh2wJ/lx6q/Vp/W/YepO6+mcygEEK F7b3Foh1PdKj5+uyUdpNhYqxL0uVTBdrA3FpoKpNmCEGf2TdAIAr5eNggxpIfqPJu7IM dKf5G5I2XxoN5rO767FXiwoL3dLiA4J+VHWAqcYz+lOzTEHKI4taziSuWfOcuB1OkSmB Stwsz2zRsLOFFzvewi2J41N2ztUItsc3AOsMcSBw9jZ7DD4UG/plj1QERPNcHLJ6UXRS MM6Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1764697975; x=1765302775; 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=TS+Q5DB4gJiG0aFc7TcLfBzsroYZtgDDk57R7SBmbvE=; b=UMECQj5O3pGzpUVl064PWZPYYMMXU4RbIQyWYwwm7JHS2Xi5sphfQcUZH/0WBjlDaU qIUArFSIsxIF7QCpHGxAl6LKzEy9JVrpGZkDYs47UKin1pMan+oN1o+YjFhYN5xeZPpU XnPRenFjIC2CF8ySBjpGSNMSikriXDISzruX5GIIb1GdpjX+xiK0MWWQyrczm6PFMdPR AbFSRkZci/X1FHRC6V4jm27z9rEo6wvwcA5ODus5CiBGn9+caKea44ek3iJS/iMcNGf7 ekx5WAwYxm2bD6UAh1H8qg9qwJIRhSNMJXRF6NpP1Q2uC6anLXu1asEmk8IRA+zZiqeG Q4hA== X-Forwarded-Encrypted: i=1; AJvYcCW6NVbjIDvxPomrnjKZ8LrywDChCT4LO+m9HL6rmHgBvh2pqmgQ1GKar/EbhfJzJGzd10u1GFoCWic6FTo=@vger.kernel.org X-Gm-Message-State: AOJu0YxOVRbYPMjZ4cIY53/y+K8rGjUx0BTuRhjmTxrpMkOu6Y7BZ7u2 YZC7fs/Vj43+O9qiymG6b+jGgt0fu7sLEvRNCwofwGyqxUkP6W3IjeQ4/kEwGq1QcbZjQFDIc/L 7yBB2wHDZCw== X-Google-Smtp-Source: AGHT+IEkHQDnLBjyBIwheHxosvhCSI7hPRmIVCaH15lVvbze6EciB3E3gboKpRgG+yWoAuWtIahfLrpODLo/ X-Received: from plme20.prod.google.com ([2002:a17:903:4914:b0:296:18d:ea19]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a17:903:11cc:b0:295:223b:cdee with SMTP id d9443c01a7336-29baaf9a98dmr325125165ad.14.1764697974923; Tue, 02 Dec 2025 09:52:54 -0800 (PST) Date: Tue, 2 Dec 2025 09:50:17 -0800 In-Reply-To: <20251202175043.623597-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: <20251202175043.623597-1-irogers@google.com> X-Mailer: git-send-email 2.52.0.158.g65b55ccf14-goog Message-ID: <20251202175043.623597-23-irogers@google.com> Subject: [PATCH v9 22/48] perf jevents: Add load store breakdown metrics ldst for AMD From: Ian Rogers To: Adrian Hunter , Alexander Shishkin , Arnaldo Carvalho de Melo , Benjamin Gray , Caleb Biggers , Edward Baker , Ian Rogers , Ingo Molnar , James Clark , Jing Zhang , Jiri Olsa , John Garry , Leo Yan , Namhyung Kim , Perry Taylor , Peter Zijlstra , Samantha Alt , Sandipan Das , Thomas Falcon , Weilin Wang , Xu Yang , linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Give breakdown of number of instructions. Use the counter mask (cmask) to show the number of cycles taken to retire the instructions. Signed-off-by: Ian Rogers Reviewed-by: Sandipan Das --- tools/perf/pmu-events/amd_metrics.py | 75 ++++++++++++++++++++++++++++ 1 file changed, 75 insertions(+) diff --git a/tools/perf/pmu-events/amd_metrics.py b/tools/perf/pmu-events/a= md_metrics.py index 6542c334a82b..1611d0e50d03 100755 --- a/tools/perf/pmu-events/amd_metrics.py +++ b/tools/perf/pmu-events/amd_metrics.py @@ -279,6 +279,80 @@ def AmdItlb(): ], description=3D"Instruction TLB breakdown") =20 =20 +def AmdLdSt() -> MetricGroup: + ldst_ld =3D Event("ls_dispatch.ld_dispatch") + ldst_st =3D Event("ls_dispatch.store_dispatch") + ldst_ldc1 =3D Event(f"{ldst_ld}/cmask=3D1/") + ldst_stc1 =3D Event(f"{ldst_st}/cmask=3D1/") + ldst_ldc2 =3D Event(f"{ldst_ld}/cmask=3D2/") + ldst_stc2 =3D Event(f"{ldst_st}/cmask=3D2/") + ldst_ldc3 =3D Event(f"{ldst_ld}/cmask=3D3/") + ldst_stc3 =3D Event(f"{ldst_st}/cmask=3D3/") + ldst_cyc =3D Event("ls_not_halted_cyc") + + ld_rate =3D d_ratio(ldst_ld, interval_sec) + st_rate =3D d_ratio(ldst_st, interval_sec) + + ld_v1 =3D max(ldst_ldc1 - ldst_ldc2, 0) + ld_v2 =3D max(ldst_ldc2 - ldst_ldc3, 0) + ld_v3 =3D ldst_ldc3 + + st_v1 =3D max(ldst_stc1 - ldst_stc2, 0) + st_v2 =3D max(ldst_stc2 - ldst_stc3, 0) + st_v3 =3D ldst_stc3 + + return MetricGroup("lpm_ldst", [ + MetricGroup("lpm_ldst_total", [ + Metric("lpm_ldst_total_ld", "Number of loads dispatched per se= cond.", + ld_rate, "insns/sec"), + Metric("lpm_ldst_total_st", "Number of stores dispatched per s= econd.", + st_rate, "insns/sec"), + ]), + MetricGroup("lpm_ldst_percent_insn", [ + Metric("lpm_ldst_percent_insn_ld", + "Load instructions as a percentage of all instructions.= ", + d_ratio(ldst_ld, ins), "100%"), + Metric("lpm_ldst_percent_insn_st", + "Store instructions as a percentage of all instructions= .", + d_ratio(ldst_st, ins), "100%"), + ]), + MetricGroup("lpm_ldst_ret_loads_per_cycle", [ + Metric( + "lpm_ldst_ret_loads_per_cycle_1", + "Load instructions retiring in 1 cycle as a percentage of = all " + "unhalted cycles.", d_ratio(ld_v1, ldst_cyc), "100%"), + Metric( + "lpm_ldst_ret_loads_per_cycle_2", + "Load instructions retiring in 2 cycles as a percentage of= all " + "unhalted cycles.", d_ratio(ld_v2, ldst_cyc), "100%"), + Metric( + "lpm_ldst_ret_loads_per_cycle_3", + "Load instructions retiring in 3 or more cycles as a perce= ntage" + "of all unhalted cycles.", d_ratio(ld_v3, ldst_cyc), "100%= "), + ]), + MetricGroup("lpm_ldst_ret_stores_per_cycle", [ + Metric( + "lpm_ldst_ret_stores_per_cycle_1", + "Store instructions retiring in 1 cycle as a percentage of= all " + "unhalted cycles.", d_ratio(st_v1, ldst_cyc), "100%"), + Metric( + "lpm_ldst_ret_stores_per_cycle_2", + "Store instructions retiring in 2 cycles as a percentage o= f all " + "unhalted cycles.", d_ratio(st_v2, ldst_cyc), "100%"), + Metric( + "lpm_ldst_ret_stores_per_cycle_3", + "Store instructions retiring in 3 or more cycles as a perc= entage" + "of all unhalted cycles.", d_ratio(st_v3, ldst_cyc), "100%= "), + ]), + MetricGroup("lpm_ldst_insn_bt", [ + Metric("lpm_ldst_insn_bt_ld", "Number of instructions between = loads.", + d_ratio(ins, ldst_ld), "insns"), + Metric("lpm_ldst_insn_bt_st", "Number of instructions between = stores.", + d_ratio(ins, ldst_st), "insns"), + ]) + ], description=3D"Breakdown of load/store instructions") + + def AmdUpc() -> Metric: ops =3D Event("ex_ret_ops", "ex_ret_cops") upc =3D d_ratio(ops, smt_cycles) @@ -365,6 +439,7 @@ def main() -> None: AmdBr(), AmdDtlb(), AmdItlb(), + AmdLdSt(), AmdUpc(), Idle(), Rapl(), --=20 2.52.0.158.g65b55ccf14-goog From nobody Wed Dec 10 20:09:24 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 5E41D2D0C9F for ; Tue, 2 Dec 2025 17:53:01 +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=1764697982; cv=none; b=OdGL73DnVY6yZnMYJAtmKpH/N0o7j472Fa2sstEDIyqQL/UszfMXp4LXiWXdYIToPV0Nb+f5VzIXzm7yABP8vmwWLR3wnzko0JjT9TuZIfB3EkOr3YsjjRE6doCoYYzLiPgZRUrhkd/14pKBf04O+6wU7MNVQmPaHNbfrNDKHRk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764697982; c=relaxed/simple; bh=r8rpLVrS1WCsfiUVjJPLdiZi/CyfJ0dVjD2Ow5HDNOI=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=EXMtXiB5s0fOqAfSx/Pcc/JUL7xQiq3fI+k3fe53RJgKzCT5tMnKaAJnVy3LnKVQQjnREMXUu7oTj40i/klw+RDJ/VfeUiR30Libjg3B9gfcfPTvEL/NiNIjYWsOHrSWcIADccBWHJo2dHSyGOc/r2MNnCm5FgMq9fA2+xYLab8= 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=j4eQZEZ1; 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="j4eQZEZ1" Received: by mail-pg1-f202.google.com with SMTP id 41be03b00d2f7-b6ce1b57b9cso5903988a12.1 for ; Tue, 02 Dec 2025 09:53:01 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1764697981; x=1765302781; 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=jUiA3gNMxDf8FZhjNyB3YB22SrGf75zcAkH72eX2LVQ=; b=j4eQZEZ17B0Aw8FkwtNTlyKE9AVH69qjZb0nlJnfk/nmkti5uIn5G/Wzf5mZVHetMv H77bWNsi0Y+mZE7wXrIDKherFlBGea/hlKJvI4sQ5z4as4Lki79pw4Lb/VTLf2X2cVLQ YbvQqEnS9WBkGqtpKKzWGxiaJ/VpfEOSQNi7NFnbOvqfuJn0jbStqueCnC/BOjXJKryh 0zEfNWCro9IvPsqeUD2ZZUZTrhmedKRZ0j9kX1QCNs61s36HgSwU/Cm45vbVbaXr6QTF T6I1ioy9fX5P5iXZj8t/havSGj9J8QXJ/S6SnoncWhflTnsvJ7tkzvtKO5R1rSjRHzZX 43ag== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1764697981; x=1765302781; 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=jUiA3gNMxDf8FZhjNyB3YB22SrGf75zcAkH72eX2LVQ=; b=paeg9Aj1lN926pS0JaYTy/IqKmJpKoZsPiwXracQFbCuvBcECK89K049woVO6ikkfF aiJJC1vN8Gv1niNkYpVQ+e5G6XhJiCx5i4m+QQtnTOoRmbP25Hs7lTaPcgxIzFLzrGBl nWfJT4OGqNsiDX5stwZ+RsjUNYrJ3Mqtw2l4J5xwy1iVJG5Rx2DudE8sFZKuneLFhwCF j00DYlKBS1REGVGSyWlromrnwsy4cdu9Lpa94o9yUIf0El5Mk+MtzL9+QiwrGuKK2+RV I38KbKHBSohDnOT8iJhc1IdGlPvyqwOroYQ1iLSQ/YSVC6oEJ3In8iCtkuJ6zp3QJNzE 7ZGg== X-Forwarded-Encrypted: i=1; AJvYcCUG/xUV+NngPcaNW26gngePapV7DsPUvTkX6mjOtRRLg6qmOClxrhlTNA0bP82HMWp4eUwVadHLJLBMuW4=@vger.kernel.org X-Gm-Message-State: AOJu0YzK6w60ByV15/p3qNvaA8+sqQ386PgOgH4aTJMc94sq4TqxELmw Sv04uyQbEUV/8zmsDsb0zEOvIqMERnTdigTgA5wQ2JJ63z+17F1VgeQpPRK59XN4GGa2TiP9jNY rEFjerD6wAQ== X-Google-Smtp-Source: AGHT+IH821OtnWUvyDQo2z23/9Td6JbIrt4k9P+rIq6vafQShO5B9kzYVTIYGmiKaAvO67TUUnToOtgvKoV4 X-Received: from dlbvs12.prod.google.com ([2002:a05:7022:3f0c:b0:119:49ca:6b8c]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a05:7022:429f:b0:11a:51a8:eca with SMTP id a92af1059eb24-11defca683amr172723c88.18.1764697980739; Tue, 02 Dec 2025 09:53:00 -0800 (PST) Date: Tue, 2 Dec 2025 09:50:18 -0800 In-Reply-To: <20251202175043.623597-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: <20251202175043.623597-1-irogers@google.com> X-Mailer: git-send-email 2.52.0.158.g65b55ccf14-goog Message-ID: <20251202175043.623597-24-irogers@google.com> Subject: [PATCH v9 23/48] perf jevents: Add context switch metrics for AMD From: Ian Rogers To: Adrian Hunter , Alexander Shishkin , Arnaldo Carvalho de Melo , Benjamin Gray , Caleb Biggers , Edward Baker , Ian Rogers , Ingo Molnar , James Clark , Jing Zhang , Jiri Olsa , John Garry , Leo Yan , Namhyung Kim , Perry Taylor , Peter Zijlstra , Samantha Alt , Sandipan Das , Thomas Falcon , Weilin Wang , Xu Yang , linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Metrics break down context switches for different kinds of instruction. Signed-off-by: Ian Rogers Reviewed-by: Sandipan Das --- tools/perf/pmu-events/amd_metrics.py | 33 ++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/tools/perf/pmu-events/amd_metrics.py b/tools/perf/pmu-events/a= md_metrics.py index 1611d0e50d03..780e611fe575 100755 --- a/tools/perf/pmu-events/amd_metrics.py +++ b/tools/perf/pmu-events/amd_metrics.py @@ -121,6 +121,38 @@ def AmdBr(): description=3D"breakdown of retired branch instruct= ions") =20 =20 +def AmdCtxSw() -> MetricGroup: + cs =3D Event("context\\-switches") + metrics =3D [ + Metric("lpm_cs_rate", "Context switches per second", + d_ratio(cs, interval_sec), "ctxsw/s") + ] + + ev =3D Event("instructions") + metrics.append(Metric("lpm_cs_instr", "Instructions per context switch= ", + d_ratio(ev, cs), "instr/cs")) + + ev =3D Event("cycles") + metrics.append(Metric("lpm_cs_cycles", "Cycles per context switch", + d_ratio(ev, cs), "cycles/cs")) + + ev =3D Event("ls_dispatch.ld_dispatch") + metrics.append(Metric("lpm_cs_loads", "Loads per context switch", + d_ratio(ev, cs), "loads/cs")) + + ev =3D Event("ls_dispatch.store_dispatch") + metrics.append(Metric("lpm_cs_stores", "Stores per context switch", + d_ratio(ev, cs), "stores/cs")) + + ev =3D Event("ex_ret_brn_tkn") + metrics.append(Metric("lpm_cs_br_taken", "Branches taken per context s= witch", + d_ratio(ev, cs), "br_taken/cs")) + + return MetricGroup("lpm_cs", metrics, + description=3D("Number of context switches per seco= nd, instructions " + "retired & core cycles between context= switches")) + + def AmdDtlb() -> Optional[MetricGroup]: global _zen_model if _zen_model >=3D 4: @@ -437,6 +469,7 @@ def main() -> None: =20 all_metrics =3D MetricGroup("", [ AmdBr(), + AmdCtxSw(), AmdDtlb(), AmdItlb(), AmdLdSt(), --=20 2.52.0.158.g65b55ccf14-goog From nobody Wed Dec 10 20:09:24 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 023B92C21E7 for ; Tue, 2 Dec 2025 17:53:08 +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=1764697989; cv=none; b=eNoVbSk+Doap5BtAnjo2ineo9BhA4OWY1sf+jc8fhkPlg7Z9rIwHWfEg55SQ8WbDfwQW8OGML479sQ17sa3JJQmKRbW663h4TdeKiXXJn3aVAvbLaEW8QR8BGHmPFVuTBKHqLcW4esmiWgNI/IOYQGCSqN78PO7YOmiYpdkib/w= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764697989; c=relaxed/simple; bh=5mmTiR/WJyjaVLTiTNGv2bo9L0MYRPzWYdyii7ZtuSQ=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=KsOr+zp+6u28AtdgNM5qkNYzMumRGCqVojCDAeUamZqTKs8WPbjWTIMIr740dpzV8TJDnhMfZoxP0ZR0LeHIpUVfrGbXtm1H1kSe7Ra1Sz/yyFIAhc4JRJve8EP7AbzU9ejaD/49sMNlEKrmoEIEdtc7LcC+LVPWzUVxZbWTvow= 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=KpFHUVmo; 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="KpFHUVmo" Received: by mail-pg1-f201.google.com with SMTP id 41be03b00d2f7-bc2a04abc5aso4765749a12.2 for ; Tue, 02 Dec 2025 09:53:07 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1764697987; x=1765302787; 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=R7HjkajWfkEC04/U222ST7CLZ7XFSPYL+9rF1yjcsAU=; b=KpFHUVmooT7SvVpSRGvXtL4HLXHFaMqGevj4C846oR9m/zpNMcikA52WG/lhE8z8x3 2vL0vGbAlfyJu3/EKCc0s6b2kogoB+Etc6EjSrtNQl1Ou3Byikn+789aE1qhWrmPm7JH jcxs+FNOzp41dNqZXCzFJ8ymmuZjEEW5fhBpDpeJr1FckJomBIwsbHWFCYzsLhDOAn6G ZbZbxKuKi6rWA4cfL9Rr65adi9GFldTEwff4dBJ38oaT7GDg+CeGW2rgg4O+Mq2G2RbY wvkmw9iw+JrNHsk9zRPyhg6FNLGs4GebWwrsH3GHXv70fQPfY6SF9oHpWZnhMTHFpB5U NljQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1764697987; x=1765302787; 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=R7HjkajWfkEC04/U222ST7CLZ7XFSPYL+9rF1yjcsAU=; b=IrxlA32zALffOukHjGaXGsxhlL8bAScui1N8jlLyrJUB6/zcn1/w0WRMDVVLf5BnvF Nnw+LaS1w0Pv6F6hAMdCW3/hFIJnTju5cmqadco+geec/nvnlRzlku0CtUbR7vpu3+9G NWnPxKiFEE1SpI4ZuAK4h74WyNtacufVXUEXqC9DrZoQ6BWUcd2fQAy3Lt8TRyCgmgSU jNm6doWqYqVvRqqmJls5fGrq9ZR/XjzLSbvNrGvaSDBlpXfP4EEu5mn2eXwZpTIQgcZn quohP+SsUr+E+Rm5SYQW5nPYDrG3vC7ONKz0OQ5TzRWXDTn7YNA+uP7KBRTA/TPF/GsA /09w== X-Forwarded-Encrypted: i=1; AJvYcCUMawZamscid76wDaC9OEnzXPYS1dkFuk4qXPb6/GU/ffBgqe92FuGHOA+9xeEEpyBjaJ/G8G4I7u7LkdA=@vger.kernel.org X-Gm-Message-State: AOJu0YzS5PH4fEzLFUITH9DIAd5WK6s0iSJCvBvoucbMsWRXw9WvlVGc MpKRhYUMpwz4D6GbzVkkLi4CHlCzpuPN/o4dCgvMV+mloEWjeN1wgsvcMz2XrZ6mgqZ/Rvmh38P 0mY23dDMpGw== X-Google-Smtp-Source: AGHT+IFAIZahcGo8K4p7plFuV5Qd/nBrjV5LmDs7iw1PoHYNyRz1HcPjQAzcrleklbjkK/Ml/JItCFmoIo4z X-Received: from dyhg18.prod.google.com ([2002:a05:7300:14d2:b0:2a4:5ebc:ca00]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a05:7300:8e:b0:2a4:3593:467c with SMTP id 5a478bee46e88-2a941761241mr13328248eec.24.1764697987373; Tue, 02 Dec 2025 09:53:07 -0800 (PST) Date: Tue, 2 Dec 2025 09:50:19 -0800 In-Reply-To: <20251202175043.623597-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: <20251202175043.623597-1-irogers@google.com> X-Mailer: git-send-email 2.52.0.158.g65b55ccf14-goog Message-ID: <20251202175043.623597-25-irogers@google.com> Subject: [PATCH v9 24/48] perf jevents: Add RAPL metrics for all Intel models From: Ian Rogers To: Adrian Hunter , Alexander Shishkin , Arnaldo Carvalho de Melo , Benjamin Gray , Caleb Biggers , Edward Baker , Ian Rogers , Ingo Molnar , James Clark , Jing Zhang , Jiri Olsa , John Garry , Leo Yan , Namhyung Kim , Perry Taylor , Peter Zijlstra , Samantha Alt , Sandipan Das , Thomas Falcon , Weilin Wang , Xu Yang , linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Add a 'cpu_power' metric group that computes the power consumption from RAPL events if they are present. Signed-off-by: Ian Rogers Tested-by: Thomas Falcon --- tools/perf/pmu-events/intel_metrics.py | 44 ++++++++++++++++++++++++-- 1 file changed, 41 insertions(+), 3 deletions(-) diff --git a/tools/perf/pmu-events/intel_metrics.py b/tools/perf/pmu-events= /intel_metrics.py index b287ef115193..61778deedfff 100755 --- a/tools/perf/pmu-events/intel_metrics.py +++ b/tools/perf/pmu-events/intel_metrics.py @@ -1,12 +1,48 @@ #!/usr/bin/env python3 # SPDX-License-Identifier: (LGPL-2.1 OR BSD-2-Clause) import argparse +import math import os -from metric import (JsonEncodeMetric, JsonEncodeMetricGroupDescriptions, L= oadEvents, - MetricGroup) +from metric import (d_ratio, has_event, Event, JsonEncodeMetric, JsonEncod= eMetricGroupDescriptions, + LoadEvents, Metric, MetricGroup, Select) =20 # Global command line arguments. _args =3D None +interval_sec =3D Event("duration_time") + + +def Rapl() -> MetricGroup: + """Processor power consumption estimate. + + Use events from the running average power limit (RAPL) driver. + """ + # Watts =3D joules/second + pkg =3D Event("power/energy\\-pkg/") + cond_pkg =3D Select(pkg, has_event(pkg), math.nan) + cores =3D Event("power/energy\\-cores/") + cond_cores =3D Select(cores, has_event(cores), math.nan) + ram =3D Event("power/energy\\-ram/") + cond_ram =3D Select(ram, has_event(ram), math.nan) + gpu =3D Event("power/energy\\-gpu/") + cond_gpu =3D Select(gpu, has_event(gpu), math.nan) + psys =3D Event("power/energy\\-psys/") + cond_psys =3D Select(psys, has_event(psys), math.nan) + scale =3D 2.3283064365386962890625e-10 + metrics =3D [ + Metric("lpm_cpu_power_pkg", "", + d_ratio(cond_pkg * scale, interval_sec), "Watts"), + Metric("lpm_cpu_power_cores", "", + d_ratio(cond_cores * scale, interval_sec), "Watts"), + Metric("lpm_cpu_power_ram", "", + d_ratio(cond_ram * scale, interval_sec), "Watts"), + Metric("lpm_cpu_power_gpu", "", + d_ratio(cond_gpu * scale, interval_sec), "Watts"), + Metric("lpm_cpu_power_psys", "", + d_ratio(cond_psys * scale, interval_sec), "Watts"), + ] + + return MetricGroup("lpm_cpu_power", metrics, + description=3D"Running Average Power Limit (RAPL) p= ower consumption estimates") =20 =20 def main() -> None: @@ -33,7 +69,9 @@ def main() -> None: directory =3D f"{_args.events_path}/x86/{_args.model}/" LoadEvents(directory) =20 - all_metrics =3D MetricGroup("", []) + all_metrics =3D MetricGroup("", [ + Rapl(), + ]) =20 if _args.metricgroups: print(JsonEncodeMetricGroupDescriptions(all_metrics)) --=20 2.52.0.158.g65b55ccf14-goog From nobody Wed Dec 10 20:09:24 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 C7D8E2C2365 for ; Tue, 2 Dec 2025 17:53:12 +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=1764697994; cv=none; b=IsXYm99We9HsHN5/TtvVAbdsZdUns5Ib28toD4ohq46MMNpAVclkeCIolAyip/byx7IqVz9KUjitCdtiEEQb+49PckX1hNzMSwhPFPJcvnLksuJGX4wuzfG1PWPL5pwwFE4TNOnXVemhYSuGRH01fsU2oMw2ZJdp6kDbQzOeHls= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764697994; c=relaxed/simple; bh=zTw6DkOSVf0F/qSIutgGSo77kwsZlVorjN3UVKyYD4M=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=KLYd2O8xV9c1Ktg5Lc8kfdB+xL2mwAr0KbLs8Smj/z4ZWnZdFc1fBOU483Xwon5Dt9SxFkYWoWhnumd56N53mbZFDg1Vy+WoTQBc5mpZ8BxX0hut5cgkvDwa6HEpAcQWHrbb4PiOHiyjhnOwVCULIFC2Z5/BuOKFneorB6YJnPA= 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=uazlIQ56; 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="uazlIQ56" Received: by mail-pg1-f202.google.com with SMTP id 41be03b00d2f7-bddf9ce4931so8482675a12.0 for ; Tue, 02 Dec 2025 09:53:12 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1764697992; x=1765302792; 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=laLU+bqUZ9A8+QjLntZJgzdut2+Z8o5wBJOg4wKYbQM=; b=uazlIQ56lMyrFXr8g4CFNpQv066GmTBBfmXPRVAliCZf8Re7Jo2voq7jYUSVmYSjjA PyqN8ReET1aRmlN5Jf5nNTJQPNygCvjonsbudJRR2krRLb98EFUdWHAXeccvTPSHww+i e7IEDIgHCfpG/jzDWF/dJw3dl0UcOaGAKIVUZgHh3rEU6oF3RUKhUhuRA1tpGfVau3xQ /nlXukulMhZc3L4R6GA4Sd3AuGOFHAxJwwnF4E3ckZo+mG4xQXVyK90qzMq2A6KBqdOW eGAlK/BM0JgvmcmmWjTLw0k+ymPKFk6Yq9Kmx08xHvqT+MbWCpHqcdFx2UzlyP6PVIrq RG5Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1764697992; x=1765302792; 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=laLU+bqUZ9A8+QjLntZJgzdut2+Z8o5wBJOg4wKYbQM=; b=CaONg5+7pTEu5z3LJy1bvCPsxBNLPvkAIo5t6t32XH+lrT0ScKMuPypDOBjSHM57E0 zZkDm+2QQ7U72PA2HeYLFiT0/pTd+IjbOog23tVq7eqyjkdrDf1xr9ZpGJU+8bA8GpOI tat4qiLjIke2rZT4bdoFamtuymbVtA24yQt7bfR36yAAzinL7fnW/28zq33GlxOsorLe +oy5eIqpVa0yrbVNejXX+7MqtK9eFvTAnuY77fq2qVEj63hsJ6ggKFbfY7jlB84NTXle Fx8SCVUzirLKA+pc48HKxBPDMb1Q7ogzbV12tyRZ6b3bY5kiWL9pysbL4EI6zVEqw69g uLEw== X-Forwarded-Encrypted: i=1; AJvYcCV2S+BnL8ZDGt8uP9ZZkaN9Lb3CZE/WYLT/jgHFId/4c1PCiWHzSa/QwWhjj8QScEbWoRLEq8f54jdbiHU=@vger.kernel.org X-Gm-Message-State: AOJu0YzP0uWzlMjOvOA+IuWKCl/2kc2HGSoxla8gjcxkghRv6VPnXcBH cK7Yv1ZwQDOcjHUVekgp0uddLvXIQSg2BT771qoHWia8u3i40skY0VWnAab0FMFD1a7hqeoFLWd ZXOK2t9FA9Q== X-Google-Smtp-Source: AGHT+IH0f740k1nynPkNZrGUCMK3taQuASVA8hxswR0DLqFkIfrVi05SRxI3QobJMtTWtRjWRWhckPqPEXmX X-Received: from dybue14.prod.google.com ([2002:a05:7300:f64e:b0:2a4:7a56:1730]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a05:7300:6d21:b0:2a4:3594:d545 with SMTP id 5a478bee46e88-2ab8fb2bccbmr225721eec.18.1764697992140; Tue, 02 Dec 2025 09:53:12 -0800 (PST) Date: Tue, 2 Dec 2025 09:50:20 -0800 In-Reply-To: <20251202175043.623597-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: <20251202175043.623597-1-irogers@google.com> X-Mailer: git-send-email 2.52.0.158.g65b55ccf14-goog Message-ID: <20251202175043.623597-26-irogers@google.com> Subject: [PATCH v9 25/48] perf jevents: Add idle metric for Intel models From: Ian Rogers To: Adrian Hunter , Alexander Shishkin , Arnaldo Carvalho de Melo , Benjamin Gray , Caleb Biggers , Edward Baker , Ian Rogers , Ingo Molnar , James Clark , Jing Zhang , Jiri Olsa , John Garry , Leo Yan , Namhyung Kim , Perry Taylor , Peter Zijlstra , Samantha Alt , Sandipan Das , Thomas Falcon , Weilin Wang , Xu Yang , linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Compute using the msr PMU the percentage of wallclock cycles where the CPUs are in a low power state. Signed-off-by: Ian Rogers Tested-by: Thomas Falcon --- tools/perf/pmu-events/intel_metrics.py | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/tools/perf/pmu-events/intel_metrics.py b/tools/perf/pmu-events= /intel_metrics.py index 61778deedfff..0cb7a38ad238 100755 --- a/tools/perf/pmu-events/intel_metrics.py +++ b/tools/perf/pmu-events/intel_metrics.py @@ -3,14 +3,25 @@ import argparse import math import os -from metric import (d_ratio, has_event, Event, JsonEncodeMetric, JsonEncod= eMetricGroupDescriptions, - LoadEvents, Metric, MetricGroup, Select) +from metric import (d_ratio, has_event, max, Event, JsonEncodeMetric, + JsonEncodeMetricGroupDescriptions, LoadEvents, Metric, + MetricGroup, Select) =20 # Global command line arguments. _args =3D None interval_sec =3D Event("duration_time") =20 =20 +def Idle() -> Metric: + cyc =3D Event("msr/mperf/") + tsc =3D Event("msr/tsc/") + low =3D max(tsc - cyc, 0) + return Metric( + "lpm_idle", + "Percentage of total wallclock cycles where CPUs are in low power = state (C1 or deeper sleep state)", + d_ratio(low, tsc), "100%") + + def Rapl() -> MetricGroup: """Processor power consumption estimate. =20 @@ -70,6 +81,7 @@ def main() -> None: LoadEvents(directory) =20 all_metrics =3D MetricGroup("", [ + Idle(), Rapl(), ]) =20 --=20 2.52.0.158.g65b55ccf14-goog From nobody Wed Dec 10 20:09:24 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 5792D2D4B5A for ; Tue, 2 Dec 2025 17:53:18 +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=1764697999; cv=none; b=SErnUMUWZgdSMAKRElbPnXcucP3qipoCtIzHsMy/Fe0wWv4LGILylyD7kSk6c5VMwWk8+Si7PRQy1HkWw8u/4TagXaCOyARCM/+JuYviiZn/CmxyifEtoNouRyQCz41KGKZawzUSlGgHDDf2bxMz0CykED7XmBrGc4m8MzBlwE4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764697999; c=relaxed/simple; bh=0DvT/kiE3vDrT5HO98Kd9HGHFwaVslnLeu4gouFC/WU=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=dO7enLHT7ABzTs3c8tlgfBbpAQIUALU4iaMCXA4m0wrlQ5DeZ6csupkz1QvwqC0PXB4Px4HKlwaeUfJFK22Qp4MolgLzSVrXq3TzpLJDM4kldL1deiiTezGTFLMLGC0zRSsN3isRigjApI9un9UU2c2qA18UPO/MujL7JAaqez4= 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=1JBoHo6O; 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="1JBoHo6O" Received: by mail-pg1-f202.google.com with SMTP id 41be03b00d2f7-b98e6ff908aso12794854a12.2 for ; Tue, 02 Dec 2025 09:53:18 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1764697998; x=1765302798; 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=XkviML1WbWjNToyw1Pdo6Gg+vsZfxTwblnh9KfvYqw4=; b=1JBoHo6O9+oMe/ARGxUBOAVQ3JUIVnh10oTcAVR7Nem9tJdsz/WDYXqUXww/ubB0+K DhZTYq4qRAq1QASEcA5d7Zv2B0hrzmoMK5867UjAJ4kM8tiYhbiFYOJndbUgaEEBFWDW t8cg58JCPKeYvLsP1qrpP8/Ip/omp2GOFU2c/0wS/trSUUR6QWEburfqWtihiG6kRLvd GehSXiOubvLdo9RshfdnCFHg+qErLpz6ABDyhLLSMKOIj6sscc18mGUhf86JaSfL+P8o T2/4KKllVJFR5Q3FssCo9dfWkAAMk+vSUsjJ5vpo44San6oCKHbGZdL4uEQQgoE7CodY WfHw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1764697998; x=1765302798; 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=XkviML1WbWjNToyw1Pdo6Gg+vsZfxTwblnh9KfvYqw4=; b=aWwx2QxboO2MK6oIq0rJ3xRPxuRH8p0kPP5XzNOewjD30iYucRzB40vo36DZ+cAHWB LVvAJLNXQ1Z4Y9bQ0HNCjQuQfobagn4EFcdhxlUPpUxf+6omhqeaogC/WA8+Go1tbHos 3PE2ckmu6dGZQPMJ6sTi6FgiRxUqu/K9yd2CknGs5sUkOc1QSVl71gXcY8UiVQVnz/7o cvHxw3Px9c9wZetWAJv+JTGnf/q6nTtIaE6BkezRS7fcmm4G5ilnRgmIhe9x/pCoDsr8 GQINXBLRc1zhxD4SYhFLiU+4RptaT+AfIS3BS8hLs2xEYpc9OHQVpzBB5JluOvlxf5Ie vlPA== X-Forwarded-Encrypted: i=1; AJvYcCXmJ4eAv+xUWQ54O5GgMrcV0cdYmQiqKAyIeXCzPlRtcdmDKHcPlBdHIDby4XtLznQK6019xla6WDq5bMU=@vger.kernel.org X-Gm-Message-State: AOJu0YymFeDQ/0qDWsD33xqJIn6ZsSWZkLyjliv60rXFah8MXNfimeae 6OAuIJfDQemEq/vBcWZx+T7AjBuCGZsPT12QaCP9ve/pnzF73cghaODgKds2Ki0LF2c1h3KZpdL y2HNTWq7hDQ== X-Google-Smtp-Source: AGHT+IHooDxEK5JcM/PYoCMjCixu2mwH53pk8hETZAz0niJvf+nPh0Zz8qPLbKKgt0PCgIxZiDzXSuWuD1Ea X-Received: from dybfx7.prod.google.com ([2002:a05:7300:c387:b0:2a4:75c7:9884]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a05:7300:6424:b0:2a4:3592:cf5c with SMTP id 5a478bee46e88-2a9413be9c5mr17153733eec.0.1764697997595; Tue, 02 Dec 2025 09:53:17 -0800 (PST) Date: Tue, 2 Dec 2025 09:50:21 -0800 In-Reply-To: <20251202175043.623597-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: <20251202175043.623597-1-irogers@google.com> X-Mailer: git-send-email 2.52.0.158.g65b55ccf14-goog Message-ID: <20251202175043.623597-27-irogers@google.com> Subject: [PATCH v9 26/48] perf jevents: Add CheckPmu to see if a PMU is in loaded json events From: Ian Rogers To: Adrian Hunter , Alexander Shishkin , Arnaldo Carvalho de Melo , Benjamin Gray , Caleb Biggers , Edward Baker , Ian Rogers , Ingo Molnar , James Clark , Jing Zhang , Jiri Olsa , John Garry , Leo Yan , Namhyung Kim , Perry Taylor , Peter Zijlstra , Samantha Alt , Sandipan Das , Thomas Falcon , Weilin Wang , Xu Yang , linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" CheckPmu can be used to determine if hybrid events are present, allowing for hybrid conditional metrics/events/pmus to be premised on the json files rather than hard coded tables. Signed-off-by: Ian Rogers Tested-by: Thomas Falcon --- tools/perf/pmu-events/metric.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/tools/perf/pmu-events/metric.py b/tools/perf/pmu-events/metric= .py index e33e163b2815..62d1a1e1d458 100644 --- a/tools/perf/pmu-events/metric.py +++ b/tools/perf/pmu-events/metric.py @@ -8,10 +8,12 @@ import re from enum import Enum from typing import Dict, List, Optional, Set, Tuple, Union =20 +all_pmus =3D set() all_events =3D set() =20 def LoadEvents(directory: str) -> None: """Populate a global set of all known events for the purpose of validati= ng Event names""" + global all_pmus global all_events all_events =3D { "context\\-switches", @@ -26,6 +28,8 @@ def LoadEvents(directory: str) -> None: if filename.endswith(".json"): try: for x in json.load(open(f"{directory}/{filename}")): + if "Unit" in x: + all_pmus.add(x["Unit"]) if "EventName" in x: all_events.add(x["EventName"]) elif "ArchStdEvent" in x: @@ -36,6 +40,10 @@ def LoadEvents(directory: str) -> None: pass =20 =20 +def CheckPmu(name: str) -> bool: + return name in all_pmus + + def CheckEvent(name: str) -> bool: """Check the event name exists in the set of all loaded events""" global all_events --=20 2.52.0.158.g65b55ccf14-goog From nobody Wed Dec 10 20:09:24 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 DF5F42DC791 for ; Tue, 2 Dec 2025 17:53:23 +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=1764698005; cv=none; b=Rht0Yb/08sUXZI8vYLKRk9v0Fd5Ii3cJdRAShx8VGMFnpZ1XID4xHqsn8PpIFy9O+xvBeXiAMwFxX/2feEsb7jhWNAbp0TknbwRBbo3bBLEofkhfruRmGZXO2zaKukvVjhYpeqBk2R9eiN067INTYWnzKVxEkclbAGqgHaTRxJs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764698005; c=relaxed/simple; bh=nQD6YjF1A+Gidqbm6uH/d/x35ugs3Qa7WsbxftdnyMs=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=NE/jq+olrYKYBy5IhHVf2Kf8Tw10u2oXagoR5fqhMBf+E0qqCgGu8dU9bzbcy1zBeqWjkDESnJa+HY+POYeQTTgwZct5XQilXHb6CbPz2soUl4KDbr1rQrV7a4OfIpqzq7JcxUG6xBXcjtg4eIxwD3ZVEVEF97Z5Y0ryrml35Qc= 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=WjQ4bHfg; 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="WjQ4bHfg" Received: by mail-pg1-f202.google.com with SMTP id 41be03b00d2f7-bc0de474d4eso11552287a12.0 for ; Tue, 02 Dec 2025 09:53:23 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1764698003; x=1765302803; 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=5gHJSTe4aMe6bAXe1JeM/T8TqsDQ9XRINjSJTN9OwkY=; b=WjQ4bHfg74h8KL/Ol/nQNkxi8FT6jZAM8bWXPjpME7dgE++C8fA4hs2PawKRd8/NwR U+b7w9hdrB2s+ZU0sPYCeNMLeCOahae9Mc5A2yMX0TXE6VMm+eVD80Xs2OrwIEPti8Th 5lrduOTMe1RupfPJU2uzQ+f299wsJrN9lJYE5+cE+DfQxd+M6UCJQuVqXjXbG//lEa0x QQCsSXzt7S2rZDUT0IqwEBjzDw3FBF6U05KJmSe/uZPWkCZJkrFi5bKA0063AlK8NuY4 l7kC9Qj1DL5ts/2zhzoRl7h8Fbg0qwadVQtpwRnovm/Ejn5o/WUCaWy2bD+Ba0C2Ix+5 VhGQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1764698003; x=1765302803; 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=5gHJSTe4aMe6bAXe1JeM/T8TqsDQ9XRINjSJTN9OwkY=; b=WwMa8xjf0tI7fBDsi+cziihtX7e9nu8ZIhO9srDyuziNoRCcO+t47krw62VGsp+kLs kwpGajK5t65rgTWzAIBlyIkwQtIMBS3EF7QgVGJCHW2x3+Fcq7dGMTWxXAKYYa3rDvIU Uqjo1Zby5Dfd76qSoh/Y8w+YSjsktyiMhelRBAV1ToecM9p9/IstdrxbCTDh58BThJBW pGm8WaZKlGe1PWJwn8tQhOo/V8nXFGuf0pVVooEgyYuLMBqcvNM+IlgwMCPZHa0GHycT Fipp6PUXkmTJkhNcdVX//H5w2sA6V9Dis+nM+4Xfly00vZDy6GOWtGmiuMY9KjAbGfsW 6oBw== X-Forwarded-Encrypted: i=1; AJvYcCUaADjbG9mSkSLvLxyrfUL7nAyDJ+2CVnzb2oToZjV97RbPdrjfjiyk5+su5L6ATBqHBFcUTcxFtUZ/CyM=@vger.kernel.org X-Gm-Message-State: AOJu0YzzY1YOVZlSgo1WnMmy566gw3ZWwkY/yvYY2ctitNoJBk/CyVw1 DPMk2bnJi3A/TTvxlmPZwrsUfcwjexCF77bnJO67LrpMgIPR5Okxw1QoqRUYqC2wo+PIWTEnHg1 cgB5R4SFsOg== X-Google-Smtp-Source: AGHT+IFtGKK6M98TpiWaOOglmbgfE8ItBlen87eSw5j2d80aWIc3gkf/1OFKU/1Xk4GAVABscB5PGsX6uQt+ X-Received: from dyctx12.prod.google.com ([2002:a05:7301:5f8c:b0:2a4:7052:5652]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a05:7300:3395:b0:2a4:65bc:4053 with SMTP id 5a478bee46e88-2a9418c43c6mr13361844eec.38.1764698003274; Tue, 02 Dec 2025 09:53:23 -0800 (PST) Date: Tue, 2 Dec 2025 09:50:22 -0800 In-Reply-To: <20251202175043.623597-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: <20251202175043.623597-1-irogers@google.com> X-Mailer: git-send-email 2.52.0.158.g65b55ccf14-goog Message-ID: <20251202175043.623597-28-irogers@google.com> Subject: [PATCH v9 27/48] perf jevents: Add smi metric group for Intel models From: Ian Rogers To: Adrian Hunter , Alexander Shishkin , Arnaldo Carvalho de Melo , Benjamin Gray , Caleb Biggers , Edward Baker , Ian Rogers , Ingo Molnar , James Clark , Jing Zhang , Jiri Olsa , John Garry , Leo Yan , Namhyung Kim , Perry Taylor , Peter Zijlstra , Samantha Alt , Sandipan Das , Thomas Falcon , Weilin Wang , Xu Yang , linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Allow duplicated metric to be dropped from json files. Signed-off-by: Ian Rogers Tested-by: Thomas Falcon --- tools/perf/pmu-events/intel_metrics.py | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/tools/perf/pmu-events/intel_metrics.py b/tools/perf/pmu-events= /intel_metrics.py index 0cb7a38ad238..94604b1b07d8 100755 --- a/tools/perf/pmu-events/intel_metrics.py +++ b/tools/perf/pmu-events/intel_metrics.py @@ -3,9 +3,9 @@ import argparse import math import os -from metric import (d_ratio, has_event, max, Event, JsonEncodeMetric, +from metric import (d_ratio, has_event, max, CheckPmu, Event, JsonEncodeMe= tric, JsonEncodeMetricGroupDescriptions, LoadEvents, Metric, - MetricGroup, Select) + MetricGroup, MetricRef, Select) =20 # Global command line arguments. _args =3D None @@ -56,6 +56,25 @@ def Rapl() -> MetricGroup: description=3D"Running Average Power Limit (RAPL) p= ower consumption estimates") =20 =20 +def Smi() -> MetricGroup: + pmu =3D "" if CheckPmu("cpu_core") else "cpu" + aperf =3D Event('msr/aperf/') + cycles =3D Event('cycles') + smi_num =3D Event('msr/smi/') + smi_cycles =3D Select(Select((aperf - cycles) / aperf, smi_num > 0, 0), + has_event(aperf), + 0) + return MetricGroup('smi', [ + Metric('smi_num', 'Number of SMI interrupts.', + Select(smi_num, has_event(smi_num), 0), 'SMI#'), + # Note, the smi_cycles "Event" is really a reference to the metric. + Metric('smi_cycles', + 'Percentage of cycles spent in System Management Interrupts= . ' + f'Requires /sys/bus/event_source/devices/{pmu}/freeze_on_sm= i to be 1.', + smi_cycles, '100%', threshold=3D(MetricRef('smi_cycles') > = 0.10)) + ], description=3D'System Management Interrupt metrics') + + def main() -> None: global _args =20 @@ -83,6 +102,7 @@ def main() -> None: all_metrics =3D MetricGroup("", [ Idle(), Rapl(), + Smi(), ]) =20 if _args.metricgroups: --=20 2.52.0.158.g65b55ccf14-goog From nobody Wed Dec 10 20:09:24 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 D74F92DCC1C for ; Tue, 2 Dec 2025 17:53:29 +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=1764698011; cv=none; b=V1IoXm92q+9JYRhijxGdhHUBMAZiW+pfZqcpX7LfPeHoWvoiAY9SN8Rber+wRjM3bzIeuIzgWJGRWrRjP1yXeNprc69mV2PsQyZJfGXm4TbEeMgo3kx1ym+4NlE6el/SL/AGKaFMMs376qwnhEQOQ/tqZwT+/8kjf4HALnuGQAo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764698011; c=relaxed/simple; bh=MZXPJkMLlvQNY7LHqMpGBAhv97bAcZIryty0ZB5qdjg=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=d6gPLvYEuFdQ7nspHtOoYhV/Yx1xCEjoDFkIkzmj5bJa5rELPXPGlZSvhHEMHdd/fOyxmDRy23D8ZZYfUPkFjWFmft+kFNyIoST3xBjm0V2Tl6ASTKcCR4pHSWf9NzO29MNd2RJF4lv/ncBADFdpcib4MjIiT5nPNxkGp6VqpsE= 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=HcGtmwUq; 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="HcGtmwUq" Received: by mail-pg1-f202.google.com with SMTP id 41be03b00d2f7-b62da7602a0so5749932a12.2 for ; Tue, 02 Dec 2025 09:53:29 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1764698009; x=1765302809; 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=6yKsrOLMclOdMSfZ+6mo1yB+Cr3YWn8XAIMVSOQS/0A=; b=HcGtmwUqgrOxpCs6Sj1Ixtcy7mcDHImackitLrxcRAJwp4cGOEClyyOYwxwSVSjhuw OPwnXjlZ9bLaDQsmkrXDktzhSMfRJY4HrlyU/+s8Mpde3HL0Sz1OBwhzNgHoyBNJ+XQE uGC9FfsSivXQWy3AOG1TOg4+hWchtGXrnlU1P0GEnCuMRl3MKABAmHppdWTk+li8xZXN gbjr9g2lvLs9ZT85hzQHYMVvrXSw+EH2JRZo+tW4jNwDegJR9NipSbD27HiSxpFIK4bL RWlxrgIHH5Wc4SDo3I6dLyTuoS0EHPctvLRdjstkygHIYsfmtwjyYMvA9gNMnnwFDFr7 ht3Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1764698009; x=1765302809; 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=6yKsrOLMclOdMSfZ+6mo1yB+Cr3YWn8XAIMVSOQS/0A=; b=gy3a9rJSY1SaYQz8daDEJ9CID9DNu7kXalua/ZRktNkPJ0xp+S2SyjpwHSgKOH1jwC b7CyU3qEB3j7KqQqo6+LI32I9pL1fOhUY1tehYR/EES6brQi+h2ZLU4R7OYMY/hQ27DW NMYpKnEfsRkYMexLMZiVtEVIVUsye1S150Gw7PidpHBsbJXgVI8E5TZ2F7D+EW3+Kuce q8ew3nj6Sq5cUfZ6Vk6EV1uBvlOA+/L8pjNIwGlafvZKJm9dxUnNIcCbJWI3MghhSD4x 3GK4WIYl4L/Ea4inaA/od2CEBJKGepFtJwrMoHy+3arKHuHT4rKvHNTcRjEw9EKkJn7Q ipRA== X-Forwarded-Encrypted: i=1; AJvYcCXGcYLPmNQYZzwa7GQHrWMzvW1wW0GLmcDyYjwgNXyWazwAp9vUA6bvgKdS8W5b6IeCxlI9nYJ2rEoyyao=@vger.kernel.org X-Gm-Message-State: AOJu0YwcTl5Qp8VkQR75HXmsvCP06jpzBeUHuF9duOaoVvLnb6OFhdoE kfZuljyQgHkRU3oYmE5TNWJd4pBCUiUry75IJVg1FH97T/RQ9q+X9pt2h3QyZVzo+rOoCnvlFI8 07CbKGx/jMg== X-Google-Smtp-Source: AGHT+IFSIde/+fPa+0ZqRrpBH+S18iPNZHaJ0ifGIDW2rIQ4u05BWtnonHxrlryeIKv0J8KmlzXSZM6K5qoW X-Received: from dybmz9.prod.google.com ([2002:a05:7300:d4c9:b0:2a4:6f9d:b3cb]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a05:7022:6a9:b0:11b:9152:b3ad with SMTP id a92af1059eb24-11defcfa65fmr154636c88.31.1764698009304; Tue, 02 Dec 2025 09:53:29 -0800 (PST) Date: Tue, 2 Dec 2025 09:50:23 -0800 In-Reply-To: <20251202175043.623597-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: <20251202175043.623597-1-irogers@google.com> X-Mailer: git-send-email 2.52.0.158.g65b55ccf14-goog Message-ID: <20251202175043.623597-29-irogers@google.com> Subject: [PATCH v9 28/48] perf jevents: Mark metrics with experimental events as experimental From: Ian Rogers To: Adrian Hunter , Alexander Shishkin , Arnaldo Carvalho de Melo , Benjamin Gray , Caleb Biggers , Edward Baker , Ian Rogers , Ingo Molnar , James Clark , Jing Zhang , Jiri Olsa , John Garry , Leo Yan , Namhyung Kim , Perry Taylor , Peter Zijlstra , Samantha Alt , Sandipan Das , Thomas Falcon , Weilin Wang , Xu Yang , linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" When metrics are made with experimental events it is desirable the metric description also carries this information in case of metric inaccuracies. Suggested-by: Perry Taylor Signed-off-by: Ian Rogers Tested-by: Thomas Falcon --- tools/perf/pmu-events/metric.py | 44 +++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) diff --git a/tools/perf/pmu-events/metric.py b/tools/perf/pmu-events/metric= .py index 62d1a1e1d458..2029b6e28365 100644 --- a/tools/perf/pmu-events/metric.py +++ b/tools/perf/pmu-events/metric.py @@ -10,11 +10,13 @@ from typing import Dict, List, Optional, Set, Tuple, Un= ion =20 all_pmus =3D set() all_events =3D set() +experimental_events =3D set() =20 def LoadEvents(directory: str) -> None: """Populate a global set of all known events for the purpose of validati= ng Event names""" global all_pmus global all_events + global experimental_events all_events =3D { "context\\-switches", "cpu\\-cycles", @@ -32,6 +34,8 @@ def LoadEvents(directory: str) -> None: all_pmus.add(x["Unit"]) if "EventName" in x: all_events.add(x["EventName"]) + if "Experimental" in x and x["Experimental"] =3D=3D "1": + experimental_events.add(x["EventName"]) elif "ArchStdEvent" in x: all_events.add(x["ArchStdEvent"]) except json.decoder.JSONDecodeError: @@ -61,6 +65,18 @@ def CheckEvent(name: str) -> bool: return name in all_events =20 =20 +def IsExperimentalEvent(name: str) -> bool: + global experimental_events + if ':' in name: + # Remove trailing modifier. + name =3D name[:name.find(':')] + elif '/' in name: + # Name could begin with a PMU or an event, for now assume it is not ex= perimental. + return False + + return name in experimental_events + + class MetricConstraint(Enum): GROUPED_EVENTS =3D 0 NO_GROUP_EVENTS =3D 1 @@ -82,6 +98,10 @@ class Expression: """Returns a simplified version of self.""" raise NotImplementedError() =20 + def HasExperimentalEvents(self) -> bool: + """Are experimental events used in the expression?""" + raise NotImplementedError() + def Equals(self, other) -> bool: """Returns true when two expressions are the same.""" raise NotImplementedError() @@ -249,6 +269,9 @@ class Operator(Expression): =20 return Operator(self.operator, lhs, rhs) =20 + def HasExperimentalEvents(self) -> bool: + return self.lhs.HasExperimentalEvents() or self.rhs.HasExperimentalEve= nts() + def Equals(self, other: Expression) -> bool: if isinstance(other, Operator): return self.operator =3D=3D other.operator and self.lhs.Equals( @@ -297,6 +320,10 @@ class Select(Expression): =20 return Select(true_val, cond, false_val) =20 + def HasExperimentalEvents(self) -> bool: + return (self.cond.HasExperimentalEvents() or self.true_val.HasExperime= ntalEvents() or + self.false_val.HasExperimentalEvents()) + def Equals(self, other: Expression) -> bool: if isinstance(other, Select): return self.cond.Equals(other.cond) and self.false_val.Equals( @@ -345,6 +372,9 @@ class Function(Expression): =20 return Function(self.fn, lhs, rhs) =20 + def HasExperimentalEvents(self) -> bool: + return self.lhs.HasExperimentalEvents() or (self.rhs and self.rhs.HasE= xperimentalEvents()) + def Equals(self, other: Expression) -> bool: if isinstance(other, Function): result =3D self.fn =3D=3D other.fn and self.lhs.Equals(other.lhs) @@ -384,6 +414,9 @@ class Event(Expression): global all_events raise Exception(f"No event {error} in:\n{all_events}") =20 + def HasExperimentalEvents(self) -> bool: + return IsExperimentalEvent(self.name) + def ToPerfJson(self): result =3D re.sub('/', '@', self.name) return result @@ -416,6 +449,9 @@ class MetricRef(Expression): def Simplify(self) -> Expression: return self =20 + def HasExperimentalEvents(self) -> bool: + return False + def Equals(self, other: Expression) -> bool: return isinstance(other, MetricRef) and self.name =3D=3D other.name =20 @@ -443,6 +479,9 @@ class Constant(Expression): def Simplify(self) -> Expression: return self =20 + def HasExperimentalEvents(self) -> bool: + return False + def Equals(self, other: Expression) -> bool: return isinstance(other, Constant) and self.value =3D=3D other.value =20 @@ -465,6 +504,9 @@ class Literal(Expression): def Simplify(self) -> Expression: return self =20 + def HasExperimentalEvents(self) -> bool: + return False + def Equals(self, other: Expression) -> bool: return isinstance(other, Literal) and self.value =3D=3D other.value =20 @@ -527,6 +569,8 @@ class Metric: self.name =3D name self.description =3D description self.expr =3D expr.Simplify() + if self.expr.HasExperimentalEvents(): + self.description +=3D " (metric should be considered experimental as= it contains experimental events)." # Workraound valid_only_metric hiding certain metrics based on unit. scale_unit =3D scale_unit.replace('/sec', ' per sec') if scale_unit[0].isdigit(): --=20 2.52.0.158.g65b55ccf14-goog From nobody Wed Dec 10 20:09:24 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 A288D2D47EE for ; Tue, 2 Dec 2025 17:53:35 +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=1764698017; cv=none; b=aW3T+lDaor/RG2IH5ff/MQpLrnoOYKweFwseJ/8tmJwSvgBFMf2m5ihVohSJO7VSgEgnwbDHuJLzhCRx/I4/VxOwofSwM9C1BzWeJqpmLvsEq/B+BfHqVlQl3cs9Xj/4Pk0U8CegjQuNjySvtLvIZs4smQzl40GHFrlAjwmpGDo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764698017; c=relaxed/simple; bh=NNOXiWGx3mkUhIhjrOqGTilOSUrSFRozKFaELeAVXuw=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=HfZlDOZsDhOXRnz61XrcWql/BbP1c9H+N9fsotHYtriji2ZfDvT8jSikUUVMrZM5NI+Z0nu4JMJzUmE9yDuiHa2BuusWR4+dd3VjhdueL4IqCJzlrbbjHWv5v9XFwRmzOP9I3DevFZCox5JS1Vb4mongj5EelPrxTqTQ9/G2huM= 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=u8kuUsBD; 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="u8kuUsBD" Received: by mail-pg1-f202.google.com with SMTP id 41be03b00d2f7-b969f3f5c13so5853627a12.0 for ; Tue, 02 Dec 2025 09:53:35 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1764698015; x=1765302815; 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=kagJRUkunuf30Ut0TYFOO2mO5Mf8Y3yJj8xTm5T9Lkc=; b=u8kuUsBDfdWiP4xDWIQlNENeiMjBOKwm20+VTpOJbEqjXSkJ3JJQg2oYW7NCCaXQ4O 3BykdvBCqx6EuWSsRYw7PT4rNbc/nGh4T4q/bt/UrFyC7WhMwAdOvPb+WxW9r7iBxAB8 mFrWa1Cje3tOvcCPteRgWBi/HqR7gXP8Mpp1yBL2mYUDZV7UK2+8sB1sUE2BaHVcyR7P yjaHBOuHIy4iwQ6UcMH4NQ2ynFfq/UxQ8wPS/D4GiG1CM08tmu2yuwpi/H3/belzxTBr HuT0D5yDcT3Q7JIAvHZN5e8PfXtDDuNDgQnAYK5KNxPXV1rE2hyMBZf1ifqUT52ARBSe XrGw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1764698015; x=1765302815; 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=kagJRUkunuf30Ut0TYFOO2mO5Mf8Y3yJj8xTm5T9Lkc=; b=A3Hv0FRRRBGzXjsGgo9CAt8aAqaVCENr81ev6GpQhW/vptUZpqDmh3i5UZjLdmReY7 ClDRgUK0xcCp93wvheYtSmQs6IoP/HYvzHeJ3m79iLJ1qYJ39heUHzjR233jeXiU4/tJ gqukGZLsexbXJLcX2x+c1UtIMMTvj+AHCBM/fhHO3Btbmj7MqCtP13fYANAvyS8GP8+N 3PsNQsVK5xlqn5UO5yACbpNmTSDHynJZi2zLfmqigq2k75U5wO87kXUG0yP8+TushHV4 F+0vz+Je360qiYuhp88R1/dui3V8WCN0FaZ64NalFeFQN4DJo4O+i3gke8UjlFlyDenf 1O3g== X-Forwarded-Encrypted: i=1; AJvYcCXQege9XqUaqftAxOu480MEvlZr29noCMfjUVbiijBfoP8TGK0Ez143d3v+Ib0PzbpD12DWsGwQnX3v31E=@vger.kernel.org X-Gm-Message-State: AOJu0YwxylCTuE/zOfHxSzed08P6vyaUR2ZxQgdlYYRw2OJiwwVJ9nNV 4cbDvgLUwt/uGpP8njoF2FTrqltcZ5EgTNV+fN7sNEPCbKbwHJAmzTihdAlLkPAaRg+I9ATt+q/ eVQCeeIO70g== X-Google-Smtp-Source: AGHT+IHKteFVm3tJ6cIW/EiJxB6p25YtXwsAPClDJsG6Uot4gbu+RAEE2cp/sNQKuA69ZsWJcJ9F5ODtFroB X-Received: from dyer27.prod.google.com ([2002:a05:7300:231b:b0:2a4:6899:e5f0]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a05:7300:e827:b0:2a4:41c3:3a45 with SMTP id 5a478bee46e88-2a9415736femr19495183eec.2.1764698015038; Tue, 02 Dec 2025 09:53:35 -0800 (PST) Date: Tue, 2 Dec 2025 09:50:24 -0800 In-Reply-To: <20251202175043.623597-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: <20251202175043.623597-1-irogers@google.com> X-Mailer: git-send-email 2.52.0.158.g65b55ccf14-goog Message-ID: <20251202175043.623597-30-irogers@google.com> Subject: [PATCH v9 29/48] perf jevents: Add tsx metric group for Intel models From: Ian Rogers To: Adrian Hunter , Alexander Shishkin , Arnaldo Carvalho de Melo , Benjamin Gray , Caleb Biggers , Edward Baker , Ian Rogers , Ingo Molnar , James Clark , Jing Zhang , Jiri Olsa , John Garry , Leo Yan , Namhyung Kim , Perry Taylor , Peter Zijlstra , Samantha Alt , Sandipan Das , Thomas Falcon , Weilin Wang , Xu Yang , linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Allow duplicated metric to be dropped from json files. Detect when TSX is supported by a model by using the json events, use sysfs events at runtime as hypervisors, etc. may disable TSX. Add CheckPmu to metric to determine if which PMUs have been associated with the loaded events. Signed-off-by: Ian Rogers Tested-by: Thomas Falcon --- tools/perf/pmu-events/intel_metrics.py | 50 ++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) diff --git a/tools/perf/pmu-events/intel_metrics.py b/tools/perf/pmu-events= /intel_metrics.py index 94604b1b07d8..05f3d94ec5d5 100755 --- a/tools/perf/pmu-events/intel_metrics.py +++ b/tools/perf/pmu-events/intel_metrics.py @@ -3,6 +3,7 @@ import argparse import math import os +from typing import Optional from metric import (d_ratio, has_event, max, CheckPmu, Event, JsonEncodeMe= tric, JsonEncodeMetricGroupDescriptions, LoadEvents, Metric, MetricGroup, MetricRef, Select) @@ -75,6 +76,54 @@ def Smi() -> MetricGroup: ], description=3D'System Management Interrupt metrics') =20 =20 +def Tsx() -> Optional[MetricGroup]: + pmu =3D "cpu_core" if CheckPmu("cpu_core") else "cpu" + cycles =3D Event('cycles') + cycles_in_tx =3D Event(f'{pmu}/cycles\\-t/') + cycles_in_tx_cp =3D Event(f'{pmu}/cycles\\-ct/') + try: + # Test if the tsx event is present in the json, prefer the + # sysfs version so that we can detect its presence at runtime. + transaction_start =3D Event("RTM_RETIRED.START") + transaction_start =3D Event(f'{pmu}/tx\\-start/') + except: + return None + + elision_start =3D None + try: + # Elision start isn't supported by all models, but we'll not + # generate the tsx_cycles_per_elision metric in that + # case. Again, prefer the sysfs encoding of the event. + elision_start =3D Event("HLE_RETIRED.START") + elision_start =3D Event(f'{pmu}/el\\-start/') + except: + pass + + return MetricGroup('transaction', [ + Metric('tsx_transactional_cycles', + 'Percentage of cycles within a transaction region.', + Select(cycles_in_tx / cycles, has_event(cycles_in_tx), 0), + '100%'), + Metric('tsx_aborted_cycles', 'Percentage of cycles in aborted tran= sactions.', + Select(max(cycles_in_tx - cycles_in_tx_cp, 0) / cycles, + has_event(cycles_in_tx), + 0), + '100%'), + Metric('tsx_cycles_per_transaction', + 'Number of cycles within a transaction divided by the numbe= r of transactions.', + Select(cycles_in_tx / transaction_start, + has_event(cycles_in_tx), + 0), + "cycles / transaction"), + Metric('tsx_cycles_per_elision', + 'Number of cycles within a transaction divided by the numbe= r of elisions.', + Select(cycles_in_tx / elision_start, + has_event(elision_start), + 0), + "cycles / elision") if elision_start else None, + ], description=3D"Breakdown of transactional memory statistics") + + def main() -> None: global _args =20 @@ -103,6 +152,7 @@ def main() -> None: Idle(), Rapl(), Smi(), + Tsx(), ]) =20 if _args.metricgroups: --=20 2.52.0.158.g65b55ccf14-goog From nobody Wed Dec 10 20:09:24 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 5FCF92C2357 for ; Tue, 2 Dec 2025 17:53:42 +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=1764698024; cv=none; b=TH5fEyWUSAHBft+syZ8MClaInDlJ2FSpMmpueuWOyPB9CzszXM+5NEKkoMy/j5tBLJq9ClcG5Z+n/YCPHn9MxysZCd9W4Ymu0i57lG8r8u35yck7NDvKCEBYbPmbFAeInPWmTbNonHjpmmLWJhIQgqCebeSh/nuAgzfP27LTVa8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764698024; c=relaxed/simple; bh=cnrn7ebfjvFiAKJasfouyQP3U+pd/rAe6Cjcx0pS1NM=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=tO3nc8qaCZfDIDZlHOjouDUFYJHvcxXEYJrT3jso9xIzgb0wseQTtzCh1nDfNz6aLb4W7nykNjzhYvwGXLsGzSe8tG8zSesLLRg4N61fZvq6pwYRNb0Sa2kIglb2E2OBK9TR9fJ7MVmuHkOjcAqKMHM8xYEJSAAnZgEk1CUSJH8= 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=H+4CQwzx; 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="H+4CQwzx" Received: by mail-pf1-f202.google.com with SMTP id d2e1a72fcca58-7b89c1ce9cfso5068201b3a.2 for ; Tue, 02 Dec 2025 09:53:42 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1764698021; x=1765302821; 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=T7H/fiSBZbcH4CZp2bWGmcEpNcwTRUbcYlOhUmrRII8=; b=H+4CQwzxmVeJwVq/TYsBk0Q4R1ssOpbBMG5HFrz2XDl555tjKBrb+YHH+EQRum2FP2 ewpUXUb3QUec4MlGIM6PxLJYN2hAECiozBrYu5J25fKVg38nhc7keDUvCZMu2K6k4WYF RHW8PnbYH3V8VJv7/m3Dg+XAgmRIlwe2ruqf7W6jNIlY22cMkNiPLuDLleZvu1B/+eXb 8lDlsZCyoaomyzxqXW43AQQgxiVcJGPf1rHAyXZuwzpG5HtMwNmsc+vybx+TUEFqsKxk bt6HoJ55IrZTvxJR5AmqH42ZvGdpmNXlJvww+qWlHut8lrVcvX5x6RRTCX0Re2BE16CQ /bVw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1764698021; x=1765302821; 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=T7H/fiSBZbcH4CZp2bWGmcEpNcwTRUbcYlOhUmrRII8=; b=jJeVi0WPltueV9oX22O9nge+HI7b+7eed+4/C0VVMzEUD93Rn/H+n9WCsUyl3A+SxV EzX5CWup9bJb39ATKPAaqoNs43uAYlkzxPhRX8+70T+EMjKqdn1mLHPQaLvRGetCs7/V KfPj5I8cMv1PNNmkySoQR6+/EDvMg57s4inwpgIrebT1HjvOokJLx7KZ8E/XCzoaJiDK /zp7BvzHG7rpu4PlGlRRf7DKBvx+0BXsIlPQgZtRM40pBAvtyt/uKNtevg/7dVgHXRuh RHLZgVjWeAxH+SuGlvLgIomTryQejVT+exVOW/Nu6gXtmXnp6VC4t4k+0l6EEoHe627K n6tw== X-Forwarded-Encrypted: i=1; AJvYcCUY3E7KpMg1G1vR1AWTfRVzyr7fCgLSBgXoVVTHIG/gBdi+GgRYus3tisi/sYva8D7bdza3iY9UP422xUo=@vger.kernel.org X-Gm-Message-State: AOJu0Yxgr6bCmx1nRTsruGt4zc1nMNhXlYfE/7iyUx/jkw/F87/8R0J5 gXJ6xUyk7jHrrHMczA7yaReRpbG8ON7QCPyRE2fEX3knpAjX5BlON1Df35YcG5S5mLDM/bEWFPz GZdzbLBuWmQ== X-Google-Smtp-Source: AGHT+IG9lm22mi8fuekKs8VooDbr1yV2Hrw+KvlrXOR7DExXJGCsd39iQjnlI2CKxSwkYQh4V5eOnfOrWHgs X-Received: from pfblg22.prod.google.com ([2002:a05:6a00:7096:b0:7dd:8bba:63a0]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a00:a91:b0:7b9:ef46:ec61 with SMTP id d2e1a72fcca58-7ca89a6a2b9mr29142803b3a.26.1764698021378; Tue, 02 Dec 2025 09:53:41 -0800 (PST) Date: Tue, 2 Dec 2025 09:50:25 -0800 In-Reply-To: <20251202175043.623597-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: <20251202175043.623597-1-irogers@google.com> X-Mailer: git-send-email 2.52.0.158.g65b55ccf14-goog Message-ID: <20251202175043.623597-31-irogers@google.com> Subject: [PATCH v9 30/48] perf jevents: Add br metric group for branch statistics on Intel From: Ian Rogers To: Adrian Hunter , Alexander Shishkin , Arnaldo Carvalho de Melo , Benjamin Gray , Caleb Biggers , Edward Baker , Ian Rogers , Ingo Molnar , James Clark , Jing Zhang , Jiri Olsa , John Garry , Leo Yan , Namhyung Kim , Perry Taylor , Peter Zijlstra , Samantha Alt , Sandipan Das , Thomas Falcon , Weilin Wang , Xu Yang , linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The br metric group for branches itself comprises metric groups for total, taken, conditional, fused and far metric groups using json events. Conditional taken and not taken metrics are specific to Icelake and later generations, so the presence of the event is used to determine whether the metric should exist. Signed-off-by: Ian Rogers Tested-by: Thomas Falcon --- tools/perf/pmu-events/intel_metrics.py | 138 +++++++++++++++++++++++++ 1 file changed, 138 insertions(+) diff --git a/tools/perf/pmu-events/intel_metrics.py b/tools/perf/pmu-events= /intel_metrics.py index 05f3d94ec5d5..e1944d821248 100755 --- a/tools/perf/pmu-events/intel_metrics.py +++ b/tools/perf/pmu-events/intel_metrics.py @@ -124,6 +124,143 @@ def Tsx() -> Optional[MetricGroup]: ], description=3D"Breakdown of transactional memory statistics") =20 =20 +def IntelBr(): + ins =3D Event("instructions") + + def Total() -> MetricGroup: + br_all =3D Event("BR_INST_RETIRED.ALL_BRANCHES", "BR_INST_RETIRED.= ANY") + br_m_all =3D Event("BR_MISP_RETIRED.ALL_BRANCHES", + "BR_INST_RETIRED.MISPRED", + "BR_MISP_EXEC.ANY") + br_clr =3D None + try: + br_clr =3D Event("BACLEARS.ANY", "BACLEARS.ALL") + except: + pass + + br_r =3D d_ratio(br_all, interval_sec) + ins_r =3D d_ratio(ins, br_all) + misp_r =3D d_ratio(br_m_all, br_all) + clr_r =3D d_ratio(br_clr, interval_sec) if br_clr else None + + return MetricGroup("lpm_br_total", [ + Metric("lpm_br_total_retired", + "The number of branch instructions retired per second."= , br_r, + "insn/s"), + Metric( + "lpm_br_total_mispred", + "The number of branch instructions retired, of any type, t= hat were " + "not correctly predicted as a percentage of all branch ins= trucions.", + misp_r, "100%"), + Metric("lpm_br_total_insn_between_branches", + "The number of instructions divided by the number of br= anches.", + ins_r, "insn"), + Metric("lpm_br_total_insn_fe_resteers", + "The number of resync branches per second.", clr_r, "re= q/s" + ) if clr_r else None + ]) + + def Taken() -> MetricGroup: + br_all =3D Event("BR_INST_RETIRED.ALL_BRANCHES", "BR_INST_RETIRED.= ANY") + br_m_tk =3D None + try: + br_m_tk =3D Event("BR_MISP_RETIRED.NEAR_TAKEN", + "BR_MISP_RETIRED.TAKEN_JCC", + "BR_INST_RETIRED.MISPRED_TAKEN") + except: + pass + br_r =3D d_ratio(br_all, interval_sec) + ins_r =3D d_ratio(ins, br_all) + misp_r =3D d_ratio(br_m_tk, br_all) if br_m_tk else None + return MetricGroup("lpm_br_taken", [ + Metric("lpm_br_taken_retired", + "The number of taken branches that were retired per sec= ond.", + br_r, "insn/s"), + Metric( + "lpm_br_taken_mispred", + "The number of retired taken branch instructions that were= " + "mispredicted as a percentage of all taken branches.", mis= p_r, + "100%") if misp_r else None, + Metric( + "lpm_br_taken_insn_between_branches", + "The number of instructions divided by the number of taken= branches.", + ins_r, "insn"), + ]) + + def Conditional() -> Optional[MetricGroup]: + try: + br_cond =3D Event("BR_INST_RETIRED.COND", + "BR_INST_RETIRED.CONDITIONAL", + "BR_INST_RETIRED.TAKEN_JCC") + br_m_cond =3D Event("BR_MISP_RETIRED.COND", + "BR_MISP_RETIRED.CONDITIONAL", + "BR_MISP_RETIRED.TAKEN_JCC") + except: + return None + + br_cond_nt =3D None + br_m_cond_nt =3D None + try: + br_cond_nt =3D Event("BR_INST_RETIRED.COND_NTAKEN") + br_m_cond_nt =3D Event("BR_MISP_RETIRED.COND_NTAKEN") + except: + pass + br_r =3D d_ratio(br_cond, interval_sec) + ins_r =3D d_ratio(ins, br_cond) + misp_r =3D d_ratio(br_m_cond, br_cond) + taken_metrics =3D [ + Metric("lpm_br_cond_retired", "Retired conditional branch inst= ructions.", + br_r, "insn/s"), + Metric("lpm_br_cond_insn_between_branches", + "The number of instructions divided by the number of co= nditional " + "branches.", ins_r, "insn"), + Metric("lpm_br_cond_mispred", + "Retired conditional branch instructions mispredicted a= s a " + "percentage of all conditional branches.", misp_r, "100= %"), + ] + if not br_m_cond_nt: + return MetricGroup("lpm_br_cond", taken_metrics) + + br_r =3D d_ratio(br_cond_nt, interval_sec) + ins_r =3D d_ratio(ins, br_cond_nt) + misp_r =3D d_ratio(br_m_cond_nt, br_cond_nt) + + not_taken_metrics =3D [ + Metric("lpm_br_cond_retired", "Retired conditional not taken b= ranch instructions.", + br_r, "insn/s"), + Metric("lpm_br_cond_insn_between_branches", + "The number of instructions divided by the number of no= t taken conditional " + "branches.", ins_r, "insn"), + Metric("lpm_br_cond_mispred", + "Retired not taken conditional branch instructions misp= redicted as a " + "percentage of all not taken conditional branches.", mi= sp_r, "100%"), + ] + return MetricGroup("lpm_br_cond", [ + MetricGroup("lpm_br_cond_nt", not_taken_metrics), + MetricGroup("lpm_br_cond_tkn", taken_metrics), + ]) + + def Far() -> Optional[MetricGroup]: + try: + br_far =3D Event("BR_INST_RETIRED.FAR_BRANCH") + except: + return None + + br_r =3D d_ratio(br_far, interval_sec) + ins_r =3D d_ratio(ins, br_far) + return MetricGroup("lpm_br_far", [ + Metric("lpm_br_far_retired", "Retired far control transfers pe= r second.", + br_r, "insn/s"), + Metric( + "lpm_br_far_insn_between_branches", + "The number of instructions divided by the number of far b= ranches.", + ins_r, "insn"), + ]) + + return MetricGroup("lpm_br", [Total(), Taken(), Conditional(), Far()], + description=3D"breakdown of retired branch instruct= ions") + + def main() -> None: global _args =20 @@ -153,6 +290,7 @@ def main() -> None: Rapl(), Smi(), Tsx(), + IntelBr(), ]) =20 if _args.metricgroups: --=20 2.52.0.158.g65b55ccf14-goog From nobody Wed Dec 10 20:09:25 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 DDB102D29C3 for ; Tue, 2 Dec 2025 17:53:47 +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=1764698029; cv=none; b=lcyENUAWSZY5mmqWxy0ZkSQ4OZono9zwQTHkSoNgBJNrlFZ5blHXNXeeuN+NLaFotKbGMMxfT2vTyzgLzNJCVy3FCFpUy6iT1X/ove8ard6gOxz18NDRn+JUnMCmaZ5OZJp9pTB7hTsalbKCYKQcD2IvoSSj2nTmSjVgf4+4GkU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764698029; c=relaxed/simple; bh=zReLgRq9a+nlcSbYpcVCoeI4hVxJwvMJuOQNynM3BOg=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=eYRg1vsGZvBEXvxw8qkgT4QAWFY/WXEBpmklAcvFnnmX7FgaRmakzFIn54X5fKx1vcU67Z73oSfd4RBKV9we3Wx9KBTr9MN1WCMWvyLr5D+gamGB3+WH++ImnVwEzL3SIZE0EoZE7Z01MWDF6u5notX9Zos5VaAVTWzElr2aTyk= 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=QKZYvu5Z; 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="QKZYvu5Z" Received: by mail-pg1-f201.google.com with SMTP id 41be03b00d2f7-be8c77ecc63so4805141a12.2 for ; Tue, 02 Dec 2025 09:53:47 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1764698027; x=1765302827; 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=yEBbmMgbzbHH/P46pRjpPoQAKWN66Kal3tC5ODhFh6Y=; b=QKZYvu5ZQVujK5nxRuN6uEFj0Enh1Tawm1OUVfMq8S0qqUXOPsYFPuM5o6moxNpJd1 eMWBJpSvPCMJi7o9xqfGs2Zb+bmeDDUec+yPNkwWrgBeEVlWQkUjlamPa/O7ySyQPX5e +y+8nTVFPe1cIfBuX/GPnGgsIBBFxszbrT8jFeH14NBdk0TERbJJCeJyf4WvZ77ktIW5 N3saihaw7o9IrvQMwgRXk+QTqARy6wzJkIM+1O7Z4iCTdioq2rhFcpgYSNylmh+rRH1B vbPeqEJDb0dmwilKcskldyYLyNS5Ef2eJkEewHdUY1SBfHmD3M8ZR1chfHwZtIm5Jrpd Rs7w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1764698027; x=1765302827; 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=yEBbmMgbzbHH/P46pRjpPoQAKWN66Kal3tC5ODhFh6Y=; b=suVa/QPqB7EeXqYj0jut6KSn8emVd/UV1pX9BiDm5BP/0T9uintET6pcvEMTo4GhVM lNcn7CV3odC6MV0zwb5Ni5St/XlBW7FQ72PXCYnHHsZ6Qvr6JKwXPWRgXCexsL+riYto 8oyWragh4o8XCN4IeMrXqkn+d9Is4Q0dQjgw48XQeHFU9rhDDh7N8xtG0PM9qfPKMyJG YPD+sRJFwK8IlckwOgVq+LA6SnYFqkF35bUoKLme+KU3nmD6Rr+g601Y+Js6GZSSXtlh vzea3jy/0oh7qNNKBoYCpjoJanXqTO20vABACp5qktJd5Ule2VtJ/4P4WfFVd9t/lv+g EEZQ== X-Forwarded-Encrypted: i=1; AJvYcCXYRL55TEaqk7OBe0BEXbdbVVmQzk9AecUreeYYFLA9IenvOx3YLrhXf8uNvavJo6LID/yS4OkaiYwLko0=@vger.kernel.org X-Gm-Message-State: AOJu0YzkJq89qwalwIAnK+47kP1rJqO541RMHVy3dPAfXT7j7f5CV5FT ZXuebjK1eJnBiFarbFloIkuoZ26G9dwdW1b8eWRa2+fjU40MENq4xLBzCPEMx8/7P64M9Jy4lWQ QpE03FzdYPg== X-Google-Smtp-Source: AGHT+IGCoSCHTHIUpNF4oOBSOgZwlU6M1njNf7ndIMOB2AcJAm5AJL4gH1kp64i5hCdZN74AwmzlT/9G5gz/ X-Received: from dyboy20.prod.google.com ([2002:a05:7300:ed14:b0:2a4:4bd0:6ed8]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a05:7300:550:b0:2a9:9688:6ee6 with SMTP id 5a478bee46e88-2ab8fa78bf8mr254444eec.4.1764698026924; Tue, 02 Dec 2025 09:53:46 -0800 (PST) Date: Tue, 2 Dec 2025 09:50:26 -0800 In-Reply-To: <20251202175043.623597-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: <20251202175043.623597-1-irogers@google.com> X-Mailer: git-send-email 2.52.0.158.g65b55ccf14-goog Message-ID: <20251202175043.623597-32-irogers@google.com> Subject: [PATCH v9 31/48] perf jevents: Add software prefetch (swpf) metric group for Intel From: Ian Rogers To: Adrian Hunter , Alexander Shishkin , Arnaldo Carvalho de Melo , Benjamin Gray , Caleb Biggers , Edward Baker , Ian Rogers , Ingo Molnar , James Clark , Jing Zhang , Jiri Olsa , John Garry , Leo Yan , Namhyung Kim , Perry Taylor , Peter Zijlstra , Samantha Alt , Sandipan Das , Thomas Falcon , Weilin Wang , Xu Yang , linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Add metrics that breakdown software prefetch instruction use. Signed-off-by: Ian Rogers Tested-by: Thomas Falcon --- tools/perf/pmu-events/intel_metrics.py | 66 ++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) diff --git a/tools/perf/pmu-events/intel_metrics.py b/tools/perf/pmu-events= /intel_metrics.py index e1944d821248..919a058c343a 100755 --- a/tools/perf/pmu-events/intel_metrics.py +++ b/tools/perf/pmu-events/intel_metrics.py @@ -261,6 +261,71 @@ def IntelBr(): description=3D"breakdown of retired branch instruct= ions") =20 =20 +def IntelSwpf() -> Optional[MetricGroup]: + ins =3D Event("instructions") + try: + s_ld =3D Event("MEM_INST_RETIRED.ALL_LOADS", + "MEM_UOPS_RETIRED.ALL_LOADS") + s_nta =3D Event("SW_PREFETCH_ACCESS.NTA") + s_t0 =3D Event("SW_PREFETCH_ACCESS.T0") + s_t1 =3D Event("SW_PREFETCH_ACCESS.T1_T2") + s_w =3D Event("SW_PREFETCH_ACCESS.PREFETCHW") + except: + return None + + all_sw =3D s_nta + s_t0 + s_t1 + s_w + swp_r =3D d_ratio(all_sw, interval_sec) + ins_r =3D d_ratio(ins, all_sw) + ld_r =3D d_ratio(s_ld, all_sw) + + return MetricGroup("lpm_swpf", [ + MetricGroup("lpm_swpf_totals", [ + Metric("lpm_swpf_totals_exec", "Software prefetch instructions= per second", + swp_r, "swpf/s"), + Metric("lpm_swpf_totals_insn_per_pf", + "Average number of instructions between software prefet= ches", + ins_r, "insn/swpf"), + Metric("lpm_swpf_totals_loads_per_pf", + "Average number of loads between software prefetches", + ld_r, "loads/swpf"), + ]), + MetricGroup("lpm_swpf_bkdwn", [ + MetricGroup("lpm_swpf_bkdwn_nta", [ + Metric("lpm_swpf_bkdwn_nta_per_swpf", + "Software prefetch NTA instructions as a percent of= all prefetch instructions", + d_ratio(s_nta, all_sw), "100%"), + Metric("lpm_swpf_bkdwn_nta_rate", + "Software prefetch NTA instructions per second", + d_ratio(s_nta, interval_sec), "insn/s"), + ]), + MetricGroup("lpm_swpf_bkdwn_t0", [ + Metric("lpm_swpf_bkdwn_t0_per_swpf", + "Software prefetch T0 instructions as a percent of = all prefetch instructions", + d_ratio(s_t0, all_sw), "100%"), + Metric("lpm_swpf_bkdwn_t0_rate", + "Software prefetch T0 instructions per second", + d_ratio(s_t0, interval_sec), "insn/s"), + ]), + MetricGroup("lpm_swpf_bkdwn_t1_t2", [ + Metric("lpm_swpf_bkdwn_t1_t2_per_swpf", + "Software prefetch T1 or T2 instructions as a perce= nt of all prefetch instructions", + d_ratio(s_t1, all_sw), "100%"), + Metric("lpm_swpf_bkdwn_t1_t2_rate", + "Software prefetch T1 or T2 instructions per second= ", + d_ratio(s_t1, interval_sec), "insn/s"), + ]), + MetricGroup("lpm_swpf_bkdwn_w", [ + Metric("lpm_swpf_bkdwn_w_per_swpf", + "Software prefetch W instructions as a percent of a= ll prefetch instructions", + d_ratio(s_w, all_sw), "100%"), + Metric("lpm_swpf_bkdwn_w_rate", + "Software prefetch W instructions per second", + d_ratio(s_w, interval_sec), "insn/s"), + ]), + ]), + ], description=3D"Software prefetch instruction breakdown") + + def main() -> None: global _args =20 @@ -291,6 +356,7 @@ def main() -> None: Smi(), Tsx(), IntelBr(), + IntelSwpf(), ]) =20 if _args.metricgroups: --=20 2.52.0.158.g65b55ccf14-goog From nobody Wed Dec 10 20:09:25 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 9B6BE2DECBF for ; Tue, 2 Dec 2025 17:53:53 +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=1764698035; cv=none; b=ITDo90xbO1nh9pzPRADWQHsXDJ7pQ9rmL8s4iCvVxNtPBkA0XrDOTfF7E/gfsexu/HgQZXfYwyeS0R3ybd0wKywkaAJi5UQDC/P2qFNJVaa3P+9ZOGgDhU0quJVLq+HsGz6RT72Qta3r89ApaOkuCLD1wgh8SGu+3ftZhuwCG24= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764698035; c=relaxed/simple; bh=f/zAPLMgLEoZV5Qea+vBOLAPk45QdYaXzdW1d7eayBM=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=J6Zm6zfk4fuMI0jCkuK+FjzjqmcRyZJCChowOLDU6/KVlyJP4dnTXVTSqv1ascZUtJ2j+5JcWAvHNzUC5qb4Zd/DELnPc7xHu6l5WufDuQFBEqBPMrlCMkvhR7TDVV0ymhuyLLUilKVXi/3LapbOd2k7tHFXZ5ulAKyd2HFzKQs= 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=e/7voazM; 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="e/7voazM" Received: by mail-pg1-f202.google.com with SMTP id 41be03b00d2f7-b969f3f5bb1so8322748a12.0 for ; Tue, 02 Dec 2025 09:53:53 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1764698033; x=1765302833; 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=iHpRFpym5+i6zLNza6g5W+ofHyML5n4SAWgymZ5csvA=; b=e/7voazMBRn+GNkiYpuZPw9aGWvzqbWHM/DnBxxt77zL/j16lCXpDPNMEPcIM8YY2n VOKTzmOXY9VPWVg08NBh366QY7uacXmGSljXDkwvA7LnlGa/gzEeTZFL0n/Gsv72BBI1 SM9A/fpzFmlVl/y3k64d8fu+dGtkBbYYox0v+8UXmG7g5WofAqIgx12UW7ZYvbNb2+vt GepsRia++kdGlCLzafOYvaOy8hIwvNdWLXHmUzGwMw8wxRGC3SJKTS88AmRF9ZJvc6RV 0AcLT8mHsL8V3ldhrs9Ly+sbrSWyzaHJYmnC8fOx8855mYtjjrYae0+HCApbS5bA2kuE GO1Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1764698033; x=1765302833; 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=iHpRFpym5+i6zLNza6g5W+ofHyML5n4SAWgymZ5csvA=; b=FavQtwe4gmH84R/diKUsRzdUGp5fBrecZjLTlJsCBCNbobvjUd11+Aq+OgYE2gwGS+ iAB28wqZzAKlX3RBbGje4ldWByVnu480w/QaWH7i2/SRkY+lYzfiTmzZUg/vDFhtke+Z qrR1I4vpmwTUth+8QmGboIV1dUY6aVX3tAUfdyw0BVDENEDnsi/Wn7EhDleC92VCS8oa oA6Wo/Wp4RL4ygg1QZ71Oq22X+a1vSpY6IWIaks2Xlpl6WMDAxxJHRL7VZnkrx4Rhony 42th6zeVl7g0B+R3rYrSoClMZtNxSnA0PzcQNg75npM5yY0Z2DvyEpPT3Jy3ZiJXrft1 L5kg== X-Forwarded-Encrypted: i=1; AJvYcCUnopV5q4GxllzJjk4GQNJdO0Tix7KjpX48NT+WoZFDbnj2GPb4Di5rxzmoagczvdmQa5xXhKflkRRHl2A=@vger.kernel.org X-Gm-Message-State: AOJu0Yx0+feo6s/vfzjoNJqU5vOzYcxPczj1fLtwwrYFWhQx/GSUuLLD iE8FVvYXygm2kyVSRF/U1XclvmdO1CBVVAFY+Odgc6EVCb6jwU8PYR4I2dIP0ASSsqCynu8W8Zy CuB/+0bq8Pw== X-Google-Smtp-Source: AGHT+IEqAUTg+KXUlvohtFVJIF0Rt6q8c/u7JtQImlQYGxMu83U67D973qgRjEufUnMTwIPUrLipMkigq1So X-Received: from dyboy20.prod.google.com ([2002:a05:7300:ed14:b0:2a4:4bd0:6ed8]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a05:693c:8008:b0:2a4:3593:c7e3 with SMTP id 5a478bee46e88-2ab8fb873e1mr160771eec.35.1764698032849; Tue, 02 Dec 2025 09:53:52 -0800 (PST) Date: Tue, 2 Dec 2025 09:50:27 -0800 In-Reply-To: <20251202175043.623597-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: <20251202175043.623597-1-irogers@google.com> X-Mailer: git-send-email 2.52.0.158.g65b55ccf14-goog Message-ID: <20251202175043.623597-33-irogers@google.com> Subject: [PATCH v9 32/48] perf jevents: Add ports metric group giving utilization on Intel From: Ian Rogers To: Adrian Hunter , Alexander Shishkin , Arnaldo Carvalho de Melo , Benjamin Gray , Caleb Biggers , Edward Baker , Ian Rogers , Ingo Molnar , James Clark , Jing Zhang , Jiri Olsa , John Garry , Leo Yan , Namhyung Kim , Perry Taylor , Peter Zijlstra , Samantha Alt , Sandipan Das , Thomas Falcon , Weilin Wang , Xu Yang , linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The ports metric group contains a metric for each port giving its utilization as a ratio of cycles. The metrics are created by looking for UOPS_DISPATCHED.PORT events. Signed-off-by: Ian Rogers Tested-by: Thomas Falcon --- tools/perf/pmu-events/intel_metrics.py | 35 ++++++++++++++++++++++++-- 1 file changed, 33 insertions(+), 2 deletions(-) diff --git a/tools/perf/pmu-events/intel_metrics.py b/tools/perf/pmu-events= /intel_metrics.py index 919a058c343a..7fcc0a1c544d 100755 --- a/tools/perf/pmu-events/intel_metrics.py +++ b/tools/perf/pmu-events/intel_metrics.py @@ -1,12 +1,14 @@ #!/usr/bin/env python3 # SPDX-License-Identifier: (LGPL-2.1 OR BSD-2-Clause) import argparse +import json import math import os +import re from typing import Optional from metric import (d_ratio, has_event, max, CheckPmu, Event, JsonEncodeMe= tric, - JsonEncodeMetricGroupDescriptions, LoadEvents, Metric, - MetricGroup, MetricRef, Select) + JsonEncodeMetricGroupDescriptions, Literal, LoadEvents, + Metric, MetricGroup, MetricRef, Select) =20 # Global command line arguments. _args =3D None @@ -261,6 +263,34 @@ def IntelBr(): description=3D"breakdown of retired branch instruct= ions") =20 =20 +def IntelPorts() -> Optional[MetricGroup]: + pipeline_events =3D json.load( + open(f"{_args.events_path}/x86/{_args.model}/pipeline.json")) + + core_cycles =3D Event("CPU_CLK_UNHALTED.THREAD_P_ANY", + "CPU_CLK_UNHALTED.DISTRIBUTED", + "cycles") + # Number of CPU cycles scaled for SMT. + smt_cycles =3D Select(core_cycles / 2, Literal("#smt_on"), core_cycles) + + metrics =3D [] + for x in pipeline_events: + if "EventName" in x and re.search("^UOPS_DISPATCHED.PORT", x["Even= tName"]): + name =3D x["EventName"] + port =3D re.search(r"(PORT_[0-9].*)", name).group(0).lower() + if name.endswith("_CORE"): + cyc =3D core_cycles + else: + cyc =3D smt_cycles + metrics.append(Metric(f"lpm_{port}", f"{port} utilization (hig= her is better)", + d_ratio(Event(name), cyc), "100%")) + if len(metrics) =3D=3D 0: + return None + + return MetricGroup("lpm_ports", metrics, "functional unit (port) utili= zation -- " + "fraction of cycles each port is utilized (higher i= s better)") + + def IntelSwpf() -> Optional[MetricGroup]: ins =3D Event("instructions") try: @@ -356,6 +386,7 @@ def main() -> None: Smi(), Tsx(), IntelBr(), + IntelPorts(), IntelSwpf(), ]) =20 --=20 2.52.0.158.g65b55ccf14-goog From nobody Wed Dec 10 20:09:25 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 553A02C11DF for ; Tue, 2 Dec 2025 17:53:59 +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=1764698041; cv=none; b=J4a91Nbdv0yHT2xB0mQHzPr6rEOO+zbx2XfOt+LanwU4lLoVWAwdixtZqTYs9al0D5BDsvqac4bk8I/c5qfyP786q6RF1KjuEuDOY5wjcr0pOiEXJ7D6mkXMY8BUwW/jTXGa87miUX3pJaNvCEJg6exYuTrXSisLt7YgZXxJt5c= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764698041; c=relaxed/simple; bh=szV5c/klxqwi85v6hDhJdpF+W1mEdRaVxUIT+ScWzVI=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=Rq2G9uwO5WPtQoVO8AIJw2aIJzI0tr2oDhuoEIg3jBxN1qj4X7pbEiuGPmvvlKIndB4fCYXPppvFsqgc4c+z6wipix+y49fRLA43eLOHNts6TkX3IBasEetm3LYs1gduc7fvf2y8gKELTYgeGVqt4uSMYEIISfOu4GBVNxtpfSM= 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=XXBp8Q9c; 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="XXBp8Q9c" Received: by mail-pg1-f202.google.com with SMTP id 41be03b00d2f7-b5edecdf94eso7940579a12.2 for ; Tue, 02 Dec 2025 09:53:59 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1764698039; x=1765302839; 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=R3fmXtA0VS/bmYEg2BbSjjVcEoYGv2SDd9KAsTbvG/8=; b=XXBp8Q9c2Hl/DqiMY8GTNmYeloHQ3pxQ69BT4M2+fVC+REfQFTxrpOfFxBmSk4lqJA Phg/bjhCFWGRxElbfCJKit6UFa+AwpgQXWIyroIIxZA1E3NpDM5iXogkXsxaK04yu6E1 uDzRE4wXetTbnWmML5v1CLXVHUKX+jFTOrNK0vTSBXUNopwKpJZyd2EDn9T7hr7oQGYU LSXCTlldlj8FqB45VPh8xAp8RA73hxtWICwa/pZm4/w+dYwDzCLEJbuTpyJ8Mq7Rzlra 4n6Do1Qr6uMP87FzKxdQ2/oCppxvrtZMVCaWBD32vu7umRCGZFPLXns5s6YSbxxN/ysY vRQQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1764698039; x=1765302839; 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=R3fmXtA0VS/bmYEg2BbSjjVcEoYGv2SDd9KAsTbvG/8=; b=ef/nQLsr9kk2028SRxlQrpfuRYNvw28pUirT13tDWpBnMu2mQtQpQQp3aWgm142HO5 jYhB5mpY0imzFp0nGF+FoKCnm/qeyirw6jcdslJVXcIObOayp5kvuXEd8FuW1vmxQcVN G0DULAhd7kvjOrZEhzxSzKJerC1NW6Q4rdl8f83CS1g4rKfDmVCD41uifoEv/IrJM9Ns B71chqIlnABRh0f/WTbv6VjLdGRRB4yj5w2fVhvIYysg70N4N9SAwf5JQUh6+pMvLV16 sjX6qsMcvVk5bZJKM4qyfSYB5WyQXGq70zQTHtSEpEqooqnbcGhzlaWqr0R6V2Vsf4t8 FJMw== X-Forwarded-Encrypted: i=1; AJvYcCVba4Ktfp8cHe5x03IFI9UKe88d1wF/eJYa0uEEVKHeBSDOipLaAG+ScIHTBCE8yZwA9LIRYt/cWgFM2w4=@vger.kernel.org X-Gm-Message-State: AOJu0YwclOKnPH7iOKxTW5ZjWMMb9uGb55sap87ZcCQT3nRl0EoD8bAo 0eKp+lUQ45aizz+wZw8OPXUbCo7ho5G+EEG7jqvB7RUX3CC6O4fI8vUJIW3ql7gownFOcKZI6Ss oULcamskQUw== X-Google-Smtp-Source: AGHT+IG+9ilXz5gVmVUIGvBMb1Evs62040WJAwi5pvbFDXSLe38ZR9z1a5GSthOPddBy2hZfZJJtgWL7cxY0 X-Received: from dlbqd22.prod.google.com ([2002:a05:7023:b16:b0:11a:5223:14ab]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a05:7022:7f0b:b0:11b:ca88:c4f5 with SMTP id a92af1059eb24-11c9d860f40mr18393276c88.35.1764698038740; Tue, 02 Dec 2025 09:53:58 -0800 (PST) Date: Tue, 2 Dec 2025 09:50:28 -0800 In-Reply-To: <20251202175043.623597-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: <20251202175043.623597-1-irogers@google.com> X-Mailer: git-send-email 2.52.0.158.g65b55ccf14-goog Message-ID: <20251202175043.623597-34-irogers@google.com> Subject: [PATCH v9 33/48] perf jevents: Add L2 metrics for Intel From: Ian Rogers To: Adrian Hunter , Alexander Shishkin , Arnaldo Carvalho de Melo , Benjamin Gray , Caleb Biggers , Edward Baker , Ian Rogers , Ingo Molnar , James Clark , Jing Zhang , Jiri Olsa , John Garry , Leo Yan , Namhyung Kim , Perry Taylor , Peter Zijlstra , Samantha Alt , Sandipan Das , Thomas Falcon , Weilin Wang , Xu Yang , linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Give a breakdown of various L2 counters as metrics, including totals, reads, hardware prefetcher, RFO, code and evictions. Signed-off-by: Ian Rogers Tested-by: Thomas Falcon --- tools/perf/pmu-events/intel_metrics.py | 170 +++++++++++++++++++++++++ 1 file changed, 170 insertions(+) diff --git a/tools/perf/pmu-events/intel_metrics.py b/tools/perf/pmu-events= /intel_metrics.py index 7fcc0a1c544d..d190d97f4aff 100755 --- a/tools/perf/pmu-events/intel_metrics.py +++ b/tools/perf/pmu-events/intel_metrics.py @@ -263,6 +263,175 @@ def IntelBr(): description=3D"breakdown of retired branch instruct= ions") =20 =20 +def IntelL2() -> Optional[MetricGroup]: + try: + DC_HIT =3D Event("L2_RQSTS.DEMAND_DATA_RD_HIT") + except: + return None + try: + DC_MISS =3D Event("L2_RQSTS.DEMAND_DATA_RD_MISS") + l2_dmnd_miss =3D DC_MISS + l2_dmnd_rd_all =3D DC_MISS + DC_HIT + except: + DC_ALL =3D Event("L2_RQSTS.ALL_DEMAND_DATA_RD") + l2_dmnd_miss =3D DC_ALL - DC_HIT + l2_dmnd_rd_all =3D DC_ALL + l2_dmnd_mrate =3D d_ratio(l2_dmnd_miss, interval_sec) + l2_dmnd_rrate =3D d_ratio(l2_dmnd_rd_all, interval_sec) + + DC_PFH =3D None + DC_PFM =3D None + l2_pf_all =3D None + l2_pf_mrate =3D None + l2_pf_rrate =3D None + try: + DC_PFH =3D Event("L2_RQSTS.PF_HIT") + DC_PFM =3D Event("L2_RQSTS.PF_MISS") + l2_pf_all =3D DC_PFH + DC_PFM + l2_pf_mrate =3D d_ratio(DC_PFM, interval_sec) + l2_pf_rrate =3D d_ratio(l2_pf_all, interval_sec) + except: + pass + + DC_RFOH =3D None + DC_RFOM =3D None + l2_rfo_all =3D None + l2_rfo_mrate =3D None + l2_rfo_rrate =3D None + try: + DC_RFOH =3D Event("L2_RQSTS.RFO_HIT") + DC_RFOM =3D Event("L2_RQSTS.RFO_MISS") + l2_rfo_all =3D DC_RFOH + DC_RFOM + l2_rfo_mrate =3D d_ratio(DC_RFOM, interval_sec) + l2_rfo_rrate =3D d_ratio(l2_rfo_all, interval_sec) + except: + pass + + DC_CH =3D None + try: + DC_CH =3D Event("L2_RQSTS.CODE_RD_HIT") + except: + pass + DC_CM =3D Event("L2_RQSTS.CODE_RD_MISS") + DC_IN =3D Event("L2_LINES_IN.ALL") + DC_OUT_NS =3D None + DC_OUT_S =3D None + l2_lines_out =3D None + l2_out_rate =3D None + wbn =3D None + isd =3D None + try: + DC_OUT_NS =3D Event("L2_LINES_OUT.NON_SILENT", + "L2_LINES_OUT.DEMAND_DIRTY", + "L2_LINES_IN.S") + DC_OUT_S =3D Event("L2_LINES_OUT.SILENT", + "L2_LINES_OUT.DEMAND_CLEAN", + "L2_LINES_IN.I") + if DC_OUT_S.name =3D=3D "L2_LINES_OUT.SILENT" and ( + args.model.startswith("skylake") or + args.model =3D=3D "cascadelakex"): + DC_OUT_S.name =3D "L2_LINES_OUT.SILENT/any/" + # bring is back to per-CPU + l2_s =3D Select(DC_OUT_S / 2, Literal("#smt_on"), DC_OUT_S) + l2_ns =3D DC_OUT_NS + l2_lines_out =3D l2_s + l2_ns + l2_out_rate =3D d_ratio(l2_lines_out, interval_sec) + nlr =3D max(l2_ns - DC_WB_U - DC_WB_D, 0) + wbn =3D d_ratio(nlr, interval_sec) + isd =3D d_ratio(l2_s, interval_sec) + except: + pass + DC_OUT_U =3D None + l2_pf_useless =3D None + l2_useless_rate =3D None + try: + DC_OUT_U =3D Event("L2_LINES_OUT.USELESS_HWPF") + l2_pf_useless =3D DC_OUT_U + l2_useless_rate =3D d_ratio(l2_pf_useless, interval_sec) + except: + pass + DC_WB_U =3D None + DC_WB_D =3D None + wbu =3D None + wbd =3D None + try: + DC_WB_U =3D Event("IDI_MISC.WB_UPGRADE") + DC_WB_D =3D Event("IDI_MISC.WB_DOWNGRADE") + wbu =3D d_ratio(DC_WB_U, interval_sec) + wbd =3D d_ratio(DC_WB_D, interval_sec) + except: + pass + + l2_lines_in =3D DC_IN + l2_code_all =3D (DC_CH + DC_CM) if DC_CH else None + l2_code_rate =3D d_ratio(l2_code_all, interval_sec) if DC_CH else None + l2_code_miss_rate =3D d_ratio(DC_CM, interval_sec) + l2_in_rate =3D d_ratio(l2_lines_in, interval_sec) + + return MetricGroup("lpm_l2", [ + MetricGroup("lpm_l2_totals", [ + Metric("lpm_l2_totals_in", "L2 cache total in per second", + l2_in_rate, "In/s"), + Metric("lpm_l2_totals_out", "L2 cache total out per second", + l2_out_rate, "Out/s") if l2_out_rate else None, + ]), + MetricGroup("lpm_l2_rd", [ + Metric("lpm_l2_rd_hits", "L2 cache data read hits", + d_ratio(DC_HIT, l2_dmnd_rd_all), "100%"), + Metric("lpm_l2_rd_hits", "L2 cache data read hits", + d_ratio(l2_dmnd_miss, l2_dmnd_rd_all), "100%"), + Metric("lpm_l2_rd_requests", "L2 cache data read requests per = second", + l2_dmnd_rrate, "requests/s"), + Metric("lpm_l2_rd_misses", "L2 cache data read misses per seco= nd", + l2_dmnd_mrate, "misses/s"), + ]), + MetricGroup("lpm_l2_hwpf", [ + Metric("lpm_l2_hwpf_hits", "L2 cache hardware prefetcher hits", + d_ratio(DC_PFH, l2_pf_all), "100%"), + Metric("lpm_l2_hwpf_misses", "L2 cache hardware prefetcher mis= ses", + d_ratio(DC_PFM, l2_pf_all), "100%"), + Metric("lpm_l2_hwpf_useless", "L2 cache hardware prefetcher us= eless prefetches per second", + l2_useless_rate, "100%") if l2_useless_rate else None, + Metric("lpm_l2_hwpf_requests", "L2 cache hardware prefetcher r= equests per second", + l2_pf_rrate, "100%"), + Metric("lpm_l2_hwpf_misses", "L2 cache hardware prefetcher mis= ses per second", + l2_pf_mrate, "100%"), + ]) if DC_PFH else None, + MetricGroup("lpm_l2_rfo", [ + Metric("lpm_l2_rfo_hits", "L2 cache request for ownership (RFO= ) hits", + d_ratio(DC_RFOH, l2_rfo_all), "100%"), + Metric("lpm_l2_rfo_misses", "L2 cache request for ownership (R= FO) misses", + d_ratio(DC_RFOM, l2_rfo_all), "100%"), + Metric("lpm_l2_rfo_requests", "L2 cache request for ownership = (RFO) requests per second", + l2_rfo_rrate, "requests/s"), + Metric("lpm_l2_rfo_misses", "L2 cache request for ownership (R= FO) misses per second", + l2_rfo_mrate, "misses/s"), + ]) if DC_RFOH else None, + MetricGroup("lpm_l2_code", [ + Metric("lpm_l2_code_hits", "L2 cache code hits", + d_ratio(DC_CH, l2_code_all), "100%") if DC_CH else None, + Metric("lpm_l2_code_misses", "L2 cache code misses", + d_ratio(DC_CM, l2_code_all), "100%") if DC_CH else None, + Metric("lpm_l2_code_requests", "L2 cache code requests per sec= ond", + l2_code_rate, "requests/s") if DC_CH else None, + Metric("lpm_l2_code_misses", "L2 cache code misses per second", + l2_code_miss_rate, "misses/s"), + ]), + MetricGroup("lpm_l2_evict", [ + MetricGroup("lpm_l2_evict_mef_lines", [ + Metric("lpm_l2_evict_mef_lines_l3_hot_lru", "L2 evictions = M/E/F lines L3 hot LRU per second", + wbu, "HotLRU/s") if wbu else None, + Metric("lpm_l2_evict_mef_lines_l3_norm_lru", "L2 evictions= M/E/F lines L3 normal LRU per second", + wbn, "NormLRU/s") if wbn else None, + Metric("lpm_l2_evict_mef_lines_dropped", "L2 evictions M/E= /F lines dropped per second", + wbd, "dropped/s") if wbd else None, + Metric("lpm_l2_evict_is_lines_dropped", "L2 evictions I/S = lines dropped per second", + isd, "dropped/s") if isd else None, + ]), + ]), + ], description=3D"L2 data cache analysis") + + def IntelPorts() -> Optional[MetricGroup]: pipeline_events =3D json.load( open(f"{_args.events_path}/x86/{_args.model}/pipeline.json")) @@ -386,6 +555,7 @@ def main() -> None: Smi(), Tsx(), IntelBr(), + IntelL2(), IntelPorts(), IntelSwpf(), ]) --=20 2.52.0.158.g65b55ccf14-goog From nobody Wed Dec 10 20:09:25 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 56AF12DF3E7 for ; Tue, 2 Dec 2025 17:54: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=1764698046; cv=none; b=CLm+31Kbcg0yemnPlq+d7COLJBMJU4Dkj1p6zJwBhl8QT2yTja0yvIz2id1LSn5XxWPsPWe8b16QbTJTMyJfKsHCxbZuWuUWK/1w3MueUD7CiBws8xO3BUrq+ZwzLJihy0LIgnxWOR6I9oNreIVPEycQfuq6ODrTJwe5JoKVZbY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764698046; c=relaxed/simple; bh=MdildCZuHQi1N2sFW7TIzyHHrQRJl0MB7grRBCGObhQ=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=eVjsMH3zbSCcz177JW54OE4z/QkD09/Fg1qouUNSYy4QbFLJ+qRm6FOP2QTTb+r/wTK3w5OBOMV3vag/30PTDmtYlRBPi8Og0NNiNaR8fbZUf+QAx6a51TxnfxhnGDCkYjFSHE4WZKLcrXX5YL0gb7v/uEyyGSlxLl5lcYfBXNQ= 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=UAJ77Fn5; 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="UAJ77Fn5" Received: by mail-pg1-f202.google.com with SMTP id 41be03b00d2f7-bbcf3bd4c8fso45939a12.0 for ; Tue, 02 Dec 2025 09:54:05 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1764698045; x=1765302845; 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=GprBI0OyNPCgpyQHkdm+/+qtKOSxDhG3Yekl66gcRL8=; b=UAJ77Fn50HKk3g27O4KDvAiHAe2ktWWijSy5jiLiQvN3t1lySqddUnLLpnK9IfjSZn 4QccsQCRaiXFPOp4KXfsxM7oudHwRmrqeQeGLBEZ6P/sSlLirmlfG5mfpZWsOuEPm1a/ FkQ9GJhdfL+5pO4DkkpNqea8UO15Ln15TQpJ1Lfnls8UoQ2VN01l0ZOx00G7FDY09XND s9aTCLMqUmoI03G5WH31dCZiNZEjoZuAJ4SJADyAyJ7xXZrHGjrnK2lwtaG9N5hjs1va SxO7h6P1A+mPhStkWoH9oEOA0edBPcyDGNKA0kQGk+bxffDlF16LgwsBDhUmCKE+Z93W QnEA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1764698045; x=1765302845; 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=GprBI0OyNPCgpyQHkdm+/+qtKOSxDhG3Yekl66gcRL8=; b=p8dxB43NYArweLXXnzDjQLGXAs8I5uVwO/+2mGLhyL0/Lrc5w/zpw2cjzjh1RV9AzI +y2kEU+2MUfQwHpONv+6JQC5MLqXzNNZGIa96MB6t2dW1M/9O/JUbHRLaHLDxxMrcwSv TmXeY0MvJH0QfryxQ6AGJZTUGB1zs7Vm0LrLGa+7m+iYnXyOqhbz3LF8f2OGE6Tndql2 rgwJM5V/IzZG+gCTwSXqS0TJcoNE+dzN+7uSiwnk9dR9sCJGfom7MHGT9fnybUc6fNxt 6ikBhApX19E8C7JVYlenNIwKRb+INWPReuCzebCWugBB6mKCgiJAFZTQfLIpt8zVmQwP mqrw== X-Forwarded-Encrypted: i=1; AJvYcCXhH0s8fOCBM37yhRr72XRAtEzOtWOsYeO22hS83j/VlqjYhiOxTUYZItqzLxHHeyCozQNYb/MxpzXwgN0=@vger.kernel.org X-Gm-Message-State: AOJu0Yz271JwiN4ah7JtMep8fp8Y3vmviXROdXgTt2zCTUEpu6mfb6Or /zurBApQH0RaoWlOU4UndyHnUZeHYZwF396iwFHHxhsWxoep+IK7xjvB8cY7g6seUMcA9ipgFFY lfz3FtSs6SQ== X-Google-Smtp-Source: AGHT+IFQqxDux4d9d+UfYuF+LS8E/y91MF/mnEEf+Ve/0BeI7sPqmS7eEam9HtynDSrKXUmGkAJSLWJ7iG0K X-Received: from pgbdp14.prod.google.com ([2002:a05:6a02:f0e:b0:bac:a20:5edf]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a21:99a0:b0:35e:8b46:c116 with SMTP id adf61e73a8af0-363e8c6fd2emr4284025637.4.1764698044611; Tue, 02 Dec 2025 09:54:04 -0800 (PST) Date: Tue, 2 Dec 2025 09:50:29 -0800 In-Reply-To: <20251202175043.623597-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: <20251202175043.623597-1-irogers@google.com> X-Mailer: git-send-email 2.52.0.158.g65b55ccf14-goog Message-ID: <20251202175043.623597-35-irogers@google.com> Subject: [PATCH v9 34/48] perf jevents: Add load store breakdown metrics ldst for Intel From: Ian Rogers To: Adrian Hunter , Alexander Shishkin , Arnaldo Carvalho de Melo , Benjamin Gray , Caleb Biggers , Edward Baker , Ian Rogers , Ingo Molnar , James Clark , Jing Zhang , Jiri Olsa , John Garry , Leo Yan , Namhyung Kim , Perry Taylor , Peter Zijlstra , Samantha Alt , Sandipan Das , Thomas Falcon , Weilin Wang , Xu Yang , linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Give breakdown of number of instructions. Use the counter mask (cmask) to show the number of cycles taken to retire the instructions. Signed-off-by: Ian Rogers Tested-by: Thomas Falcon --- tools/perf/pmu-events/intel_metrics.py | 87 +++++++++++++++++++++++++- 1 file changed, 86 insertions(+), 1 deletion(-) diff --git a/tools/perf/pmu-events/intel_metrics.py b/tools/perf/pmu-events= /intel_metrics.py index d190d97f4aff..19a284b4c520 100755 --- a/tools/perf/pmu-events/intel_metrics.py +++ b/tools/perf/pmu-events/intel_metrics.py @@ -8,7 +8,7 @@ import re from typing import Optional from metric import (d_ratio, has_event, max, CheckPmu, Event, JsonEncodeMe= tric, JsonEncodeMetricGroupDescriptions, Literal, LoadEvents, - Metric, MetricGroup, MetricRef, Select) + Metric, MetricConstraint, MetricGroup, MetricRef, Sele= ct) =20 # Global command line arguments. _args =3D None @@ -525,6 +525,90 @@ def IntelSwpf() -> Optional[MetricGroup]: ], description=3D"Software prefetch instruction breakdown") =20 =20 +def IntelLdSt() -> Optional[MetricGroup]: + if _args.model in [ + "bonnell", + "nehalemep", + "nehalemex", + "westmereep-dp", + "westmereep-sp", + "westmereex", + ]: + return None + LDST_LD =3D Event("MEM_INST_RETIRED.ALL_LOADS", "MEM_UOPS_RETIRED.ALL_= LOADS") + LDST_ST =3D Event("MEM_INST_RETIRED.ALL_STORES", + "MEM_UOPS_RETIRED.ALL_STORES") + LDST_LDC1 =3D Event(f"{LDST_LD.name}/cmask=3D1/") + LDST_STC1 =3D Event(f"{LDST_ST.name}/cmask=3D1/") + LDST_LDC2 =3D Event(f"{LDST_LD.name}/cmask=3D2/") + LDST_STC2 =3D Event(f"{LDST_ST.name}/cmask=3D2/") + LDST_LDC3 =3D Event(f"{LDST_LD.name}/cmask=3D3/") + LDST_STC3 =3D Event(f"{LDST_ST.name}/cmask=3D3/") + ins =3D Event("instructions") + LDST_CYC =3D Event("CPU_CLK_UNHALTED.THREAD", + "CPU_CLK_UNHALTED.CORE_P", + "CPU_CLK_UNHALTED.THREAD_P") + LDST_PRE =3D None + try: + LDST_PRE =3D Event("LOAD_HIT_PREFETCH.SWPF", "LOAD_HIT_PRE.SW_PF") + except: + pass + LDST_AT =3D None + try: + LDST_AT =3D Event("MEM_INST_RETIRED.LOCK_LOADS") + except: + pass + cyc =3D LDST_CYC + + ld_rate =3D d_ratio(LDST_LD, interval_sec) + st_rate =3D d_ratio(LDST_ST, interval_sec) + pf_rate =3D d_ratio(LDST_PRE, interval_sec) if LDST_PRE else None + at_rate =3D d_ratio(LDST_AT, interval_sec) if LDST_AT else None + + ldst_ret_constraint =3D MetricConstraint.GROUPED_EVENTS + if LDST_LD.name =3D=3D "MEM_UOPS_RETIRED.ALL_LOADS": + ldst_ret_constraint =3D MetricConstraint.NO_GROUP_EVENTS_NMI + + return MetricGroup("lpm_ldst", [ + MetricGroup("lpm_ldst_total", [ + Metric("lpm_ldst_total_loads", "Load/store instructions total = loads", + ld_rate, "loads"), + Metric("lpm_ldst_total_stores", "Load/store instructions total= stores", + st_rate, "stores"), + ]), + MetricGroup("lpm_ldst_prcnt", [ + Metric("lpm_ldst_prcnt_loads", "Percent of all instructions th= at are loads", + d_ratio(LDST_LD, ins), "100%"), + Metric("lpm_ldst_prcnt_stores", "Percent of all instructions t= hat are stores", + d_ratio(LDST_ST, ins), "100%"), + ]), + MetricGroup("lpm_ldst_ret_lds", [ + Metric("lpm_ldst_ret_lds_1", "Retired loads in 1 cycle", + d_ratio(max(LDST_LDC1 - LDST_LDC2, 0), cyc), "100%", + constraint=3Dldst_ret_constraint), + Metric("lpm_ldst_ret_lds_2", "Retired loads in 2 cycles", + d_ratio(max(LDST_LDC2 - LDST_LDC3, 0), cyc), "100%", + constraint=3Dldst_ret_constraint), + Metric("lpm_ldst_ret_lds_3", "Retired loads in 3 or more cycle= s", + d_ratio(LDST_LDC3, cyc), "100%"), + ]), + MetricGroup("lpm_ldst_ret_sts", [ + Metric("lpm_ldst_ret_sts_1", "Retired stores in 1 cycle", + d_ratio(max(LDST_STC1 - LDST_STC2, 0), cyc), "100%", + constraint=3Dldst_ret_constraint), + Metric("lpm_ldst_ret_sts_2", "Retired stores in 2 cycles", + d_ratio(max(LDST_STC2 - LDST_STC3, 0), cyc), "100%", + constraint=3Dldst_ret_constraint), + Metric("lpm_ldst_ret_sts_3", "Retired stores in 3 more cycles", + d_ratio(LDST_STC3, cyc), "100%"), + ]), + Metric("lpm_ldst_ld_hit_swpf", "Load hit software prefetches per s= econd", + pf_rate, "swpf/s") if pf_rate else None, + Metric("lpm_ldst_atomic_lds", "Atomic loads per second", + at_rate, "loads/s") if at_rate else None, + ], description=3D"Breakdown of load/store instructions") + + def main() -> None: global _args =20 @@ -556,6 +640,7 @@ def main() -> None: Tsx(), IntelBr(), IntelL2(), + IntelLdSt(), IntelPorts(), IntelSwpf(), ]) --=20 2.52.0.158.g65b55ccf14-goog From nobody Wed Dec 10 20:09:25 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 25A492D77FE for ; Tue, 2 Dec 2025 17:54:11 +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=1764698052; cv=none; b=oqX8oguCvTC3Ubb4Vh+3/p+iITDBIcXTwZet1gCbSvmOJlfQHWZDhlTbLoe+HZsM4BqZ2HnPFLRjW/avEijWBysN1W9sxl73Q2TGPYu55nf99jRav7dzxVhBCMo1iHO0UuVEak4UDqjoL7lKULzgBkxj4QHfCMx2zQSPtAXMQY0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764698052; c=relaxed/simple; bh=+ttWDGUeG4bvVIjy1RBoNK6kU7dlt8w+HTxO/xITRH0=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=nSYK77XA2d99rFOKJJzNsmZ953YrellKl4unCUAZn0sdQkai8LX4xoS2oLvv/GcvDFQ5cDH8m7uAmoOExyZhnbvwf1iH2sf429wuv9yTW/7/giteYrnBwNAOiICiqYJQaZ8kEgmehxFYUVsb5i5jqGnYeTCw/z79hQf/wrN1WNA= 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=AEbUJQw1; 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="AEbUJQw1" Received: by mail-pg1-f201.google.com with SMTP id 41be03b00d2f7-b969f3f5c13so5854198a12.0 for ; Tue, 02 Dec 2025 09:54:11 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1764698051; x=1765302851; 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=jNtqbd8Q8NjC4dva2JveZ3egkazytlooL/wAa+20rnM=; b=AEbUJQw1Lx7+gpMaFT4uij6cn/YCoCSiinW0WCbiaZ1+/PP0UyFQBfUGdxVtT4e/o0 gePx38VxeBOy8WWvTZwiJQRVh7fdWHgnt1S30pjv8+N2ByAvZn6JEalZPydrF7awqCJL DbJKw1Gy318H7i/VpACkR/jGDYtGcOf73qsCiKUJg8rN/6EIV0G++mHWniqlMOiD1oMq a+xHAVs9JeSJignUeqkGHSifkqF1MJnQvdzGxzEKHvE75vFwTk9uKskmlKHtv7a5k2ON XR2m29IHLBNFFytrL1T2LVgH6gSe90ki7BhmmdQfzpOvsU+Z0EQtubhLAj/cP0qr2FeO KWFg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1764698051; x=1765302851; 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=jNtqbd8Q8NjC4dva2JveZ3egkazytlooL/wAa+20rnM=; b=s5CBaKhLq9IFGkeFbKt7ZyNTjG1ueX09KcZgHTq7EfjJ+fgrUrrfw9UvAp+Nl7p3nl IfU82TraWIIYprOmnEOECGGltOnygddDSGQd+i+rgD2fhjkQKOsNUr8lND0YkNa/BexS 7XLFjZ2q8FQAkGIFmbf3jMSDB8Bp5Zq6LvTLqJdJpnmG6fhV/0Ju8BdrCHp1CzkaEAiz Dhe1vOCksrmGdNgeaIFPBX9zGatCjMgLIX4lTTmT8HGzUMPs//uHhGIYl7nCtZs2dxnQ 1y/vyAtBRUkE0CFx3CjuSxU/z2PsZDYO1WhcGSqQLzo0UiNFbayDH6GHwuIF9uJtj3jh N9kQ== X-Forwarded-Encrypted: i=1; AJvYcCUREmbT+ETNbIxgsTmOthnnqg3Iu9BjAyyScmtMUpnDloCVWEEUEWvqsfvaTGROi/BPvffVQdO0ki7zrFk=@vger.kernel.org X-Gm-Message-State: AOJu0Yx7Oj1G216XPKpcs/AuOubnziqxvxj4G+jIzSFs6bWNpYK8d03J L/cW1U7ev4SCb6cN0+k5/k6es6+FDMp7IO5enriOO7yXNbmXZVQcrOebbfbC042oWtE1x/ggcdx 2Ks5siiwPUQ== X-Google-Smtp-Source: AGHT+IEr3cVljQnlIcGWKyPMDcxyIrtyGSbvioKXilxmQF5wxHkWqYT2QKPuIKEZcSckmpsC+i3PsZsATnpZ X-Received: from dyctx12.prod.google.com ([2002:a05:7301:5f8c:b0:2a4:7052:5652]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a05:7300:d589:b0:2a4:3593:468a with SMTP id 5a478bee46e88-2a9418bc5ccmr12424963eec.38.1764698050504; Tue, 02 Dec 2025 09:54:10 -0800 (PST) Date: Tue, 2 Dec 2025 09:50:30 -0800 In-Reply-To: <20251202175043.623597-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: <20251202175043.623597-1-irogers@google.com> X-Mailer: git-send-email 2.52.0.158.g65b55ccf14-goog Message-ID: <20251202175043.623597-36-irogers@google.com> Subject: [PATCH v9 35/48] perf jevents: Add ILP metrics for Intel From: Ian Rogers To: Adrian Hunter , Alexander Shishkin , Arnaldo Carvalho de Melo , Benjamin Gray , Caleb Biggers , Edward Baker , Ian Rogers , Ingo Molnar , James Clark , Jing Zhang , Jiri Olsa , John Garry , Leo Yan , Namhyung Kim , Perry Taylor , Peter Zijlstra , Samantha Alt , Sandipan Das , Thomas Falcon , Weilin Wang , Xu Yang , linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Use the counter mask (cmask) to see how many cycles an instruction takes to retire. Present as a set of ILP metrics. Signed-off-by: Ian Rogers Tested-by: Thomas Falcon --- tools/perf/pmu-events/intel_metrics.py | 40 ++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/tools/perf/pmu-events/intel_metrics.py b/tools/perf/pmu-events= /intel_metrics.py index 19a284b4c520..bc3c50285916 100755 --- a/tools/perf/pmu-events/intel_metrics.py +++ b/tools/perf/pmu-events/intel_metrics.py @@ -263,6 +263,45 @@ def IntelBr(): description=3D"breakdown of retired branch instruct= ions") =20 =20 +def IntelIlp() -> MetricGroup: + tsc =3D Event("msr/tsc/") + c0 =3D Event("msr/mperf/") + low =3D tsc - c0 + inst_ret =3D Event("INST_RETIRED.ANY_P") + inst_ret_c =3D [Event(f"{inst_ret.name}/cmask=3D{x}/") for x in range(= 1, 6)] + core_cycles =3D Event("CPU_CLK_UNHALTED.THREAD_P_ANY", + "CPU_CLK_UNHALTED.DISTRIBUTED", + "cycles") + ilp =3D [d_ratio(max(inst_ret_c[x] - inst_ret_c[x + 1], 0), core_cycle= s) + for x in range(0, 4)] + ilp.append(d_ratio(inst_ret_c[4], core_cycles)) + ilp0 =3D 1 + for x in ilp: + ilp0 -=3D x + return MetricGroup("lpm_ilp", [ + Metric("lpm_ilp_idle", "Lower power cycles as a percentage of all = cycles", + d_ratio(low, tsc), "100%"), + Metric("lpm_ilp_inst_ret_0", + "Instructions retired in 0 cycles as a percentage of all cy= cles", + ilp0, "100%"), + Metric("lpm_ilp_inst_ret_1", + "Instructions retired in 1 cycles as a percentage of all cy= cles", + ilp[0], "100%"), + Metric("lpm_ilp_inst_ret_2", + "Instructions retired in 2 cycles as a percentage of all cy= cles", + ilp[1], "100%"), + Metric("lpm_ilp_inst_ret_3", + "Instructions retired in 3 cycles as a percentage of all cy= cles", + ilp[2], "100%"), + Metric("lpm_ilp_inst_ret_4", + "Instructions retired in 4 cycles as a percentage of all cy= cles", + ilp[3], "100%"), + Metric("lpm_ilp_inst_ret_5", + "Instructions retired in 5 or more cycles as a percentage o= f all cycles", + ilp[4], "100%"), + ]) + + def IntelL2() -> Optional[MetricGroup]: try: DC_HIT =3D Event("L2_RQSTS.DEMAND_DATA_RD_HIT") @@ -639,6 +678,7 @@ def main() -> None: Smi(), Tsx(), IntelBr(), + IntelIlp(), IntelL2(), IntelLdSt(), IntelPorts(), --=20 2.52.0.158.g65b55ccf14-goog From nobody Wed Dec 10 20:09:25 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 873F82E093E for ; Tue, 2 Dec 2025 17:54:14 +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=1764698056; cv=none; b=I4e9q7vjQi/nP5QirrqL8/UvetEqn5PuE//B6J76aw9oswJfPlny9jdYVB8USS9JxhI6gFEd2i4A3WR4fD3iHoSHHoE08cMhG9fPv8BrzmOS2sQdiXw5VxOqOrrDaG/0+6K+NVPHl1i+FV+SLcywLZQ4a7snK7nECOMHHzBF2GU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764698056; c=relaxed/simple; bh=/GIlef2EyZC6a9RRSOQMmBeM8UDXPXroHzFTd4A7XFs=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=sElUbXZTxPCJm1yAOO7J0Nznz2r3im8j/d9mO31STXYj5qviCnsOhsqk88CyoUvo+21MfCqpyydsR/P3UhyaVRMyXMfHLdqvuIPPIhDKsrnyYid8tw8k/Y7QGtmr1IO9koJ5v3fA8gb/KPvkdM16rh8Z2pi0IiuaRezXBFwP7ro= 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=f9EF33ct; 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="f9EF33ct" Received: by mail-pg1-f202.google.com with SMTP id 41be03b00d2f7-bde2e654286so4564921a12.3 for ; Tue, 02 Dec 2025 09:54:14 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1764698054; x=1765302854; 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=xkVu8b5ZXOgCEiRhWzvnOPQSP9ZYLvl9DnUVKbBmwB4=; b=f9EF33ctOsxkj0ezYa6ZAWZAwclYI7RsFkfA6p+6UxxojzRwd4Lxq+dsuDJzCFLJxf znr76h8VBQUzpt1t9M61phOY1ndmeoHpc/IDcV5dlxtGt5vVD/Yj9nqNwXMkag7/uEf7 XkfvdSF8+ENg8sWODZpPwlUXBZjZngybfNUIpIvypF2NT2nIHzD3kR57KPRl9oK3AEQt 6IBf9VJL+t69lMyfauIO7SRKBh/7suTyyRbEObs4pkW0qoUtnh8iVwavXEQjIgQmpNiX RxxpYoKikQ2kL8wW97JfipNQUwHdv49kTwU3TmmgrEko4jKrWkxAVUStfmHqnbetUMuN y9Ng== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1764698054; x=1765302854; 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=xkVu8b5ZXOgCEiRhWzvnOPQSP9ZYLvl9DnUVKbBmwB4=; b=CwdmPoZ57t4zEqL+SzUA9o77q6rfN1DdXJgJKzggLt4G2NdKo9GNb/gv/GRsWrAuwm Agmzlk8GdiKBahx8Q6wXJSP7/zBVMDe2/zBGHRXYyUeAxno9fOdRHMpVY1i5QdLvbfih +SJ5IZcKMbfWIt1m/zvqHtsTSVJHZB3jbJCC5DbhQZBgOizLlSJVSh29t4TBGqJiah5q C2fer1t8S8cLA8F1l0ov+rFsRCEtUebjPE1Mif1R7NyO3lmwECX8/UsiOOfQ5drWjsD0 1UJhVcm8w+sBid3dIDLMs7WLEpvkNZZmF2V6zPniPdJ2lTtyHwLZmvkO7Oh4TgQ8J7Lp kdEg== X-Forwarded-Encrypted: i=1; AJvYcCWCXvcaxJgPF5vWxAbNV7MRjzTO3wK5p58MfbghdySNMqh3vyvOhGexm6Claz7aS5iXlyBy4CyJfS2KeQA=@vger.kernel.org X-Gm-Message-State: AOJu0Yx2LF1zeMn9oLaVJ3gasmHKxiixY2BhLjCWtrDQOu7HJeJZDSVm MwX/BC+KsLhSK6SBVYlwalDFFqEH00SOhp4G91OyKbliUU6rWYf8yM01PRPgly40ty49tYzwZCC imLOFbMHJYg== X-Google-Smtp-Source: AGHT+IE7G8f60FPONJ4cPEd8HPOCKPs8xgZYBVFFtcM6V/uJHUGNXzVcUizLGRwuJ1iYTXhmXmglEjM6z093 X-Received: from dycam21.prod.google.com ([2002:a05:7300:fc15:b0:2a4:6ed0:3c4]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a05:7300:8607:b0:2a9:96f1:d2e7 with SMTP id 5a478bee46e88-2a996f1f7cfmr5115241eec.18.1764698053628; Tue, 02 Dec 2025 09:54:13 -0800 (PST) Date: Tue, 2 Dec 2025 09:50:31 -0800 In-Reply-To: <20251202175043.623597-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: <20251202175043.623597-1-irogers@google.com> X-Mailer: git-send-email 2.52.0.158.g65b55ccf14-goog Message-ID: <20251202175043.623597-37-irogers@google.com> Subject: [PATCH v9 36/48] perf jevents: Add context switch metrics for Intel From: Ian Rogers To: Adrian Hunter , Alexander Shishkin , Arnaldo Carvalho de Melo , Benjamin Gray , Caleb Biggers , Edward Baker , Ian Rogers , Ingo Molnar , James Clark , Jing Zhang , Jiri Olsa , John Garry , Leo Yan , Namhyung Kim , Perry Taylor , Peter Zijlstra , Samantha Alt , Sandipan Das , Thomas Falcon , Weilin Wang , Xu Yang , linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Metrics break down context switches for different kinds of instruction. Signed-off-by: Ian Rogers Tested-by: Thomas Falcon --- tools/perf/pmu-events/intel_metrics.py | 58 ++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) diff --git a/tools/perf/pmu-events/intel_metrics.py b/tools/perf/pmu-events= /intel_metrics.py index bc3c50285916..9cf4bd8ac769 100755 --- a/tools/perf/pmu-events/intel_metrics.py +++ b/tools/perf/pmu-events/intel_metrics.py @@ -263,6 +263,63 @@ def IntelBr(): description=3D"breakdown of retired branch instruct= ions") =20 =20 +def IntelCtxSw() -> MetricGroup: + cs =3D Event("context\\-switches") + metrics =3D [ + Metric("lpm_cs_rate", "Context switches per second", + d_ratio(cs, interval_sec), "ctxsw/s") + ] + + ev =3D Event("instructions") + metrics.append(Metric("lpm_cs_instr", "Instructions per context switch= ", + d_ratio(ev, cs), "instr/cs")) + + ev =3D Event("cycles") + metrics.append(Metric("lpm_cs_cycles", "Cycles per context switch", + d_ratio(ev, cs), "cycles/cs")) + + try: + ev =3D Event("MEM_INST_RETIRED.ALL_LOADS", "MEM_UOPS_RETIRED.ALL_L= OADS") + metrics.append(Metric("lpm_cs_loads", "Loads per context switch", + d_ratio(ev, cs), "loads/cs")) + except: + pass + + try: + ev =3D Event("MEM_INST_RETIRED.ALL_STORES", + "MEM_UOPS_RETIRED.ALL_STORES") + metrics.append(Metric("lpm_cs_stores", "Stores per context switch", + d_ratio(ev, cs), "stores/cs")) + except: + pass + + try: + ev =3D Event("BR_INST_RETIRED.NEAR_TAKEN", "BR_INST_RETIRED.TAKEN_= JCC") + metrics.append(Metric("lpm_cs_br_taken", "Branches taken per conte= xt switch", + d_ratio(ev, cs), "br_taken/cs")) + except: + pass + + try: + l2_misses =3D (Event("L2_RQSTS.DEMAND_DATA_RD_MISS") + + Event("L2_RQSTS.RFO_MISS") + + Event("L2_RQSTS.CODE_RD_MISS")) + try: + l2_misses +=3D Event("L2_RQSTS.HWPF_MISS", + "L2_RQSTS.L2_PF_MISS", "L2_RQSTS.PF_MISS") + except: + pass + + metrics.append(Metric("lpm_cs_l2_misses", "L2 misses per context s= witch", + d_ratio(l2_misses, cs), "l2_misses/cs")) + except: + pass + + return MetricGroup("lpm_cs", metrics, + description=3D("Number of context switches per seco= nd, instructions " + "retired & core cycles between context= switches")) + + def IntelIlp() -> MetricGroup: tsc =3D Event("msr/tsc/") c0 =3D Event("msr/mperf/") @@ -678,6 +735,7 @@ def main() -> None: Smi(), Tsx(), IntelBr(), + IntelCtxSw(), IntelIlp(), IntelL2(), IntelLdSt(), --=20 2.52.0.158.g65b55ccf14-goog From nobody Wed Dec 10 20:09:25 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 E7FE62E1726 for ; Tue, 2 Dec 2025 17:54:16 +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=1764698058; cv=none; b=Mi3P7EZ1XP9l0WWAOIRxu+uX2MyC8JVZ09KEG+CDD824PeERXzmxLT41gwZsfRZ0xdULtUwGwUVR52hx5CDwdR5l/YXXORc8O0gCQpoNBwB7irHCc09lof/3rvnCh2RXdrsf8LIZu1c95kSlbdb9ycPl1iUS4PBU+z2hX8RHJsQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764698058; c=relaxed/simple; bh=7nI0hEnDbiKkHZA8PtES6A2M3eDxdTPLzXJex2BVts0=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=P7ETOupaI33OFVpcihwnmaecA7MLj5T4iToBB3pWkvpu40CE+8/ujDVvqEulh+pwk0Sh7Om2lJX8R9vNNId/hdciZrHb6wHgbqjfPv1k5D4JwNMDzHsR0BkFQ9ibGSeIBDWFpP6/Ic9ety2GkIcrCy5GREEe8vlj+nhy4Lngw9I= 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=cCvJuc+K; 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="cCvJuc+K" Received: by mail-pg1-f202.google.com with SMTP id 41be03b00d2f7-bdf47c10220so8269724a12.3 for ; Tue, 02 Dec 2025 09:54:16 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1764698056; x=1765302856; 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=+4/xhOVEERyGr7SvaMrLMTc7V1kN7o1fokcuP75TU7s=; b=cCvJuc+KQGf9gjyktMvoqJBPv2QQroONHWctABmio9l1ymi6Z8HkLlUGwBiam1wZC6 zdKV6vnDvLFhVayAZFcT/g5AidQyWKEQsBQSh81evCIBldy/2u0b3IFe2Ysw/7waAIh2 xz4Vv41Ikyz6f8JlqWqDR8thuUHLPnauNjt6KTc6QYdSsc75GjyTfZTchUKUjUf//Pin mlKng4yRG88GQAMrqz3jD9kM0Pqp62wbCJ5MGV/hsWKmWWLSFCiC8NhJ+LMlTaA+NGfP 0N9AWm1QkgbLlfHK9xxbwKNDr6Z9yNColeM3+4HdwJs82wkdQLxKWvF/oRnI//SDIbc8 +xFQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1764698056; x=1765302856; 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=+4/xhOVEERyGr7SvaMrLMTc7V1kN7o1fokcuP75TU7s=; b=J/QKLIjcriq05Vh8tB83eaLi97LlLtmpQJl9fW8/aQ5uBRZ9LiwU09/MMemFDMkeSl VCTYXqlBletFXO46krF2gAwHvVwcxEwF5oEhN4NIOoPE5PsqYOlcZ4+7esCg5hACNOaS gDV/r1IhGga9hlyRFOqEJMP+nTe3bm5aV3qxGMTK9hZTH9pu6Rb+FtMfn47SJ9S44xDl DDOsYuz3TUalWoeOF6Ez8cezIHFdAqKsU+73ncMaRVHsgDs/acYnan+/1LyXMaqvytqo 2XCth5UlBJjow9ciQQDmEqmpVgDeIMkYsSR/csScxcEY4HmVQ/WoKm4k+YUc4aPaNJ/A 9suQ== X-Forwarded-Encrypted: i=1; AJvYcCXRXrFVIPydIYVAsq17EunYH8AFmVDkcuAJKgXjtMxPOqmf9MyX6Q5CG8omahP2jBpDYgwjJzZ6Y5MW6ao=@vger.kernel.org X-Gm-Message-State: AOJu0Yy5W5JDQVyjohOKroNVIrVVVlv7mVc6oruLOaPLdcYH5s8mKVzL c9GZhaYBF5GbAnvXmsN53qqJjknbanr+Fa3VljGHeOcbnfpYAjaWfYVmgoWC7pLR5YGqPSmUUdQ xfEjN3iFZoQ== X-Google-Smtp-Source: AGHT+IG312ub60+aKSUBIZJvHT6uwzqaUEpARWPmUwwlLRJM4Vrs/BeUFAdRK1VvTf3grTSSNiaTJnhG/iDf X-Received: from dybtm7.prod.google.com ([2002:a05:7300:f0c7:b0:2a4:6f54:78fa]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a05:7300:3243:b0:2a4:50ca:9234 with SMTP id 5a478bee46e88-2ab8fb44026mr260025eec.26.1764698056016; Tue, 02 Dec 2025 09:54:16 -0800 (PST) Date: Tue, 2 Dec 2025 09:50:32 -0800 In-Reply-To: <20251202175043.623597-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: <20251202175043.623597-1-irogers@google.com> X-Mailer: git-send-email 2.52.0.158.g65b55ccf14-goog Message-ID: <20251202175043.623597-38-irogers@google.com> Subject: [PATCH v9 37/48] perf jevents: Add FPU metrics for Intel From: Ian Rogers To: Adrian Hunter , Alexander Shishkin , Arnaldo Carvalho de Melo , Benjamin Gray , Caleb Biggers , Edward Baker , Ian Rogers , Ingo Molnar , James Clark , Jing Zhang , Jiri Olsa , John Garry , Leo Yan , Namhyung Kim , Perry Taylor , Peter Zijlstra , Samantha Alt , Sandipan Das , Thomas Falcon , Weilin Wang , Xu Yang , linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Metrics break down of floating point operations. Signed-off-by: Ian Rogers Tested-by: Thomas Falcon --- tools/perf/pmu-events/intel_metrics.py | 97 ++++++++++++++++++++++++++ 1 file changed, 97 insertions(+) diff --git a/tools/perf/pmu-events/intel_metrics.py b/tools/perf/pmu-events= /intel_metrics.py index 9cf4bd8ac769..77b8e10194db 100755 --- a/tools/perf/pmu-events/intel_metrics.py +++ b/tools/perf/pmu-events/intel_metrics.py @@ -320,6 +320,102 @@ def IntelCtxSw() -> MetricGroup: "retired & core cycles between context= switches")) =20 =20 +def IntelFpu() -> Optional[MetricGroup]: + cyc =3D Event("cycles") + try: + s_64 =3D Event("FP_ARITH_INST_RETIRED.SCALAR_SINGLE", + "SIMD_INST_RETIRED.SCALAR_SINGLE") + except: + return None + d_64 =3D Event("FP_ARITH_INST_RETIRED.SCALAR_DOUBLE", + "SIMD_INST_RETIRED.SCALAR_DOUBLE") + s_128 =3D Event("FP_ARITH_INST_RETIRED.128B_PACKED_SINGLE", + "SIMD_INST_RETIRED.PACKED_SINGLE") + + flop =3D s_64 + d_64 + 4 * s_128 + + d_128 =3D None + s_256 =3D None + d_256 =3D None + s_512 =3D None + d_512 =3D None + try: + d_128 =3D Event("FP_ARITH_INST_RETIRED.128B_PACKED_DOUBLE") + flop +=3D 2 * d_128 + s_256 =3D Event("FP_ARITH_INST_RETIRED.256B_PACKED_SINGLE") + flop +=3D 8 * s_256 + d_256 =3D Event("FP_ARITH_INST_RETIRED.256B_PACKED_DOUBLE") + flop +=3D 4 * d_256 + s_512 =3D Event("FP_ARITH_INST_RETIRED.512B_PACKED_SINGLE") + flop +=3D 16 * s_512 + d_512 =3D Event("FP_ARITH_INST_RETIRED.512B_PACKED_DOUBLE") + flop +=3D 8 * d_512 + except: + pass + + f_assist =3D Event("ASSISTS.FP", "FP_ASSIST.ANY", "FP_ASSIST.S") + if f_assist in [ + "ASSISTS.FP", + "FP_ASSIST.S", + ]: + f_assist +=3D "/cmask=3D1/" + + flop_r =3D d_ratio(flop, interval_sec) + flop_c =3D d_ratio(flop, cyc) + nmi_constraint =3D MetricConstraint.GROUPED_EVENTS + if f_assist.name =3D=3D "ASSISTS.FP": # Icelake+ + nmi_constraint =3D MetricConstraint.NO_GROUP_EVENTS_NMI + + def FpuMetrics(group: str, fl: Optional[Event], mult: int, desc: str) = -> Optional[MetricGroup]: + if not fl: + return None + + f =3D fl * mult + fl_r =3D d_ratio(f, interval_sec) + r_s =3D d_ratio(fl, interval_sec) + return MetricGroup(group, [ + Metric(f"{group}_of_total", desc + " floating point operations= per second", + d_ratio(f, flop), "100%"), + Metric(f"{group}_flops", desc + " floating point operations pe= r second", + fl_r, "flops/s"), + Metric(f"{group}_ops", desc + " operations per second", + r_s, "ops/s"), + ]) + + return MetricGroup("lpm_fpu", [ + MetricGroup("lpm_fpu_total", [ + Metric("lpm_fpu_total_flops", "Floating point operations per s= econd", + flop_r, "flops/s"), + Metric("lpm_fpu_total_flopc", "Floating point operations per c= ycle", + flop_c, "flops/cycle", constraint=3Dnmi_constraint), + ]), + MetricGroup("lpm_fpu_64", [ + FpuMetrics("lpm_fpu_64_single", s_64, 1, "64-bit single"), + FpuMetrics("lpm_fpu_64_double", d_64, 1, "64-bit double"), + ]), + MetricGroup("lpm_fpu_128", [ + FpuMetrics("lpm_fpu_128_single", s_128, + 4, "128-bit packed single"), + FpuMetrics("lpm_fpu_128_double", d_128, + 2, "128-bit packed double"), + ]), + MetricGroup("lpm_fpu_256", [ + FpuMetrics("lpm_fpu_256_single", s_256, + 8, "128-bit packed single"), + FpuMetrics("lpm_fpu_256_double", d_256, + 4, "128-bit packed double"), + ]), + MetricGroup("lpm_fpu_512", [ + FpuMetrics("lpm_fpu_512_single", s_512, + 16, "128-bit packed single"), + FpuMetrics("lpm_fpu_512_double", d_512, + 8, "128-bit packed double"), + ]), + Metric("lpm_fpu_assists", "FP assists as a percentage of cycles", + d_ratio(f_assist, cyc), "100%"), + ]) + + def IntelIlp() -> MetricGroup: tsc =3D Event("msr/tsc/") c0 =3D Event("msr/mperf/") @@ -736,6 +832,7 @@ def main() -> None: Tsx(), IntelBr(), IntelCtxSw(), + IntelFpu(), IntelIlp(), IntelL2(), IntelLdSt(), --=20 2.52.0.158.g65b55ccf14-goog From nobody Wed Dec 10 20:09:25 2025 Received: from mail-dl1-f73.google.com (mail-dl1-f73.google.com [74.125.82.73]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 5D4F62E1F11 for ; Tue, 2 Dec 2025 17:54:20 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.82.73 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764698061; cv=none; b=VyzFjHeCuShVVbyRLvlrOzT7Tljd+Ij7cg53v/7kC4PlIU4c9eu3Kpunn9sUF05+D6V7JAV4figI0At1X6IrChnCv1vSc/5zQVJkhB6wGrTheTBiPvRiRBUuDRQftz1sKkNXnB6ArIZdw8LqXI8ZDyRxtSzTUSLzU6dJV5rR0Yw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764698061; c=relaxed/simple; bh=lLp/EwIiJ3Y6eXBIRPPl4UiGnFa58wWzARMPVyIpvWM=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=gTLKY0cxfFgUQzuxsN5GsH3znbLFSeUS1dJIAJXwnCTFhZ7paCnnnHnczHbxB3yWnEIN0XMGILLr/IHRz4CFp9wIUaYFxuW0uZGZtzQnkekLCJc+lug2xkCMW59FGrU4tUjDNFopuNQ9KV8T9vv6pwno9OwRgSOVnjxFG3kalvE= 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=Y0n+110R; arc=none smtp.client-ip=74.125.82.73 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--irogers.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="Y0n+110R" Received: by mail-dl1-f73.google.com with SMTP id a92af1059eb24-11ddcc9f85eso151124c88.0 for ; Tue, 02 Dec 2025 09:54:20 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1764698059; x=1765302859; 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=Eo8IjqCLzHuyj+yQT0mVIYMzmIbtnJUBm5VjOqIDOeQ=; b=Y0n+110RS2d+a4b785LkQj4CoPfHftLCqmRwJVJOdO+7Fi7d3Gvx87C2rZdOJuVmk3 utjL82MwXuRspKwur6tDzY9JFtSKMDLNMVwMl0EpoACEVc//5G0SVOKiNNshV3I/X9sO bzqaNGKqEbnWW8m73FEEVBQ2xoBBHfOyN3ymGaQsciD5WCMYyOEE90CUl0wqG7PYDo0Q sb5RjRMTUs5jZFDU48BK+B5iC0yEI/PGyPhR6DsM99olsq7qNJbhTCdLX+bahwK5qHiG GU6Z09104UZtaW80bTcaYo4d8TYZOUCpB2rP4Pbvn/loBqAgW4mHyIZEV5aGuz2Ipctc Im9A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1764698059; x=1765302859; 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=Eo8IjqCLzHuyj+yQT0mVIYMzmIbtnJUBm5VjOqIDOeQ=; b=OJ8iMvmvl+inULkI6aPW3XhoL30JT9yoLaenUS2AB0JfP1f07EOnG4Mrgb5xUKnKrv oKxPddN8VeA0MmunZMs84/arto0hAVI6ACSskVLeoZSViuGutsWmKn9kZ9Wiwg/yuo2i 5LCHbfuOYkpgXS04QRAvBH9lGzxY1AOYkU4hf3/dTRI5e7snnIjr3tTxFraQnGMvNOaO ncdJxgxzZehyYS5lxQl2r4aWxY+0VTyJBKyA3WImtNTrzM8jAHsvnCkeCbOLHSj7AWtL hDH3LW6tT4mzNI+RIU6tGSz3+3qW+hh7r1bT7H+RVOh92TNcmpvp/9t5Usg7npFKNwys HnbQ== X-Forwarded-Encrypted: i=1; AJvYcCVEx1IwPgXS11Qb6XlLJh+5am0NHkIyzHTfNpBNuxF2PWKPptNlPgnpYXo44++8riCA4+L9QTIQ220RjeQ=@vger.kernel.org X-Gm-Message-State: AOJu0YzJWsHcbrA5UBSjKIpa4aWf3uSYI/GPGRiCvGWxFIYWuZf6VC8Q NU6XXQTKskBe3ES/kb/DT8YzSvHJZrue5TxMMEapfPCGY+AyzcvxhWX/HiN32SyNLYLLTxxkJdq 9wOtPWi66VA== X-Google-Smtp-Source: AGHT+IG3aNHAV7LVpknlOYG26QsNocN8RKgb0p5KNXDq476LkdKzA0OODR+GBHsKxCbJCJiNL0EAGlzaQ6DZ X-Received: from dlnn14.prod.google.com ([2002:a05:7022:618e:b0:119:49ca:6ba1]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a05:7022:2604:b0:11c:9c9:224a with SMTP id a92af1059eb24-11de939c494mr2159155c88.1.1764698058663; Tue, 02 Dec 2025 09:54:18 -0800 (PST) Date: Tue, 2 Dec 2025 09:50:33 -0800 In-Reply-To: <20251202175043.623597-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: <20251202175043.623597-1-irogers@google.com> X-Mailer: git-send-email 2.52.0.158.g65b55ccf14-goog Message-ID: <20251202175043.623597-39-irogers@google.com> Subject: [PATCH v9 38/48] perf jevents: Add Miss Level Parallelism (MLP) metric for Intel From: Ian Rogers To: Adrian Hunter , Alexander Shishkin , Arnaldo Carvalho de Melo , Benjamin Gray , Caleb Biggers , Edward Baker , Ian Rogers , Ingo Molnar , James Clark , Jing Zhang , Jiri Olsa , John Garry , Leo Yan , Namhyung Kim , Perry Taylor , Peter Zijlstra , Samantha Alt , Sandipan Das , Thomas Falcon , Weilin Wang , Xu Yang , linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Number of outstanding load misses per cycle. Signed-off-by: Ian Rogers Tested-by: Thomas Falcon --- tools/perf/pmu-events/intel_metrics.py | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/tools/perf/pmu-events/intel_metrics.py b/tools/perf/pmu-events= /intel_metrics.py index 77b8e10194db..dddeae35e4b4 100755 --- a/tools/perf/pmu-events/intel_metrics.py +++ b/tools/perf/pmu-events/intel_metrics.py @@ -624,6 +624,20 @@ def IntelL2() -> Optional[MetricGroup]: ], description=3D"L2 data cache analysis") =20 =20 +def IntelMlp() -> Optional[Metric]: + try: + l1d =3D Event("L1D_PEND_MISS.PENDING") + l1dc =3D Event("L1D_PEND_MISS.PENDING_CYCLES") + except: + return None + + l1dc =3D Select(l1dc / 2, Literal("#smt_on"), l1dc) + ml =3D d_ratio(l1d, l1dc) + return Metric("lpm_mlp", + "Miss level parallelism - number of outstanding load mis= ses per cycle (higher is better)", + ml, "load_miss_pending/cycle") + + def IntelPorts() -> Optional[MetricGroup]: pipeline_events =3D json.load( open(f"{_args.events_path}/x86/{_args.model}/pipeline.json")) @@ -836,6 +850,7 @@ def main() -> None: IntelIlp(), IntelL2(), IntelLdSt(), + IntelMlp(), IntelPorts(), IntelSwpf(), ]) --=20 2.52.0.158.g65b55ccf14-goog From nobody Wed Dec 10 20:09:25 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 CA7CF2E266E for ; Tue, 2 Dec 2025 17:54:21 +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=1764698063; cv=none; b=Mewx4xfw+r62G3jYusdFRBSfV3FBmXxkBh20xOBzL1slnKUxEOvvh44+MUdRQ95w/by5NphqRrrCeKyT61e0vb5j5ae/jg9kB2k4nKFafcqYrk4socMAauzJ1fuL4hFpRYrQfcYf1yXjh9OGgr7oTofNc8kw181pdjBC+ix//5w= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764698063; c=relaxed/simple; bh=HbqjuqmfTyXOvOBzE/ZBtIvkD3sFaHP5dLAWeufweuk=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=r6iim0k6e2E4ypO0j6WLTQQ4KMrh/sbU1juO6qwqNzYc386NzEH4gnhRfGnuwVfVUx+RahoGky5cG5UHvO6eyxKW4bP8uAXObEeRwRu5vNI71v3dlq5rykEXZPAiYAiBvInKCArl2jrmRQCSeIjwix22v4GQXXAAAuw+1T4bYZI= 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=kcnjlk1O; 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="kcnjlk1O" Received: by mail-pl1-f201.google.com with SMTP id d9443c01a7336-297dfae179bso119460565ad.1 for ; Tue, 02 Dec 2025 09:54:21 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1764698061; x=1765302861; 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=LiDtubt1AphVgSFkzW+FmI1oqQxqLj5ewhOCQtRYDYQ=; b=kcnjlk1O0PtQSrSZhgyc5sw2qPVKV63fvP/Tz/Pe+otgs7XPkNbn9shy525b1X/MoF aqMn/QWGFExWXZ/CxDlNveOSxseY8uhJIEzO92NRNXRhDxInHsqmayzOqhJsNN21B8BL h62tO4cl9PibBcrmvrKnw/dowKJ2pzbISGqwzaLDYSVgUqtKYRQXOIU4Aku+WRqi5Jcr h15OU+8w53VzIXTDy/gjVG8Fk7MoSx9jA1hunoUlIHANNCgqX4EEk9YKSn7hB3QACS0h Utx6JMe2hdpBalBA27c30ZesvCYcQY7Li3D5ZKEQFONL1Uingjsxn82+gNH1w3TMxbuG qx0A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1764698061; x=1765302861; 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=LiDtubt1AphVgSFkzW+FmI1oqQxqLj5ewhOCQtRYDYQ=; b=LC9ZIfVRyQTNYvRs+YlQiXuonlMgegg3zZY55FWqQzeeRBZV4mNC72W1Ygx6Xl+kU6 OO9FsGXVcPGlUt2d31Iw7FJAajoGJfLQojIlDOHz7RvJ+RdfY1qWyb+99crTDdSa2WCf oqZ2agwAf8bJelb9/DNYLi/gYO0g621HZQV6aQmI+zpB2S4OKiSwIIlR/GqaoXlquUJv vCflKIi60OOcFGCuizBJwUZjFNZIaN8zpWcBIlkUX/SLWd7mkmdBzTiEx/6xmzGGzagG qM84aTs+z4NzgZYEWyUvjPu0+jY3goWkyxQCcLF/UFDNaQcGNBqa1D5ZUQHtrKCJkrII 90fg== X-Forwarded-Encrypted: i=1; AJvYcCXUiE9Q+NSjY/Ojf2PsssS669P5aPdu7pjjunM2FX6iqu6y4S5JNDhsi/0o4ipaq5ZsPAu5OA+bQ3StR7I=@vger.kernel.org X-Gm-Message-State: AOJu0YwjXS5qdCdmvnA8BlDIp7RcTyciAZwnY5GoQ2LbZUD17zwWw/Zs u/iStLNdB16M0BXT/Y5U730Iw4GGxkIsccwSGq1uBaBFiq1s7HnrHVrgiT4hiLx9+yFNgkVrUlD mVJf9kHGoug== X-Google-Smtp-Source: AGHT+IH5qHnWptUctlRlS9Et1AE/osOMz74PdqfxaJzodJz+anR5B8/WSihGvugo+rrwS7KOq9hdAaoSJyqw X-Received: from dlnn37.prod.google.com ([2002:a05:7022:61a5:b0:11d:cde5:d78e]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a05:7022:2509:b0:11b:bf3f:5208 with SMTP id a92af1059eb24-11c9d708d55mr25940152c88.1.1764698061026; Tue, 02 Dec 2025 09:54:21 -0800 (PST) Date: Tue, 2 Dec 2025 09:50:34 -0800 In-Reply-To: <20251202175043.623597-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: <20251202175043.623597-1-irogers@google.com> X-Mailer: git-send-email 2.52.0.158.g65b55ccf14-goog Message-ID: <20251202175043.623597-40-irogers@google.com> Subject: [PATCH v9 39/48] perf jevents: Add mem_bw metric for Intel From: Ian Rogers To: Adrian Hunter , Alexander Shishkin , Arnaldo Carvalho de Melo , Benjamin Gray , Caleb Biggers , Edward Baker , Ian Rogers , Ingo Molnar , James Clark , Jing Zhang , Jiri Olsa , John Garry , Leo Yan , Namhyung Kim , Perry Taylor , Peter Zijlstra , Samantha Alt , Sandipan Das , Thomas Falcon , Weilin Wang , Xu Yang , linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Break down memory bandwidth using uncore counters. For many models this matches the memory_bandwidth_* metrics, but these metrics aren't made available on all models. Add support for free running counters. Query the event json when determining which what events/counters are available. Signed-off-by: Ian Rogers Tested-by: Thomas Falcon --- tools/perf/pmu-events/intel_metrics.py | 62 ++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) diff --git a/tools/perf/pmu-events/intel_metrics.py b/tools/perf/pmu-events= /intel_metrics.py index dddeae35e4b4..f671d6e4fd67 100755 --- a/tools/perf/pmu-events/intel_metrics.py +++ b/tools/perf/pmu-events/intel_metrics.py @@ -815,6 +815,67 @@ def IntelLdSt() -> Optional[MetricGroup]: ], description=3D"Breakdown of load/store instructions") =20 =20 +def UncoreMemBw() -> Optional[MetricGroup]: + mem_events =3D [] + try: + mem_events =3D json.load(open(f"{os.path.dirname(os.path.realpath(= __file__))}" + f"/arch/x86/{args.model}/uncore-memory= .json")) + except: + pass + + ddr_rds =3D 0 + ddr_wrs =3D 0 + ddr_total =3D 0 + for x in mem_events: + if "EventName" in x: + name =3D x["EventName"] + if re.search("^UNC_MC[0-9]+_RDCAS_COUNT_FREERUN", name): + ddr_rds +=3D Event(name) + elif re.search("^UNC_MC[0-9]+_WRCAS_COUNT_FREERUN", name): + ddr_wrs +=3D Event(name) + # elif re.search("^UNC_MC[0-9]+_TOTAL_REQCOUNT_FREERUN", name): + # ddr_total +=3D Event(name) + + if ddr_rds =3D=3D 0: + try: + ddr_rds =3D Event("UNC_M_CAS_COUNT.RD") + ddr_wrs =3D Event("UNC_M_CAS_COUNT.WR") + except: + return None + + ddr_total =3D ddr_rds + ddr_wrs + + pmm_rds =3D 0 + pmm_wrs =3D 0 + try: + pmm_rds =3D Event("UNC_M_PMM_RPQ_INSERTS") + pmm_wrs =3D Event("UNC_M_PMM_WPQ_INSERTS") + except: + pass + + pmm_total =3D pmm_rds + pmm_wrs + + scale =3D 64 / 1_000_000 + return MetricGroup("lpm_mem_bw", [ + MetricGroup("lpm_mem_bw_ddr", [ + Metric("lpm_mem_bw_ddr_read", "DDR memory read bandwidth", + d_ratio(ddr_rds, interval_sec), f"{scale}MB/s"), + Metric("lpm_mem_bw_ddr_write", "DDR memory write bandwidth", + d_ratio(ddr_wrs, interval_sec), f"{scale}MB/s"), + Metric("lpm_mem_bw_ddr_total", "DDR memory write bandwidth", + d_ratio(ddr_total, interval_sec), f"{scale}MB/s"), + ], description=3D"DDR Memory Bandwidth"), + MetricGroup("lpm_mem_bw_pmm", [ + Metric("lpm_mem_bw_pmm_read", "PMM memory read bandwidth", + d_ratio(pmm_rds, interval_sec), f"{scale}MB/s"), + Metric("lpm_mem_bw_pmm_write", "PMM memory write bandwidth", + d_ratio(pmm_wrs, interval_sec), f"{scale}MB/s"), + Metric("lpm_mem_bw_pmm_total", "PMM memory write bandwidth", + d_ratio(pmm_total, interval_sec), f"{scale}MB/s"), + ], description=3D"PMM Memory Bandwidth") if pmm_rds !=3D 0 else No= ne, + ], description=3D"Memory Bandwidth") + + def main() -> None: global _args =20 @@ -853,6 +914,7 @@ def main() -> None: IntelMlp(), IntelPorts(), IntelSwpf(), + UncoreMemBw(), ]) =20 if _args.metricgroups: --=20 2.52.0.158.g65b55ccf14-goog From nobody Wed Dec 10 20:09:25 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 763FE2E5B0E for ; Tue, 2 Dec 2025 17:54:24 +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=1764698066; cv=none; b=HcI3JSADn7jK2qngm1qIO0/AoJqKhwXRh2XwfHgq5hMdVeRKjVWID9diUSlGX9GqUMVJtFewhH6G19jiwrgDajDEMi+jJ7M6YAM7wbIKNPR/jvvhRWOwqkX3pkI01O/j3d2EQCnQUBZleUsHCzbpEEZfphddFQbcgVSiWl3iYQs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764698066; c=relaxed/simple; bh=DFB/FEt17GQJ+JkWYN3jloDSMAG1wUOHoceC5d8yzJM=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=QW0fqvq2MTDETJSk8zz1Zga55igp8eMP2MtZ3xEZuXZdJ2dhYxUbsmzvLJf6zK/aoyy5FckWBHBiew+qtM3P9faOcndFDyVQqWOmWJ+h2Gzw/tUyTsB68Xt1jBC3ipgZooL7SdrBiGPrSTyM2gCSt7t0GA5mC8yM5gr86wosTlc= 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=Znwu8fJv; 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="Znwu8fJv" Received: by mail-pg1-f202.google.com with SMTP id 41be03b00d2f7-b471737e673so6469162a12.1 for ; Tue, 02 Dec 2025 09:54:24 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1764698064; x=1765302864; 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=zVYfJzXARSKLsQJ3BHueI5NPWshXYIemLwtLligKoO4=; b=Znwu8fJvnjdsfG3TB5BsLJVYBP4Pte2QtINO6AlNl5/0iDsYOIW4XAdR/sSziPDHMz q+OYFjJXtxl1AikWf088xdwVKyjJt/yR5FXUB2+twbu6XtSAyf9qNMOO4HnmMataTQza 1JJSJTIMYC1/0UGry25KlBHsjl0cqD6XNErg6j3qn6CjoZjJOSBdELMTwzcZhaZtI83B dxxu13oOk9eq1jgwJvUcqBX71ApFVqw+IaE9Bvq1ge67S0vbge3sRO1a17C9QZiSV+JE LsBHtBXeV/GkeseW3j7AoFhUX94QhzJrJs5BoW4V8GRskLNVnDWqzz0uIurtdVmRMQl/ 5Bmw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1764698064; x=1765302864; 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=zVYfJzXARSKLsQJ3BHueI5NPWshXYIemLwtLligKoO4=; b=UTmhKY9XjlmCFkr4ZNerFajssACpUk9lA25ba3S7CJpvEm+6b3inLBjcSRy1/CqSH4 3sLtTMDFRuzJJ+xdg1F1tdXzF0Yp69XKmAtaYy4dLwH/mbd6DFXrmvvYwot8ws7JTaOs wGsjCw7K3RiC5uvtuh6lpd5lVLOpkVKsZ4pcwHjVhkGgXcFrQZb+OSAYxHYCcITSUj4g ELQ4iaj2UgBhFixJr9Vj/zhefMqV6nY3U7hjIY+CHJHpEPBp5sLV6a7s3kH3+7pZ8fbN BsWt6K1QX2g2utdynpkgpmmunR7c+YuCvwm320T2lXgoDp/j4Gf3C+W1XnDtuIqAxENJ 8gFA== X-Forwarded-Encrypted: i=1; AJvYcCXcF/QmRjf/sEMvnjz96rdsCl2293V9feWx2nIcKUDvUbxRYBGs6DjqI8jELJCWB5wicIEqqh2Z+J+i2uk=@vger.kernel.org X-Gm-Message-State: AOJu0Yz0bgJosy/moQI2mnyEBR7zH5tAp/2ISHwH/wiCYUECQHIueUCj K6kbnMqjl22U3+V1ax7E+QTRMTrNDQ11vFscWkcgseFy5rEQt92gbYWjz/2St4uYkqunhRX6+ob 3UmzCl1ktDg== X-Google-Smtp-Source: AGHT+IGNJWX2dv4aY45NTWL60AK3Uju57c+XfU19nkoreqO82slcZQsfMfm8Qv81FLYtKO9fyaIgM3tglOrD X-Received: from dybgl36.prod.google.com ([2002:a05:7300:e024:b0:2a4:61a6:6c]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a05:7301:5413:b0:2a4:3593:c7cb with SMTP id 5a478bee46e88-2ab8fa8ca3dmr163971eec.11.1764698063680; Tue, 02 Dec 2025 09:54:23 -0800 (PST) Date: Tue, 2 Dec 2025 09:50:35 -0800 In-Reply-To: <20251202175043.623597-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: <20251202175043.623597-1-irogers@google.com> X-Mailer: git-send-email 2.52.0.158.g65b55ccf14-goog Message-ID: <20251202175043.623597-41-irogers@google.com> Subject: [PATCH v9 40/48] perf jevents: Add local/remote "mem" breakdown metrics for Intel From: Ian Rogers To: Adrian Hunter , Alexander Shishkin , Arnaldo Carvalho de Melo , Benjamin Gray , Caleb Biggers , Edward Baker , Ian Rogers , Ingo Molnar , James Clark , Jing Zhang , Jiri Olsa , John Garry , Leo Yan , Namhyung Kim , Perry Taylor , Peter Zijlstra , Samantha Alt , Sandipan Das , Thomas Falcon , Weilin Wang , Xu Yang , linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Breakdown local and remote memory bandwidth, read and writes. The implementation uses the HA and CHA PMUs present in server models broadwellde, broadwellx cascadelakex, emeraldrapids, haswellx, icelakex, ivytown, sapphirerapids and skylakex. Signed-off-by: Ian Rogers Tested-by: Thomas Falcon --- tools/perf/pmu-events/intel_metrics.py | 31 ++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/tools/perf/pmu-events/intel_metrics.py b/tools/perf/pmu-events= /intel_metrics.py index f671d6e4fd67..983e5021f3d3 100755 --- a/tools/perf/pmu-events/intel_metrics.py +++ b/tools/perf/pmu-events/intel_metrics.py @@ -815,6 +815,36 @@ def IntelLdSt() -> Optional[MetricGroup]: ], description=3D"Breakdown of load/store instructions") =20 =20 +def UncoreMem() -> Optional[MetricGroup]: + try: + loc_rds =3D Event("UNC_CHA_REQUESTS.READS_LOCAL", + "UNC_H_REQUESTS.READS_LOCAL") + rem_rds =3D Event("UNC_CHA_REQUESTS.READS_REMOTE", + "UNC_H_REQUESTS.READS_REMOTE") + loc_wrs =3D Event("UNC_CHA_REQUESTS.WRITES_LOCAL", + "UNC_H_REQUESTS.WRITES_LOCAL") + rem_wrs =3D Event("UNC_CHA_REQUESTS.WRITES_REMOTE", + "UNC_H_REQUESTS.WRITES_REMOTE") + except: + return None + + scale =3D 64 / 1_000_000 + return MetricGroup("lpm_mem", [ + MetricGroup("lpm_mem_local", [ + Metric("lpm_mem_local_read", "Local memory read bandwidth not = including directory updates", + d_ratio(loc_rds, interval_sec), f"{scale}MB/s"), + Metric("lpm_mem_local_write", "Local memory write bandwidth no= t including directory updates", + d_ratio(loc_wrs, interval_sec), f"{scale}MB/s"), + ]), + MetricGroup("lpm_mem_remote", [ + Metric("lpm_mem_remote_read", "Remote memory read bandwidth no= t including directory updates", + d_ratio(rem_rds, interval_sec), f"{scale}MB/s"), + Metric("lpm_mem_remote_write", "Remote memory write bandwidth = not including directory updates", + d_ratio(rem_wrs, interval_sec), f"{scale}MB/s"), + ]), + ], description=3D"Memory Bandwidth breakdown local vs. remote (remote = requests in). directory updates not included") + + def UncoreMemBw() -> Optional[MetricGroup]: mem_events =3D [] try: @@ -914,6 +944,7 @@ def main() -> None: IntelMlp(), IntelPorts(), IntelSwpf(), + UncoreMem(), UncoreMemBw(), ]) =20 --=20 2.52.0.158.g65b55ccf14-goog From nobody Wed Dec 10 20:09:25 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 920E72E6CA7 for ; Tue, 2 Dec 2025 17:54:27 +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=1764698069; cv=none; b=UCZMFvG+fKTgI7Gy/gwjThoP55uT3RbvEnFSDjVIn+Op2iTIsjGbms3zSd+gC81TkBxhEe4Cjq8ljzf5pjJy8AASH1qrVeVHoTWbayj0Df4YzYq4S80GwXmJ+AKIbnIRojpDLriJ/VR/N5n6MBo+4v6e/hED5moV315TpArX5PE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764698069; c=relaxed/simple; bh=CS2ZMaRbJhWfF7bNLWZEjxgq3mmQlSIBBEuf2yQ52wI=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=Wz+oak8PyWM3MlB1qK3jM9ZHnPe8w8Zi1rg4NbfzBGKjFyangVR8LtYsvNs8kI7R9ukuje/fta/3GTYmWja9XrmcMDtM8qwFyyuKPi2PYzsL9S34V9Xfu+KKuS4yklJo3GD80PPCJE/cGV1H509PhO7CkA0wddZG1cHSyjkiyvs= 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=wsLAEq8v; 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="wsLAEq8v" Received: by mail-pg1-f202.google.com with SMTP id 41be03b00d2f7-bc0de474d4eso11553976a12.0 for ; Tue, 02 Dec 2025 09:54:27 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1764698067; x=1765302867; 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=rGt9xsDl5YoRAIdMUv0n8Pvx0khhF6N+ocxIu2eFpvY=; b=wsLAEq8vgJ0aciro9QkeYtWsS7LVzOvs9IcGgKXEWfh55xVzgpDGo+1m4vflY6NgH0 u+NxLp3DPlRqoZfIkHbxbXzY1EtMo1700J3XDpUg/rXx8QCmHEZRfWd/dNvEh99Ad5aK 4ZSpwquA4l6DqHgbfvy35Vsk/wCkgPSKIYEL8IKs2HjD8YHHONz22m/uklCKN703xXte X/sN8W2cx9ewjhxSjBtbcmeazNLnw6y2uEeoxJAnGYGwuPZG9yrvysGiTrJd8EYYIIXt CLqJ/O74GvfzBBsdFFo5PuNw3AMnuNiaKA0CHlHy1QEvXluN6IQwbUcHjDNlHA5vtU9R Qw6Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1764698067; x=1765302867; 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=rGt9xsDl5YoRAIdMUv0n8Pvx0khhF6N+ocxIu2eFpvY=; b=UuGw1/jX5F9nWkLxyludOvKai/WFTMP+09WTsiMa4heSeXBxpnUBKYCw+UQgtPCPNA VXdd2KwIa4GiBkcKYIgUfXCSpZffczboJT0GnCgYnyugOugo2htKw/n+e/KHMaIrrIcF xuB8FatcdZ6dhv980x+KEbLIvf+KCxAH8TMUBXoy8G9Wt8QoshGPtRDYTeEk1xedLkMF Wr/vAK0mADsOrpe9yQjYmZ/1lyKO0l7ASwxL7l/++3tUZgewSXgIxfxJZb/kHaj+dudn xSTHQi3uwWbGDLr7ZIi/ib9ZPuOJVDaiUore//rrXzFOfGsBtAkhyefeQfFrXmU/umIW +RhA== X-Forwarded-Encrypted: i=1; AJvYcCV4j/+bY9bI0e25cQgAj3Et4u96ZEY4X0zNzsxQCmVfQpzTSnshzyM29TpA8mfACfjc1VAwH0IUy2zLU/A=@vger.kernel.org X-Gm-Message-State: AOJu0Yx0B11rGXnB80Q4DfWA0vwFtJE54feCCq6FbPQxPUmrMm3Hx+Y7 ttlg7QcGu4BPTQUv+6V87jlXomFFT03qLU+D9I+OM22qv47ewibc528hhoJD+8bjZ/CqwophFbE Y+qeEtnwOaA== X-Google-Smtp-Source: AGHT+IGeYN+Qc8HA3vZjOx2MGc4XcApr9Hzd3h8nFVE0Uq3TdJp6PhDT6R18rr5i+3iYRrwYMGg+65AWO6po X-Received: from dycqv12.prod.google.com ([2002:a05:7300:df4c:b0:2a4:6bb4:f498]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a05:7300:3255:b0:2a4:3592:cf69 with SMTP id 5a478bee46e88-2a9415ad281mr20729614eec.13.1764698066287; Tue, 02 Dec 2025 09:54:26 -0800 (PST) Date: Tue, 2 Dec 2025 09:50:36 -0800 In-Reply-To: <20251202175043.623597-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: <20251202175043.623597-1-irogers@google.com> X-Mailer: git-send-email 2.52.0.158.g65b55ccf14-goog Message-ID: <20251202175043.623597-42-irogers@google.com> Subject: [PATCH v9 41/48] perf jevents: Add dir breakdown metrics for Intel From: Ian Rogers To: Adrian Hunter , Alexander Shishkin , Arnaldo Carvalho de Melo , Benjamin Gray , Caleb Biggers , Edward Baker , Ian Rogers , Ingo Molnar , James Clark , Jing Zhang , Jiri Olsa , John Garry , Leo Yan , Namhyung Kim , Perry Taylor , Peter Zijlstra , Samantha Alt , Sandipan Das , Thomas Falcon , Weilin Wang , Xu Yang , linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Breakdown directory hit, misses and requests. The implementation uses the M2M and CHA PMUs present in server models broadwellde, broadwellx cascadelakex, emeraldrapids, icelakex, sapphirerapids and skylakex. Signed-off-by: Ian Rogers Tested-by: Thomas Falcon --- tools/perf/pmu-events/intel_metrics.py | 36 ++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/tools/perf/pmu-events/intel_metrics.py b/tools/perf/pmu-events= /intel_metrics.py index 983e5021f3d3..24ceb7f8719b 100755 --- a/tools/perf/pmu-events/intel_metrics.py +++ b/tools/perf/pmu-events/intel_metrics.py @@ -815,6 +815,41 @@ def IntelLdSt() -> Optional[MetricGroup]: ], description=3D"Breakdown of load/store instructions") =20 =20 +def UncoreDir() -> Optional[MetricGroup]: + try: + m2m_upd =3D Event("UNC_M2M_DIRECTORY_UPDATE.ANY") + m2m_hits =3D Event("UNC_M2M_DIRECTORY_HIT.DIRTY_I") + # Turn the umask into a ANY rather than DIRTY_I filter. + m2m_hits.name +=3D "/umask=3D0xFF,name=3DUNC_M2M_DIRECTORY_HIT.ANY= /" + m2m_miss =3D Event("UNC_M2M_DIRECTORY_MISS.DIRTY_I") + # Turn the umask into a ANY rather than DIRTY_I filter. + m2m_miss.name +=3D "/umask=3D0xFF,name=3DUNC_M2M_DIRECTORY_MISS.AN= Y/" + cha_upd =3D Event("UNC_CHA_DIR_UPDATE.HA") + # Turn the umask into a ANY rather than HA filter. + cha_upd.name +=3D "/umask=3D3,name=3DUNC_CHA_DIR_UPDATE.ANY/" + except: + return None + + m2m_total =3D m2m_hits + m2m_miss + upd =3D m2m_upd + cha_upd # in cache lines + upd_r =3D upd / interval_sec + look_r =3D m2m_total / interval_sec + + scale =3D 64 / 1_000_000 # Cache lines to MB + return MetricGroup("lpm_dir", [ + Metric("lpm_dir_lookup_rate", "", + d_ratio(m2m_total, interval_sec), "requests/s"), + Metric("lpm_dir_lookup_hits", "", + d_ratio(m2m_hits, m2m_total), "100%"), + Metric("lpm_dir_lookup_misses", "", + d_ratio(m2m_miss, m2m_total), "100%"), + Metric("lpm_dir_update_requests", "", + d_ratio(m2m_upd + cha_upd, interval_sec), "requests/s"), + Metric("lpm_dir_update_bw", "", + d_ratio(m2m_upd + cha_upd, interval_sec), f"{scale}MB/s"), + ]) + + def UncoreMem() -> Optional[MetricGroup]: try: loc_rds =3D Event("UNC_CHA_REQUESTS.READS_LOCAL", @@ -944,6 +979,7 @@ def main() -> None: IntelMlp(), IntelPorts(), IntelSwpf(), + UncoreDir(), UncoreMem(), UncoreMemBw(), ]) --=20 2.52.0.158.g65b55ccf14-goog From nobody Wed Dec 10 20:09:25 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 A19342E6CC6 for ; Tue, 2 Dec 2025 17:54:29 +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=1764698071; cv=none; b=Gki0KvkwpTrB9jtLFGlhAgspZl5oDOhB4AUCENr2+HqM+SIDyUKw1R/GO1nRaHOO3UnEEfpuAim14kOrkBcYhVLQ0VlHn9AaBNPJ6M/4Q2sP+1K0LySx7RdJ4nkBvnGj1HRXxhDkp7fhjgGVMOFE3SvOfYUIMw39nX6q8VGbSfE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764698071; c=relaxed/simple; bh=DDSXnD/DJgD/dICvB1Byxj1+big3EiDNfGtz0EwuRes=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=RHYgenvxWA+7ZrytFYJUjIB1j+xLcXbGg8S6xaBp3QGWFuwZiqkt69xw9ul/Esm+5x+Raoilj1cB7YE6Fh4y/fHoJXOp78/qxPfOBhOecA8YNnyjlB0f3aQ4FSlNAq+2wgHSmeO7jDKxccYZs84g31FEQpDaNUSp540N56cQQDk= 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=f+dR90j2; 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="f+dR90j2" Received: by mail-pg1-f201.google.com with SMTP id 41be03b00d2f7-b6ce1b57b9cso5905158a12.1 for ; Tue, 02 Dec 2025 09:54:29 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1764698069; x=1765302869; 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=zEtSIIDn9SEKd5Nwsp78rOS06RnZngXyTnhJKt7idWA=; b=f+dR90j2s+bhpNpYckjBcJgE2tHpe5Rhso4RlzSZ5jyRXlsLytheVDFz+jSP0kozL+ pua6ZcESwHG7UTtV3v4xAWDwTg5kWYa+kN1f8BMYcg1MlGeocVTvoQfofS+wnOoPFC+d /8lOTVnalAxbXloMykC3NRhaIFe7/Le/GGUa2OiqFGZ7jBIDy9myB2ZZ5vTEA3u4jMfs MU+P4vxoWiLpHRYILuhR19jJ7/Lnwedj1sng7R3mJ17m+k+wXAQXp0cmEoEKUQ+J19KV YQeCeegBYJ/W/coSdNvK/YN8+uHHH+ebV35PZwv2FV62+38mjtCdJ6xn61AmM+lC+ERI 7hMg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1764698069; x=1765302869; 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=zEtSIIDn9SEKd5Nwsp78rOS06RnZngXyTnhJKt7idWA=; b=hgG2GN8njJXANYEEkzVJan3D9egTaG0yK52U2xwRQMSDZpZHmxwSxggaZcCuEYFqr6 Ik4Ut3RwXgBg/uuEa1q80xv7mJL/S8bdm7mnaomKi9S9GlSk9Fv5uVXzsDjvhnxXWtEy ox8TeIOLt/DZgvDEY/fXqBdYy4DKrF+NZvz+FOgwQqwpJZEjWTrjnnLMyzkscx1JlmUE gwR2zUfzFK9K4AYrHd85wknH358uFBnx+wBfXN7V5F7tg9yBxDWzl1ZoK3wSKoANr67i q6iUonmE9fSUSB+PcNHTQDVB8PO8ncayLUaQwWeBld9CwDeaa75UbBNA2N8WDjMnQoR8 l0mg== X-Forwarded-Encrypted: i=1; AJvYcCVzKyqijHh7037d5//JirXnqAkJ3gpnZ7iaS56+B63+NyTlfbCbC9sBxt1Cto3+zDY3kxecY/LGAiracco=@vger.kernel.org X-Gm-Message-State: AOJu0Yz2JhAvbrByyAK4ygcdHXk0tsSEiO0aYnyMBZMrL4AreQTt5YVF S6eJ/wYCoPH7LRpDhatpNVWaGgn46UzNsSj1g3QOxOA723gnCnRk7m6wia1u2WBvZeKZh6IEqGo cTkqiJcFg1g== X-Google-Smtp-Source: AGHT+IHvr2ajxXLvGgMUZCNsqlbUgMIcYWCgD6Jkf+MPzrQCwnqS7NekH4Z05a8nN1CnLK5GdN8YmY5chBTv X-Received: from dyke34.prod.google.com ([2002:a05:7300:4722:b0:2a4:6f7f:e6f0]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a05:7300:f40b:b0:2a4:3593:ddf5 with SMTP id 5a478bee46e88-2ab8fb54c8emr139000eec.34.1764698069042; Tue, 02 Dec 2025 09:54:29 -0800 (PST) Date: Tue, 2 Dec 2025 09:50:37 -0800 In-Reply-To: <20251202175043.623597-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: <20251202175043.623597-1-irogers@google.com> X-Mailer: git-send-email 2.52.0.158.g65b55ccf14-goog Message-ID: <20251202175043.623597-43-irogers@google.com> Subject: [PATCH v9 42/48] perf jevents: Add C-State metrics from the PCU PMU for Intel From: Ian Rogers To: Adrian Hunter , Alexander Shishkin , Arnaldo Carvalho de Melo , Benjamin Gray , Caleb Biggers , Edward Baker , Ian Rogers , Ingo Molnar , James Clark , Jing Zhang , Jiri Olsa , John Garry , Leo Yan , Namhyung Kim , Perry Taylor , Peter Zijlstra , Samantha Alt , Sandipan Das , Thomas Falcon , Weilin Wang , Xu Yang , linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Use occupancy events fixed in: https://lore.kernel.org/lkml/20240226201517.3540187-1-irogers@google.com/ Metrics are at the socket level referring to cores, not hyperthreads. Signed-off-by: Ian Rogers Tested-by: Thomas Falcon --- tools/perf/pmu-events/intel_metrics.py | 30 ++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/tools/perf/pmu-events/intel_metrics.py b/tools/perf/pmu-events= /intel_metrics.py index 24ceb7f8719b..118fe0fc05a3 100755 --- a/tools/perf/pmu-events/intel_metrics.py +++ b/tools/perf/pmu-events/intel_metrics.py @@ -815,6 +815,35 @@ def IntelLdSt() -> Optional[MetricGroup]: ], description=3D"Breakdown of load/store instructions") =20 =20 +def UncoreCState() -> Optional[MetricGroup]: + try: + pcu_ticks =3D Event("UNC_P_CLOCKTICKS") + c0 =3D Event("UNC_P_POWER_STATE_OCCUPANCY.CORES_C0") + c3 =3D Event("UNC_P_POWER_STATE_OCCUPANCY.CORES_C3") + c6 =3D Event("UNC_P_POWER_STATE_OCCUPANCY.CORES_C6") + except: + return None + + num_cores =3D Literal("#num_cores") / Literal("#num_packages") + + max_cycles =3D pcu_ticks * num_cores + total_cycles =3D c0 + c3 + c6 + + # remove fused-off cores which show up in C6/C7. + c6 =3D Select(max(c6 - (total_cycles - max_cycles), 0), + total_cycles > max_cycles, + c6) + + return MetricGroup("lpm_cstate", [ + Metric("lpm_cstate_c0", "C-State cores in C0/C1", + d_ratio(c0, pcu_ticks), "cores"), + Metric("lpm_cstate_c3", "C-State cores in C3", + d_ratio(c3, pcu_ticks), "cores"), + Metric("lpm_cstate_c6", "C-State cores in C6/C7", + d_ratio(c6, pcu_ticks), "cores"), + ]) + + def UncoreDir() -> Optional[MetricGroup]: try: m2m_upd =3D Event("UNC_M2M_DIRECTORY_UPDATE.ANY") @@ -979,6 +1008,7 @@ def main() -> None: IntelMlp(), IntelPorts(), IntelSwpf(), + UncoreCState(), UncoreDir(), UncoreMem(), UncoreMemBw(), --=20 2.52.0.158.g65b55ccf14-goog From nobody Wed Dec 10 20:09:25 2025 Received: from mail-pf1-f201.google.com (mail-pf1-f201.google.com [209.85.210.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id E45FB2E6CC8 for ; Tue, 2 Dec 2025 17:54:31 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764698074; cv=none; b=Shq90xX6NPHYoiX2pG7EswjptcyWVWsSzJi0FArb3FddB7CaY41ejWjKxbQKopVbepdRT2b95daCT/jzOM3EVm2ExloKyy/zxCeMJqk33FFx9iIEOKFtxwEHrHwCuWpH5zAqEIFfHc+YtpDtO7ypPs/A1qb+aiC2o9awHSMq1aE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764698074; c=relaxed/simple; bh=Hv4UhU6NXENZa+Z1+6L4rRfnL/6waxqGPRgqBzUWSE4=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=RSt23QqU1no2F8v284lkATPysRArDn++PSIXKExRMDxo4veDBUCJtSn2ObQc7aWrDwrokFZde7cVxzjK9Nnn3R/rsCe2oUPokJ6O/X+N69kX36FxOxBL1cu8kjKvqX3k5knoY+CmISNfvDbJtjmtj/orbZSStFDZlD7KHVIAM7g= 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=LaobBi28; arc=none smtp.client-ip=209.85.210.201 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--irogers.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="LaobBi28" Received: by mail-pf1-f201.google.com with SMTP id d2e1a72fcca58-7b8a12f0cb4so5404186b3a.3 for ; Tue, 02 Dec 2025 09:54:31 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1764698071; x=1765302871; 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=j6uZvpU1CmHPVZiDBD5+c8ap8dhyWb5RPEdJMn1xJn8=; b=LaobBi288U0kEFwCWHvSgASAed02S19dJy0wL+kIvsoNwejy+7Nb7rrJYRvSlESBhT lA7HL7eCHPnBI/SEWXfVtxKsnvNNKNuAidvoBYBgnxcOkGaE0UnVYlNqGseIi6dCbD/D 4iduR2VRTxNr7l4rdjmKvojZQWD4qaFUsS7h/bCQAkXIxTrTsfzBfqFFBAbBMC9/546o RTYrea4L/iC9arz5n04VxhvGLDhJhIMVI7Sc1QvSyD7gjDpg0WITwI7RJr26OYgOzrhU 1KQqY8mepEtg0fC7bCrJOLexTNpirlpDu6lgqb30JuUteNso22GwTEh0M42Klu8s8e4k wGKQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1764698071; x=1765302871; 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=j6uZvpU1CmHPVZiDBD5+c8ap8dhyWb5RPEdJMn1xJn8=; b=F043IGZq6gmMHICuzix9rd2vvhIUo++rDOuKyUt3Yl4KvKPukDV0MPaGgCx4yJurdW scDKlAyvS2Ao+6aB1ArZhZTQoaNUwfG2oYfiNEl1az321WOyd0urMwbUnRWDZrR7KaUb jzT3v9BABocFDp0R96soqBLIEHSkGOi3ab8hKLLvejSN3IhwAZpvSG/a+sL2exD4s755 tjvB5uLAfULHpkHnIqrdG/YzW3y3f09U5J5TnYpJ3Fx3k4X1MMhq/Dg1s+C8WVRacyM6 nd7jMsjMuaiihkJOCSTUfXJI9NQNnEf0RtZ6HIQJAF893mzFqJPBPD+8YviW7KeaVVrt 29/w== X-Forwarded-Encrypted: i=1; AJvYcCXAaoBRW+c4fii4NHKt7bXmTGD4bbvpqyeWa/4NWhSZPxTm/btGzknt0TZnUWHi7kPhMDzyQw/shmew/oA=@vger.kernel.org X-Gm-Message-State: AOJu0YyVGUssC9386E/alipCpt9+vEh5/4WNuQcKz+lpLzgmx9kA3x/J 2PZ1EyXmE6T6hc2zFHckRxK+Z+ZPu5Mp3wvf7jvvNc5JEyOdVAlM3WOJuAmy5zFSkNNC4lals9H 7/wUgNjcHgQ== X-Google-Smtp-Source: AGHT+IEQS4yH/MnzCpTnSvSxrkfRl/QtAgjK7RdA6AiWk79tkC6mhXBKHY4vP+R4KKcoA6cLh4RkPsikxUlB X-Received: from dycqv11.prod.google.com ([2002:a05:7300:df4b:b0:2a4:63df:76a5]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a05:7022:660a:b0:11b:a73b:2327 with SMTP id a92af1059eb24-11cbba52d48mr20931064c88.30.1764698071166; Tue, 02 Dec 2025 09:54:31 -0800 (PST) Date: Tue, 2 Dec 2025 09:50:38 -0800 In-Reply-To: <20251202175043.623597-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: <20251202175043.623597-1-irogers@google.com> X-Mailer: git-send-email 2.52.0.158.g65b55ccf14-goog Message-ID: <20251202175043.623597-44-irogers@google.com> Subject: [PATCH v9 43/48] perf jevents: Add local/remote miss latency metrics for Intel From: Ian Rogers To: Adrian Hunter , Alexander Shishkin , Arnaldo Carvalho de Melo , Benjamin Gray , Caleb Biggers , Edward Baker , Ian Rogers , Ingo Molnar , James Clark , Jing Zhang , Jiri Olsa , John Garry , Leo Yan , Namhyung Kim , Perry Taylor , Peter Zijlstra , Samantha Alt , Sandipan Das , Thomas Falcon , Weilin Wang , Xu Yang , linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Derive from CBOX/CHA occupancy and inserts the average latency as is provided in Intel's uncore performance monitoring reference. Signed-off-by: Ian Rogers Tested-by: Thomas Falcon --- tools/perf/pmu-events/intel_metrics.py | 70 ++++++++++++++++++++++++-- 1 file changed, 67 insertions(+), 3 deletions(-) diff --git a/tools/perf/pmu-events/intel_metrics.py b/tools/perf/pmu-events= /intel_metrics.py index 118fe0fc05a3..037f9b2ea1b6 100755 --- a/tools/perf/pmu-events/intel_metrics.py +++ b/tools/perf/pmu-events/intel_metrics.py @@ -6,9 +6,10 @@ import math import os import re from typing import Optional -from metric import (d_ratio, has_event, max, CheckPmu, Event, JsonEncodeMe= tric, - JsonEncodeMetricGroupDescriptions, Literal, LoadEvents, - Metric, MetricConstraint, MetricGroup, MetricRef, Sele= ct) +from metric import (d_ratio, has_event, max, source_count, CheckPmu, Event, + JsonEncodeMetric, JsonEncodeMetricGroupDescriptions, + Literal, LoadEvents, Metric, MetricConstraint, MetricG= roup, + MetricRef, Select) =20 # Global command line arguments. _args =3D None @@ -624,6 +625,68 @@ def IntelL2() -> Optional[MetricGroup]: ], description=3D"L2 data cache analysis") =20 =20 +def IntelMissLat() -> Optional[MetricGroup]: + try: + ticks =3D Event("UNC_CHA_CLOCKTICKS", "UNC_C_CLOCKTICKS") + data_rd_loc_occ =3D Event("UNC_CHA_TOR_OCCUPANCY.IA_MISS_DRD_LOCAL= ", + "UNC_CHA_TOR_OCCUPANCY.IA_MISS", + "UNC_C_TOR_OCCUPANCY.MISS_LOCAL_OPCODE", + "UNC_C_TOR_OCCUPANCY.MISS_OPCODE") + data_rd_loc_ins =3D Event("UNC_CHA_TOR_INSERTS.IA_MISS_DRD_LOCAL", + "UNC_CHA_TOR_INSERTS.IA_MISS", + "UNC_C_TOR_INSERTS.MISS_LOCAL_OPCODE", + "UNC_C_TOR_INSERTS.MISS_OPCODE") + data_rd_rem_occ =3D Event("UNC_CHA_TOR_OCCUPANCY.IA_MISS_DRD_REMOT= E", + "UNC_CHA_TOR_OCCUPANCY.IA_MISS", + "UNC_C_TOR_OCCUPANCY.MISS_REMOTE_OPCODE", + "UNC_C_TOR_OCCUPANCY.NID_MISS_OPCODE") + data_rd_rem_ins =3D Event("UNC_CHA_TOR_INSERTS.IA_MISS_DRD_REMOTE", + "UNC_CHA_TOR_INSERTS.IA_MISS", + "UNC_C_TOR_INSERTS.MISS_REMOTE_OPCODE", + "UNC_C_TOR_INSERTS.NID_MISS_OPCODE") + except: + return None + + if (data_rd_loc_occ.name =3D=3D "UNC_C_TOR_OCCUPANCY.MISS_LOCAL_OPCODE= " or + data_rd_loc_occ.name =3D=3D "UNC_C_TOR_OCCUPANCY.MISS_OPCODE"): + data_rd =3D 0x182 + for e in [data_rd_loc_occ, data_rd_loc_ins, data_rd_rem_occ, data_= rd_rem_ins]: + e.name +=3D f"/filter_opc=3D{hex(data_rd)}/" + elif data_rd_loc_occ.name =3D=3D "UNC_CHA_TOR_OCCUPANCY.IA_MISS": + # Demand Data Read - Full cache-line read requests from core for + # lines to be cached in S or E, typically for data + demand_data_rd =3D 0x202 + # LLC Prefetch Data - Uncore will first look up the line in the + # LLC; for a cache hit, the LRU will be updated, on a miss, the + # DRd will be initiated + llc_prefetch_data =3D 0x25a + local_filter =3D (f"/filter_opc0=3D{hex(demand_data_rd)}," + f"filter_opc1=3D{hex(llc_prefetch_data)}," + "filter_loc,filter_nm,filter_not_nm/") + remote_filter =3D (f"/filter_opc0=3D{hex(demand_data_rd)}," + f"filter_opc1=3D{hex(llc_prefetch_data)}," + "filter_rem,filter_nm,filter_not_nm/") + for e in [data_rd_loc_occ, data_rd_loc_ins]: + e.name +=3D local_filter + for e in [data_rd_rem_occ, data_rd_rem_ins]: + e.name +=3D remote_filter + else: + assert data_rd_loc_occ.name =3D=3D "UNC_CHA_TOR_OCCUPANCY.IA_MISS_= DRD_LOCAL", data_rd_loc_occ + + ticks_per_cha =3D ticks / source_count(data_rd_loc_ins) + loc_lat =3D interval_sec * 1e9 * data_rd_loc_occ / \ + (ticks_per_cha * data_rd_loc_ins) + ticks_per_cha =3D ticks / source_count(data_rd_rem_ins) + rem_lat =3D interval_sec * 1e9 * data_rd_rem_occ / \ + (ticks_per_cha * data_rd_rem_ins) + return MetricGroup("lpm_miss_lat", [ + Metric("lpm_miss_lat_loc", "Local to a socket miss latency in nano= seconds", + loc_lat, "ns"), + Metric("lpm_miss_lat_rem", "Remote to a socket miss latency in nan= oseconds", + rem_lat, "ns"), + ]) + + def IntelMlp() -> Optional[Metric]: try: l1d =3D Event("L1D_PEND_MISS.PENDING") @@ -1005,6 +1068,7 @@ def main() -> None: IntelIlp(), IntelL2(), IntelLdSt(), + IntelMissLat(), IntelMlp(), IntelPorts(), IntelSwpf(), --=20 2.52.0.158.g65b55ccf14-goog From nobody Wed Dec 10 20:09:25 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 4B7642E7F05 for ; Tue, 2 Dec 2025 17:54: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=1764698076; cv=none; b=ndsvR/q0rYh75OvVNLnnRAFy+0U+Bm4Muz6YYSNROQKIeruVf0GV+9GL9tjO7JIvn5T+Y54Z0nBhDeLN59x8vXzSucanYNYU3XaZIFUEBRsVT+zhhZPi2qjqa4rr/YxHX8BzWg0KV8lNaD/AM4JbKH+Sqw8RSItM7ALe5Wu0N0Q= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764698076; c=relaxed/simple; bh=EDGM2z+qBp1q2w0GbJXx4pSB8/TSL6GFcFldbQY99tk=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=mYMkw8X3U/+JpEcdR9eLLHHU7oHbbz2OM2X+hZGfhvIt4w5p7aJVN08kgv8cXYS+ZDszRO5hAU6HvqAG6UQJs0rBSemZCSyTE+aaSu+4hrmNSrBrGfOWugTymNhHCVYL7Z/idS7IdQUuhsXBWWlQ2PmlKuDOM0uSCDHD+9YhYa4= 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=aZ5iuxHL; 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="aZ5iuxHL" Received: by mail-pl1-f201.google.com with SMTP id d9443c01a7336-29be4d2ef78so64476785ad.2 for ; Tue, 02 Dec 2025 09:54:34 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1764698073; x=1765302873; 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=KswLRccZpd26vUqLWsUS0ORAcRxMs+DDS5zPMjce1gc=; b=aZ5iuxHLY/cDYbOdVw1VOskoJ7JwyETMLM25oJuMYH7idNX2j9rnIA9x0s+W5G69xH IrilQeY+OxYUMx63l4A01sXWhouiGP8YtF/KY16qotIIxBNI+DStg4PlMXuYgghg3q+R HbXlYsUSFNpj+IQNUJ8uSXePRGRzEav/irSxOh8gFOVJbU9OZRLJ/z0nlAVTyC83qlth Io1HH02o55rCv67gUcZdoLZErhYkqLpjB/OTLxOvEKmOaxTNK7ac4l5q47VqlMjTRMSg yiTd3mlzB/cKCPVX4tscVQd5vqBpujdJ4ZG9RSKYrZ1035/BsJtS29/cWIYVKzN3SkOE 7L7Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1764698073; x=1765302873; 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=KswLRccZpd26vUqLWsUS0ORAcRxMs+DDS5zPMjce1gc=; b=ub+lJQNvklr7aFnsZdp4pS/u4B1fTDuK5eJm+GRwA2U3S8VsbJx7yNLbmtL9OB5sOb oJ3im+aiPywHgx7UJfA3pcrb61PsmCgfZRPS6ghOCQFg+RCJy+oSjU5Rgo23lWw6Dpf5 opm79HthGWBzUHiKd2hMPlfM65lja/UwczAPokJoEkvL8S7aeaIOVfgdF+xXNl3eZcZQ Cqf2GRKFeEVzqui9UopqtaVcZPmC9LG4E1VJdmnGpGA7Ch+AFhcsLLlVuWJa4ym2wr1e z1Y6dQ0JMm4hEBUZxTuPi9O3T60c5kiT9uHdQ+/Q7XNk9LI129y+FrqSl0Fxr8aUb0ES x3Jw== X-Forwarded-Encrypted: i=1; AJvYcCXYDgx0oiOtgrgc3NQjzBj0iTbrPtrXPSZteYxUJfq+nZs2c5vycGvJSDDo6BQcDzVR1ivxoogFZu4e+fY=@vger.kernel.org X-Gm-Message-State: AOJu0YzD6ksrQxpy/bZ9kjYHiqeGQvD41/kqvDKuMNX9cvgHwn+Iexzu 3uB/Zq/SdxSmJtpy4MUW3QkJhBuERwN2NZuH4zhy1TJNKjW1EpGgkKJwPyRsnm2BRIWEvRqSVoR 2TUsfvHmB/Q== X-Google-Smtp-Source: AGHT+IFRjr6V567u4OtyeXwh6GCPTBOxPtGAe/umVk3ADQxbt/OF11hhZNc77wUsCuHmpDrxki1hBqeack/0 X-Received: from dlqq34.prod.google.com ([2002:a05:7022:63a2:b0:119:49ca:6b8b]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a05:7022:f00b:b0:11b:ceee:a49f with SMTP id a92af1059eb24-11defc9e629mr200899c88.8.1764698073448; Tue, 02 Dec 2025 09:54:33 -0800 (PST) Date: Tue, 2 Dec 2025 09:50:39 -0800 In-Reply-To: <20251202175043.623597-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: <20251202175043.623597-1-irogers@google.com> X-Mailer: git-send-email 2.52.0.158.g65b55ccf14-goog Message-ID: <20251202175043.623597-45-irogers@google.com> Subject: [PATCH v9 44/48] perf jevents: Add upi_bw metric for Intel From: Ian Rogers To: Adrian Hunter , Alexander Shishkin , Arnaldo Carvalho de Melo , Benjamin Gray , Caleb Biggers , Edward Baker , Ian Rogers , Ingo Molnar , James Clark , Jing Zhang , Jiri Olsa , John Garry , Leo Yan , Namhyung Kim , Perry Taylor , Peter Zijlstra , Samantha Alt , Sandipan Das , Thomas Falcon , Weilin Wang , Xu Yang , linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Break down UPI read and write bandwidth using uncore_upi counters. Signed-off-by: Ian Rogers Tested-by: Thomas Falcon --- tools/perf/pmu-events/intel_metrics.py | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/tools/perf/pmu-events/intel_metrics.py b/tools/perf/pmu-events= /intel_metrics.py index 037f9b2ea1b6..f6bb691dc5bb 100755 --- a/tools/perf/pmu-events/intel_metrics.py +++ b/tools/perf/pmu-events/intel_metrics.py @@ -1033,6 +1033,27 @@ def UncoreMemBw() -> Optional[MetricGroup]: ], description=3D"Memory Bandwidth") =20 =20 +def UncoreUpiBw() -> Optional[MetricGroup]: + try: + upi_rds =3D Event("UNC_UPI_RxL_FLITS.ALL_DATA") + upi_wrs =3D Event("UNC_UPI_TxL_FLITS.ALL_DATA") + except: + return None + + upi_total =3D upi_rds + upi_wrs + + # From "Uncore Performance Monitoring": When measuring the amount of + # bandwidth consumed by transmission of the data (i.e. NOT including + # the header), it should be .ALL_DATA / 9 * 64B. + scale =3D (64 / 9) / 1_000_000 + return MetricGroup("lpm_upi_bw", [ + Metric("lpm_upi_bw_read", "UPI read bandwidth", + d_ratio(upi_rds, interval_sec), f"{scale}MB/s"), + Metric("lpm_upi_bw_write", "DDR memory write bandwidth", + d_ratio(upi_wrs, interval_sec), f"{scale}MB/s"), + ], description=3D"UPI Bandwidth") + + def main() -> None: global _args =20 @@ -1076,6 +1097,7 @@ def main() -> None: UncoreDir(), UncoreMem(), UncoreMemBw(), + UncoreUpiBw(), ]) =20 if _args.metricgroups: --=20 2.52.0.158.g65b55ccf14-goog From nobody Wed Dec 10 20:09:25 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 B28BC2E7F07 for ; Tue, 2 Dec 2025 17:54: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=1764698078; cv=none; b=AtZUfJrgmCUBj6Xr++WRB++/gEK3HHSUFoMdjBE4Xt95I0gIi/5vjfBrPHr+CZfnpouxdW3DKZA/DVd7j6gziPzKOashCw6/jzZ7rv3E/rkg92MET5GootkG3TChoFX8aYbOCUcakX3NWvCav5/9qYYcPeS6vOZ+G6KiU9Rd5Rw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764698078; c=relaxed/simple; bh=2r74RayIlYvpuwOozdsEWaVG+iKFzD/yEvXBbcyOtZM=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=FEtROIa0UVHRT0d5G4I6Vi/YqF5GmPVkdjLmGqEJ+ELqA/MUjRs3znFzrRODSCSR6p4zRM6dEarUfk4368Ecdie8JHesHZMpLoYX+BYqRMO/+Wq3q3odymqjkOt6fRaj6SMiCPJaE07afp+g1Irk/w5tA5UlTp3vaFUcXYN9r/k= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--irogers.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=YzsLq7A3; 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="YzsLq7A3" Received: by mail-pg1-f201.google.com with SMTP id 41be03b00d2f7-b630753cc38so7471224a12.1 for ; Tue, 02 Dec 2025 09:54:36 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1764698076; x=1765302876; 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=lzZ8EnbBDh8jt7szKO0N2Uf8WEk3KaSh8ErcQB6ktIk=; b=YzsLq7A3Nw+GL+nfhr4JaGzMzVm8iWpuT0Xs4N2UQsBqwVIP8+VVwp9VCg7K474STq i5blOvGwgaw0HOImWteIJvSwtCh+09HIauW53IBVe/EoFO6XkKsdjAWeec2HiDkuXtbV BuQmURFy+4AxPLjEBvaZiId8MlUQIP1Fyin78sU8taeIKOTNOdeUNAJOtssTlOn17ljm bBG2XcnqmSnDjm4u6cmf/tKi8K/VVQlaxVyv8SRhMsqjgEQB/Ly0gqi9CHMTaWLOglei FyjLfBYbwh9ViYHJLVb6LvFs4uyNxRwt3ZC6FRoYKXe6Ksxfvp+PF6ovF0qAvvld2jRO Pagg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1764698076; x=1765302876; 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=lzZ8EnbBDh8jt7szKO0N2Uf8WEk3KaSh8ErcQB6ktIk=; b=Jc19dAtxA1IjdpF4SCFDF5ihFF7NCrOBr5SOcYOn70X4gQolq/xXPDRaC3GLOkqvUy N13BRy6zWlPhwIqMsxFDGEdlkpYHMEyOGVxBoePenkPLmfFdmeKzwLZ1yRUD45Deb3kn jurQNUhkw2Qpz9XXRyceVvMUAe6Z5S07XMglb8cewsl5ehSsT7Hi+uoXeLyL2M/OkPIq R2aSm2RnktDvsLEDZ3PbBoNlm39uL0DS28Mm892Xu2l/kDtS7DlHEYqcK7qkwyHUiSPG 0KuVXmkLxqqymFoLFHctVRctyMDjSlfdDBdeqQ9POrMeP3r4GooMkUuZNodKMSx2GPMk 2JXw== X-Forwarded-Encrypted: i=1; AJvYcCWanm8Huvv28A5uExj02kid/6V3/rEZQ6LmJ/7Ukprw9ffWEYdwIrxqdz9G9E5WY3r3NxEDd8XvkcBOOjs=@vger.kernel.org X-Gm-Message-State: AOJu0YzwFq5erNL1kNEw4B6avBh0YzEsLvFo5dD/PnABzWhB0miBlDn6 /CGsjFrrVTCs50/NdI82dhzFEUqN26C2CiEb28a2K31LF1CBjG1/ANxmci0Vqy1yiRpFt6gKGM0 +f0FHJ+YAEQ== X-Google-Smtp-Source: AGHT+IFfiF0+T0B3cE3iZJOMezRRXUl65547R9nw7jIkPYT4P2Q1DmHaH8JKoiF5eYt/wOEdc2p/qx6LbTqM X-Received: from dybhk20.prod.google.com ([2002:a05:7301:2894:b0:2a2:318c:8559]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a05:7301:29af:b0:2a4:3594:72e4 with SMTP id 5a478bee46e88-2a719277102mr18566291eec.19.1764698076080; Tue, 02 Dec 2025 09:54:36 -0800 (PST) Date: Tue, 2 Dec 2025 09:50:40 -0800 In-Reply-To: <20251202175043.623597-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: <20251202175043.623597-1-irogers@google.com> X-Mailer: git-send-email 2.52.0.158.g65b55ccf14-goog Message-ID: <20251202175043.623597-46-irogers@google.com> Subject: [PATCH v9 45/48] perf jevents: Add mesh bandwidth saturation metric for Intel From: Ian Rogers To: Adrian Hunter , Alexander Shishkin , Arnaldo Carvalho de Melo , Benjamin Gray , Caleb Biggers , Edward Baker , Ian Rogers , Ingo Molnar , James Clark , Jing Zhang , Jiri Olsa , John Garry , Leo Yan , Namhyung Kim , Perry Taylor , Peter Zijlstra , Samantha Alt , Sandipan Das , Thomas Falcon , Weilin Wang , Xu Yang , linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Memory bandwidth saturation from CBOX/CHA events present in broadwellde, broadwellx, cascadelakex, haswellx, icelakex, skylakex and snowridgex. Signed-off-by: Ian Rogers Tested-by: Thomas Falcon --- tools/perf/pmu-events/intel_metrics.py | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/tools/perf/pmu-events/intel_metrics.py b/tools/perf/pmu-events= /intel_metrics.py index f6bb691dc5bb..d56bab7337df 100755 --- a/tools/perf/pmu-events/intel_metrics.py +++ b/tools/perf/pmu-events/intel_metrics.py @@ -1033,6 +1033,22 @@ def UncoreMemBw() -> Optional[MetricGroup]: ], description=3D"Memory Bandwidth") =20 =20 +def UncoreMemSat() -> Optional[Metric]: + try: + clocks =3D Event("UNC_CHA_CLOCKTICKS", "UNC_C_CLOCKTICKS") + sat =3D Event("UNC_CHA_DISTRESS_ASSERTED.VERT", "UNC_CHA_FAST_ASSE= RTED.VERT", + "UNC_C_FAST_ASSERTED") + except: + return None + + desc =3D ("Mesh Bandwidth saturation (% CBOX cycles with FAST signal a= sserted, " + "include QPI bandwidth saturation), lower is better") + if "UNC_CHA_" in sat.name: + desc =3D ("Mesh Bandwidth saturation (% CHA cycles with FAST signa= l asserted, " + "include UPI bandwidth saturation), lower is better") + return Metric("lpm_mem_sat", desc, d_ratio(sat, clocks), "100%") + + def UncoreUpiBw() -> Optional[MetricGroup]: try: upi_rds =3D Event("UNC_UPI_RxL_FLITS.ALL_DATA") @@ -1097,6 +1113,7 @@ def main() -> None: UncoreDir(), UncoreMem(), UncoreMemBw(), + UncoreMemSat(), UncoreUpiBw(), ]) =20 --=20 2.52.0.158.g65b55ccf14-goog From nobody Wed Dec 10 20:09:25 2025 Received: from mail-pf1-f201.google.com (mail-pf1-f201.google.com [209.85.210.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 689B72E92AB for ; Tue, 2 Dec 2025 17:54:39 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764698081; cv=none; b=pOM3CEqn1VjV9kDd2fnwfy5Yw5HN/BYnlJMjO+au3teWC/+cpF6pD7CtBWGGuP/hXxR4+NNrKdYvzPaWz0vIhmAdyLbw3ggdZGff2uEsQwZd+uJLMXbDp4/6rPcL6pij7X6g9oSmNba/TqNbtHiBJ7yEEIdLQehK0MJA/qaSYEA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764698081; c=relaxed/simple; bh=2mVXjBCLn9cfTx5+1aNp+97FKhk6fNaTWMa3oILql9Q=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=QnEbz+exaShti9XUczz7hilf8+q3lVW6qAao4EtMMSbGr/K8jbRa68LmZ3zuCLTegjUdStytSIrPHdAdfB0cP01TPxikE2Sm5yUAj2+b+FnzTo1iLBgp0XLEXQbQFMIz8he+Lsw5G6vkNyelnVmmLX5IW62MYtl8/oMX2eP2V4E= 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=iiDgnbJk; arc=none smtp.client-ip=209.85.210.201 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--irogers.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="iiDgnbJk" Received: by mail-pf1-f201.google.com with SMTP id d2e1a72fcca58-7b6b194cf71so8224473b3a.3 for ; Tue, 02 Dec 2025 09:54:39 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1764698079; x=1765302879; 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=HMSTh7UnX+8+YadXC3OitqCgv7Z8YnElh/GbrJLH5/M=; b=iiDgnbJkprKVdJeS/iNJlDCthwfRC1/TeAIpgosK/PngBKtG/H35KZtbWUvadtbjPN m6NtRuD/y6bZQMBN4Q2vD5FI2n1rRLGImO7pB5qxgU/YUS/cDNM+j92141j/TWxcEn/Z BbTJbGSzLA8zLoFEr1M29kg1n7b18Xgvkv6Exd2VU6Alfgh4+miS7a51Gqo+NvNZSRgv e3JLFEyG5MWaf4V9GGU4XEokyV6mIXImimyMDBi3BxkFLaPciXWOed5Yt0R/RUE60td7 vHCwx1d0cYhYj2FnN/YIHeSV0DP/kK0dwGSHXyQViEd3nD7O1Jon1R3GFKlohiz7X8Ug Yfxw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1764698079; x=1765302879; 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=HMSTh7UnX+8+YadXC3OitqCgv7Z8YnElh/GbrJLH5/M=; b=VzdyNEx0ujqgSs9vgw+BDXZz3CeQd9HDdWRafSieWVHimt6/bzo9LAkO7aziGqidlH flsN8knyPxKDUeN3l9p0/MAqsWRMl8bBIr3BF+m6WC8GTEBqg7p8mJQXu5/Fxn8Qi0+1 9iyounzVvsVGzgfPfGa4BovEPtCpMd5XxHAuJrqbI9imb4zHNXhkWy1jYdyY9G5Q0uHs OVxx017Cz1iTepcD0nDLHG6oyqNoZVlJLtklZGS7oWwZQvERexxBALb1p4dP0l5MMVAp 0W2FUtUjf9fFve+BPEJj/CxRLjl2AOBU867R2GqS+26tdQFbVOLWKnys4zEABqO7AdXh ga4Q== X-Forwarded-Encrypted: i=1; AJvYcCWknK827D78iLOKXHA9wgU6ztc9wE8FMJcW6vJRYVosWtIzRNz5vm+05rhrf9cu1mpazsNYP/vR27p2z+M=@vger.kernel.org X-Gm-Message-State: AOJu0Yyc1WlptwzsXesjH/Jc2gLxNGQLclaPydnpBqpCAFeseL52ede/ ETBc7XFhNF1axIdzlTNifP8tO9LoOkZU/J3VnJ0dJixT/j09MTpSFT5SEtUqJWtpTKeoEKhaLhV 4nUWNVZ9VpQ== X-Google-Smtp-Source: AGHT+IFAgJq8PXDyAQqgRZq+NcgLIB0XcGeuk923/zPqbV8WY+kKZolx65QBUs3WY5Sg2qJRoOgAKiDetCfo X-Received: from dlee33.prod.google.com ([2002:a05:7022:62a1:b0:119:78ff:fe0f]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a05:7022:249a:b0:119:e569:f275 with SMTP id a92af1059eb24-11defcfba93mr166963c88.30.1764698078485; Tue, 02 Dec 2025 09:54:38 -0800 (PST) Date: Tue, 2 Dec 2025 09:50:41 -0800 In-Reply-To: <20251202175043.623597-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: <20251202175043.623597-1-irogers@google.com> X-Mailer: git-send-email 2.52.0.158.g65b55ccf14-goog Message-ID: <20251202175043.623597-47-irogers@google.com> Subject: [PATCH v9 46/48] perf jevents: Add collection of topdown like metrics for arm64 From: Ian Rogers To: Adrian Hunter , Alexander Shishkin , Arnaldo Carvalho de Melo , Benjamin Gray , Caleb Biggers , Edward Baker , Ian Rogers , Ingo Molnar , James Clark , Jing Zhang , Jiri Olsa , John Garry , Leo Yan , Namhyung Kim , Perry Taylor , Peter Zijlstra , Samantha Alt , Sandipan Das , Thomas Falcon , Weilin Wang , Xu Yang , linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Metrics are created using legacy, common and recommended events. As events may be missing a TryEvent function will give None if an event is missing. To workaround missing JSON events for cortex-a53, sysfs encodings are used. Signed-off-by: Ian Rogers --- An earlier review of this patch by Leo Yan is here: https://lore.kernel.org/lkml/8168c713-005c-4fd9-a928-66763dab746a@arm.com/ Hopefully all corrections were made. --- tools/perf/pmu-events/arm64_metrics.py | 145 ++++++++++++++++++++++++- 1 file changed, 142 insertions(+), 3 deletions(-) diff --git a/tools/perf/pmu-events/arm64_metrics.py b/tools/perf/pmu-events= /arm64_metrics.py index ac717ca3513a..9678253e2e0e 100755 --- a/tools/perf/pmu-events/arm64_metrics.py +++ b/tools/perf/pmu-events/arm64_metrics.py @@ -2,13 +2,150 @@ # SPDX-License-Identifier: (LGPL-2.1 OR BSD-2-Clause) import argparse import os -from metric import (JsonEncodeMetric, JsonEncodeMetricGroupDescriptions, L= oadEvents, - MetricGroup) +from typing import Optional +from metric import (d_ratio, Event, JsonEncodeMetric, JsonEncodeMetricGrou= pDescriptions, + LoadEvents, Metric, MetricGroup) =20 # Global command line arguments. _args =3D None =20 =20 +def Arm64Topdown() -> MetricGroup: + """Returns a MetricGroup representing ARM64 topdown like metrics.""" + def TryEvent(name: str) -> Optional[Event]: + # Skip an event if not in the json files. + try: + return Event(name) + except: + return None + # ARM models like a53 lack JSON for INST_RETIRED but have the + # architetural standard event in sysfs. Use the PMU name to identify + # the sysfs event. + pmu_name =3D f'armv8_{_args.model.replace("-", "_")}' + ins =3D Event("instructions") + ins_ret =3D Event("INST_RETIRED", f"{pmu_name}/inst_retired/") + cycles =3D Event("cpu\\-cycles") + stall_fe =3D TryEvent("STALL_FRONTEND") + stall_be =3D TryEvent("STALL_BACKEND") + br_ret =3D TryEvent("BR_RETIRED") + br_mp_ret =3D TryEvent("BR_MIS_PRED_RETIRED") + dtlb_walk =3D TryEvent("DTLB_WALK") + itlb_walk =3D TryEvent("ITLB_WALK") + l1d_tlb =3D TryEvent("L1D_TLB") + l1i_tlb =3D TryEvent("L1I_TLB") + l1d_refill =3D Event("L1D_CACHE_REFILL", f"{pmu_name}/l1d_cache_refill= /") + l2d_refill =3D Event("L2D_CACHE_REFILL", f"{pmu_name}/l2d_cache_refill= /") + l1i_refill =3D Event("L1I_CACHE_REFILL", f"{pmu_name}/l1i_cache_refill= /") + l1d_access =3D Event("L1D_CACHE", f"{pmu_name}/l1d_cache/") + l2d_access =3D Event("L2D_CACHE", f"{pmu_name}/l2d_cache/") + llc_access =3D TryEvent("LL_CACHE_RD") + l1i_access =3D Event("L1I_CACHE", f"{pmu_name}/l1i_cache/") + llc_miss_rd =3D TryEvent("LL_CACHE_MISS_RD") + ase_spec =3D TryEvent("ASE_SPEC") + ld_spec =3D TryEvent("LD_SPEC") + st_spec =3D TryEvent("ST_SPEC") + vfp_spec =3D TryEvent("VFP_SPEC") + dp_spec =3D TryEvent("DP_SPEC") + br_immed_spec =3D TryEvent("BR_IMMED_SPEC") + br_indirect_spec =3D TryEvent("BR_INDIRECT_SPEC") + br_ret_spec =3D TryEvent("BR_RETURN_SPEC") + crypto_spec =3D TryEvent("CRYPTO_SPEC") + inst_spec =3D TryEvent("INST_SPEC") + return MetricGroup("lpm_topdown", [ + MetricGroup("lpm_topdown_tl", [ + Metric("lpm_topdown_tl_ipc", "Instructions per cycle", d_ratio( + ins, cycles), "insn/cycle"), + Metric("lpm_topdown_tl_stall_fe_rate", "Frontend stalls to all= cycles", + d_ratio(stall_fe, cycles), "100%") if stall_fe else Non= e, + Metric("lpm_topdown_tl_stall_be_rate", "Backend stalls to all = cycles", + d_ratio(stall_be, cycles), "100%") if stall_be else Non= e, + ]), + MetricGroup("lpm_topdown_fe_bound", [ + MetricGroup("lpm_topdown_fe_br", [ + Metric("lpm_topdown_fe_br_mp_per_insn", + "Branch mispredicts per instruction retired", + d_ratio(br_mp_ret, ins_ret), "br/insn") if br_mp_re= t else None, + Metric("lpm_topdown_fe_br_ins_rate", + "Branches per instruction retired", d_ratio( + br_ret, ins_ret), "100%") if br_ret else None, + Metric("lpm_topdown_fe_br_mispredict", + "Branch mispredicts per branch instruction", + d_ratio(br_mp_ret, br_ret), "100%") if (br_mp_ret a= nd br_ret) else None, + ]), + MetricGroup("lpm_topdown_fe_itlb", [ + Metric("lpm_topdown_fe_itlb_walks", "Itlb walks per insn", + d_ratio(itlb_walk, ins_ret), "walk/insn"), + Metric("lpm_topdown_fe_itlb_walk_rate", "Itlb walks per L1= I TLB access", + d_ratio(itlb_walk, l1i_tlb) if l1i_tlb else None, "= 100%"), + ]) if itlb_walk else None, + MetricGroup("lpm_topdown_fe_icache", [ + Metric("lpm_topdown_fe_icache_l1i_per_insn", + "L1I cache refills per instruction", + d_ratio(l1i_refill, ins_ret), "l1i/insn"), + Metric("lpm_topdown_fe_icache_l1i_miss_rate", + "L1I cache refills per L1I cache access", + d_ratio(l1i_refill, l1i_access), "100%"), + ]), + ]), + MetricGroup("lpm_topdown_be_bound", [ + MetricGroup("lpm_topdown_be_dtlb", [ + Metric("lpm_topdown_be_dtlb_walks", "Dtlb walks per instru= ction", + d_ratio(dtlb_walk, ins_ret), "walk/insn"), + Metric("lpm_topdown_be_dtlb_walk_rate", "Dtlb walks per L1= D TLB access", + d_ratio(dtlb_walk, l1d_tlb) if l1d_tlb else None, "= 100%"), + ]) if dtlb_walk else None, + MetricGroup("lpm_topdown_be_mix", [ + Metric("lpm_topdown_be_mix_ld", "Percentage of load instru= ctions", + d_ratio(ld_spec, inst_spec), "100%") if ld_spec els= e None, + Metric("lpm_topdown_be_mix_st", "Percentage of store instr= uctions", + d_ratio(st_spec, inst_spec), "100%") if st_spec els= e None, + Metric("lpm_topdown_be_mix_simd", "Percentage of SIMD inst= ructions", + d_ratio(ase_spec, inst_spec), "100%") if ase_spec e= lse None, + Metric("lpm_topdown_be_mix_fp", + "Percentage of floating point instructions", + d_ratio(vfp_spec, inst_spec), "100%") if vfp_spec e= lse None, + Metric("lpm_topdown_be_mix_dp", + "Percentage of data processing instructions", + d_ratio(dp_spec, inst_spec), "100%") if dp_spec els= e None, + Metric("lpm_topdown_be_mix_crypto", + "Percentage of data processing instructions", + d_ratio(crypto_spec, inst_spec), "100%") if crypto_= spec else None, + Metric( + "lpm_topdown_be_mix_br", "Percentage of branch instruc= tions", + d_ratio(br_immed_spec + br_indirect_spec + br_ret_spec, + inst_spec), "100%") if br_immed_spec and br_in= direct_spec and br_ret_spec else None, + ], description=3D"Breakdown of instructions by type. Counts in= clude both useful and wasted speculative instructions" + ) if inst_spec else None, + MetricGroup("lpm_topdown_be_dcache", [ + MetricGroup("lpm_topdown_be_dcache_l1", [ + Metric("lpm_topdown_be_dcache_l1_per_insn", + "L1D cache refills per instruction", + d_ratio(l1d_refill, ins_ret), "refills/insn"), + Metric("lpm_topdown_be_dcache_l1_miss_rate", + "L1D cache refills per L1D cache access", + d_ratio(l1d_refill, l1d_access), "100%") + ]), + MetricGroup("lpm_topdown_be_dcache_l2", [ + Metric("lpm_topdown_be_dcache_l2_per_insn", + "L2D cache refills per instruction", + d_ratio(l2d_refill, ins_ret), "refills/insn"), + Metric("lpm_topdown_be_dcache_l2_miss_rate", + "L2D cache refills per L2D cache access", + d_ratio(l2d_refill, l2d_access), "100%") + ]), + MetricGroup("lpm_topdown_be_dcache_llc", [ + Metric("lpm_topdown_be_dcache_llc_per_insn", + "Last level cache misses per instruction", + d_ratio(llc_miss_rd, ins_ret), "miss/insn"), + Metric("lpm_topdown_be_dcache_llc_miss_rate", + "Last level cache misses per last level cache a= ccess", + d_ratio(llc_miss_rd, llc_access), "100%") + ]) if llc_miss_rd and llc_access else None, + ]), + ]), + ]) + + def main() -> None: global _args =20 @@ -34,7 +171,9 @@ def main() -> None: directory =3D f"{_args.events_path}/arm64/{_args.vendor}/{_args.model}= /" LoadEvents(directory) =20 - all_metrics =3D MetricGroup("", []) + all_metrics =3D MetricGroup("", [ + Arm64Topdown(), + ]) =20 if _args.metricgroups: print(JsonEncodeMetricGroupDescriptions(all_metrics)) --=20 2.52.0.158.g65b55ccf14-goog From nobody Wed Dec 10 20:09:25 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 C4F8E2D8783 for ; Tue, 2 Dec 2025 17:54:41 +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=1764698083; cv=none; b=QNJlQuV/jfCznYyMd1GNP4r+d6QswQoM51WCY/Hm/AiiExSzxTwFlhZIoHoYBpJD7Xk+BpXu7N0ASFYd4DcJ6+lMmd52+Pfrnq91uFiQE0AVMz+wYDNMz0cvGZnNnNY4dtD4HeKLbsDQ5bnldzRtjzdBbTZie8pS8nz2JT+2azI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764698083; c=relaxed/simple; bh=+iI3/RRys0ZRhLM9cNs5BefDAmUIJNTObN9HhULHALc=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=pVVlG/HIjF7EEo32RkK0MPs0wK1RDOAj0TvPXIBmVm46H5HulKN6nyICdHuyOpyCRatei4vdX1NboivPXzOrsuA8ohcPy1OdpVMMZeLrYuOZYSooQJmJmmUrYfPw+fL/Uf6X22JaQ0Nf/1hkrotFBv7xd14QG0lhZPQna2NijBk= 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=bf1WRijG; 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="bf1WRijG" Received: by mail-pg1-f202.google.com with SMTP id 41be03b00d2f7-b99dc8f439bso9415673a12.2 for ; Tue, 02 Dec 2025 09:54:41 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1764698081; x=1765302881; 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=cu2vPTI9LaETUdBm3mb11MohpnaEsDC5BcvlAfrGK2k=; b=bf1WRijG6MtmY+Nfgtawhn6ZEHJM9H3BYWF9D7h5JRGvsv3gHCUKj8bhDqGAlFkZx4 CeY0Z7vtejBXejc4P3O0HSidQwRWmV00NXxTrzdRvceFhTZ4tKRQTINgoWPcXi5rFcxx HXMQCU1plu7ybRXbcnscQJcVR+mI+UEBuix5swuv+OgxN6XNDeokfnMUTetop9pBpphr Vceoa0EQBabsmhLERET5ExAWCGXyou9ejQeEOTW1PzdcXOpRDaTYY+B41ehGgUb7ZIIS Kul09FMHD/pbZzLeP63/OUed82BZo59enguHGw5sh1o0lAXTV5WbHXVvcrabxqoF8PIU hALA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1764698081; x=1765302881; 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=cu2vPTI9LaETUdBm3mb11MohpnaEsDC5BcvlAfrGK2k=; b=EQHLpv+EPur31iHKLylj6uQjvFYvFncLKoBcXXPrLic+4TuF4KxCJVKXRkUWAWq4px mB7Lamns+zpSCJGulEobQsaXRxyPy8YR/zFqgVQXWoqLxbYkHTK7V1b1bPP4lRTuwN3L ZeAAGQVTgzCP8JZ10s1vXUjqlCuYTsZfrzmk9Cz5DIId/y4u4KaZA52nREf5O5QsC8zZ xNViXlWNCJN/HZY/giUSfpCAqgZspt82Jlc9rXTo+j2BH/HeA5pVwDavYWQf+tOOdz1J DV0Wl9h07ZnXDvIHoujljs29ve006VnSuko5DYT1iDnWKC6OIGANbSgKo1lq6NwXACw2 3EKQ== X-Forwarded-Encrypted: i=1; AJvYcCWOO0N06NXNusjfwxG/nvSRrCDZBIJFayCrLPEutFj8I5TdMtNnQO+ED0OKBeuMC8QgO1Wa4D7NaYRyTUo=@vger.kernel.org X-Gm-Message-State: AOJu0YyNYqQH/feD2oD/lrmfeQPbxZhewY0URSaKikIckH1dzew4snjs MVoLSO68khA79xfbTGalYky0OOPXsucOR5R9Zn6S8890Ask6eDvv7h44h0/OR0YwKn5+zoNyU32 1Pf3S6z0aaQ== X-Google-Smtp-Source: AGHT+IEFfRd/wuwTqQ5tq5zrdmwgl+pFvx0xipfNPrPfbw+oe2CpL343WAcldvXMeEvlquJXTyA/76K6swaa X-Received: from dlb17.prod.google.com ([2002:a05:7022:611:b0:11d:cdd1:432c]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a05:7022:698d:b0:11b:79f1:850 with SMTP id a92af1059eb24-11c9d717901mr28443962c88.14.1764698080873; Tue, 02 Dec 2025 09:54:40 -0800 (PST) Date: Tue, 2 Dec 2025 09:50:42 -0800 In-Reply-To: <20251202175043.623597-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: <20251202175043.623597-1-irogers@google.com> X-Mailer: git-send-email 2.52.0.158.g65b55ccf14-goog Message-ID: <20251202175043.623597-48-irogers@google.com> Subject: [PATCH v9 47/48] perf jevents: Add cycles breakdown metric for arm64/AMD/Intel From: Ian Rogers To: Adrian Hunter , Alexander Shishkin , Arnaldo Carvalho de Melo , Benjamin Gray , Caleb Biggers , Edward Baker , Ian Rogers , Ingo Molnar , James Clark , Jing Zhang , Jiri Olsa , John Garry , Leo Yan , Namhyung Kim , Perry Taylor , Peter Zijlstra , Samantha Alt , Sandipan Das , Thomas Falcon , Weilin Wang , Xu Yang , linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Breakdown cycles to user, kernel and guest. Add a common_metrics.py file for such metrics. Signed-off-by: Ian Rogers Tested-by: Thomas Falcon --- tools/perf/pmu-events/Build | 2 +- tools/perf/pmu-events/amd_metrics.py | 2 ++ tools/perf/pmu-events/arm64_metrics.py | 2 ++ tools/perf/pmu-events/common_metrics.py | 19 +++++++++++++++++++ tools/perf/pmu-events/intel_metrics.py | 2 ++ 5 files changed, 26 insertions(+), 1 deletion(-) create mode 100644 tools/perf/pmu-events/common_metrics.py diff --git a/tools/perf/pmu-events/Build b/tools/perf/pmu-events/Build index f7d67d03d055..a3d7a04f0abf 100644 --- a/tools/perf/pmu-events/Build +++ b/tools/perf/pmu-events/Build @@ -44,7 +44,7 @@ $(LEGACY_CACHE_JSON): $(LEGACY_CACHE_PY) $(call rule_mkdir) $(Q)$(call echo-cmd,gen)$(PYTHON) $(LEGACY_CACHE_PY) > $@ =20 -GEN_METRIC_DEPS :=3D pmu-events/metric.py +GEN_METRIC_DEPS :=3D pmu-events/metric.py pmu-events/common_metrics.py =20 # Generate AMD Json ZENS =3D $(shell ls -d pmu-events/arch/x86/amdzen*) diff --git a/tools/perf/pmu-events/amd_metrics.py b/tools/perf/pmu-events/a= md_metrics.py index 780e611fe575..feb3b1fc5152 100755 --- a/tools/perf/pmu-events/amd_metrics.py +++ b/tools/perf/pmu-events/amd_metrics.py @@ -4,6 +4,7 @@ import argparse import math import os from typing import Optional +from common_metrics import Cycles from metric import (d_ratio, has_event, max, Event, JsonEncodeMetric, JsonEncodeMetricGroupDescriptions, Literal, LoadEvents, Metric, MetricGroup, Select) @@ -474,6 +475,7 @@ def main() -> None: AmdItlb(), AmdLdSt(), AmdUpc(), + Cycles(), Idle(), Rapl(), UncoreL3(), diff --git a/tools/perf/pmu-events/arm64_metrics.py b/tools/perf/pmu-events= /arm64_metrics.py index 9678253e2e0e..ac518e7f1120 100755 --- a/tools/perf/pmu-events/arm64_metrics.py +++ b/tools/perf/pmu-events/arm64_metrics.py @@ -3,6 +3,7 @@ import argparse import os from typing import Optional +from common_metrics import Cycles from metric import (d_ratio, Event, JsonEncodeMetric, JsonEncodeMetricGrou= pDescriptions, LoadEvents, Metric, MetricGroup) =20 @@ -173,6 +174,7 @@ def main() -> None: =20 all_metrics =3D MetricGroup("", [ Arm64Topdown(), + Cycles(), ]) =20 if _args.metricgroups: diff --git a/tools/perf/pmu-events/common_metrics.py b/tools/perf/pmu-event= s/common_metrics.py new file mode 100644 index 000000000000..fcdfb9d3e648 --- /dev/null +++ b/tools/perf/pmu-events/common_metrics.py @@ -0,0 +1,19 @@ +# SPDX-License-Identifier: (LGPL-2.1 OR BSD-2-Clause) +from metric import (d_ratio, Event, Metric, MetricGroup) + + +def Cycles() -> MetricGroup: + cyc_k =3D Event("cpu\\-cycles:kHh") # exclude user and guest + cyc_g =3D Event("cpu\\-cycles:G") # exclude host + cyc_u =3D Event("cpu\\-cycles:uH") # exclude kernel, hypervisor and g= uest + cyc =3D cyc_k + cyc_g + cyc_u + + return MetricGroup("lpm_cycles", [ + Metric("lpm_cycles_total", "Total number of cycles", cyc, "cycles"= ), + Metric("lpm_cycles_user", "User cycles as a percentage of all cycl= es", + d_ratio(cyc_u, cyc), "100%"), + Metric("lpm_cycles_kernel", "Kernel cycles as a percentage of all = cycles", + d_ratio(cyc_k, cyc), "100%"), + Metric("lpm_cycles_guest", "Hypervisor guest cycles as a percentag= e of all cycles", + d_ratio(cyc_g, cyc), "100%"), + ], description=3D"cycles breakdown per privilege level (users, kernel,= guest)") diff --git a/tools/perf/pmu-events/intel_metrics.py b/tools/perf/pmu-events= /intel_metrics.py index d56bab7337df..52035433b505 100755 --- a/tools/perf/pmu-events/intel_metrics.py +++ b/tools/perf/pmu-events/intel_metrics.py @@ -6,6 +6,7 @@ import math import os import re from typing import Optional +from common_metrics import Cycles from metric import (d_ratio, has_event, max, source_count, CheckPmu, Event, JsonEncodeMetric, JsonEncodeMetricGroupDescriptions, Literal, LoadEvents, Metric, MetricConstraint, MetricG= roup, @@ -1095,6 +1096,7 @@ def main() -> None: LoadEvents(directory) =20 all_metrics =3D MetricGroup("", [ + Cycles(), Idle(), Rapl(), Smi(), --=20 2.52.0.158.g65b55ccf14-goog From nobody Wed Dec 10 20:09:25 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 75D4F2EA158 for ; Tue, 2 Dec 2025 17:54:44 +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=1764698086; cv=none; b=M4Krjc1f/Y5vUunrCFHDO+IS+00o6ovPF96q+ArFpjnXNtHGmCnoefGSFBQrgUKE4Py0s/0YOoBX6ieYIhS6p+nrgY1rXBcrBMBna8tPklSVCzL5EeQVOWrlThIDmN5O3bcsaLkaWImOyJA5rEAfxh4AkQ64vxLr5Uv9dh/UoEw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764698086; c=relaxed/simple; bh=NThdRYCNtlYSZW1PU5R9Tup9FW5EJkaG8hpy/1kktlg=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=mTNAU6w2GrXMFwtjLRa5fNQZNXIFOajfu17glQlqWRSdydw2WIqUYsWy3Lv3F2TvE49w3TADEaGADPyQKl49yKhbkv6EfpXv9Z9Xeu6oLym6Paabrfe1MJuvDreSdewr0olGPXw9xKMau/V/gyV78Lwvds0nG3BLI06t7aieGMQ= 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=shEfZGmt; 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="shEfZGmt" Received: by mail-pg1-f201.google.com with SMTP id 41be03b00d2f7-b98e6ff908aso12797491a12.2 for ; Tue, 02 Dec 2025 09:54:44 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1764698084; x=1765302884; 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=hpG0g9svAOA/ifhIkPcMdbZNaWTbft53MOj1l178nKA=; b=shEfZGmtPRn2Ckv/7iXxnjPMkKEldOunYM1vCQe0DB5vrSgmArPKTDQ4kNtc46opiB daepG1FgaeQev1iDduTCAbhkPlTHoRIX/tcpZXRRTXMK5toP/uJPkoL3kSe5m+ncUdKB hA4/74PEJACYP5oaHsm5OyRnWa0vpsxVTWxjKz64zQl+cdwcplKcTOKV+WkkkNvketo8 LSHfru8vSa2JonE3Xb4BFwmeUJhFIh2JfXIttwHcYXNRV6swKjG86Xllvf25E8zkWeIw dvEGyNTl4GUNiqQOI+g6sjlEwc04/mrwvHGHZ4ScWgia1amXMlUAJfEFFjxH1cX9cEdH awsw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1764698084; x=1765302884; 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=hpG0g9svAOA/ifhIkPcMdbZNaWTbft53MOj1l178nKA=; b=ZFp2HQZ3A7KrE8YI5yqfGnXDA2bdXwAz9EDzy/VbY3bEPddRvuuu8pyl/ly1X/CxAq klIXud7/pZ80NCk5Sq59YKov2n7IIWPnrXBbEnnSfoM5jDHbB1E2rqdow2X6gz3Ae0QP Kqe6fJbpAkUSDayJjjIK9KLEtCCiUFuX0vq8y+/k/IXN8/yX6lgiVChBn3MrZ4cEY3on 3DYUNry/wYM8jYU1EttcK8Xsh/YtTXthYrzgDn8/Gs8ArNp7MYoRBsF+iDq4Rd2R8duf VAMTuob4Ry2dG/JiAJGu6/zY+iBows6tQ7DtekI8WkiHt+BhtU9roUaGY/S3Oy6nvA0r tsqA== X-Forwarded-Encrypted: i=1; AJvYcCXY9r6tYkeoEyJP/H/BozGadainKexV1P9D6s4gwV220GQfJSAqcFKLeeua4CmZl/T5Ff1dKDfEBlmnNKI=@vger.kernel.org X-Gm-Message-State: AOJu0YzhwW1XYz+OOOD5IUWLGJBPtbuS1dDjDDtX3v3pKoIgUoyt824l mGYJYYSEgd9Maj2AfElP8CpgmiPYVySnL/hfdOUrrebwFD8nm0po5XsRbf4zCuoW5DjranKxGBh dbFi5aEUtWA== X-Google-Smtp-Source: AGHT+IEiOJtx1L/vRmXs2XCuIRpwv4DZI8C4Zm/hXM1RlAj8t+Am6utsOUHU4zFQZAoy0PPuTzlTeoM7fhXo X-Received: from dycnl9.prod.google.com ([2002:a05:7300:d109:b0:2a2:2846:c4f7]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a05:7300:7f01:b0:2a4:3592:cf7c with SMTP id 5a478bee46e88-2a94189ac9dmr16149909eec.32.1764698083732; Tue, 02 Dec 2025 09:54:43 -0800 (PST) Date: Tue, 2 Dec 2025 09:50:43 -0800 In-Reply-To: <20251202175043.623597-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: <20251202175043.623597-1-irogers@google.com> X-Mailer: git-send-email 2.52.0.158.g65b55ccf14-goog Message-ID: <20251202175043.623597-49-irogers@google.com> Subject: [PATCH v9 48/48] perf jevents: Validate that all names given an Event From: Ian Rogers To: Adrian Hunter , Alexander Shishkin , Arnaldo Carvalho de Melo , Benjamin Gray , Caleb Biggers , Edward Baker , Ian Rogers , Ingo Molnar , James Clark , Jing Zhang , Jiri Olsa , John Garry , Leo Yan , Namhyung Kim , Perry Taylor , Peter Zijlstra , Samantha Alt , Sandipan Das , Thomas Falcon , Weilin Wang , Xu Yang , linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Validate they exist in a json file from one directory found from one directory above the model's json directory. This avoids broken fallback encodings being created. Signed-off-by: Ian Rogers Tested-by: Thomas Falcon --- tools/perf/pmu-events/metric.py | 36 +++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/tools/perf/pmu-events/metric.py b/tools/perf/pmu-events/metric= .py index 2029b6e28365..585454828c2f 100644 --- a/tools/perf/pmu-events/metric.py +++ b/tools/perf/pmu-events/metric.py @@ -11,12 +11,14 @@ from typing import Dict, List, Optional, Set, Tuple, Un= ion all_pmus =3D set() all_events =3D set() experimental_events =3D set() +all_events_all_models =3D set() =20 def LoadEvents(directory: str) -> None: """Populate a global set of all known events for the purpose of validati= ng Event names""" global all_pmus global all_events global experimental_events + global all_events_all_models all_events =3D { "context\\-switches", "cpu\\-cycles", @@ -42,6 +44,20 @@ def LoadEvents(directory: str) -> None: # The generated directory may be the same as the input, which # causes partial json files. Ignore errors. pass + all_events_all_models =3D all_events.copy() + for root, dirs, files in os.walk(directory + ".."): + for filename in files: + if filename.endswith(".json"): + try: + for x in json.load(open(f"{root}/{filename}")): + if "EventName" in x: + all_events_all_models.add(x["EventName"]) + elif "ArchStdEvent" in x: + all_events_all_models.add(x["ArchStdEvent"]) + except json.decoder.JSONDecodeError: + # The generated directory may be the same as the input, which + # causes partial json files. Ignore errors. + pass =20 =20 def CheckPmu(name: str) -> bool: @@ -64,6 +80,25 @@ def CheckEvent(name: str) -> bool: =20 return name in all_events =20 +def CheckEveryEvent(*names: str) -> None: + """Check all the events exist in at least one json file""" + global all_events_all_models + if len(all_events_all_models) =3D=3D 0: + assert len(names) =3D=3D 1, f"Cannot determine valid events in {names}" + # No events loaded so assume any event is good. + return + + for name in names: + # Remove trailing modifier. + if ':' in name: + name =3D name[:name.find(':')] + elif '/' in name: + name =3D name[:name.find('/')] + if any([name.startswith(x) for x in ['amd', 'arm', 'cpu', 'msr', 'po= wer']]): + continue + if name not in all_events_all_models: + raise Exception(f"Is {name} a named json event?") + =20 def IsExperimentalEvent(name: str) -> bool: global experimental_events @@ -403,6 +438,7 @@ class Event(Expression): =20 def __init__(self, *args: str): error =3D "" + CheckEveryEvent(*args) for name in args: if CheckEvent(name): self.name =3D _FixEscapes(name) --=20 2.52.0.158.g65b55ccf14-goog