From nobody Tue Dec 9 02:54:00 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 D7A352749DC for ; Thu, 13 Nov 2025 03:20:57 +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=1763004059; cv=none; b=IU7JVKUNzKF8OCaGb9KSshNMKd79IVCqWUxqBs7FzrPIrohvQOtPhpNQbpp+eudRQZyhljk6UPGs3wclXxR3hDl04zYIQaHWIp5vS8tM0oOAueEG8MjlT5D4TDmtdZVSsc0VkhYGaIILt8Qico22arWCAVUHZF7yiU+c9q/fgvE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763004059; c=relaxed/simple; bh=/wEuwYJacbKKFlQbisK53qhhUkEk1l0aXnBlIihbh9U=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=BY9chxIA1tVnBgwnabJUZB9WBQdvr9t/NuelbXu5Wj7PRVuwdgGD35maxWPu2Ctx91gKiGxNrlKDQJMWZXwy8NrL50Qt/5g3Ut75P/ZyDy0XyFTKrNh7PzBkyObpgoAmyZ6gNIiK7vMnzHZZ5JddBhkA/JXzCQygHqDcn/u3c4U= 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=s5LgEgwg; 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="s5LgEgwg" Received: by mail-pl1-f201.google.com with SMTP id d9443c01a7336-297b35951b7so4376115ad.3 for ; Wed, 12 Nov 2025 19:20:57 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1763004057; x=1763608857; 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=OdnvPjUnvOTc/khADHyjd22NHmjVe0GcMSDru3c6rsg=; b=s5LgEgwg7/kEdIH5YM8+it5Rd0TkC6gKEoRd6CXxxiMGJ/1veWoxHeAy0JEnUlUWWs OWwEOAjODbhxImWB6Dm8NGwojfhls5S+sLpDXZXstowiX0QYilj+36HVxIX5OQ/2ABfJ 8z8q+v0lj9p1+loNQ1ppwmpzqsDIa4GFHPOFi7cbgE0U154z+sKOoFM64s3CVeR0ZIdg wdq+8hI4YaBpU6abm6O1Znz/4bgLzW0T9GkEvQPZSNd0iHTF8seLapX63HmvyVlWE+R8 x8GFwQPW2ZdPb9x+n4Gvq75tSrfo2RKuQTdiwENPCW6c9Kly/PblI3TfvlGXHW+BXgCV OqWw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1763004057; x=1763608857; 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=OdnvPjUnvOTc/khADHyjd22NHmjVe0GcMSDru3c6rsg=; b=DCiQOz/5ICCgckqRlxV27l3SkqeFqe6Qj7ETBPIlGlt7tIWuT4Lrm25/+BthDt4rFA loPZyUXvr2O+99tickk2lPjaztOLN4xwX3yirBOyCbIq2jXpyrlZVtBb4IN1wwVpOqWS WY19VH1GZfnvYI3yCyBStNZvmMLFCBE597KJTjIPx1oC86DKkd12tvVodvvrNtusshYt yDZXdOOOtnWVCfpJ0jKPsFBA6C8bzMKGsoPGtNjrxAGKPzW5Qr66ulC+9OFL42C7KjUz +yQK7cAdEMr32JhqzhMNg6pWJjtIkOjFdJnV1BVGhebOlmFHzKBAsy1ERAbf38/pP+YG rFrA== X-Forwarded-Encrypted: i=1; AJvYcCWcETQgqqhNsfEZVF+XpUepikw751iO+ank5cM7AveJUVeQ3ELgUo0nj9/UIru1nwfcohxgqgvokEAykwA=@vger.kernel.org X-Gm-Message-State: AOJu0YybjT0Og9CESr8JIiGhlYgUhXX1m0Ty3hp0u3Ae7l11DeLR1Fod WLyVFEkaZ3jiaZjwEpz4PMV7BaFahOI8BmsY3sFiPBUy+jVM4UoIvxxJjuTJy3Q9LVNI9givTKz bwjBwwfrolw== X-Google-Smtp-Source: AGHT+IENUSd+lkjoZsq3X/mgYxckQizMTyTN+FLUqohdc7ToQ3zhL9b20/x+B5CLRvZiyi/W8aKKHcX7dAct X-Received: from dybli13.prod.google.com ([2002:a05:7301:128d:b0:2a4:7052:5652]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a17:903:3c46:b0:295:560a:e474 with SMTP id d9443c01a7336-2984edacbedmr63481055ad.32.1763004057211; Wed, 12 Nov 2025 19:20:57 -0800 (PST) Date: Wed, 12 Nov 2025 19:19:49 -0800 In-Reply-To: <20251113032040.1994090-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: <20251113032040.1994090-1-irogers@google.com> X-Mailer: git-send-email 2.51.2.1041.gc1ab5b90ca-goog Message-ID: <20251113032040.1994090-2-irogers@google.com> Subject: [PATCH v8 01/52] 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 989c56d4a23f..0918afe5c009 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.51.2.1041.gc1ab5b90ca-goog From nobody Tue Dec 9 02:54:00 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 9EE6D2882CE for ; Thu, 13 Nov 2025 03:20:59 +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=1763004061; cv=none; b=ugieS5bX1iq3NIdVmH1krSjMfHnY4fG3LalmSHBU2W213Bf+u+eY38w7tsem+43aMU/1D4Npc56ytMPgCyhvnlydByrJvClkKJa+s98pmp7QFVZR56fq2JYAdxJyi7YFFA2x2xN4YNnBtwcxZs7xX8Ch+CN4WJ4HeskKbSLMdI0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763004061; c=relaxed/simple; bh=fjbZFVZ9kzMDzkzeahbLVTlZyu+IhPBVWCZ/lkymL2g=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=RSbCuL57trdpa4y969I/hwtDoNJ+lWb0VCj11Ts2Tibn9zbJUYcLNVPwR4av16H/lDsZjPdLj6gmEjG1WrpiyHsibEOrlHexY1WH1jDNTS6zICB6GORUrwPd48oUYlL/KusVKx2NbJhs/lzx7E55F7gRmG9/rg2aiJcNrX9L9oo= 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=Fn9tMqBt; 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="Fn9tMqBt" Received: by mail-pl1-f202.google.com with SMTP id d9443c01a7336-29845b18d1aso4336825ad.1 for ; Wed, 12 Nov 2025 19:20:59 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1763004059; x=1763608859; 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=Yus/JHJRfdxmiJc2DFKCHcb270q3oFWZc29urA1fcyc=; b=Fn9tMqBtSEop8xGyN+AnsCvnbtMKnTW1trD11CVCt3z+PVygOH4SM5eSlO7N2Gi/ZA lD4GTOJkFoUiTAykU7+6sgx9KmCemHY7j0QRDE55wboGhAFQvt6reZZsN71xNPlqlyeR pEVTi26cFGmeuTRoE4uOaeRw2gBucAwANVAL67BLYkryu+AMa2DJgF/JTkXlx/GiiM5L wVL9V/gm21tMqyLu2tYklgFTJS6ytqB5npdOOez1LtJwdgccYRo/V0fTnW6HPJjPFr+9 qGM5TLtus2EGfZJF8VDPnAGrrtYrjqPAaCJitn7lcpltmLftPVdgjbas7Hdxcqy8mfnZ nHUA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1763004059; x=1763608859; 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=Yus/JHJRfdxmiJc2DFKCHcb270q3oFWZc29urA1fcyc=; b=QXwD5WGz82ufEI+GeI+bUccC5jfgHLwWlsmLGTwyPdftA3/j+Kg/ldozCStTppEJEf ZYTTj1znqhhCFdcQTdR3KYtFJFSbPt2vb14PWt8elcGC0nyniBN6dBNG5I7v+7Hqe70a C9T/5gMpyVn8d6xEI+au4rliims5GsFcXVX2yyyXCjJWbf6MzB2D/xvhZtbO3tMgP7Lc Z53/CceGAAfHiyFwT5S+7eeM1LxrFjGzEo0cCuuIhoYGJbjRbTt29hIZJQMgcQGRxWXv k4qaaxcSqQ58z3ohJ2f2IDR6UEEQjLEOP8EEluaypyDMvm0/jusfYNR0IF5teiEq/vWc gFlw== X-Forwarded-Encrypted: i=1; AJvYcCV/b//FINezIlZi0viorwQ8sCLXvKYQ5cMsw0OWd1uKQnLCHEusrtqutqrLlECWc5BieiFT3gP6CnPOH24=@vger.kernel.org X-Gm-Message-State: AOJu0YxtX+JD7YKb/wXQvtcXJVSbbpdpn34X+dzr9pn85BcK3TWg5RTq nVUzTXFg3qBdjBN5r0mSOQqNbB/8hpidVm3qN6TIkUI/m8Qg+pKklpc03nvOHKClreC+YfiYv+c svQzvwY95Qw== X-Google-Smtp-Source: AGHT+IHOc4/ckeRmxoGeVZwtx6KFPt3w2ttsOfqKDRF0iQ7MW6VW8cxP/JuYnx3/yzVmxD61DqaDDrtvcmRj X-Received: from dlbrp11.prod.google.com ([2002:a05:7022:160b:b0:119:78ff:fe11]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a17:902:d2cf:b0:27e:e55f:c6c3 with SMTP id d9443c01a7336-2984ede3affmr67609405ad.55.1763004058907; Wed, 12 Nov 2025 19:20:58 -0800 (PST) Date: Wed, 12 Nov 2025 19:19:50 -0800 In-Reply-To: <20251113032040.1994090-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: <20251113032040.1994090-1-irogers@google.com> X-Mailer: git-send-email 2.51.2.1041.gc1ab5b90ca-goog Message-ID: <20251113032040.1994090-3-irogers@google.com> Subject: [PATCH v8 02/52] 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.51.2.1041.gc1ab5b90ca-goog From nobody Tue Dec 9 02:54:00 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 8722D288515 for ; Thu, 13 Nov 2025 03:21:01 +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=1763004062; cv=none; b=WuHJ5/KP9f1yXQUAiuUV6jp39cpee6D+J4IvtyEXOgIDx6xJc7T9xOdpiJopsSwqQqSzQOCZ/k7r0InKwBdXJxfAcFKwBMdTAMzlgxi6QnPbFuotMrzPwji69IwbvBnhmO3LqYBtV2OvHHzwBjDR9wKFb0IJpWxLsKq+xVkuVpU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763004062; c=relaxed/simple; bh=eC58kngvKnZBaxpuxmabHi5Z7uj3JfvVXlXN6Lqlu4g=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=FmjhA7JxzxmarN2fvqi9XAoIvTu31XXNWNEJebPVRo8ztTONyn2rOSWN/QI/2f3xnh35iAgXpQCB8O5wga01pE26bJK9IPSzGWcqPRfvz2ZBAHT3RdWafGCRODw9GaaqtEPLExrVcmGsh4NL/sh2MhLUhaSrbLH9iwzNVdQqrb0= 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=F24r1SzR; 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="F24r1SzR" Received: by mail-pl1-f201.google.com with SMTP id d9443c01a7336-2956cdcdc17so3954575ad.3 for ; Wed, 12 Nov 2025 19:21:01 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1763004061; x=1763608861; 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=TvhFYOBpTW9GV2iBS0jKxxq9+qzprLqMkGzjNH24eUI=; b=F24r1SzR2ivGymGaLrYmp64zJAw+rd7+7o1Qny7YT6WkHyMGxDtFwkcxMaYuY7GVDY D8lwKz/UA+4kv1pthJPTYhS4CTPOhfh74CcaoJsTyM6+CydG6jQM0ig0ws7HcH62xIFH MhcRrcBtw6RZQzXbCsy9bPumaptovuoGyyqdfiVNjDP2yrx9yIQC+kV2W9Gt1LCag2fE ttCmtLFRhnB1VOBJLQk/39HU+sq1HIGOfppDIOj+d33bSTdF8ifI6lehWCL+cpgCOdrn ZtneOpqZemyWKgK7G4D9QeaD1Zh4TDwz0LJL20InPlR44DyXsZ79dp3z3aKkewyMlfTP 7lDA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1763004061; x=1763608861; 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=TvhFYOBpTW9GV2iBS0jKxxq9+qzprLqMkGzjNH24eUI=; b=na/UNiv9XyRVWJZ9ZUVPExJy6SXZqPvfjP5vl9TAFZ79qtzcDlmXyo11mmNdlB3VfY gzL/RC6QUhMjN4R58oUImBToxU/zHko6nwkiFzs6WLzokJLOg8rUOb4xFUk6tRw7MiBa vV5XhFSUZC6lKMcNwCFUWxEu3M2qWjuTu3KjjQMseWKre4TuQ3ADtxWVgnm8ENV2KkU7 bCcxVhC4+jtc3oQBxGQtV01jmar9HD1aefElG0LhpifX2VQOX8K+m+c5KYFpmPLiQKKy r8jnLfKex3QHDb0vxcRE1x5tHki2gFii97bcV3uifv3jmlHP+nCt5+OpY4kmvsV6fC/K pCKQ== X-Forwarded-Encrypted: i=1; AJvYcCXYLkqhATzyjCqKIQpBXHLIRscrZyg32IbaQK441AsR8XYrMTHrAyiQQlYtWigh3W/AdzKwhwgqpNR9MHU=@vger.kernel.org X-Gm-Message-State: AOJu0YwEJGpQmSG3R/0OOfNxtpZImNoTJMr3M9najIEvuBNUlnWjXHds YT1heXvGSXeru2tYN42xCjm6XrG5wWnQfEQKJlpYBe1FZXO7xGI/ReB+YF1KV2awh3mNsOaX1yW tkmb0Rt3O9w== X-Google-Smtp-Source: AGHT+IF6MRNDBzUAfgeIQSurBAUjDMymTf+Vm3CyNpHhZNgx7Z5nQLvJUxcRg+7wkxcO5+WTiA3qrehN0Tsy X-Received: from dlbvv20.prod.google.com ([2002:a05:7022:5f14:b0:119:c913:cce9]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a17:902:e847:b0:297:d6c2:d06 with SMTP id d9443c01a7336-2984ed34d80mr73166115ad.20.1763004060804; Wed, 12 Nov 2025 19:21:00 -0800 (PST) Date: Wed, 12 Nov 2025 19:19:51 -0800 In-Reply-To: <20251113032040.1994090-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: <20251113032040.1994090-1-irogers@google.com> X-Mailer: git-send-email 2.51.2.1041.gc1ab5b90ca-goog Message-ID: <20251113032040.1994090-4-irogers@google.com> Subject: [PATCH v8 03/52] 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.51.2.1041.gc1ab5b90ca-goog From nobody Tue Dec 9 02:54:00 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 322A72BEFF3 for ; Thu, 13 Nov 2025 03:21:03 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.202 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763004064; cv=none; b=JYOMkFs3OkKYBIh15beqlXFkjFnQhcKUeSyK14d+t4JcdwurmZfw7UjO+V8kg4Szigm9usZB5dxdCcQ2vFXRIY3q9/rzhXLGlTInTYgyjHn8mN1ZVSicRZaFCqvcpF0sh75ZOJmCXrHgFmJQEYOOaFVymEFe62G3fMnRO54x5sg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763004064; c=relaxed/simple; bh=tYsowJQC3XmZaz5ErIOGUojnYFS6/SkntpcCg4rFgo0=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=jEhF6U1bsqbFyaUdQvSYs5CCr8/7X3HtInV1ikSAtVZXkHyKHjpmuSy/8U4qnq2ky0Gyp3eV+QYHYx+Q1f3P1qfCRp07Eo0Wlr3lMMI3Zxera6g7Jo06IRsFHtHLsxsjGIKcQ+s7gv38mGk76D8++qWR4yh9FW0HD9nKxDAeeTg= 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=oFpDxLJ5; 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="oFpDxLJ5" Received: by mail-pl1-f202.google.com with SMTP id d9443c01a7336-2955555f73dso3099795ad.0 for ; Wed, 12 Nov 2025 19:21:03 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1763004063; x=1763608863; 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=MFgvesH+kTyveYGZlQiv6HZpbvhsLLX1RvQTQqUiK+A=; b=oFpDxLJ5oYnkzTKgURYMDND6WXpyXycqLZc44AB5lKBAuFuEnOwpXQ+nqV5X/uZKvH WFnufcRg2h1QyF29b0RY6JzqJbvZzQRZ1p6rnNJJgjR2+vo9lSEhWvfJaDbzNQAe5/aS uXg4FOpARDlN2QRs+C+pWW+DyY2Bvj8CR+GCAuWEqjtyceD+eNVtK7Gi/OyZPlxgKkrx pAP55U0FIioKTR2KZXWUAwUlsr3xS96ekIm5YR+Wyb7qKhR36nB3EjPt+4xDITTZ/e9F J5LJrq895NEDgwJi0st8xKqONGp+0M8w7TfIEq+W/0md+eU1ocxAKXNBzyGAn3GMOzn/ fkBg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1763004063; x=1763608863; 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=MFgvesH+kTyveYGZlQiv6HZpbvhsLLX1RvQTQqUiK+A=; b=i+3KJYBp2yd2rnbW4/QylDNlq04uEyxMRIT+CRoZhaYOWI4KMyAr1PIvjNgDjk167F 62Sq50bCa6khhKz4GAHD/DvbdxszSTUIwPlZ2UWdK2Hatnnmir639I5KUxqsuKPC72SZ /D5FjGM/x4lq0zUnbNftXGo7mCGfx+OY3A6YpoM6t1bo8FHr6KOP0MBdeO4wBk8kSp/a SIB+WprzN30NAm9unM92uBSVYAm0vJCv6gbXtDVQonWPKvECIN424G6Ik/1ZMqIijtL8 rRVpjDu+1+gnL8zKhZAAUx/gbK8vptLU6+F/JVE3JKUZY8ZqRqOiWRgjU+ZGxw/eC6zH FOAw== X-Forwarded-Encrypted: i=1; AJvYcCWJN+VnWvUHdCsoeamd+nuacEZrjKNwcuxcgVpv4ZdtU0NucmPp3nH2eAb01xybAVRKZN/vEueTjlfSf6A=@vger.kernel.org X-Gm-Message-State: AOJu0YzggezUnYMFYTx/Ab+aeMVxFjLy5ISs8+dhnOqLtmjx0OPW4qkC D4UVvcUJ4Ncs0U/ao696pag2umebzYhQZmm7oIkhh0Ppf0pz9+jV1IChu+qlyvs6Y+5adIOcbIF BFnWfTWQdDg== X-Google-Smtp-Source: AGHT+IGlhJYGQ3CNKn2dsb3mcAqgi6aTk5XGGTBtc5HoSql/Tn+WinTVMANEpovmiHc8WXVQH6mRoOwsyhC6 X-Received: from dycry9.prod.google.com ([2002:a05:7301:1009:b0:2a4:791c:9e95]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a17:903:1c7:b0:267:f7bc:673c with SMTP id d9443c01a7336-2984edccae7mr65593405ad.44.1763004062470; Wed, 12 Nov 2025 19:21:02 -0800 (PST) Date: Wed, 12 Nov 2025 19:19:52 -0800 In-Reply-To: <20251113032040.1994090-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: <20251113032040.1994090-1-irogers@google.com> X-Mailer: git-send-email 2.51.2.1041.gc1ab5b90ca-goog Message-ID: <20251113032040.1994090-5-irogers@google.com> Subject: [PATCH v8 04/52] 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.51.2.1041.gc1ab5b90ca-goog From nobody Tue Dec 9 02:54:00 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 287442FD67B for ; Thu, 13 Nov 2025 03:21:04 +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=1763004066; cv=none; b=eQgS4qnohh82GoAG7Jnta+bz5n5F3m3bXxvVf3tBWCvKBjz3PK4JLv/DUZqeay/vgKqStqlyML9XCloHlkvzoK2scQbFKf73+x7Wdu6qanHrffeQVjiRlJSaNFVgilx3Le0dN7fYYmJZjP6Hxnjl0Ex6LtXQGpVAkLGTUAjJBes= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763004066; c=relaxed/simple; bh=ll39V2qdoFxHdFFwQS3a8L9s3zT2jLussMPdlxPuhUk=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=drUPhhyVyBZGYv5cWwQr7uhpc9rO2YxDlG55qEmuolLf5UwD/SHlASepVdl4jMGb6Ufz2446LsTHmqk3U0kQvlze/Y6OwwBaYCCC1OWdM+pPxFAgkuBleAE6W7g1ZRqm+KpPiJiBCgS+uf3sZrfePKQcoaIeR8PZ5cC99Q4QAgk= 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=mkDeAIH3; 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="mkDeAIH3" Received: by mail-pl1-f202.google.com with SMTP id d9443c01a7336-297e1cf9aedso10152825ad.2 for ; Wed, 12 Nov 2025 19:21:04 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1763004064; x=1763608864; 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=CXTurUZpdKg+xkGscaUyPXmPr0z9dOgdUTkRa+Mc/0U=; b=mkDeAIH3P8quIpNAuJMrD0LkXarOL+UDVqFFQmO7BOGYXfPo5PIHMhrec0zIOFAIVh FDUwH2bj6mhhzHH+QdThVu883n5rd59RbxYLXC7V+VsHW3pt5P1MYP7ENd3DSfnkFKuD tQIN2L6JAg/spK45oCjg55/sPF2QMIvg/XIB6rFTWe/AyOpN7IDTV7d+CaeflAM/dbFg h6Qqx8Teavb//hLJfGgZVrvbrrILtq1imHPqbKPpaWs4QjHWoXWjaKHhRmKp/iWeQl3j TbsJ9gcsgOSvEJZ/61K7p11mbwQkeX6Ifyqa8TWTHRH+f8OYWDImorJTfNuARIuixVqD E0ag== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1763004064; x=1763608864; 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=CXTurUZpdKg+xkGscaUyPXmPr0z9dOgdUTkRa+Mc/0U=; b=S0tx0dQC7JN1sXT9yNfOn3sz+QUcgXfMA+ApfEQLL/SNVK6gjbE85j7yn3mmr3YtWV 4aDX896Qj2HsSYDx9Ti3jZ8P9h1M8Ss9mqD+2yfnAvNGXo3jRVaASaQkGjahx0WodMTU +gnG9J/HvW8a9Odqny6qliYR7VcFZB+CFmSgqy1oS8HF24E+wpRfEPY6ZfRBeNqyRQSc IPYyXckFbtSRY5H6BgZZY1gYoY6FJENMdEWSm0ozdUsmfEq5QTQYEBiw2CenKrhRm3A0 L9OgHUhx6JvqtPlL2craBFAMEJfTEX/8TKYyQyBKu2tIcSPCUriDoD1A9rU9vGDrMH5G KU1Q== X-Forwarded-Encrypted: i=1; AJvYcCUjuCvoYhP6MMjRd34RFOYBWdWoqNhx/q24KtY37TXJpbbab15InqRkEHZLjkKZb79Y2IGa7xnvs2gvoTg=@vger.kernel.org X-Gm-Message-State: AOJu0Yw7vI4BbrDv9DMrfsX4gQW8j0v85nqiAgGYoMeBYhLRn6bsMBJg BslxmbqpAlMYFA2USBrEOBsSosJ81mih6bVMTZRnzV2aFzHFox+RRCwWsWgL/mkbTQ3aCW3+iLz 1lowSeTOofw== X-Google-Smtp-Source: AGHT+IEKgZ/z1qqfBO071TYiJliOPUoShccQ7ByZAFpOF3Zn5qVPoXNpZu78qaoxOaZX1PoMJsYDKwIMOxus X-Received: from dybkl22.prod.google.com ([2002:a05:7301:d16:b0:2a2:4de5:16b9]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a17:903:1b63:b0:298:4ee2:19f3 with SMTP id d9443c01a7336-2984ee21a2cmr68729945ad.49.1763004064248; Wed, 12 Nov 2025 19:21:04 -0800 (PST) Date: Wed, 12 Nov 2025 19:19:53 -0800 In-Reply-To: <20251113032040.1994090-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: <20251113032040.1994090-1-irogers@google.com> X-Mailer: git-send-email 2.51.2.1041.gc1ab5b90ca-goog Message-ID: <20251113032040.1994090-6-irogers@google.com> Subject: [PATCH v8 05/52] 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.51.2.1041.gc1ab5b90ca-goog From nobody Tue Dec 9 02:54:00 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 1D11A2FF644 for ; Thu, 13 Nov 2025 03:21:06 +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=1763004068; cv=none; b=nEFqmYSTVnSSiRZRPn4e1z3Dn3Qcueu1N8Q9Fpl8KkLQwgpxmHp4o2mVlOHq3B7bCa9dDFVpym2xXgeMT8IoNkXt+HSz4SfIoheWHz9q24dETEBaSVy+nhGVflXyu/MH81s7qA5WhOlqtzrp2Oidvaa5r9cgdAQ3/rRhm15cdGU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763004068; c=relaxed/simple; bh=ZVqmyB6OSryveZQXvh1Xn2qAe2+tRfiieZ2LkO2RQZ4=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=QrpjTDG+y9JQubrPIipKYJFnLpcAP2lZXErbJsho45b/MNjoAfVX78TLg5wlWX5IZUto2RytqlJcmV7gLSyaPmixGrM+576TGAOH8kC+KS7dUGjxRtN7hEvx/WcveNfFB75LmNLjWxz8sgNy+2c3e5iRWy9bHgjMK1PhYLHGans= 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=tco07iOb; 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="tco07iOb" Received: by mail-pl1-f202.google.com with SMTP id d9443c01a7336-2956a694b47so4202785ad.1 for ; Wed, 12 Nov 2025 19:21:06 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1763004066; x=1763608866; 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=HZtMwfOFV/dtSsF90vpb0DLWSRxMS8PqbqLlwx+J+Pg=; b=tco07iObFyGIviRj5DZVYVfgjqmgP6dkyo6jOBqtcbI3J1cExxD6ojGpBGxh74E6Qd jI/vgkcIvBWCi1fttUzb7mnJFj7bhVBwROUGzYX3TxO9wI6/71buw0Tfev1SWVKrdRZy LXvLrVfj2+uy/EQXFkNAPoDZwRODlU/TQfVGZ9eewWPhWPp34pJgDAa56kNSlrt9Z4/I oEA+Xjh2yrK+jKAvDHQ3h9yKklTWxrQ2dERE5hJjUuVe5rn55LiEQ2qJFngCfVb0C6Bg lKokffvFPtWk0pzuRmB72fAwkNqXLaXkxzidivbJJpQPJ6EV7rjRcEhK2WD4MzbOZ9Bl ZYuw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1763004066; x=1763608866; 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=HZtMwfOFV/dtSsF90vpb0DLWSRxMS8PqbqLlwx+J+Pg=; b=sHDSpOrqIDJWGuzOHdVyVigDfKRKFNEqes0gqbd/fnDfmNotukQEeVDvCfbPmBCGTV df6Q7v7tIjbW1EqBHx12xqn5rwKXLvuHdMC+7FQgilOshjdgnCjjeST7MW3fVSTvmRoV HyFMUyOZPrzzNqYeu30IeDkiPF4SAIvHhDLOo/Xjt+ZiJWzbr2CHfHQ453glzNIHmf/+ 0obhPF8Xtr8htq1vwn9xa528d5w+iEDNmJHIIJehQtZYSZK1msJU+0ZV77ylRgJziK/W rF2/kR5cTHn/gWNpe2wiOzd8wVTojxOX6i2KN55/BHCA95zHNUj/llH9K/SRe827vUST 4HhQ== X-Forwarded-Encrypted: i=1; AJvYcCUI8ozlomJ1nSoA8sbiiusrDKZsttWH6sNHFyg2stQEeRioy/p71zU6acwnfcNtYN+jRc49kbmGtz+OR5g=@vger.kernel.org X-Gm-Message-State: AOJu0YzK3+vNl7u6MW2pmG196QQjylaQ2uNBL3NcWvnGX4AVaJu2UMz0 lBax/lngjYDl0e17GH5rbaJgLe19VjTIfJw/+sWn5rqPQmQQ5Tba8NWzDVtJ9EH2A2otNwTaJU0 XkGs/QHl50g== X-Google-Smtp-Source: AGHT+IGzfXPPP0XRZIc++oBFeMBvFwsuQtL64YrTHwxXng9XAgKCleeZUqQdWE8DaNvnw3K6l1Acy5B4Jc7l X-Received: from dykh11.prod.google.com ([2002:a05:7300:570b:b0:2a4:7587:4d39]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a17:902:d54c:b0:295:56da:62a4 with SMTP id d9443c01a7336-2984ee03b56mr65760445ad.45.1763004066230; Wed, 12 Nov 2025 19:21:06 -0800 (PST) Date: Wed, 12 Nov 2025 19:19:54 -0800 In-Reply-To: <20251113032040.1994090-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: <20251113032040.1994090-1-irogers@google.com> X-Mailer: git-send-email 2.51.2.1041.gc1ab5b90ca-goog Message-ID: <20251113032040.1994090-7-irogers@google.com> Subject: [PATCH v8 06/52] 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.51.2.1041.gc1ab5b90ca-goog From nobody Tue Dec 9 02:54:00 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 C22193002C3 for ; Thu, 13 Nov 2025 03:21:08 +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=1763004070; cv=none; b=o0Pr/uOUo1tn07/4XZZLrnf5+807MwdI/G29SAvel61xHtWE/Jbn7TdDntemDed28yb7kZdzIwnRL/XCzWmhCgYLsLs/pZHBoIkrFAnvit7LIlRhqrF53sL+9nzAEWDFNf4SOEBuLGV6mOJ6BYswW/VZjtpi+N+yS5NHxM6NuN8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763004070; c=relaxed/simple; bh=T+Bc4OsVOS3h+Fg86cIAtcZE/zq9BYJ0yLEN5fPA08o=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=iRyL5r1KgC2nIRozt0GXOVbgPINEYfurk/Zv3hQwmpClchltmEIceTN5nkwIyNiWSt3IUPZ/WMEZWq1uFPhBvSLWxKazI5rdspjCl/Yy9nIUtD/vsxUcz6GB71Y1OLKc7Sty3m7z9H5cPmFmmcS3yKtPlILuKTI2gnLZGXc6KzY= 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=lkAxgWDQ; 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="lkAxgWDQ" Received: by mail-pl1-f202.google.com with SMTP id d9443c01a7336-297dabf9fd0so4710075ad.0 for ; Wed, 12 Nov 2025 19:21:08 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1763004068; x=1763608868; 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=gBfDq6eqFsQT5D4yMoogLb7F1RwV4rQJFP30ACTlIWs=; b=lkAxgWDQ8EhiEbUc6P7gFLt/SEiyjOisnIrt/UQMH8aK74ZJk69/xqgBRCPM72FYhQ cw/ZlEgKMWxcOu9gwtvpJT/X+t0DEBwt4uoazZILGK9JrnVLqoTlj/o2IbC5oMwfj4wQ 1F8xR2UsXQmrIbTIkL4zV0c0RidKuiZk0AM6BejDUkA7cmRUfzzn+fj6TlPTAKcHLsOC mZPjB5dQs8bCWdkPNxHGqBBoMDtjTv9q77NKcmNZohiKIweCsRGhsZDplLscElhyomzD zwfSN57kZGadxAwtsajNx+1eU5tqsTYHIhkanU9Go6xp/RUoF2sV2ZACIIVAv/KqprEv 7f4Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1763004068; x=1763608868; 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=gBfDq6eqFsQT5D4yMoogLb7F1RwV4rQJFP30ACTlIWs=; b=qTe3TXxFn39R+xscqYAKsYvDU5AcHEfeXPWLBrE4QzpAS/3mFL0Ra3DGPt3dHumyNf cYHXarx2NyCGmJx6rQQLH8CiDt9PJ/W83asAKxTVtJloaYjOd832QfrBtVlWbLvzxcY+ I+xmQeFuTc4WaHnw66fYiIuwJBWEhUfZVzpqoU8FeyVCNaWinkeox6AgXEjXnX5KlfME 4Ltt3rkMd6MLJAk1Bx4geg0FgqcbqD4ZPRwh00rD5vCzi21aj1LQtuiRFBUCXJWPBicf yJI7PwwUYL6PwtqfwX5KQyapewVTn9a9bfZmZcbpOZdr3ND+mhp6kHgbNEGM+BKU6rii gMCg== X-Forwarded-Encrypted: i=1; AJvYcCUWaUtroTshrDt+LA1xmUCcK+t84Pov/uCEA+65kU/x7bnly6hx/LIoWxaQwZPsBK1DKRTUG03txR8Fi10=@vger.kernel.org X-Gm-Message-State: AOJu0YxCNJzaBNRrH+rfhnsNGsnMPnkXX9Sb/e5IYCle0lqypEvAZnvE WngnQdynbVcb5DmnxracZJN4gyv/IVG3iDni41AlI1KYZrOn9ynnC8mbnTtrCUUdbPyoMS7AyjW XaVEo4/DXJw== X-Google-Smtp-Source: AGHT+IGICDwsioyeKBJpVyDXuXAso+fW9k0PVPWo+9oPf8S/CudYtjVap1hns6KrAFAPbrKTqY7lRdaY2/JJ X-Received: from dycpw12.prod.google.com ([2002:a05:7300:de4c:b0:2a4:61a6:6c]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a17:903:286:b0:295:fbc7:d282 with SMTP id d9443c01a7336-2984ed494aamr69919175ad.27.1763004068058; Wed, 12 Nov 2025 19:21:08 -0800 (PST) Date: Wed, 12 Nov 2025 19:19:55 -0800 In-Reply-To: <20251113032040.1994090-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: <20251113032040.1994090-1-irogers@google.com> X-Mailer: git-send-email 2.51.2.1041.gc1ab5b90ca-goog Message-ID: <20251113032040.1994090-8-irogers@google.com> Subject: [PATCH v8 07/52] 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.51.2.1041.gc1ab5b90ca-goog From nobody Tue Dec 9 02:54:00 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 8546B289811 for ; Thu, 13 Nov 2025 03:21: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=1763004071; cv=none; b=iOHZ5SGNy2eiF3uoAmwg06Jh0OKkOcCAlyCsQomMM9kC4P8I4VLSLHN20+NKnYOjeqEU9XNiVTkYb9YLzQsaSxljkySyJBNbxmmfS8OhaIlLPxAD07KsA7uEfAsTgA1n5unoBakj2DKe9jqwmBxbvOvBPvx+wNCN+O3WaaUtk94= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763004071; c=relaxed/simple; bh=IuI0DBDwoxo5ySbCWplL1dPTgS4OKxYpJaT94wcANoU=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=ZKaE7cScvyOHVuP9PeTVAse61YJyqiLN+99FMogD3M+X2Ie65BoDViqmwE28iMGohOjXEN5+VnHoQ+F40FU1hsdyxMDja/ihQViePyAeL1HEi/ckfb7eKTqSfI08A/nP1tPCzaX84LU7kfP5uEjue7yOP0AIEB/DX+GPGNs/ypk= 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=gP3D0K1R; 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="gP3D0K1R" Received: by mail-pl1-f202.google.com with SMTP id d9443c01a7336-297dde580c8so10724975ad.1 for ; Wed, 12 Nov 2025 19:21:10 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1763004070; x=1763608870; 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=y5goI1b2CVDlVAFfDby5CniqVJA/yvNmGYJuLu24zbE=; b=gP3D0K1RB4oLkf6kuiuf4y8xwhOmiLAVDNQ5+tmUcL2g/Va+FmRbQmnXp/IwIPGxtd ZOKvvpHYPs2ePhFUXSSQRL7kBt0fGUSrF7Vm6wSuB7BCGL46elxlUIIq7D6gNIiqrY9r gIP+7XwREV+al+8TIXPyLNyvS2iqZObOt6dyen/jxwnBc9Nc6rcN7A7fIYVwGyJf9ZO2 klsaziWYbJQJk1lAiUK6ZUDVQaZJ0Nlonw66q9EEmFpcGh6SHDqYxKBBxwouCfUczNhu EeKDKPl2tiOtIASjtm5hIgoe6l01LhuGoxfL5UyJi5qPeJsIlZkwrmmw69UvFDntbvOk BcIg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1763004070; x=1763608870; 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=y5goI1b2CVDlVAFfDby5CniqVJA/yvNmGYJuLu24zbE=; b=DvMm5gIb9UATmnHQgBIslAheYJfCep4gbXhDRvS0n5VgzfrzFerwL7CKEUd7RFbd7f PGZqNtTg81smPyhb1O0m2kPE2wb5Wf6Lx2624rADQDuQuT5NoqAOAfMLl5oGw8llXD2F sz0cdu9tlYQ3WCdwGNQU56xNuwHdeWXLt2js8NmgIP/QsulK6BLyZGBZMgBKYUiGgzpp VaWR4JDaeledBUG85PM4NP9FwW3/jLdT5klXeZNmFEhkRPZkeRlTMmhfUgoWIMRDRda8 uN8DMUNz4GKjzFntB2uUjpmB0haWBkfhTdVUD4MYMyR1YDOwFhUFSNElx2rMgF3aQ9BH ImPg== X-Forwarded-Encrypted: i=1; AJvYcCWOABFxmJlYM7d463/ODqr8CdrVeRNPislfr3jYqAqOBZ6QT6GlE7Yufe+VAJ9JYwARcbIevIGA5AZccMI=@vger.kernel.org X-Gm-Message-State: AOJu0YworaiJi5RPGiCR0OOAIVllaefikrDhU0fPxBNLKsCzHO62rYM1 6eU3q2gz9h6Hzj9xn1v5KuJl8Knco59qRfesmsDboURKoFcxixbwPVRtMAJhAZJAvqjuaTywvjJ /8wdq9rcLzg== X-Google-Smtp-Source: AGHT+IFzScfXqjEwErWjXv1s4AzfZSABbYxXa0s96vKLlASb+dEtIhbvJSQOMZbQgHT6eoxz6akNYvCtVbyU X-Received: from dycnb15.prod.google.com ([2002:a05:7301:b0f:b0:2a4:4f7b:275d]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a17:902:fc84:b0:297:dfc8:8fd with SMTP id d9443c01a7336-2984edefeeamr69482385ad.51.1763004069976; Wed, 12 Nov 2025 19:21:09 -0800 (PST) Date: Wed, 12 Nov 2025 19:19:56 -0800 In-Reply-To: <20251113032040.1994090-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: <20251113032040.1994090-1-irogers@google.com> X-Mailer: git-send-email 2.51.2.1041.gc1ab5b90ca-goog Message-ID: <20251113032040.1994090-9-irogers@google.com> Subject: [PATCH v8 08/52] 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.51.2.1041.gc1ab5b90ca-goog From nobody Tue Dec 9 02:54:00 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 C9F63301717 for ; Thu, 13 Nov 2025 03:21:12 +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=1763004074; cv=none; b=NM10/hkCpcMuM21i5CWuXtUBQ8xGgGbpKPSPObsBeMtHk6VbaP02wP8cB4dw78P3IOqPvCqX5D4fq7Df4sjasATmCa+pdokOOmQ5tgPoDLuisne0C2Qem2vhM2Qtv0LezWABX7TOJKkWjT7qIs0eMBoZxxphwGswzMRBckNkSY4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763004074; c=relaxed/simple; bh=d0Ep0VIIIs9k/3jv4T0ZT3I0MIVW8QcIX/tWtlgIghI=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=R7ZvHmej9L1XsGk6xkOBISW+EUwVl9wogP6o1mr/dws8/yInnaLoc/lm3kMBnFVLRiYZtuag8MrDC4nZdwPHwDJqcZx99ufMbgO8x1cg7hZEA4FO6L4l18ZbeZIliJzSu73Y1hHGWE8HBVv18+sla3cnPEmzbAvi73XgToSq204= 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=UGt3fbxu; 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="UGt3fbxu" Received: by mail-pl1-f202.google.com with SMTP id d9443c01a7336-29555415c09so4333025ad.0 for ; Wed, 12 Nov 2025 19:21:12 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1763004072; x=1763608872; 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=2z0t93p1I7hhdevKfjgdZ8asRVsm/YfKaf+NS7xqbWw=; b=UGt3fbxu89gb54sGORtH8nqHFQn8XaQ6dg4TFIVOCp9gSUxu3QnxrxLiF/clKr75ew 2p4DKiJXGVshQJkSp1Yb0Gj9WiQv+37DB3+9FvoTP0Obo78qUVzy9f+IgTngY7Vns9Ji 0CI64jGyVfc/Rag+m7yKtG/NuvqXUXdgqdu9OEDMIyzY0ZxZQTgicf1hPpWLVV4voeLz 2ogEile8I2c9DCCBWqgU3WPn2qIyVoM44YYCHXlwbp3/bh/r62ELzkiBuv0G0IwLIo8+ LMpKhexeBx7QFV5DlQvIycpuwGbpCSiG+eTu6quiPaKph6/3EP/EQv/l31Lqic88pywd aqYg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1763004072; x=1763608872; 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=2z0t93p1I7hhdevKfjgdZ8asRVsm/YfKaf+NS7xqbWw=; b=rmNctGl1+Mh3hgorvXYYnpu41ypvpkWGAog/VpnVKz1Iu3lwbotKZkCacqBdePv1/x svMZSVM9MoVZXPxAdnpaY2ZHZdW7M9U0h5cztzpH8vARiKUdIarN5dXo2FsVOhy3HBxe PQbuZWtMMVypv/iMFCFCr66+DZ1pmV6tdWug2BRUOyc3Uld/ngg9VwJTQrRs2Bbf+RTh 5TukHBKs/RS70F+2LLtDSh9cBkEY4A45Qbg0V062Th3Vgr4Y2RBjzuoa5DIfFNApkduF PDJGLWgx4WVw07pvhGZ02JwJaefypga2WRBKTkz5fqm0BixUuJAMEUcWUoOQTJxuGgU2 S0Gw== X-Forwarded-Encrypted: i=1; AJvYcCUsjn0L1gFpFYljUu4vNnAYES3bjvIkS4evC6qi311qK5/fx3wiG2ObgiP4SJJz3DpO19bt+G66Cz2Ao7w=@vger.kernel.org X-Gm-Message-State: AOJu0YyABkvhHPZ06EWxdTKJJI2TERlK5wnKvqlnoAa46dPWJumVYk19 Zh0u/2+vVLPrPxouyZRkrVjNnE2IcqA3vVoPQq4Hci4aVYK71trq8bA4SyEL/KDTZvU0axSZtqQ qxOAnJeLXdw== X-Google-Smtp-Source: AGHT+IHGXwP8nxSNqOZtGTpxELzvSp9/lGNgnf9Laege7IXTYMU1vrjNxTAmdYNaC59qJtJcrvWyZ+7XLRc4 X-Received: from dlbdx18.prod.google.com ([2002:a05:7022:e12:b0:119:49ca:6b96]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a17:902:cccf:b0:297:f8d9:aad7 with SMTP id d9443c01a7336-2984ede5755mr65012275ad.50.1763004071922; Wed, 12 Nov 2025 19:21:11 -0800 (PST) Date: Wed, 12 Nov 2025 19:19:57 -0800 In-Reply-To: <20251113032040.1994090-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: <20251113032040.1994090-1-irogers@google.com> X-Mailer: git-send-email 2.51.2.1041.gc1ab5b90ca-goog Message-ID: <20251113032040.1994090-10-irogers@google.com> Subject: [PATCH v8 09/52] 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.51.2.1041.gc1ab5b90ca-goog From nobody Tue Dec 9 02:54:00 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 35380302157 for ; Thu, 13 Nov 2025 03:21:14 +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=1763004075; cv=none; b=KDjUQofGQdowoY5rwONQht6W2HWASP/Uy8FYu0oxqOhYKmJfEzpnFVDL3jX6pDNVevRuBRmUTDqUeZNsvTJ6biG5mfVLfw4cwTHHacRGeSSrN3/kQOJMaLM++7CSzEZ91h/nZkoOI2aeOEkWrxj3ms1f63e36zlTPzIgVVXx+7Y= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763004075; c=relaxed/simple; bh=l8YI2kijCrvx8hpO3K53GLyELF8uGdR0pAwA2XzQtu0=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=hAo/m4wzl0fYHU0w7OBw+D/oN2FQOJAKYNbE4derGCX2mdvslzGfkWpfI2/d4wXVdy9Srlem4v9NAqru/nJ5RbIdHeNasFvwUIGeMLeXjJNXmB1ESNgYQk9wbnxDMZuxbpctw4CUSdA3wkMWsQciAJajoOewyE1WKNSY0q5Je+Q= 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=1qGVfBI3; 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="1qGVfBI3" Received: by mail-pl1-f201.google.com with SMTP id d9443c01a7336-29845b18d1aso4338685ad.1 for ; Wed, 12 Nov 2025 19:21:14 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1763004074; x=1763608874; 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=eW7d37sVo4I2qTdDjDtWxDxMAZ85R454kXJd8JyW8PM=; b=1qGVfBI3FPFW+WlwS7fCsYDuQZCmTaTbmq5au8u7vkf5Fu8NemhqWcMUECTfZi6uJW ycuRePCzWVfcv9F3Oqy2sKIxMtW63oDZ8jHUSLLqPiceeipkCaRZS4sO6hsdwE1L0+xj tfEYJizmeE+FZvptM9uBauq+dlyX4X8IS8Uw8wzUEPpq7TFCvLZy1b6+sLRgl6UoowJV WkLyOF/dG/lSJuryToQDXX/KsfoHxMC3EEyQX84p6IjVrOexSbJH89A2a4LcAfnXMDxu GxDZbzAd7MS4LEWn72QusmHOEqVhWdsQj/0g8R0Na6SKpEAZPwKCYdOt94dvukwKZwm7 nFEg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1763004074; x=1763608874; 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=eW7d37sVo4I2qTdDjDtWxDxMAZ85R454kXJd8JyW8PM=; b=PX/m2TEQiN/WSbwFJQ6JSVZF1OOU81qdoYM9sgL6UtjR04KqUPvjXmGRcRgioMO2Qb 6FnK/jR1FUsnBNo1eZlVwqjBDXIIpU9mnKnELuozqRdRByLsbgQJh3Mu2QMZi+qw4YJw nyblrnBvJCcvKVR0WhosGUWZlbUHuhr5wkQem6lXCu8qv5hM2bACtFPR7nOc8eN0fAQJ 8cJu+6GgxDcvNTdYzpoOSvsc3wN6hbxiWObG1qouii0eEcvBo1t3kvclANWRNfPJdm7K 5RT8hws+srejopQXW85Y5kHJnczc2nqj20BprUxbgB0wZMUjhO5VNzjpuzl4tkfL4JmK DLkg== X-Forwarded-Encrypted: i=1; AJvYcCXv+Jrve//dfHZJRMpZQlwuY2hIS73OYN1BWQRN79X3tOmIdQ3g53dfplgmOyd86eNHnZq5gbRnTCxYrZU=@vger.kernel.org X-Gm-Message-State: AOJu0Yy4qIVdslfCnMFlR0SjlVR1jIBjh3iwG/snnNxApfU/eVAHh01h VWm0C94yGQ9Px/ApUlxRESyOUXeXyI6/bjv+s/TEN651mM81auhgnyKynm4riHyVVXqyxaOWbzJ 81qX1oNvswg== X-Google-Smtp-Source: AGHT+IEcnTx+9eVhJEewale9PaV7e8ZMaoXfn2kM7AawOJ/bTqz1khtL99S/1RU2BLIbUDH1LiKTinAZaygK X-Received: from dybcr3.prod.google.com ([2002:a05:7300:ac83:b0:2a4:75f7:2135]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a17:903:3b8b:b0:294:f711:baa with SMTP id d9443c01a7336-2984ed2b6e3mr66196885ad.2.1763004073616; Wed, 12 Nov 2025 19:21:13 -0800 (PST) Date: Wed, 12 Nov 2025 19:19:58 -0800 In-Reply-To: <20251113032040.1994090-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: <20251113032040.1994090-1-irogers@google.com> X-Mailer: git-send-email 2.51.2.1041.gc1ab5b90ca-goog Message-ID: <20251113032040.1994090-11-irogers@google.com> Subject: [PATCH v8 10/52] 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.51.2.1041.gc1ab5b90ca-goog From nobody Tue Dec 9 02:54:00 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 11209302CDF for ; Thu, 13 Nov 2025 03:21:15 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763004077; cv=none; b=kGNcXA7j7iGvz5pK6wAChAPfDpNzo4GxIRBpzX2ZmMITd8n67sTnooUk6yIybV4jDWuyXLx3R5TMWK5b4t9NNjY+iRTibtNQzdo2abn9nfEfwl/0c+Jjnxhfv+WG2NGTWym8XddiIUOFXVyR7Cjn768SdYvuQGLxLDbucTM9D7o= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763004077; c=relaxed/simple; bh=yDeXFZG51yzDlxaPVRiCkHMuq6NwJWFuqov57GFMzno=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=Raf697Z4+WIn1gbQ2ftwjHraOgorOJN8nNv9oIK56jrzuDh7/4IpeMY2GbiyM66euudV4m1RcTkfNbHCW6fzonoh0VzRrEo28wV4hBYK+I4E6dphcoa9wSr+0mW/AiClqPH7yOWgqsV8ct8U9dr68pI8Ei1Gr5QuS5zN5FBbOUo= 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=ExjPsz2z; 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="ExjPsz2z" Received: by mail-pl1-f201.google.com with SMTP id d9443c01a7336-29809acd049so4381935ad.3 for ; Wed, 12 Nov 2025 19:21:15 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1763004075; x=1763608875; 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=FwhHtQMJyZJae9JuQsiwiPN95qwIsp6WdrpruedYQdo=; b=ExjPsz2zXBmSBoJBgdTof4wrf+wn7Oht4BB+H8VqQmrW1dNGePxJ42i8xbPHH/QD+P jVc+iT58jkGpNHWFKeodicpOZKNH31aYHDKb8+me3Ntxi+QQt/5AHc+m14MHMmq8JHbG tY0+Ky9eB06JXvcW2qgRRgfKBOzOXySqwdgKe/asDVb9Z7dc7r0P3Etqy84eOY3Z92X7 oRzD/KWErTMC9VOkPEEG35OaB/IEdoYyi3FX7hgA3ntYjMmHidJFv/W2iplMRFvH3PRs p4pSRB4xclsKD5qiQjoM/rGeV13SuyW8c2/1jkD5NrCgHRORftCWBtM+HPOU11etctb9 BMXg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1763004075; x=1763608875; 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=FwhHtQMJyZJae9JuQsiwiPN95qwIsp6WdrpruedYQdo=; b=rU2wHVz065HKTZKBWp+OeP5r+UmkMuP7Kr5Rde5ebwTI1Um3aOPmW9dEEinwG+uguz c9stQJLI66kSLWRSd9pzUZyOE9JNPnZB3OqViA36naRxXwDikZpUf47NkknHdlqbDYnK 4SbjCT5O2rgbdzESKh86Kjla03N+h7ay5ufWVnKNqCuR7t3ybQ85Rfm5uBqOdgh0dWWU pBm1CZpT6ofwEfMJ65mKllbWt3A+xKPQaVh0eMXaVHiGkSCpE2v6y9FCf8Wc7srCBAae EttE4b5d7+c+m8sd1Gd0m93vN71h68DHuaXBYlAAPZvnIAWQBDgxQYC3u7kAVKn4otIj 7kPA== X-Forwarded-Encrypted: i=1; AJvYcCUgBNd9w1Leevhc0746sRMHccO8P5hdPBYPsK+jqVoTFvnkqUgnGDKcR4a+zWd2H0QWyjcKwEAyFYMN4kc=@vger.kernel.org X-Gm-Message-State: AOJu0YzTxhV917r+sbhdP0JOmU6VGJHVAnXCvmpNdI2hawZnRuPdpnx5 u/BD3MtolnfQvGgjpAC3qXciv2K6Zqn+dwY6wQA2nN8gP1RLLB8K5rwbrAsuexCL4TKyvLnhzI7 bibV8+/tupw== X-Google-Smtp-Source: AGHT+IFwGIj1+cj2yhJQvQD1NnIhcTtMbXbLThWbNJ5a3cK+/tc4OzYkLuHsnwjeFVX6nS8eP1CgcwePVkNW X-Received: from dlqq42.prod.google.com ([2002:a05:7022:63aa:b0:119:c6ec:cc42]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a17:903:2f88:b0:274:5030:2906 with SMTP id d9443c01a7336-2984edcd3a1mr68096335ad.46.1763004075336; Wed, 12 Nov 2025 19:21:15 -0800 (PST) Date: Wed, 12 Nov 2025 19:19:59 -0800 In-Reply-To: <20251113032040.1994090-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: <20251113032040.1994090-1-irogers@google.com> X-Mailer: git-send-email 2.51.2.1041.gc1ab5b90ca-goog Message-ID: <20251113032040.1994090-12-irogers@google.com> Subject: [PATCH v8 11/52] 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.51.2.1041.gc1ab5b90ca-goog From nobody Tue Dec 9 02:54:00 2025 Received: from mail-pj1-f74.google.com (mail-pj1-f74.google.com [209.85.216.74]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 499EA2989B7 for ; Thu, 13 Nov 2025 03:21:18 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.74 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763004079; cv=none; b=D5k3BTzzxrrUoZp2AiTOnOU0RaYliNWvNnUTCo1yfOKitNU/q/noIc5KLUOzCTyd5Rvy8oRvlLKgBHBg+2CNfExPF5bk/P269MkNECxAgqioSKsgqWrJu00eRjrM9mWozJu/Dpe9RE/zamXLMgCi7UbXq17k9nzTKzlEDXJ52u4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763004079; c=relaxed/simple; bh=S1p+yEIWKmlOuwkc2RFrG5ZPvCF6Q3F5ykdkFTvIhxs=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=oZW10t6PamjXlEiYzQrsugkJRKgVlwxdAnwvVP4wCBxnIqRD4tLL97vcJkyiCttkYGwAXEOjuQvKFKUjNATRNvenihrf5sVr5pNObFrDC0yVfjdoOXaO3ZH0HcjPzl9TK9e5wpfRTn9uf0603jt0D5d0iINLFnlUgmpkgjXnwmk= 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=VHBE/nU/; arc=none smtp.client-ip=209.85.216.74 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--irogers.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="VHBE/nU/" Received: by mail-pj1-f74.google.com with SMTP id 98e67ed59e1d1-34378c914b4so533797a91.1 for ; Wed, 12 Nov 2025 19:21:18 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1763004078; x=1763608878; 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=6GoM4uSXCA6CGzeSczR6SGCvajUfHPXwjqqeVHJsq28=; b=VHBE/nU/fumzGNLpVVnIqbqfXZrNE5XGP/B56ESbRYjeuOMaORimlR8xuzCvH+iEhL RAd98LVAwYP8twpoc9lE6POermFAEyVr7L6ElnCdahO0kQhLJZJETNpLZSyWEbd9RhGn Mo1KiPfriLldwci5Tyg7grTeobWTSpj4kj0wIInWzIU+6snz+jTa4odGs/iHq7ldBAJA T0IlIi4mMdoafIfcRjQssCEVuT/2hgpHemR7BcxdxR4L2SGN1nw0bz/eRBc1EeJMPjKA ZXIORqZJALkwoaK/eB/6LEjzMiZ8b45xfJEbmCgEsZHrOyFH7JkUCSfvx35edKMWes1w X+0Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1763004078; x=1763608878; 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=6GoM4uSXCA6CGzeSczR6SGCvajUfHPXwjqqeVHJsq28=; b=Kb0odOXoiKKtLSjor17tt5gcFhbqXvgvw5WOLQ7FTzxOdyP6v1/xnRIDNslhGIvCup vEPvb6zo98oztW+hMG7RF2PYf7D8+8iBCEHY9RnZ4GkfNuK5bXPfC+3zMBuWX9f8ODOe YK0ynLAFuhCstMqQQHzzmQLzCDyeDd83QklImB98N73hUiA4p+e6ODG0FuZId8C+kKbW 1VcTqu3vSwqfUdQnulAU1FT71vOcb/UchurEradUJVaTKbv1VB1JJSayrekT/YXpgOUE oeM/poETJxXmJYRyQbwv8HqCBRDPb0fi2ErbZdImTiqmBwcENtzRAKE/PpYOJZfnCmGu /4Lg== X-Forwarded-Encrypted: i=1; AJvYcCWV8ldnWhhFn8BN2dHvjhiMwwIpnyJq4PPMAlzlk3aAY069UMFqm49W6yXEw8Yx61e0v5HGK2TmECjkyZ8=@vger.kernel.org X-Gm-Message-State: AOJu0YyuJmm4zUKChbefz1ArT0Rs8IKL0x6zVxsRrEwONd/lbUaFa5E0 ENqZGGzGP8bhPF6AF+myLz41bS58i5citGXZcqn7TKFJUDFJDj7QYwu/7ED5ufZIyGI+2MxkAEx /yxxt4yC3/A== X-Google-Smtp-Source: AGHT+IG5nBgQyb0tQ5Wgrbm72paCCXQH17KCARhUYhe9s1wIJyHK5FZWjUO47LlQ9KaCyQ2iGhz9H5qrVSjd X-Received: from pjnj12.prod.google.com ([2002:a17:90a:840c:b0:340:4910:738f]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a17:90b:1646:b0:32b:baaa:21b0 with SMTP id 98e67ed59e1d1-343dde1030cmr6855910a91.6.1763004077385; Wed, 12 Nov 2025 19:21:17 -0800 (PST) Date: Wed, 12 Nov 2025 19:20:00 -0800 In-Reply-To: <20251113032040.1994090-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: <20251113032040.1994090-1-irogers@google.com> X-Mailer: git-send-email 2.51.2.1041.gc1ab5b90ca-goog Message-ID: <20251113032040.1994090-13-irogers@google.com> Subject: [PATCH v8 12/52] 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.51.2.1041.gc1ab5b90ca-goog From nobody Tue Dec 9 02:54:00 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 40C07305971 for ; Thu, 13 Nov 2025 03:21:20 +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=1763004081; cv=none; b=qrFV6yzJKzugE45KOkJjS0/leJffVZaeyp39Tvz8vfjAC/uiwhbWZ0ron5nilTmnz7NcDnbpuPf64I2tWVEG4uc1E6zcFRw6Not4QejMRKUZRqfoJCTVBCsFOe+QKz7Gor8Pa4v96w+t6O97eXZsLI2a11dbY4ocgXuBqY4Bbro= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763004081; c=relaxed/simple; bh=kTSeWssFGmTGZ1Polgv0aO7sDMThC57D+7hdqUdkjJg=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=nRhoJZz00yDlwOGhPuXfIajWGJoyOOKX+EJd+JU4HGr1FvneT2Cednhc67+uXYQcwxBYO2PMaDCRrvAfIiWSUg6FX3chNdRHIHOWLNWHZ48UrlYm4lqsYIuS0qi9FwXQILcgiTIk1qgB7PqcacbyxbebmQjmIIcPTkPbs3jdi/s= 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=kvRZsLHQ; 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="kvRZsLHQ" Received: by mail-pl1-f201.google.com with SMTP id d9443c01a7336-297e5a18652so4456015ad.1 for ; Wed, 12 Nov 2025 19:21:20 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1763004079; x=1763608879; 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=H2lkJO2i8yVSvB4I6sd3B98h8zXra8Hjl0iYqDuXmo4=; b=kvRZsLHQMJnDehdi6wpwZW7m4FRFdDxvl5tcgMt91ieXOtCWtc90OrRnwzf0Bpt6Yy iY+NqLh5sD0FFYe261DsaFDvWOnDhBzlOu4Ef1JWUrNOEYw5Uw4lKta3Qi9Trc4TmFFl ETpoS0NX/aMUQWkdC/5ncrm8erTDz7i08jtf7EHtBVTTRGSX7Wp53BYNkyB3t7bxfq7z 4w9ldgZ+COFYDzz8iWDNR1DNKRMsdA+FZkCNaf9HIspzsQkTYsMc4ck9XxBp3WonqIWZ oNBYS7TOdUr5T1Naw2ly7yAjYPSEJX93BFcDgHDcnjsRCHytB32zSPc5tZ8bm0AuVKjs eHGQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1763004079; x=1763608879; 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=H2lkJO2i8yVSvB4I6sd3B98h8zXra8Hjl0iYqDuXmo4=; b=ikdy6Gw3DP0KsRZ/cXLgBZaLt+Adc6Pop9ohLVxYnwJjvcIdC8Ji9hOsS53tpdxnhw P7CLGLd3WnNR/ZuccPugNM7xitERB7dN6UHt7aOCFHW+tIXnVyYPqhaPqN0hEv4t7qtC LxhUPaFPkGh2EfOGpuAn1wEI3kbgA470cZnVRa60Hx5d6IWMhLnfP1NjJTYFAIsSTepM DjXQBaO23NHcDUD11P2ARC20768TpgV33iBNlX6gq9KCDNDvidfz6wQY8hVZ17/c6YeX LwRjgoOPPlLKKfaB0cGQ6hDJ0TvQN5O10g38ylDi8Yqi6IxT8j5H/6Uf6fyk5f9aUepG 1trw== X-Forwarded-Encrypted: i=1; AJvYcCVwS2n0/zkBqhQJ/50+7BZSJitjOh+rEq7JHnBBcKd4r+ifoB0cRYvy3G3XnYXTtZzZGzISOxHZkN5Mp+Q=@vger.kernel.org X-Gm-Message-State: AOJu0YzuYY6BltiZOmN1Icus35QFVfnMdOjEVl6k5t3LPAf23iYBWWoZ WmBXngBAbg+/sH0ET4PWwUmTpe6dta83VregyO5HrrmPruKzkQkADctTcMZUOCTPnsCAmKWRJWA gzeVSwKO5mQ== X-Google-Smtp-Source: AGHT+IF2y1yRQzK6iOvT364txR0m+E3gj1Xcj36wWeMiOotaL0ega0TpcM8wI97xCH4IKqmDZsUZmkoWDeaD X-Received: from dycnm13.prod.google.com ([2002:a05:7300:d18d:b0:2a2:367e:4efc]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a17:902:ce08:b0:295:3d5d:fe57 with SMTP id d9443c01a7336-2984ed3548amr68365585ad.21.1763004079446; Wed, 12 Nov 2025 19:21:19 -0800 (PST) Date: Wed, 12 Nov 2025 19:20:01 -0800 In-Reply-To: <20251113032040.1994090-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: <20251113032040.1994090-1-irogers@google.com> X-Mailer: git-send-email 2.51.2.1041.gc1ab5b90ca-goog Message-ID: <20251113032040.1994090-14-irogers@google.com> Subject: [PATCH v8 13/52] 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 afeb4e4a8a31..5c35ff9cca01 100644 --- a/tools/perf/Makefile.perf +++ b/tools/perf/Makefile.perf @@ -1279,6 +1279,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.51.2.1041.gc1ab5b90ca-goog From nobody Tue Dec 9 02:54:00 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 1A99F306B2C for ; Thu, 13 Nov 2025 03:21:21 +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=1763004083; cv=none; b=ioeZNoyyQuBkWoq0KQu2N3LvjqYm+SsaNli/LkIdJLuOicuhM1ENA3Cg0FpzAIFm2xvyBvUsdP49sNFR2oMq/ohgh6R/cy4JoHa+d99d94vSJF/Gt1i7NHZyQY9nhA8dvQpFyWN4GbUQh7qL115JBPeN8wGlgFw39fkhahM1Xc0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763004083; c=relaxed/simple; bh=mugHELPcNnkPEsOWzMwpAbRwOxX71MGXDtzzWHnyVww=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=MD3r2h6fSRw/G/HJtldVMXwMrZql6bvF3d5msX4ORq7qsQhJ+HSOVuHdHLjE3Kl9zfetqEpdXDMhLWJ/ZaoJhZRJCrf9wD5Wh1fRCC8z4u7J6JE0iV8ej6eIPGMwCq7KAJurwN/IWSR56nmMLlKdJ30IQ5uu9aaPsL5DPMm80Ag= 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=WdsqlUFn; 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="WdsqlUFn" Received: by mail-pl1-f202.google.com with SMTP id d9443c01a7336-2958c80fcabso9434505ad.0 for ; Wed, 12 Nov 2025 19:21:21 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1763004081; x=1763608881; 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=8IzU/LLG4PCQCev+2/waDGv979JbQDw2dJFOYSyWZqM=; b=WdsqlUFnw/6z5qFUWa9yPpxv5IvNkRACcgxwqcqZfKgeaksnnJC7unaalxjfRPsDrU H9Qo01aR232ZIaEdYwpo+dHoNfQbxNXdUtkWByAuwbDv48w6sIWsayJGnjVNsKvWjeUP A6/YlAL5PmqIJVPgbglca3gNeeMuhQNb8Qnku88xx6MqLtnSlYVLiC5g2euADUFhHiXX tRLwlR9patjmU0DHFXpaEN4Z/7YcPQaq/IVoBOooX8AdE5h2Pl2D/6ae+mna9DUacHYB GGgCJuylMyhyiNgiPaJsoVkL2pDXe2z8nOM8YzaTl3+RjymslGzqOceOYoHxLNwRZhjn KTGg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1763004081; x=1763608881; 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=8IzU/LLG4PCQCev+2/waDGv979JbQDw2dJFOYSyWZqM=; b=nmGKtzr8X9bgGT137nog4t8C922+Wz6+EDZYeiHAuAa7twrfgj0ZtjfXBP7XEqPF5u b4IAcKc6UazU6Lq15c498F6Qwtg6P6VyJFITi/fqQtT2I9Id5WM38VjqwzSp6YFSFNWe pQFijo8/Xrf0h8UhXS0hlf8in8UQb9Vsinl60Ct6GA4MAVJYJUnwsiwn16J+v1xMZfjo SHHbTTOe4xjM07zURqyJdoMfwa6755JVa6UJ3Ov0TptKzZU6Ub9m1wEP7rPD+sDdXPLq QbPh/MvXTd7ZUBzdQSfNEskPtq9aE5xXykWP4hugKNEntK8TpG1KJoGDyWRBfhE+sTHi KqSQ== X-Forwarded-Encrypted: i=1; AJvYcCVf/IM4uDpqsWGTnr3EbWgulJVIa4NvWJY0MO8ElD8ZapkHJT9tbvN53mPdw+9aaEi/Nc7g3vdOGh52E0U=@vger.kernel.org X-Gm-Message-State: AOJu0YxDQ1tDGqWRd8u9S/F5TuAjZF6KPXQ8AVKRqoGh1dcg77/blL0b uebWKKhkXGi0K2hcVFhPDWqNKJCrITvLS+NHSDBoOO97d2P/EuIUSxFalDE8uBl8ayaSY3bbpeZ eH1Xv3YKKbw== X-Google-Smtp-Source: AGHT+IHJNtjFjt48nXPSEtVTq3sM+jWaWamdD6ls29Yp4dYWPbvQH4C2sg7x686wzyEtBJdwaizhHH4Enk6U X-Received: from dlbbk12.prod.google.com ([2002:a05:7022:428c:b0:119:49ca:6ba4]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a17:902:d510:b0:297:dad8:f265 with SMTP id d9443c01a7336-2984ed7a19cmr77545365ad.3.1763004081397; Wed, 12 Nov 2025 19:21:21 -0800 (PST) Date: Wed, 12 Nov 2025 19:20:02 -0800 In-Reply-To: <20251113032040.1994090-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: <20251113032040.1994090-1-irogers@google.com> X-Mailer: git-send-email 2.51.2.1041.gc1ab5b90ca-goog Message-ID: <20251113032040.1994090-15-irogers@google.com> Subject: [PATCH v8 14/52] 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.51.2.1041.gc1ab5b90ca-goog From nobody Tue Dec 9 02:54:00 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 B238A3081A3 for ; Thu, 13 Nov 2025 03:21:23 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763004085; cv=none; b=ZbwN3TPMtcjnsj6jdtS8ptMvivJvKLFBjn0DJ3jv09r00jVpf208kHle9I0i0zrzkzJz6YhudnivyjY96pCa/mv+xkncVBmvB4aGoonDyamU7dY8SgzledCevH4ASn+D+VYfr8ysJOnyrp0SrWeYy168Pi3DH0T4l+ZQClFg+w0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763004085; c=relaxed/simple; bh=LzY4F0bP9vooYdMwnCs0XOQfXqV24IvjMtZPzidXt0U=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=PSmBB1/sDKGXoZRn7eiz2NqLo4xMdWAiXuRf5febyWuK8/+otOVGU2v80pca300sxklXNqJt2e3IJhsUPkNdBjMumRazjoV7yXQggQyCC7YUCXwSCV77wCcbUhEE8PIXaL1ScsCwHavfNq1aMQRpqQQ+AyN2hhwBje6z8/ud+kU= 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=emMhvJEk; 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="emMhvJEk" Received: by mail-pl1-f201.google.com with SMTP id d9443c01a7336-29555415c09so4334525ad.0 for ; Wed, 12 Nov 2025 19:21:23 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1763004083; x=1763608883; 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=WHgdVqMo2mfd/A30qebWWpCOmKjeXKhdLt2i5lPgFpw=; b=emMhvJEkA1egMsRNAROoW91QCuBkynbacncHk8Xixl0xgDemWcz6sTXiS1FaT72sY1 kZxq6aVtY2bXzILLAphVwZHP88LPSaBmOtD1Cd1UK9HMyH8RKDzsps5XV7Xjg0yKqV6R ykr8NixSIBuY2KJLuEVm+rbFn4cvFKEDRElKIB0VLpToFrojud/A43U5I+g56gWYdIXV JfYjkjcaZQuGEp8lESEbDml5fLAnZITG+LinPpbF6Cm/HRs2tYf0vyBUEpCiS/wXCOeA DHwYOK0QqN6efLj4fS1vLlUpKJA87UTwfQDyTClz8+Acjecq7z7jX1+78MWFGNlHDzvu Se6w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1763004083; x=1763608883; 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=WHgdVqMo2mfd/A30qebWWpCOmKjeXKhdLt2i5lPgFpw=; b=F0zjrHW+cKnH5ymd9HDbWUzZKH7X6+1rCnPRbkhHCX21kz2v9UGuG1Nkc4S9BukqZA 8LcOSgX3Yce37xKrGJSdeWjg7sQRvem8SxX+Lj0KWURs/PfkihtAxtYtFd05mZuz2ojF GwmtHARt/XZ92nuizIdd6KcWafhiOGzsTAjxyTUT+PLlaiSpBqj/AaklZ13b9f4MxPpl WQCcmb1xqezbs0j1WYrGvjsIGEpMSBobqEX16pEBVcVes0c5cc+S6h/Ns228wSmwU/0A uPr5N1tmPIBXsOZJr2AN681coeOa5JkrnEDAj2sJKLRuXwevcIPRDH2gXuaAneDK6Yvk r1NQ== X-Forwarded-Encrypted: i=1; AJvYcCX4ROIqbQ7zCFE88+0B+RhfSUz4FiSD9JQNcxW3pagoMS5tQsIMcbYwk0xuAHZVk/NQ5EiD5bdjmkM6x+o=@vger.kernel.org X-Gm-Message-State: AOJu0Yw0cTNu5mpxCrpjntEch8PyT8+vfUr2JetiwhoqkUMSUyHVYRTv +g9XfofDghz/epHJwGGf5f971yr1N/Na8cJioG2pCwh+oGhkPB+kQO8DJ+eH1VCA1FDoUdbTYmF vgKIxYtVI3Q== X-Google-Smtp-Source: AGHT+IHI5BfWqNRWeHHy2eWM6vhQvh8vGmp+McD2FeB5AvGV3o0zzmWwQ4Ynyvw++nC0h7QZGP4/SJ5hwi4G X-Received: from dlbbq7.prod.google.com ([2002:a05:7022:6707:b0:11b:65e:f6a]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a17:903:19ce:b0:295:70cc:8ec4 with SMTP id d9443c01a7336-2984ede8153mr74025065ad.51.1763004083198; Wed, 12 Nov 2025 19:21:23 -0800 (PST) Date: Wed, 12 Nov 2025 19:20:03 -0800 In-Reply-To: <20251113032040.1994090-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: <20251113032040.1994090-1-irogers@google.com> X-Mailer: git-send-email 2.51.2.1041.gc1ab5b90ca-goog Message-ID: <20251113032040.1994090-16-irogers@google.com> Subject: [PATCH v8 15/52] 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 Tested-by: Thomas Falcon --- 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.51.2.1041.gc1ab5b90ca-goog From nobody Tue Dec 9 02:54:00 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 ED6FC3093C0 for ; Thu, 13 Nov 2025 03:21:25 +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=1763004087; cv=none; b=LOqxNNBpigMI4/yV/SoFccA4RsVUP/riyCzXkqYeidFzA1MER4IDa4cdDik+9XgHZvwJcWPTMuYV0FVmWbREWedm7l0qn8jf1aggqp1+eDZHO+CSHsbaHC9TVW6Hot58bK0Yh8/TZ6cWc2lbEDctbFMod4GVzhuxdfIpcByQ2dE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763004087; c=relaxed/simple; bh=tPaHLz6/sx/PNrouhhyClDy1OLIFmrT7WhjKHR7NKag=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=c/NeSyjwXBQlturzrq05OoJ2IAxHEm19jGmH8bhCgO+yX6z09BUALn5vyEdmOkeeeVvCygL2uTUIJyrbKCg3lxURtAKFAtWFbO3v4TboiXBoNE4wbuWQZRTJmwO4WOoAtfvSRTCSkykgLzgmtUO5aWLr1LeQFcb8OzXvLe9B2Ok= 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=uk02rAYq; 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="uk02rAYq" Received: by mail-pf1-f201.google.com with SMTP id d2e1a72fcca58-7aa440465a1so724333b3a.1 for ; Wed, 12 Nov 2025 19:21:25 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1763004085; x=1763608885; 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=IsMM9QEsECyOcBMHtXCKN3W3Gqp+i9lInQz4MeIZgto=; b=uk02rAYqTV/oLM8BV565k+ESpMtIjEscnr53EmHpB7IcIwkgu2Ahz5KqoK7KpvYf7I 2QlI+hxKrrluSRit9aLlKmTm0GAwcVAQM2iB8kw4IM/DrwJu/Y3RiRgyLnowHrSxK/lm KunvPdrSMNA/J+IPXciTrk9+UX+NX6nM9E2IRZq+2JHj94ZdyM0ZFDQOXbyfHgnQTjiL 57J2uT0sbO2SkaGBOE7hsP2avzMXyD4fJbh42OLZSikldT9tyuql81hsMAzUDC6Sh5bB fcZ9Nok4e6y0Cq85ob2ZxYnjvq1kq0eSdHf4tz9AGrfUJ6SUUktoT/Fa7zHgWEaqqU1B wNHw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1763004085; x=1763608885; 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=IsMM9QEsECyOcBMHtXCKN3W3Gqp+i9lInQz4MeIZgto=; b=EQDvfTSjJ9cMi8GcKjKH+L0pus9LpkFXZzah+23SCt6PDNbfCSEcAlPTNUryjiS12X OjSd/vHb28T1+N/Z/WGclEr9ZV38WGxX+m/6pSjd/Mc8ZHOEtxORhzpqeHj1D1hlh3rx 5BP/J7vGv6FVJaql8lzWy9l83dibKZTVIlTekZIEb9YyqfU2DkYOGGB3Qev6Afmzifpm +FLvAtx0+pkWrKjdyXqSbb394aadWAxbgUYby5C7XOtq0fDNgNdxOLtPMlJABR0Eg5Il pqELvJlnOQeilUJ7FG1ICWHWpCXiOYszEe0yNrZHixvsWJMqTDVYkBWbInnkGmnHyma7 S/QA== X-Forwarded-Encrypted: i=1; AJvYcCUVwfNJVPVuetHeUNHrykET4GzySJe+dsgxA14pZ5Nom2Bgnaf+BkPETMX/SOwqqMICgDJwELivuZqSIOk=@vger.kernel.org X-Gm-Message-State: AOJu0Yx7C4LBbW6c89oFKs0oiqcIcuwDjVeS0H47TDGhSAMccYGcJaMR oHO2R2LEfLWWCNpXWT2+HkqlwofT58FIBUNlTW7u2P+gWxwEeuLHVb4C8WsqLy9rqkzZz4Ye/Dd 9pAl5WUx48A== X-Google-Smtp-Source: AGHT+IES3t7VXixdqeqHO/Do+uvYp9CnzR3bamBcvHkXUs5IlqTBbD1sPeuUjAt8+AMfG8wD09hHje3Ql05G X-Received: from dyx20.prod.google.com ([2002:a05:693c:8214:b0:2a4:6312:d053]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a20:1611:b0:33f:9581:5d2f with SMTP id adf61e73a8af0-3590897fcd7mr7693689637.3.1763004085140; Wed, 12 Nov 2025 19:21:25 -0800 (PST) Date: Wed, 12 Nov 2025 19:20:04 -0800 In-Reply-To: <20251113032040.1994090-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: <20251113032040.1994090-1-irogers@google.com> X-Mailer: git-send-email 2.51.2.1041.gc1ab5b90ca-goog Message-ID: <20251113032040.1994090-17-irogers@google.com> Subject: [PATCH v8 16/52] 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 Tested-by: Thomas Falcon --- 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.51.2.1041.gc1ab5b90ca-goog From nobody Tue Dec 9 02:54:00 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 B707330AD13 for ; Thu, 13 Nov 2025 03:21:27 +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=1763004089; cv=none; b=KVUmxUyzdf508SVJYVPhKdzTYuKLxHKYNBR2b6BXYmiudPy7gNXAehjdYrnbu3PjUQsAKTraOVf/0PmsllIXsZVU0oMnQ/IRmoY3JbSJTTdLM+2NsiHnrUBiIt9aeJpHo9PhpNbAyTLdnfdUs6ZEp7Z55T6OE11gJ1gXM90HISc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763004089; c=relaxed/simple; bh=B8lkbetWKiGNIsi91sd8YrgblwbzZ9lrZIRvSGABaSA=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=uL+4nPyx3jszvmjVEbbdpCcBgfl8hobHkBsML+EZvgWVi9bkGQGCM73W2H3v4t5WqD9+1B7+XErNG5/T8JNg8mdHL23xTcrT7N/zPKi7SzqzZcdDoE7jfGhcLThiFsQR4EuSCSD2NmZzHwWCkhCtYt2EkHBxwexPxWC2W5kBTX0= 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=l/3YZ651; 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="l/3YZ651" Received: by mail-pl1-f202.google.com with SMTP id d9443c01a7336-29845b18d1aso4340275ad.1 for ; Wed, 12 Nov 2025 19:21:27 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1763004087; x=1763608887; 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=GojlKXXeIlWC1RlOdbmNF9Co4cMdGfhXPPYbUElx0PE=; b=l/3YZ651OWUXlfGPzSFHq5kDMDijdeiG2WQkkYS0bp7zAe7xVtH75bpzbDZC9LvzVY Rm4niXI+n4dm99wil+AATajAowXSfTjRf29NfALKdVYOf9fpwOumHcLe4aAyGVNpPSYp AaPGFOm+l/Af1tcfb5p9gVD0bBlM4BWVj+NKkE3lkwt6OyeBQGGw5XULNXJ/nmGdZq8E 30VVAMzf1r63WNED6FXtQc8jJEyOxFBkrDWgloYQlbDOV9VSvulqKzPZL8byjTNgkopB mPu5CeucO2M65gzLHK7iTacQupWzvTkdpjCDz1GQCfn0QcCTRkQGe08p5KFjXdVUr01s yyWA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1763004087; x=1763608887; 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=GojlKXXeIlWC1RlOdbmNF9Co4cMdGfhXPPYbUElx0PE=; b=NzlATl4InX0D56wgDgW/AyZgiaBtWfOLOg4QIgXnCHTT+2fg4c445ihv+yqA8806dU HOi5k7Woky+TRF6MOfcK3NiLd3b0gTBy5+6g9GsL7Nwym0/foDp4TTDQrAsPNUWHY0Ej 9J9dmQ7ogWd3xA1WS6HwAWMJ15Z3a5N8aMMQEJATxmkR2JKgVZlbeAZ4tQxllZipY2I4 wxxqjp2Em60gCngktjxj4vfPVH8t4zSebx7FfyIkM/+U4BKkEgLZg4SmSts+Vus95+XZ Y1Sq9Cq8XRn4SUCOPNh50r7m2NsA5J6d05q2LdqX3oOK6jFcJjjNHwp7chQy4um57Uws Z7/A== X-Forwarded-Encrypted: i=1; AJvYcCUX37m3D/f1MyfI6NF64G4e2QDfxkuDLKq1MrUye9RBRbVMrXAnbFywM4jR3vwdBo6zcv4EOTZBvXEywys=@vger.kernel.org X-Gm-Message-State: AOJu0Yy/3dr9rCFRHd05CQz4vSaKxWzB7FeoCR0PWtMu0bYJPLz5mTAR OYuvyeXWrw1+w1tI3DuwIcg++GQvvVl3NaIrOdfMT+FgHiFyjcNq6K+cb5226RH2AJjDlgmX9hu q2VqYd2OrKQ== X-Google-Smtp-Source: AGHT+IHsv0wCUr4pcyK7ZKuQfbUgkUGpid5htJyGlM0w6i46UINI2OHaBEkE4F63Sjg9i6YhTCkUksnrBVuN X-Received: from dlbbs33.prod.google.com ([2002:a05:7022:921:b0:119:78ff:fe12]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a17:903:3b8b:b0:294:f711:baa with SMTP id d9443c01a7336-2984ed2b6e3mr66202765ad.2.1763004086743; Wed, 12 Nov 2025 19:21:26 -0800 (PST) Date: Wed, 12 Nov 2025 19:20:05 -0800 In-Reply-To: <20251113032040.1994090-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: <20251113032040.1994090-1-irogers@google.com> X-Mailer: git-send-email 2.51.2.1041.gc1ab5b90ca-goog Message-ID: <20251113032040.1994090-18-irogers@google.com> Subject: [PATCH v8 17/52] 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 Tested-by: Thomas Falcon --- 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.51.2.1041.gc1ab5b90ca-goog From nobody Tue Dec 9 02:54:00 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 4871B30BBB9 for ; Thu, 13 Nov 2025 03:21: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=1763004092; cv=none; b=bA3DFmxbI/NCsiIKd5S7JPrsfZ5TcHHPWZpjHdM4nVqMZsUk+UwwtCGVJEb2fFYPIwNOK81xXxBgiII8CS8lQ/ttlp1vUefXgXWBIBlViP7UtXBHNFeG1ksVWcizX6nzEmjF07u5cZ5gasy/UVvegmlqVgGzbhMQ127BMoUOaxY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763004092; c=relaxed/simple; bh=MTpvxNQIsbhE+YweGRvxHhdlQZZ2uFXAAWC1hzEIqfY=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=aGCbmX9xcbEK+L/d3ApysGqfUjUB+O1YrKMVB+1zCjKbsaDWlIoB0xo/jYF/SZB0EcnW7F805b8NqdXG7pzk2UtQkm92ez4QkHGuBXgaJDOAYQnQUaJUOYg2oIa7UBwDph2kRzQvSpuWkasPSB15k8tyl/cBunMK7UQams12L/A= 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=QQMHA3kt; 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="QQMHA3kt" Received: by mail-pg1-f202.google.com with SMTP id 41be03b00d2f7-b99f6516262so917763a12.3 for ; Wed, 12 Nov 2025 19:21:29 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1763004089; x=1763608889; 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=46tAwbQ8f//xN3Ry13qDNDr4Q30XuGVyKpDV1Wax+Xg=; b=QQMHA3ktMfiU+vMrw84poHbX/5TBe1W2ZbjIbibCAx1281clSt0YOY4Hgt80bZccwW eZhyg7XFk0JOB3LvgFyasUqrXZa7W8Mix4Kea9zktSDg2Hha1LPRmPYsHlJp7FF5Bk2Y xlkt8yftD8EirW+9LiCc2oT3chhn6Z/FAp5qtoZK4opiy0X0Lcst39dIZ+QnmND6/UM6 4EVSy84JPBuKZGd58fJM5Ro16MBwHDJfeYGjFORMYaRiUcUOvtOpt/hCnfIjVnjVdW7U FU2WbKt5ezx6lm8pCsH+fGgDKc2y91oQR/NgXc835V5SnHSyzRJSf964nP0eL4nel6bX iWxw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1763004089; x=1763608889; 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=46tAwbQ8f//xN3Ry13qDNDr4Q30XuGVyKpDV1Wax+Xg=; b=ZHkZlHhkU7SIpHEf1IKHXyc/aLSGMDTwW5S44sFcthkkRfvYLJRWB2GZSWUK1x2Pm+ KA3ksH1QVoGu4Xo5B+HEB+vr8PW+7L1OP2a0mivddWKPBIKboQpgHFJ6yfIgwXg7OhXi IiZjiGMhRbW+jWfYauNiM6vDzxehxp5Tq7ZNqufJ8uyPNqVz37ubLUJ+qxbRiPQ6qz/1 uTOPcSZcnJabLU70WhTXyktUS3ZxCvf4wTSkgIAsVUCNEZpZcFyhNmQmULaWvWNGRniS v9O19kE54dqftvEKlAC8W7g6ftiQwXBY3WN1OuooyeQCaRfb/9ElsafujWjCUyDpN5Zw rDXg== X-Forwarded-Encrypted: i=1; AJvYcCX1n6OlUUF8+YnIiltg0n6JBIZ+G1tx0SsOhc3gl+nMaxlQh6cRI9VY7vc41z4JHO+Dycky18yURny6X2s=@vger.kernel.org X-Gm-Message-State: AOJu0Yy/5RzXE9VWFjFBmKihU2kK+xQuaSpCeNcv9AahJyXrAuAkQHB9 5j32Bb4U6QKgimq9eohpB2iFu5Elw4dhxqvwsNh+ZW/AiZYv3YHz+syT86Oe7S7T03/AZy3DNsZ wUSEaBWq9sg== X-Google-Smtp-Source: AGHT+IFxjDiSEA9vnZn0vC4yoKImGg7+gOZ9Xm6w4b9Ab+vLCsp/wcSbIBstaW7u8IZXDNuQ5mIrUqa4yYk2 X-Received: from dybmw23.prod.google.com ([2002:a05:7300:cd97:b0:2a4:4bd0:6ed8]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a21:8906:b0:32b:7220:8536 with SMTP id adf61e73a8af0-35909399efemr6057032637.16.1763004088709; Wed, 12 Nov 2025 19:21:28 -0800 (PST) Date: Wed, 12 Nov 2025 19:20:06 -0800 In-Reply-To: <20251113032040.1994090-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: <20251113032040.1994090-1-irogers@google.com> X-Mailer: git-send-email 2.51.2.1041.gc1ab5b90ca-goog Message-ID: <20251113032040.1994090-19-irogers@google.com> Subject: [PATCH v8 18/52] 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 Tested-by: Thomas Falcon --- 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.51.2.1041.gc1ab5b90ca-goog From nobody Tue Dec 9 02:54:00 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 2880230C63B for ; Thu, 13 Nov 2025 03:21:31 +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=1763004092; cv=none; b=n8ZNlaBwvFQxpgzjSvGeKio95eUieVF5Rq9CTv5iG0FjgAHwaLDePGH5xaeb6VVSk8TQT3kqYnuC76B56Zhq5Qh6pFqa1LvJ7aYIAS8Sq9nBtUtlDEVEmPUefe0lU0nBk4l6UqZ8xZCct6ytZ6NDPtb3fdMWoBaoC+VG1Mzf3t0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763004092; c=relaxed/simple; bh=H32Kmb4s4EUbi5GaQqYvBoOMfwS8An4o87KjgWVGEGk=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=Qdw7oqMyo2RRSvI4qujdem3Y1N+zWmj1cEJNmbGw/pxTnC4hng0ymIyXlIu18QDBrmfcUKXd84jSRmAOdU9mRZXTC60itPOw+z470i+EXMhISN4DKnxnTo6UTbsWMN2FwrMkr8fSyf+ngSzIEsqr8EwUvfaInHXOY6OW81Fmd7U= 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=k/kISEgw; 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="k/kISEgw" Received: by mail-pl1-f201.google.com with SMTP id d9443c01a7336-2956f09f382so3586975ad.1 for ; Wed, 12 Nov 2025 19:21:30 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1763004090; x=1763608890; 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=Q/xav7sGweATI1gLemlCd0Y/xoi8YTcN9Imv7Ww6cug=; b=k/kISEgwtPlECbgBwAeO6OesdCKOoRq4bygVdXTItN5ZJHU9IXxTi1UouxleTgXiHG f43UKQHU9aY8nMHhJRkrWtwkTniE/lOppzWVsHMs939MPdcrk413ayYaKXdehLUZFcPo +oyrlfgo67t1pNDULvLecOAMxTvW8YE9OkTn3Ha9m6NV+pV/2qdG2FI0zFxMdLWB6GVm 67qoRDeZcO2jAO/ohGOzUEIkGVd8JRRXOt+unWXgglQKTwE497VUy3uPGGhnd/BCDqZ+ DvWbNF0TDqPWuHeSuX+URIeHu+ejINXcHxO9ng+d0bb5WyFVsrDsbHZnUY4u/41MWoDZ 0lHg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1763004090; x=1763608890; 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=Q/xav7sGweATI1gLemlCd0Y/xoi8YTcN9Imv7Ww6cug=; b=PlTJ7RRmX3NOAU946mhuIrcr8EvYvHLOr2Cv05DS7mTQqTW2mNxCPErQQzjD1LHkBI qKmnAj2JIzV54/LfnH3FHOuwVuHgdPhxbsDO2WyGhNNgKQi3EnYOqVGCulP6EE+w5PCP ExM4VfK7LM9dIn2hwH/Vxmatu/pEk1dlgA051Kv5BWvgLmgfoLWi0f7srEOYfTqAWGZ6 LvmUk6Q6ClSyNys5YPxdTBccWTnE+w7dxJTGBPMgCw+b8wPrPEXVFQZBXENtM8Ao6fgD dLqd9t7Bah6SNe8tr9+/2speGzJyiwbYXotSfRXdbuPZYGmGS5RmxynVws6oQEwONMzz n3UQ== X-Forwarded-Encrypted: i=1; AJvYcCVV71x3KzLFZgDYv9z98y3nGxjcI3RjebnXJiKDDBcNMhGo15prc+JEoSiQymzEXkcm5e2C7WJvUCx0Xzg=@vger.kernel.org X-Gm-Message-State: AOJu0YwDf1JKLjBwXT5MEb9J7BgfhtjBLtRppfTbmaCUwdhUMcNhrGhz z9zu8fgvGPkyBer7t/32d8Ku+POYITwat6mkdisVYzJcViLEd7OWcJZeuWutXuFmDGyEqMipc4R jojxbDk9Llw== X-Google-Smtp-Source: AGHT+IFVI3FgTE1LB1tkcrGzvX8YL/V7HJxOSDGDYv3mvmQNq20sUUzAhDgaaL0APymsq+Uiq0+1iYBcv0e2 X-Received: from dlbdz8.prod.google.com ([2002:a05:7022:ec8:b0:119:b185:ea72]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a17:902:f60c:b0:297:ec44:56f with SMTP id d9443c01a7336-2985a52b15amr20494665ad.14.1763004090460; Wed, 12 Nov 2025 19:21:30 -0800 (PST) Date: Wed, 12 Nov 2025 19:20:07 -0800 In-Reply-To: <20251113032040.1994090-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: <20251113032040.1994090-1-irogers@google.com> X-Mailer: git-send-email 2.51.2.1041.gc1ab5b90ca-goog Message-ID: <20251113032040.1994090-20-irogers@google.com> Subject: [PATCH v8 19/52] perf jevents: Add software prefetch (swpf) 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 the utility of software prefetches on zen2, zen3 and zen4. Signed-off-by: Ian Rogers Tested-by: Thomas Falcon --- tools/perf/pmu-events/amd_metrics.py | 101 +++++++++++++++++++++++++++ 1 file changed, 101 insertions(+) diff --git a/tools/perf/pmu-events/amd_metrics.py b/tools/perf/pmu-events/a= md_metrics.py index 1880ccf9c6fc..06cb56cbd617 100755 --- a/tools/perf/pmu-events/amd_metrics.py +++ b/tools/perf/pmu-events/amd_metrics.py @@ -121,6 +121,106 @@ def AmdBr(): description=3D"breakdown of retired branch instruct= ions") =20 =20 +def AmdSwpf() -> Optional[MetricGroup]: + """Returns a MetricGroup representing AMD software prefetch metrics.""" + global _zen_model + if _zen_model <=3D 1: + return None + + swp_ld =3D Event("ls_dispatch.ld_dispatch") + swp_t0 =3D Event("ls_pref_instr_disp.prefetch") + swp_w =3D Event("ls_pref_instr_disp.prefetch_w") # Missing on Zen1 + swp_nt =3D Event("ls_pref_instr_disp.prefetch_nta") + swp_mab =3D Event("ls_inef_sw_pref.mab_mch_cnt") + swp_l2 =3D Event("ls_sw_pf_dc_fills.local_l2", + "ls_sw_pf_dc_fills.lcl_l2", + "ls_sw_pf_dc_fill.ls_mabresp_lcl_l2") + swp_lc =3D Event("ls_sw_pf_dc_fills.local_ccx", + "ls_sw_pf_dc_fills.int_cache", + "ls_sw_pf_dc_fill.ls_mabresp_lcl_cache") + swp_lm =3D Event("ls_sw_pf_dc_fills.dram_io_near", + "ls_sw_pf_dc_fills.mem_io_local", + "ls_sw_pf_dc_fill.ls_mabresp_lcl_dram") + swp_rc =3D Event("ls_sw_pf_dc_fills.far_cache", + "ls_sw_pf_dc_fills.ext_cache_remote", + "ls_sw_pf_dc_fill.ls_mabresp_rmt_cache") + swp_rm =3D Event("ls_sw_pf_dc_fills.dram_io_far", + "ls_sw_pf_dc_fills.mem_io_remote", + "ls_sw_pf_dc_fill.ls_mabresp_rmt_dram") + + # All the swpf that were satisfied beyond L1D are good. + all_pf =3D swp_t0 + swp_w + swp_nt + good_pf =3D swp_l2 + swp_lc + swp_lm + swp_rc + swp_rm + bad_pf =3D max(all_pf - good_pf, 0) + + loc_pf =3D swp_l2 + swp_lc + swp_lm + rem_pf =3D swp_rc + swp_rm + + req_pend =3D max(0, bad_pf - swp_mab) + + r1 =3D d_ratio(ins, all_pf) + r2 =3D d_ratio(swp_ld, all_pf) + r3 =3D d_ratio(swp_t0, interval_sec) + r4 =3D d_ratio(swp_w, interval_sec) + r5 =3D d_ratio(swp_nt, interval_sec) + overview =3D MetricGroup("lpm_swpf_overview", [ + Metric("lpm_swpf_ov_insn_bt_swpf", "Insn between SWPF", r1, "insns= "), + Metric("lpm_swpf_ov_loads_bt_swpf", "Loads between SWPF", r2, "loa= ds"), + Metric("lpm_swpf_ov_rate_prefetch_t0_t1_t2", "Rate prefetch TO_T1_= T2", r3, + "insns/sec"), + Metric("lpm_swpf_ov_rate_prefetch_w", + "Rate prefetch W", r4, "insns/sec"), + Metric("lpm_swpf_ov_rate_preftech_nta", + "Rate prefetch NTA", r5, "insns/sec"), + ]) + + r1 =3D d_ratio(swp_mab, all_pf) + r2 =3D d_ratio(req_pend, all_pf) + usefulness_bad =3D MetricGroup("lpm_swpf_usefulness_bad", [ + Metric("lpm_swpf_use_bad_hit_l1", "Usefulness bad hit L1", r1, "10= 0%"), + Metric("lpm_swpf_use_bad_req_pend", + "Usefulness bad req pending", r2, "100%"), + ]) + + r1 =3D d_ratio(good_pf, all_pf) + usefulness_good =3D MetricGroup("lpm_swpf_usefulness_good", [ + Metric("lpm_swpf_use_good_other_src", "Usefulness good other src",= r1, + "100%"), + ]) + + usefulness =3D MetricGroup("lpm_swpf_usefulness", [ + usefulness_bad, + usefulness_good, + ]) + + r1 =3D d_ratio(swp_l2, good_pf) + r2 =3D d_ratio(swp_lc, good_pf) + r3 =3D d_ratio(swp_lm, good_pf) + data_src_local =3D MetricGroup("lpm_swpf_data_src_local", [ + Metric("lpm_swpf_data_src_local_l2", + "Data source local l2", r1, "100%"), + Metric("lpm_swpf_data_src_local_ccx_l3_loc_ccx", + "Data source local ccx l3 loc ccx", r2, "100%"), + Metric("lpm_swpf_data_src_local_memory_or_io", + "Data source local memory or IO", r3, "100%"), + ]) + + r1 =3D d_ratio(swp_rc, good_pf) + r2 =3D d_ratio(swp_rm, good_pf) + data_src_remote =3D MetricGroup("lpm_swpf_data_src_remote", [ + Metric("lpm_swpf_data_src_remote_cache", "Data source remote cache= ", r1, + "100%"), + Metric("lpm_swpf_data_src_remote_memory_or_io", + "Data source remote memory or IO", r2, "100%"), + ]) + + data_src =3D MetricGroup("lpm_swpf_data_src", [ + data_src_local, data_src_remote]) + + return MetricGroup("lpm_swpf", [overview, usefulness, data_src], + description=3D"Software prefetch breakdown (CCX L3 = =3D L3 of current thread, Loc CCX =3D CCX cache on some socket)") + + def AmdUpc() -> Metric: ops =3D Event("ex_ret_ops", "ex_ret_cops") upc =3D d_ratio(ops, smt_cycles) @@ -187,6 +287,7 @@ def main() -> None: =20 all_metrics =3D MetricGroup("", [ AmdBr(), + AmdSwpf(), AmdUpc(), Idle(), Rapl(), --=20 2.51.2.1041.gc1ab5b90ca-goog From nobody Tue Dec 9 02:54:00 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 1A03D30DD2E for ; Thu, 13 Nov 2025 03:21:32 +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=1763004094; cv=none; b=vEPzMSDLEPSqvQII4E6bxhP1BKue7G5TO4RVnXZE0G/acPo9bj+b7Fi196cXLrcJfd801R6vBtbisd+A6KJnKhMNLb5wzRn+DeKrj0buXGXRkBV8vxFk9uVBIEaIPExiAZI4k6QSiwCMo71DCxrPcmkKEHR85MhtSYvzFgN5090= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763004094; c=relaxed/simple; bh=0GZ4eaaoyx/Cs7YZ3MmrTxLV+H7R0IF5moR2NJsLj7c=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=KSaBXFz09HSPBbaKDHZ9+F4olggFarKPt67SDYmOytLYzq3BEQ2/OlCOMJ9UvUdznD7Qqj3VWMhBQxvNv4ZzrhbB8z/wEuDBkKiBzgG+MB3xbXMfWw8RTD7+4Qe50thDEOOmZnailM+WYTczlc0RVAdZFgXjm/OqqxNZgQLYaq8= 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=mw0UKVp8; 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="mw0UKVp8" Received: by mail-pl1-f202.google.com with SMTP id d9443c01a7336-2958c80fcabso9437655ad.0 for ; Wed, 12 Nov 2025 19:21:32 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1763004092; x=1763608892; 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=JntwDFAW5ojRTBXp19gyFuJkjXeDbElRUQSnnbCyNR4=; b=mw0UKVp8B1SOeNGe5qcRjSCyDijlOHdVuH0v9l0zZ285c8xv4UYpcQh+K6CyrQT+d+ VUqC91EniYxrJnffU6DkJSwnVQ5JI8Lx5t3InTP4O0SHrmwOGs9NPkzF49d41ZjiDoUM QBxl6xwVlHlo1jijGsXED+zX/uBFBxZXk/3YB3GjZZf0adGosp8qrQ6jSM2LYVO0nRmL ErJs4RQwIRU2vOtyA40Vr6S+Ufij1a3dZjQn62h23ViNwC5b6vK4uQmXN61BodK40xsI xFqO1t+kwbv0+VTqZ9CjAT/y3sGTqTUa349XUb4AAhdGKaFhms6lJC9g4I0Pi4enDZHK zWsg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1763004092; x=1763608892; 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=JntwDFAW5ojRTBXp19gyFuJkjXeDbElRUQSnnbCyNR4=; b=rWPFLsTALAsHGOrhLi1lcffbitQPrWRvsxi1e8udYI5ScCRmccS/32ckHPQ/49/ONy GA5Vn8Rt7dp/oJuup6y2uwCFb1QM6ee/Krka/i/LwWhjnGd8cE84BilPjG9iFIJKkBma 9izHZiiosG6j0ISjkRP9o/EHRWxbATRCnWJbTscdv6EsbjrhSyDzqgMHu2LH83dNRwyA yJEIHNleBkAvFsFdgb0v5HKKqsjpyYoDJQciHCO5aBtGarqAnsRT8cJSbps95AkxEkcu Jot+8HuLxJYYkDkqOsRckny7YsExxnrWuk4J6uRLA+MTDQRbkAZjR93zOjGOa/tWkRIX vznw== X-Forwarded-Encrypted: i=1; AJvYcCWMOIfuzTE37P+o+0UIGmEbsA9Bv5pXqkRDA8SBcIbpxikseM8OayKMBGTBU/m/NB/+uSgHDJzvIPW3Ll8=@vger.kernel.org X-Gm-Message-State: AOJu0YyPDxvmKhxIiMzwMw3cL1PdCqCY5tOqLEsxQFiOrsqgQ4FrygSn jguHbnoCVdhNosY1HCAGtd/zHhYUnpalKmBvj+XJM0duKcfc6jGxDf+/Yz59JnKGPbfzZlG7LKV jerZvn0NIeg== X-Google-Smtp-Source: AGHT+IG+PMkJFwGCD8b9KXtrpctx9O4ZJ9v2uOQqccKIXI5+yo88BAFu6n3qfTql4mTrOvxgk3exezobjIx3 X-Received: from dlbvp3.prod.google.com ([2002:a05:7022:ff43:b0:11a:126f:ee80]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a17:903:1b6f:b0:295:8662:6a4e with SMTP id d9443c01a7336-2984ee0b628mr60738665ad.47.1763004092438; Wed, 12 Nov 2025 19:21:32 -0800 (PST) Date: Wed, 12 Nov 2025 19:20:08 -0800 In-Reply-To: <20251113032040.1994090-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: <20251113032040.1994090-1-irogers@google.com> X-Mailer: git-send-email 2.51.2.1041.gc1ab5b90ca-goog Message-ID: <20251113032040.1994090-21-irogers@google.com> Subject: [PATCH v8 20/52] perf jevents: Add hardware prefetch (hwpf) 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 the utility of hardware prefetches on zen2, zen3 and zen4. Signed-off-by: Ian Rogers Tested-by: Thomas Falcon --- tools/perf/pmu-events/amd_metrics.py | 64 ++++++++++++++++++++++++++++ 1 file changed, 64 insertions(+) diff --git a/tools/perf/pmu-events/amd_metrics.py b/tools/perf/pmu-events/a= md_metrics.py index 06cb56cbd617..be27a4947e45 100755 --- a/tools/perf/pmu-events/amd_metrics.py +++ b/tools/perf/pmu-events/amd_metrics.py @@ -121,6 +121,69 @@ def AmdBr(): description=3D"breakdown of retired branch instruct= ions") =20 =20 +def AmdHwpf(): + """Returns a MetricGroup representing AMD hardware prefetch metrics.""" + global _zen_model + if _zen_model <=3D 1: + return None + + hwp_ld =3D Event("ls_dispatch.ld_dispatch") + hwp_l2 =3D Event("ls_hw_pf_dc_fills.local_l2", + "ls_hw_pf_dc_fills.lcl_l2", + "ls_hw_pf_dc_fill.ls_mabresp_lcl_l2") + hwp_lc =3D Event("ls_hw_pf_dc_fills.local_ccx", + "ls_hw_pf_dc_fills.int_cache", + "ls_hw_pf_dc_fill.ls_mabresp_lcl_cache") + hwp_lm =3D Event("ls_hw_pf_dc_fills.dram_io_near", + "ls_hw_pf_dc_fills.mem_io_local", + "ls_hw_pf_dc_fill.ls_mabresp_lcl_dram") + hwp_rc =3D Event("ls_hw_pf_dc_fills.far_cache", + "ls_hw_pf_dc_fills.ext_cache_remote", + "ls_hw_pf_dc_fill.ls_mabresp_rmt_cache") + hwp_rm =3D Event("ls_hw_pf_dc_fills.dram_io_far", + "ls_hw_pf_dc_fills.mem_io_remote", + "ls_hw_pf_dc_fill.ls_mabresp_rmt_dram") + + loc_pf =3D hwp_l2 + hwp_lc + hwp_lm + rem_pf =3D hwp_rc + hwp_rm + all_pf =3D loc_pf + rem_pf + + r1 =3D d_ratio(ins, all_pf) + r2 =3D d_ratio(hwp_ld, all_pf) + r3 =3D d_ratio(all_pf, interval_sec) + + overview =3D MetricGroup("lpm_hwpf_overview", [ + Metric("lpm_hwpf_ov_insn_bt_hwpf", "Insn between HWPF", r1, "insns= "), + Metric("lpm_hwpf_ov_loads_bt_hwpf", "Loads between HWPF", r2, "loa= ds"), + Metric("lpm_hwpf_ov_rate", "HWPF per second", r3, "hwpf/s"), + ]) + r1 =3D d_ratio(hwp_l2, all_pf) + r2 =3D d_ratio(hwp_lc, all_pf) + r3 =3D d_ratio(hwp_lm, all_pf) + data_src_local =3D MetricGroup("lpm_hwpf_data_src_local", [ + Metric("lpm_hwpf_data_src_local_l2", + "Data source local l2", r1, "100%"), + Metric("lpm_hwpf_data_src_local_ccx_l3_loc_ccx", + "Data source local ccx l3 loc ccx", r2, "100%"), + Metric("lpm_hwpf_data_src_local_memory_or_io", + "Data source local memory or IO", r3, "100%"), + ]) + + r1 =3D d_ratio(hwp_rc, all_pf) + r2 =3D d_ratio(hwp_rm, all_pf) + data_src_remote =3D MetricGroup("lpm_hwpf_data_src_remote", [ + Metric("lpm_hwpf_data_src_remote_cache", "Data source remote cache= ", r1, + "100%"), + Metric("lpm_hwpf_data_src_remote_memory_or_io", + "Data source remote memory or IO", r2, "100%"), + ]) + + data_src =3D MetricGroup("lpm_hwpf_data_src", [ + data_src_local, data_src_remote]) + return MetricGroup("lpm_hwpf", [overview, data_src], + description=3D"Hardware prefetch breakdown (CCX L3 = =3D L3 of current thread, Loc CCX =3D CCX cache on some socket)") + + def AmdSwpf() -> Optional[MetricGroup]: """Returns a MetricGroup representing AMD software prefetch metrics.""" global _zen_model @@ -287,6 +350,7 @@ def main() -> None: =20 all_metrics =3D MetricGroup("", [ AmdBr(), + AmdHwpf(), AmdSwpf(), AmdUpc(), Idle(), --=20 2.51.2.1041.gc1ab5b90ca-goog From nobody Tue Dec 9 02:54:00 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 00AAC30E858 for ; Thu, 13 Nov 2025 03:21: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=1763004096; cv=none; b=cM1mtnIOAsorjNZu1B4oIzLp3u7H3cCo+cJr+zDcMpue59R3YOsX9RjyyZWSLzBXlt65S/p92R2Hb23mDpS8WHJ7BNwNUWSquGJkWdOmd50TlftRX3L4NBS4eIwRZAagh2F4uzdNZKbe3ohyulNhfcLkC/5mq+AYegnH8WVRwpM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763004096; c=relaxed/simple; bh=vVf1zggOS+cbysH1e1f3vAJed1lJ5J4Qc02uFoFTyaE=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=naFfkkFMEYtU1FjBuiouuW2fXKJbxwvdfrlCSQZzVFWr62eSxLStBWqqcHIRpRjFpaCFYDBDk/vrqF9s9XHl3uXD64jKQxyDGuG0opcKLhoeus2MxFPxrqSye4RWcHlN89ZiDsakfSXYpb4gQFBwD0UlSbbKN9eenY9dsvdNJNI= 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=klDcIh/5; 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="klDcIh/5" Received: by mail-pl1-f201.google.com with SMTP id d9443c01a7336-2955555f73dso3102645ad.0 for ; Wed, 12 Nov 2025 19:21:34 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1763004094; x=1763608894; 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=EEEB3yyqtAo5Qxm1rwxLoJUAtOyPomalYOsJIghAkIk=; b=klDcIh/5XAp7nsttFkXwQbM6lPm7xKQ/i8SBhsRSMfFLQ4sSrTys/sjSxy56syT8lv EcN1+j2TJo9eZV8FCRHFLDEdL4TG/EGQNpmhSOvtNaLrom3C/7AcdsmwLTCanFWT6GXd F+WfREshj1BoxmWuZu6ldxscp+JNSgcf1UyTnsP2Vrj1HvBjEKJ6mT6MfrWk8Qu2c+5K fq0vEScQwoO7aziGZa8n4CT4al31Xxrqx/ZIbcOQVdTLEhv2XwLao5S4uMz/sfFlVB/f TpkJGpuaREwVrm+61ZsNyBJysBjER2Msdr/HEsK3MtLLsuqGPn4LaJYM7cTRSdCLtkBz mpHw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1763004094; x=1763608894; 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=EEEB3yyqtAo5Qxm1rwxLoJUAtOyPomalYOsJIghAkIk=; b=SjXj9BSe0UXX6bM6mOfm3vSXT+ZVBAckZhmyWa7J81JEcODoEU5yYfIbN/JoAHg+oJ 7PfHziZjcqB1bKENO17BbzWbTlYXYtbp78RF0tJ6uVLeXQJyrtvl6s71V0i10+qz8eA5 UfA1E+CyadNvXfx3wiFfd/u1lDZvsSKlITKXJyTFwezmXP4Cu84AHvCohbFXhuCJcViO zF8MrYuO+qqSsmTismbunWA88uqJNmOugAgdq4QF7PEgMY23b/tEjCUMYZJVhnEfmfzN ufM76yVaAOyeGq5o950YYp1e1K8K17LQhEVs1a6jjygrg/vkvGc8OmVkTAY2k97gwOKn PRGQ== X-Forwarded-Encrypted: i=1; AJvYcCXlikkmoMBbU5OoyAU29DjvXlTZUdgc42H0NARyVDEbuthMQqMaM2E8+fn+7b2oQNGpc8HguDJOpc1UeXY=@vger.kernel.org X-Gm-Message-State: AOJu0YzHZGRj37qWROSJXGOeOaqTyGZRivwrAUf894ZcZHXkUd4UGIR4 JhXJI4qYliIM3mKtKYnMjSZpnT7qRDNYEjoLY33Ur54PqVZ15uABj7v1IUuSxrDNbW85bdiO1qK 6svJblq7yjQ== X-Google-Smtp-Source: AGHT+IGUz3F16Agc4RAbW/D2wPHIL7padu48afgt8r6+R526ENldbnLOQuTELkamEGtmJn58t9Ko7urqGG4Z X-Received: from dlbbk16.prod.google.com ([2002:a05:7022:4290:b0:11b:13:9d43]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a17:903:944:b0:295:32ea:4cf6 with SMTP id d9443c01a7336-2984ed27f0emr67149315ad.5.1763004094319; Wed, 12 Nov 2025 19:21:34 -0800 (PST) Date: Wed, 12 Nov 2025 19:20:09 -0800 In-Reply-To: <20251113032040.1994090-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: <20251113032040.1994090-1-irogers@google.com> X-Mailer: git-send-email 2.51.2.1041.gc1ab5b90ca-goog Message-ID: <20251113032040.1994090-22-irogers@google.com> Subject: [PATCH v8 21/52] 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 Tested-by: Thomas Falcon --- 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 be27a4947e45..60f4ecedae6c 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 AmdHwpf(): """Returns a MetricGroup representing AMD hardware prefetch metrics.""" global _zen_model @@ -350,6 +398,7 @@ def main() -> None: =20 all_metrics =3D MetricGroup("", [ AmdBr(), + AmdItlb(), AmdHwpf(), AmdSwpf(), AmdUpc(), --=20 2.51.2.1041.gc1ab5b90ca-goog From nobody Tue Dec 9 02:54:00 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 E58A32BE03B for ; Thu, 13 Nov 2025 03:21:36 +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=1763004098; cv=none; b=mppHQS3zTEsFG/xGgLIVdsCerDfdF2I3oOY3V53DSiAkgOMRPzFAS8WQTwXTASOChOXh/2b4V0OnnFRp67sFLxmQa0AaYTPUr35A8N92Y93fzSiX9lbdcMzOvjk4PpgSjf3e9ikmBwXslQQhd0HymE3EI8Wa3WbsB5t03E1kUFg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763004098; c=relaxed/simple; bh=1yK6ynR7Hdl8thZTAH93vnNwMoR9Uh6h0cH+mPhtQg0=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=IL4w+bXoq/uJm2sc1yuGgxHe9xuBB60MmpyVNw1llhd+M78MhSnD3dX1U+TrDAUfdLwLI36pWD3duM9Klr/d+ZXfKsrBXNf7l6DEiY3jzYA4xl1kBc8Mdy9FFqD1zRuNgpx5ONY0YU1YlgHqiu3t6PBn9KlrrUIFudyWvQ4zz6A= 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=l8/d6nyD; 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="l8/d6nyD" Received: by mail-pl1-f202.google.com with SMTP id d9443c01a7336-2956f09f382so3587995ad.1 for ; Wed, 12 Nov 2025 19:21:36 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1763004096; x=1763608896; 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=3wE01TbvFKkbywDCouhHHWzoZzOdNSz2AoZK72+q7CE=; b=l8/d6nyDdemhgCl2ZKbi27tRW4lNCwqDt0YdQNiD1MG2mFzT8VvoDy/VEOqAwHcuX0 bbxBZa5LDgoscTTicqfkH0Z0FExm1oudF1ieoLKc+ZpOO8N6uqYI/xBIjHEI5sQxgo5S JYuK/xyHfEe3N28zGIvAOyZQsC3eeTOJmpCRQB2+5mYft4NR2SGztmaEOMJwziv3/tbj Cbp0UNZam90HpO+7/0Tt/5KQnP/sa7/QCctE0gNkQuS5hAkNjoS+XhR121A/MvzvHC6Y GMSLxSns2iRBbLtC74uhT2ujKGsJG1G+WACq3aKdn0icD2KNV0jsGmH8M2MCf0KYucvn YyQg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1763004096; x=1763608896; 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=3wE01TbvFKkbywDCouhHHWzoZzOdNSz2AoZK72+q7CE=; b=rqlRZQSzMssGaeWln4cy4KF6RdSnK8dKeanj/o0s2W8uHjBpD/AbGepkxOgKlhY8t3 aZtu5qmAeQZHMxb0KaOBAxNQRgmKs6U36ObCg+Obwy7iMWHE4+JnnBBQ9XH3TuyJTzvO aVnwcwH7t3DVZ//zEfsqI2nzG4D2yr8pTiTXhdGEWIatVNkJRSofxIt+VfpH46kUq2CV lpWGE2fiXokRjntYxyuDIgfmKv/FZKUgpREmBK0KWn8IUacsBJK8DKm6INOd9P5KgeTu sCSVxnprUNEgzRM92HjiKOm0ry/1st6MoL0W3BkwvE8K6yD010Sf5B+/VkRtDBZxpesP 2b+w== X-Forwarded-Encrypted: i=1; AJvYcCXmZmJ2at0YLNDATfzaAl6glH9mC/RMDQ23wMG5rI3lPHjhnR2eh7e4bWIxuKZVYXFU7G7WQ+oJvRv/Cw0=@vger.kernel.org X-Gm-Message-State: AOJu0YwthXMY7xaY6lT5VuojsAV8q1DtPAk9cM8L+95KGvnPH/mN9PdV lVh7tknkN252gIhLZxAD0LSNWwjOM1J9Sm1zT0U42Ul2NeYxG7zNeALLkwWITPa8djNBXhoBYY9 reLnfNZTVzw== X-Google-Smtp-Source: AGHT+IHm8vNZxcIftQaJ2jDi9kvs6TN5vtKmQaTOlvgOrXRzwsyjefycdbrghLh+95NzG5mhETJRk6o2lNkb X-Received: from dycmg3.prod.google.com ([2002:a05:693c:2503:b0:2a2:367e:4ef1]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a17:902:cec7:b0:298:68e:4042 with SMTP id d9443c01a7336-2985a55bd08mr17759015ad.26.1763004095949; Wed, 12 Nov 2025 19:21:35 -0800 (PST) Date: Wed, 12 Nov 2025 19:20:10 -0800 In-Reply-To: <20251113032040.1994090-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: <20251113032040.1994090-1-irogers@google.com> X-Mailer: git-send-email 2.51.2.1041.gc1ab5b90ca-goog Message-ID: <20251113032040.1994090-23-irogers@google.com> Subject: [PATCH v8 22/52] 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 Tested-by: Thomas Falcon --- 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 60f4ecedae6c..1592d7db2ac7 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") @@ -398,6 +508,7 @@ def main() -> None: =20 all_metrics =3D MetricGroup("", [ AmdBr(), + AmdDtlb(), AmdItlb(), AmdHwpf(), AmdSwpf(), --=20 2.51.2.1041.gc1ab5b90ca-goog From nobody Tue Dec 9 02:54:00 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 6491030FF08 for ; Thu, 13 Nov 2025 03:21:38 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.202 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763004099; cv=none; b=HlG1OVYRwt9OyjDOKW2Jz0pP8sTrh84opIkMhA2l676I2I9l5iyUkhbqc2s5Epm55/79HPKIWgA22yHyCeYK0XanPcumtBJHYzMf+AOMKn4kMUa5yKdaqoPwW97IPsLpmE19MXavFkLo1hLGNP6dRqGTw2lLNk5Qjg5PoOEfsI0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763004099; c=relaxed/simple; bh=aDJn+LTiM/YgdbHZHL1Ft9cRSezjfKlAKOa73srLeAs=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=a1EcE8omqezWYcwG/2IsNEdHnQSpdIZ7mx50o1yDZ1/JjxeauDOwTn6uNO1ZmOqJ7ZeFKs99Y+rHRjHbAHLV0vp5pF9GUQULJcTbn5kKtdLYRNVzbOTp+4X57NnFo5S5qVyv7IDyprW3rwhbo9cV5WumZ5rPhymelt2inzoEpnQ= 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=08GM/qBd; 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="08GM/qBd" Received: by mail-pl1-f202.google.com with SMTP id d9443c01a7336-29845b18d1aso4341465ad.1 for ; Wed, 12 Nov 2025 19:21:38 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1763004098; x=1763608898; 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=IEiWipmsRatrVKikhSYvmz9kdeyKo1FjFHI4OKnBoxI=; b=08GM/qBdV8Ts3rx2opARd8rYcE+0J9A+lXNh5wMQEKcZ2myK6XFK7ZPIntkxyarxcU e/447xm368DM9ucrHv3Kc2b80Q8SgYXOGR8L/N28khcd+Y/QtF4tBo+/SLgzOyWHJmtd gxJMshyLJDEbYkl3EG6uSZv0hJkGa3IqaNepQn74+07OkXNAA9iOs4aRNt/nR3jVjQKL VyACEChyjLdyKIwaXPvQjjkFqN2ivkQRiTeePRPXvb4B1oWOaf2+TplVSFQDStuom7Rt lPr8xkY9jZenp7yo4qBb1VT5PBXcNOBVGB00YdrA9mQOzcjtF3++xRMFRtTuoSFkCO7+ 7j9A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1763004098; x=1763608898; 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=IEiWipmsRatrVKikhSYvmz9kdeyKo1FjFHI4OKnBoxI=; b=nbfT60WTKaynWNjQFx9vYxegmxBIQwRHXwThIIQX31XgjFB7o40f2jsIw09qYNoEjb UQjvSzYIjzB/JXiv+CiOP+qCcpBH8An86CUgXA6af3onxFD8+zV8zqulWtw28XWdFWO6 DYcAtOR8m1fJdhBZMz2bILwamf7q9t8xvaj6YnGayLXIwRQalPesytdGXB07efsl+IP3 zGyC9ZfF9+vtTtsav+bDzDVqJ69NFSdGCL3sIrmjyohBqtGr2azqVuZvAAynQcsn2ATg UvdCI4pQo1ov3sqszO1harhzzDNCe8eKITehkyGSygCRbmAEII6f5/BotyxW9loy3P3j tLTg== X-Forwarded-Encrypted: i=1; AJvYcCUf+X2Ark/JxwVxsDsD8uTbkEZ6isfsHqnCDLsI/bCnFheExxnRBTl0iQo6Y3KEsqg7y1vPqC5YwMmsusM=@vger.kernel.org X-Gm-Message-State: AOJu0YwaQiZt2vuJ/K1U3cERmSZ8QNCmRlFm/B/CWhpUZI1/tCUNZb1/ 3ua1zeNl9kSSQ/7Fdf3Aqxogy/+Rkb1lLrVGtzRqXhhTQxwVo/Sc6pk7iYXBVvbxqvYdLNpxSFh bAwJzq6Y9pw== X-Google-Smtp-Source: AGHT+IH2DMevccyCiQ/HJCM5gtbxsXuQ+aGSiyEHjIehf0KYnZ1y3roqGFRGSXsTFZ0emzyi5/2YQa0gtFay X-Received: from dycpg3.prod.google.com ([2002:a05:7300:dd03:b0:2a4:64c9:8bc8]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a17:902:da2d:b0:295:5116:6a7d with SMTP id d9443c01a7336-2984ed2b8c5mr63472395ad.4.1763004097576; Wed, 12 Nov 2025 19:21:37 -0800 (PST) Date: Wed, 12 Nov 2025 19:20:11 -0800 In-Reply-To: <20251113032040.1994090-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: <20251113032040.1994090-1-irogers@google.com> X-Mailer: git-send-email 2.51.2.1041.gc1ab5b90ca-goog Message-ID: <20251113032040.1994090-24-irogers@google.com> Subject: [PATCH v8 23/52] 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 Tested-by: Thomas Falcon --- 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 1592d7db2ac7..d748b5c1d791 100755 --- a/tools/perf/pmu-events/amd_metrics.py +++ b/tools/perf/pmu-events/amd_metrics.py @@ -479,6 +479,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 @@ -515,6 +533,7 @@ def main() -> None: AmdUpc(), Idle(), Rapl(), + UncoreL3(), ]) =20 if _args.metricgroups: --=20 2.51.2.1041.gc1ab5b90ca-goog From nobody Tue Dec 9 02:54:00 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 7BB7D3101D4 for ; Thu, 13 Nov 2025 03:21:40 +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=1763004101; cv=none; b=bFyo2wOGiARlG1D2geFFVAo/pWVTAlB/xLf0tNO+syCWRt1Hh+UokLCeMPbczq50d9tmPprK+Azpqgb4aniapwia7PizxY37wmqsbcbHsQb187mYVxzGE3AnOH3MOPM4DAlm9hRns4EJBrkvtq6+jY+ahIG/d+4hMTyCLdTb3r4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763004101; c=relaxed/simple; bh=yg0mt3Fzot10P+eNDcOUbH/iz4GunqXxO6YAxrwdE44=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=U4IN5lZIr8epMYgmxW22a9ptgmbzimjuegJKMMtiAqjj5vITUY1lkhqGO+WvKClLMWXtoeX4q73EiyWvZl5Ya4AEYStVfr7JyrXLUFoRkqvj8XYLgt96/Kbunn/spcqjAda/tRyy1moRQ5lfdQfmHUtgHivvMFlC5nj+cobz3ww= 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=wTKpKdRm; 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="wTKpKdRm" Received: by mail-pl1-f201.google.com with SMTP id d9443c01a7336-29845b18d1aso4341655ad.1 for ; Wed, 12 Nov 2025 19:21:40 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1763004100; x=1763608900; 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=reofRYC+oJf3mFk6RisvPqv+0Lly+TkhvyT/wiXYQcg=; b=wTKpKdRmEf7Q4f/IFvlOOvb59yj8CzCuXZnd244JOF2ngeDxP5J+b1NFSENBOfWtMw 93/uH/XmMVerwhf3jGvgpC7usQ3ftiVs3xJTksQhY1tSlEjKJMGSHh4UpbNkiQtSkxZH ULVSnEFyBrfO/qEWKPMwtL/Ej9Z9uzpx5WVhq2Ack4I06Bu3/LR9ZapDtx3kNMPXOiQf b5D9o2ySmemtcdpmuBfHCR6txfJfA0AnzX1S8Y0QpUY4OF/GPCqUFzlCtX9sU4NRFFcH SB5ZXljtbAO8ae3frYxN3b4KzPB8Eq0Q71TsiepFH+GBq+v3kQZ5kaUtyGmRM0QDvxlk 5tmA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1763004100; x=1763608900; 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=reofRYC+oJf3mFk6RisvPqv+0Lly+TkhvyT/wiXYQcg=; b=gCQDSCsOpdm47OKA/qC3ukozNTWfKNBbYyCwwPqyK617aELe1XBFBaApfC80ljtPZh YVFb7eKhYxD0/m7J3H3IYlitZcBRTf2D7nZo7v915dMLgVvuMnPFgD9vs7qjcUmXOp+3 jK7Ms8Uel8Vso4/LL48KIce1kDhl2fetRVdd9xWG4TY7QQFJHVAk63dS1qtwM1cJ20bo jZxte1daViR0zb9z8pJ+8MFU1C8UXk2JOOaAxzm81LZFx/qXPKexTvHrhqOR8CELsFuK 52dA0JW6hACq5l/rJ34hU4z2Urdgcxpue+bS2zKF9B93P3K1MUrDM+a3Jb6ve2d7DgZf evyQ== X-Forwarded-Encrypted: i=1; AJvYcCXF7fULSFuyIqnPG2+L/vMEUeHUijsm+xL/K24ic0JG4upphK6jA+DoT3l04aNT2FV330GAcVqbgK7o2tc=@vger.kernel.org X-Gm-Message-State: AOJu0Yy2z42445cDAwenGY6gZ2g9j34yiZrJ5B6eOmGlb5Bofc6SQNX/ 4HupjNzzshllHGYhjpdofEVk8tipHUjdjM8G9he6Tfgsxfie3RnrJt5NsOOfL3JS2X8T8e8STD6 uGWmrXCvq2w== X-Google-Smtp-Source: AGHT+IFFURIhDsoWperE6E0wEJSVGWWpEc1yQCNVIRrUkX8FAAk/DyUqxwrEiSLSauum95UUhWMUe3eG7LIc X-Received: from dlah19.prod.google.com ([2002:a05:701b:2613:b0:119:49ca:6b93]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a17:902:e788:b0:295:560a:e499 with SMTP id d9443c01a7336-2984ed2b60emr69691935ad.5.1763004099859; Wed, 12 Nov 2025 19:21:39 -0800 (PST) Date: Wed, 12 Nov 2025 19:20:12 -0800 In-Reply-To: <20251113032040.1994090-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: <20251113032040.1994090-1-irogers@google.com> X-Mailer: git-send-email 2.51.2.1041.gc1ab5b90ca-goog Message-ID: <20251113032040.1994090-25-irogers@google.com> Subject: [PATCH v8 24/52] 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 Tested-by: Thomas Falcon --- 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 d748b5c1d791..53f7c2198147 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 AmdHwpf(): """Returns a MetricGroup representing AMD hardware prefetch metrics.""" global _zen_model @@ -528,6 +602,7 @@ def main() -> None: AmdBr(), AmdDtlb(), AmdItlb(), + AmdLdSt(), AmdHwpf(), AmdSwpf(), AmdUpc(), --=20 2.51.2.1041.gc1ab5b90ca-goog From nobody Tue Dec 9 02:54:00 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 799CD311941 for ; Thu, 13 Nov 2025 03:21:42 +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=1763004104; cv=none; b=hSwa/0QOeC8S8nVDIYof0FmWwPJmFn8f3BdUZygW3CfQHgJyuSGTK6KoyVHk03N3BsVkd+0tV3vn+WK54yL1dMqngPvnZF/yYq0PTdHYh7+WYrdaGZCbhftBA2869rmN1KtnJxHC/k/yNvgOZ05HnlIVMU1MDXCHZPP3DE2TKsA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763004104; c=relaxed/simple; bh=ogGh2om0DC9PMjOzZti3DANsfTcUWimWRSDgAsS7fkg=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=LxFOuVuyF+P2X04iKIdz8JwZv2Si5/NdddolA+bGlO9o7uHK8NKY5soUk8c0p2Q6effJYrOLK43JMtF1pKAsVE4CQVee6/IqmAcslsd3l6I8YJLp1d8fP2nlY8Jug9dMzFy9lr18gPPvmtK7XHlp6TJSA1pZa0JFpSMAwlSQaQo= 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=LuejWpjQ; 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="LuejWpjQ" Received: by mail-pl1-f202.google.com with SMTP id d9443c01a7336-297f8a2ba9eso9498625ad.3 for ; Wed, 12 Nov 2025 19:21:42 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1763004102; x=1763608902; 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=IwOooBJgARuZx3xvFM9lWStOej6it0RXeAICfjsNzzw=; b=LuejWpjQTFIJ2gDghn1Wt9MBrBUBBS4OixSxkB8kSZtciFMdpwsEORoDQfoulyo5fw 2GZYTeUgYUQZK4QymBKr9cC2nnYDnAsQyODNM5YJZHMgNicLIodFKtr4RDGRxwTTh16r xfUTqYuhQGo6ZoIU0yLxh1xLt7iHLwAPwNb7rfO/y28v3MMULSIUVTB2mstVJ7sL2bn5 idJCBVrt9cvXxy8Reg28MiWS6YwIw7lWBqONgLmo+oOAo8izL/0cF6phExM1uqPPps5T 3q2j3xskdpl5gVq/rHW2GWpZY4KTK9xXhDj0GzfTWNKkJL6DyDDDpV+k4ecvnK+TDrJs fNbg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1763004102; x=1763608902; 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=IwOooBJgARuZx3xvFM9lWStOej6it0RXeAICfjsNzzw=; b=YjnLGhKUO7NivabD5ddbc/KMRhdSOG0PSvTuHbdebZKlkzfai5un1jpySX4YDrWOlG laOFauO8TLxnOH47qeXYyhtGcMq3xk5gQQkcEEuHeSpHsOGz/Mx1x+urYtMmqqc3vuEl oMbUHZ3hWHUa4u32AyTMRjx/sDwlkMh0/jNpSPtOwmDZFIJJMcHMqQeWtQJ3NEXU6zaT IjM1ikkcX7Ck7tRHQcflXFxOzwAo5OftXASKPtPGzh0Z2nyMXaH6OTyAZ/whFJwnMNfH 2A5koI41jotSgZOVsApejHxUz4Hvs7OTnt2AnBUMB/+AkTo2Jq0OYO8VJv7EiSD/X3ox BdMQ== X-Forwarded-Encrypted: i=1; AJvYcCX2OJUiolKL2crKgYH0W0RzEdXYykKxZM1uWNrxvGllDrA9x63AiZyQhaRkURiqG9So7/8i2YJxdBVrNNA=@vger.kernel.org X-Gm-Message-State: AOJu0YxbaVlWkH8vncnrxiONY/vM4fQn/7J+2xMR69c/InP3cSru52EF anLisoczStBOBwqsZYnqKa8yBq47JU7wQoIvvcCOe3bnEYCmxrSJxFvk7Fl6WDuPRvzquXEEALF 0b6odDiI0fA== X-Google-Smtp-Source: AGHT+IEhvLLZuZN0ZsEhaTGlzhZ6B8CVINpNvIBTNMAGx56cbqlPEsYvdUwZE7aEMtKifSEHxmFO/vdDfPvN X-Received: from dybfx25.prod.google.com ([2002:a05:7300:c399:b0:2a4:6f7f:e6f0]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a17:903:1b63:b0:298:4ee2:19f3 with SMTP id d9443c01a7336-2984ee21a2cmr68747545ad.49.1763004101727; Wed, 12 Nov 2025 19:21:41 -0800 (PST) Date: Wed, 12 Nov 2025 19:20:13 -0800 In-Reply-To: <20251113032040.1994090-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: <20251113032040.1994090-1-irogers@google.com> X-Mailer: git-send-email 2.51.2.1041.gc1ab5b90ca-goog Message-ID: <20251113032040.1994090-26-irogers@google.com> Subject: [PATCH v8 25/52] perf jevents: Add ILP 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" 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/amd_metrics.py | 37 ++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/tools/perf/pmu-events/amd_metrics.py b/tools/perf/pmu-events/a= md_metrics.py index 53f7c2198147..9a39e23075b8 100755 --- a/tools/perf/pmu-events/amd_metrics.py +++ b/tools/perf/pmu-events/amd_metrics.py @@ -121,6 +121,42 @@ def AmdBr(): description=3D"breakdown of retired branch instruct= ions") =20 =20 +def AmdIlp() -> MetricGroup: + tsc =3D Event("msr/tsc/") + c0 =3D Event("msr/mperf/") + low =3D tsc - c0 + inst_ret =3D Event("ex_ret_instr") + inst_ret_c =3D [Event(f"{inst_ret.name}/cmask=3D{x}/") for x in range(= 1, 6)] + ilp =3D [d_ratio(max(inst_ret_c[x] - inst_ret_c[x + 1], 0), cycles) + for x in range(0, 4)] + ilp.append(d_ratio(inst_ret_c[4], 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 AmdDtlb() -> Optional[MetricGroup]: global _zen_model if _zen_model >=3D 4: @@ -600,6 +636,7 @@ def main() -> None: =20 all_metrics =3D MetricGroup("", [ AmdBr(), + AmdIlp(), AmdDtlb(), AmdItlb(), AmdLdSt(), --=20 2.51.2.1041.gc1ab5b90ca-goog From nobody Tue Dec 9 02:54:00 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 533F22C0272 for ; Thu, 13 Nov 2025 03:21:44 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.202 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763004105; cv=none; b=Z5xkMQwcVILz0+IhlLrQyc/QkSPHtWBo6G22Ei5VuOCacQcGPrrKiVYxj7AM54SzeD6fHpOEa9D73rK1TjKblAJfecZoKAfGSNqOQtoo1kQ+z6LHTJ08JbcoyAkmqTVWQEBB90sKSmCb6COwJ+Ax7jdoTKmtEk8vZyGWtWImv88= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763004105; c=relaxed/simple; bh=pV+WNDCnQhxRvnfIi+n4K9mLvGVMQOvtB4c39yFsGdc=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=UpsRi2o56wJgECiILXZOS0wbvqYsSruK6t/2oWMs0cSO3qvu/o0yVcFay+WAKjO73GAOlv1re/vBGqYjTHNZZGACi81KDUT+4u16xqWzABzACfS9veyfTUwzycEU1eiuGd0iJytnlihfq8X5yYXKaZQl2EbeQBikW8WxQf4tiUU= 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=I2/eN7Md; 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="I2/eN7Md" Received: by mail-pl1-f202.google.com with SMTP id d9443c01a7336-29845b18d1aso4342115ad.1 for ; Wed, 12 Nov 2025 19:21:44 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1763004104; x=1763608904; 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=IPV3zg9wSus+6cMKVH3VLLLSx6vn2lsxLF5v17k7AMs=; b=I2/eN7MdPqlKe6MgnqD5pPzgkjYUrVdRy7RMcLMDve5rWqxFAX5jNiESDLXV0qwAEc MohaUum6nd/K00AxsbmijaXdEHWcNqF55vhbhFqkXwCzWjvGc3oe1uSVJvkNGciKRdAQ lBqSOjpEr6V1DQ2WNzhalAdOZRD+KQv8i0MqIFCmUvoixXb8WhSmou+Nawj1FDLmjXyp 22jZOPMHE18MC99MsvKz6XP8eyjp3zHof814BVjcfScNdxRw3HjkCwoD9Ru8pF17nov8 Xs2KsYtpWlIxBU/iARG3ybS82zR9k9OYvdDYsNm0woaNdB2KzzWYRdhryNTZ71pnZREV RgBw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1763004104; x=1763608904; 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=IPV3zg9wSus+6cMKVH3VLLLSx6vn2lsxLF5v17k7AMs=; b=ZLjj1GoBdlJL/FWC0f1HTMjirgXvZWWdxD3ack445YbpE9vuK7/tSAzuR+GQxu4/Di GVYV7ntNkpQwF4E/0F4lCruc50ry9PtjtGEylh+uU0IVxHhI918Nc1dmwwNw9kEF4+99 UPkXNSPBlUF5sjvTbFciLypCIn4YreFPDatjSWEYizO0aQiaIim+k0sFwDouh855uzRl xkwSU76+3Bkl+dwBY8dZrGghdlPtLaKICnzhv6cPgkoKMQeMMOKWZTKFAqzOiAbcLRB4 8M3KpcM67Ijr9+exvOMgZh7qQBu8J8QXmj1+VL/bXaXEvfk28YuUsE0iSEJRfOOMDaTf UUHA== X-Forwarded-Encrypted: i=1; AJvYcCXLl6Mi4OkQJdowAgllJl1angwzykfJGJLv1Iu2jiY3RzYNpKoKlGuJX0SaZeGXtvvDWXNfU1R2Sgl8G/s=@vger.kernel.org X-Gm-Message-State: AOJu0YwQz8Wh0FyZB4s8Sn1Gk9a9MlptXQ4Fq/WhprWWxnXY9M7EzTsA UBODFmMmDZi4IaDQIlXN5ai4d+HsH1M4Q58IKz+FPglnzEB0dmZpEKllt5NEF7cRTqoCx/SxKmD hUJv2iD8f8A== X-Google-Smtp-Source: AGHT+IH5cxaVcOC+y4AvBWvi6GKryT0Q2SJ3dneyb+9AFzWpTx/cspqaQ01uen/DoDcrnOuBsV81qjgbqpSK X-Received: from dlbbk11.prod.google.com ([2002:a05:7022:428b:b0:11a:3780:4b65]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a17:903:11c8:b0:295:5dbe:f629 with SMTP id d9443c01a7336-2984ed2b8bamr51947665ad.8.1763004103707; Wed, 12 Nov 2025 19:21:43 -0800 (PST) Date: Wed, 12 Nov 2025 19:20:14 -0800 In-Reply-To: <20251113032040.1994090-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: <20251113032040.1994090-1-irogers@google.com> X-Mailer: git-send-email 2.51.2.1041.gc1ab5b90ca-goog Message-ID: <20251113032040.1994090-27-irogers@google.com> Subject: [PATCH v8 26/52] 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 Tested-by: Thomas Falcon --- 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 9a39e23075b8..da50337557f5 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 AmdIlp() -> MetricGroup: tsc =3D Event("msr/tsc/") c0 =3D Event("msr/mperf/") @@ -636,6 +668,7 @@ def main() -> None: =20 all_metrics =3D MetricGroup("", [ AmdBr(), + AmdCtxSw(), AmdIlp(), AmdDtlb(), AmdItlb(), --=20 2.51.2.1041.gc1ab5b90ca-goog From nobody Tue Dec 9 02:54:00 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 4C5EB311972 for ; Thu, 13 Nov 2025 03:21:46 +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=1763004107; cv=none; b=H7Ctx/r4cs8zH4w8qhXncSp9X4EQ2ShGkmxSOAmiv1y/lmlJUewLGaGEOh4dmlO52/JVWAuQH4pR8b6HwZFx/4q+kTFO+M8H4OUKsHeVkshAEMQTc9dgCrIQoEz39rS7i+170uRiJIQsQjeBie/DQeBkOsrcFYpAQ38sHYGpIoI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763004107; c=relaxed/simple; bh=Rmc9Mk2TJjPkxXKIysWO7v4RwsuKdTzi2KzZQqaQhXk=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=tC1W8abpI9lH4nWcBfFzqiEXy3+yk3Gln2CHYokwFfs//XaUI1LqQLH25priKER26WxouSXdSipXaarhhgGJd2hcFTslBUUYy0j6NOleQ2Q//ITiRU5GpxIALAkM6c+py49pDbQAp/jBttKmfnswR1INE4lacegfO2CzIkANv9U= 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=V3NpyqWD; 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="V3NpyqWD" Received: by mail-pl1-f202.google.com with SMTP id d9443c01a7336-297dfae179bso9355175ad.1 for ; Wed, 12 Nov 2025 19:21:46 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1763004106; x=1763608906; 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=e0W7qHWjzgq/3SCrJVDITzZnKeDXcVKJLkbQQBm9xDY=; b=V3NpyqWDgk3sQDGiu1wpMWcQODOcr0XOZ6w/1GcalLYdWEYkTZ6Cc4f0hJAhyFTo0w mwYbxO3b5+uSy2DkgolVZnWNEE4faCsmQBRtn23zCPqlvdVqrUbuhxf/OLi4K+KuSGDg QZu13y+wlAmSIphJMGV06FlyYv4jgnmgVv40p4Wbdd9UN6N7w1aKQqGT3upLQbMgsBMe 1m64l1Zo8DAu6GcStIznslPGpF/VbvMYDLwzR0h96fVE3LZaEpT6gJk8P4efFhEezHbb F61Vf0CVhE58xafp5JwFTskon/lOWZaO8twkN9pIiXchB/mhsnTCFVHhkW4CzZ54qbit KchQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1763004106; x=1763608906; 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=e0W7qHWjzgq/3SCrJVDITzZnKeDXcVKJLkbQQBm9xDY=; b=AQu7OH50mdz01qwwQzX1CggoCZSxOi6Xig/1uDbjKjDwms2jFBvBLgR3PP/AF3G8lo 0E9JSyvPwr8GwoI0wKO2IpEqMCSL07G2CHgNayga9Bbd85D40had2pPGqN9EegwAxSXT 10VIl9wTC3Vm8PAcyEx4Idb1F7UoyBYwKGnwg2Pxdk4ENqQihmlUarac4SMrTuYld8wt Fh2nRQrizH4Ci+LNU3jQfJXVKMMRJf7vRGV5x+Ku0JqRHameb4ZT1SFkteExdbjoKf2o pzXZYs71568K5pBqgd+81H8C1URwUzWFksleN4uzGZTycjFx1OGQ0S+c+MxaOtBfdM8q ZdKg== X-Forwarded-Encrypted: i=1; AJvYcCVkt6LORaw0bzc2fP5wIzqJWdTI3Y0bmT+hiFJhpD7MyQlrJTLqb8tI0voAEZIwzeEvnLizwoYkPn1iy58=@vger.kernel.org X-Gm-Message-State: AOJu0YwL5KlcPG0h803JnBbHmRaLjGu2guUPr0IiyQZH6svEL5rYyUKP WW4dpFJShXq0Wo8X96qreqggTXLfx60lJqpxAxuxlfko3S4+kIOIcDVp6Z36TZHX5zDMbDu2S2l Kjv9f3QROLw== X-Google-Smtp-Source: AGHT+IG5cvHQFAflj/H8F7q4YKM+/R9l4w5HKkSJGiLnEJH7d4s/It9+n5wruHokl7Doy4p99h6ZlWrh64Je X-Received: from dlaj11.prod.google.com ([2002:a05:701b:280b:b0:119:96ef:3b41]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a17:903:4b07:b0:298:3892:3275 with SMTP id d9443c01a7336-2984ede9997mr68944055ad.54.1763004105623; Wed, 12 Nov 2025 19:21:45 -0800 (PST) Date: Wed, 12 Nov 2025 19:20:15 -0800 In-Reply-To: <20251113032040.1994090-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: <20251113032040.1994090-1-irogers@google.com> X-Mailer: git-send-email 2.51.2.1041.gc1ab5b90ca-goog Message-ID: <20251113032040.1994090-28-irogers@google.com> Subject: [PATCH v8 27/52] perf jevents: Add uop cache hit/miss rates 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 giving ratio of uop cache hits to misses. Signed-off-by: Ian Rogers Reviewed-by: Sandipan Das Tested-by: Thomas Falcon --- tools/perf/pmu-events/amd_metrics.py | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/tools/perf/pmu-events/amd_metrics.py b/tools/perf/pmu-events/a= md_metrics.py index da50337557f5..b2e3e2883022 100755 --- a/tools/perf/pmu-events/amd_metrics.py +++ b/tools/perf/pmu-events/amd_metrics.py @@ -584,6 +584,23 @@ def AmdSwpf() -> Optional[MetricGroup]: description=3D"Software prefetch breakdown (CCX L3 = =3D L3 of current thread, Loc CCX =3D CCX cache on some socket)") =20 =20 +def AmdUopCache() -> Optional[MetricGroup]: + try: + op_cache_hit =3D Event("op_cache_hit_miss.op_cache_hit") + op_cache_miss =3D Event("op_cache_hit_miss.op_cache_miss") + except: + return None + op_cache_total =3D op_cache_hit + op_cache_miss + return MetricGroup("lpm_uop_cache", [ + Metric("lpm_uop_cache_hit_ratio", "Uop cache full or partial hits = rate", + d_ratio(op_cache_hit, op_cache_total), + "100%"), + Metric("lpm_uop_cache_miss_ratio", "Uop cache misses rate", + d_ratio(op_cache_miss, op_cache_total), + "100%"), + ], description=3D"Micro-op (uop) hit and miss rates.") + + def AmdUpc() -> Metric: ops =3D Event("ex_ret_ops", "ex_ret_cops") upc =3D d_ratio(ops, smt_cycles) @@ -675,6 +692,7 @@ def main() -> None: AmdLdSt(), AmdHwpf(), AmdSwpf(), + AmdUopCache(), AmdUpc(), Idle(), Rapl(), --=20 2.51.2.1041.gc1ab5b90ca-goog From nobody Tue Dec 9 02:54:00 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 1E8AD3128A2 for ; Thu, 13 Nov 2025 03:21:48 +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=1763004109; cv=none; b=pXq3zAcWTpaa5XMAzHT5oRKxAdB91AanBTK1HRrD4hio+wF2SMICwfCy+Rwxrq3SBTb6PY3zTZO73s5yApOUTpmg+35V6cB8syaKqLFuCtNbNgIAk6Y6boFjIzOrQ36CHIKUrNZqu9J0g1eAaRLtwu/3oqmtiGh+mxvHI5Fj9NE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763004109; c=relaxed/simple; bh=r2UrYhm61SD5yyLdoCmXN9BNEALAkgCmf/uykNFhzbs=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=W1JF5j6Zu7iIMHIMXIoTQiWw933twjKaawmp/c6jafOraG0NfLvHcdBVZ/N2vaFRhMxQpU2vtP8o7PNiIXMnnVdyLANJelSIyXTJoobwNgZr8NOyRjxniaLaFHVljwSpqdv1fkBDLNbQgOT/x6vhdyQqWL/wlvGzPyreUwqkoys= 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=TglDNn2e; 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="TglDNn2e" Received: by mail-pl1-f202.google.com with SMTP id d9443c01a7336-297dabf9fd0so4714205ad.0 for ; Wed, 12 Nov 2025 19:21:48 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1763004107; x=1763608907; 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=JoGi9rMbDF7B/whY6ilXVrwbEGhJJ6yZ28PC3lW6tN0=; b=TglDNn2eNCLp8XVD8URaP5R5lYsZ7vjziNNDiRngr7HAtIjsFbefELPlHhsHpQa4ZE 9cSBDZbtRqf5/jIt13/iqB1Z72ePmHt7lOYmH8IAxu2ZWrnlHhybUQYV2sRkWL9UV+Fs tJmVkjqLjw9Hwk6fB55xTe+nsm6Y2Z974e70qU0vJxfkoBFs39y8iGouEhOabIK8ucOp 2G5tTEumFChBgY+sA5AW7ibyhagk9Rr4sJ3ar0m2tWYEJCDD2IATZ6PZRjQ455tRfkag wT8fBvxmGBK1xRIb/MpUuEVImDDDToBRr/T90+yN4HYoz1VuW5x9w7CciJTcflwTq/l6 S4/g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1763004107; x=1763608907; 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=JoGi9rMbDF7B/whY6ilXVrwbEGhJJ6yZ28PC3lW6tN0=; b=gZ0QYgA1XUfzUd1csMt7rIGCryu8kA8maH0efS26FFYJQQY3qr5Yq9nGiVRwfELZjh RGfPiwHtKVF5ol0XTkXbltFe589V4k0GQ83ylOO1Oisc5pmX+wJ75+szXh0+qCYEsJec m/8i7ubWCrggOXCft3xOuB4Uleo6dbDxM0T5QprpQYR+8/8KevSc9v784x3IaJT59TzT qXTfOIdisfgW6/Q2QlGN/+/R+wvYVG7sw68uha8M6EhBI7b7MCuHqr3Dufs1hqw1vMl9 grJxavN5/89jnnI9jof1M2SCzTK00o+DI9yInZ0F/vl6AQk9rGLNfJoEaGwL1i/UcPMd oExQ== X-Forwarded-Encrypted: i=1; AJvYcCUP2/HKSN3xQhphezgdEXJ8uODUwJIEEGDDuQ6ZUJj7iF2revc2OkBJwKzdWowKV13mu8Swbcbvk/eWyfc=@vger.kernel.org X-Gm-Message-State: AOJu0YySNw5gPCym0CZsceozNLh/2rSgTWolz/c5o9XDYqiyNSEYVxP7 UkDlf4Qwu1sFsghB42QD1bEmSw6+Ves/Hqh02tdltGaX5iVv/nAGaxV1q9wGJa+HtTDG5Ewt7/s 52rp5yzOLxw== X-Google-Smtp-Source: AGHT+IFQG9GOkIf+nEvNCrJHxVthUiVLmkbajCBpSFkcPYvO21PGGwzhRTrNJ9xIQOxHi5Yji/heyhnMYr9K X-Received: from dybkl22.prod.google.com ([2002:a05:7301:d16:b0:2a2:4de5:16b9]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a17:903:32c6:b0:290:c0d7:237e with SMTP id d9443c01a7336-2984eda983dmr72287705ad.39.1763004107564; Wed, 12 Nov 2025 19:21:47 -0800 (PST) Date: Wed, 12 Nov 2025 19:20:16 -0800 In-Reply-To: <20251113032040.1994090-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: <20251113032040.1994090-1-irogers@google.com> X-Mailer: git-send-email 2.51.2.1041.gc1ab5b90ca-goog Message-ID: <20251113032040.1994090-29-irogers@google.com> Subject: [PATCH v8 28/52] 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.51.2.1041.gc1ab5b90ca-goog From nobody Tue Dec 9 02:54:00 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 22E83313E24 for ; Thu, 13 Nov 2025 03:21: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=1763004111; cv=none; b=is5W+bw/w0V/v9IY3E5XtcnIkoBmLemZqIio+3GhAyr9i2i6ihFIYD1lJIpf8tBg9oAQB2FkW7brHMtppcYu5cuDGpk1sR/pAQoscdKXX74UpaynBo85X5wR25el1oMscMCJmUZcvwtgE0ml03/NcxyH0j47rsMMnpK0lxKVGaA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763004111; c=relaxed/simple; bh=bHvFtE4aYOBFNZd/vQByOkidF4rhlFtBRoKPcO3DQF0=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=rFat6dKFCmOcXJM8WfHPj4dKOmUE2XucCFbXqd1tdCU6sO8nQse3i3dCTWAhN6RkAVtC1Rq1/TTtSyOsYmfCr6+13AY7+A8j7GtaeCL4Notd6JhUymqKganOdg4kgN68qKV2VzatjniSKJODIJMSor0XlrDL+8viAhfw2BKhhHs= 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=qCIEOIV+; 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="qCIEOIV+" Received: by mail-pg1-f202.google.com with SMTP id 41be03b00d2f7-b9d73d57328so326975a12.1 for ; Wed, 12 Nov 2025 19:21:50 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1763004109; x=1763608909; 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=dUfD60rISo+k9JtkAjKYR1UHW6lfVIwWkmpIaKaNt/M=; b=qCIEOIV+BEdi4C/G20m/L0gFsATVXVMvz3IVtjgiPy5wWAG4ia4t2emQfkWFWCvX8P MAnXMtDMoJtdfaVbDA4NEFpaCQrWaeQ/Z9EeSaphUbtstNv9T+ORYFbCQsXBT9BCivGN oHJAsRZEw9TFdX37/sJjougiy5GyzgSbMZBixgVaiVtQl7VkGg/YldvD2/Q0Np06hPhY JftThw9XVeftn/rsjFp3sD6QbUiSdC0q6hMt7ZcrYaD0pxnAWOjFYIUehSd6u1wC1DVU duvQ1eNyRPvJj4eRxs0GIxYWf7/bbVFJcuVlqChFxlIUA9YAj90+vt6D6j/dipl/0gJL 3BRQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1763004109; x=1763608909; 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=dUfD60rISo+k9JtkAjKYR1UHW6lfVIwWkmpIaKaNt/M=; b=qSx6+7vAcW8bq7bWECrYuZPr18/9vbA5ApcvwuQ1ObNB8ZwWCTYmnCTkJSNOX2s8xY AWEmAuUFZEEAw3GcRb+3RGdplEjdKvQu6gV0q18iRKTOYs9QvOFczBNd3oYORVr+B9hG XcEA4Uty8NQJY3zr52iA4/sdnK6gR9clSibZEqMswE7yLf4UxBVwZWNAyIc9ceVrqRG9 AOgNF06WN2ZMchlaXU3MR+BYW0utYerG+IYdieZa52hnN6wYuwVh9h4wHIwZ7QYCUbc4 0O/sS0d/s5G6nqa+dl/oeRA3224M8AjcKD6bWPGK36GKBtttWrghnFZSocey1DXicost Er9A== X-Forwarded-Encrypted: i=1; AJvYcCU7uc/2CyfLI58166QK1aaJvQS9Ir00hQ2xFf8VdykZRjcFK7BhvlgNLif4UHfR4dEdtbwQhWzKXhC0TBo=@vger.kernel.org X-Gm-Message-State: AOJu0Yz1BfWs3SgGtr399ZHus93yRZutYpCrAI2k910/yAVRx11FI+Qh /CjYLvvnpSmWy4IxEanAebwQj+6v8vAhz3TZ4c7jgoKu6t1uvdx2nvAYWkGD6d6uVihFnutgtSs ia9rF6bTDXg== X-Google-Smtp-Source: AGHT+IFs5u4ROWbpZd/4BhunaP6M1PonK2/Ce4fD0dFAnkjTPUIRD+anTyFRoghu6YlPZnCBPcCSsEbEULgb X-Received: from dlbbq19.prod.google.com ([2002:a05:7022:6713:b0:11b:1a9a:d2e8]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a17:903:286:b0:298:8ec:9993 with SMTP id d9443c01a7336-2984edc8d47mr69733895ad.38.1763004109471; Wed, 12 Nov 2025 19:21:49 -0800 (PST) Date: Wed, 12 Nov 2025 19:20:17 -0800 In-Reply-To: <20251113032040.1994090-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: <20251113032040.1994090-1-irogers@google.com> X-Mailer: git-send-email 2.51.2.1041.gc1ab5b90ca-goog Message-ID: <20251113032040.1994090-30-irogers@google.com> Subject: [PATCH v8 29/52] 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.51.2.1041.gc1ab5b90ca-goog From nobody Tue Dec 9 02:54:00 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 511EC3148CE for ; Thu, 13 Nov 2025 03:21:52 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763004113; cv=none; b=FaKG/1V3pkasKXAqgTbACyEZZcVcKLB2h0fJzycXvshPnN2Le3+j4dudAGrFm43JZfSj5pXiNzbz3V8Zw8LaAJFKInMLZKF3F4sVVgwShYnjD508gle3eLcB3Moiz1MGW/EOdsa2kvVUtofnrWSjWBM4rLsHomGBtYzR2JXA21Q= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763004113; c=relaxed/simple; bh=dtrcmDW/syC/1uX9xiFrYNyeKD9cKYmOXKfr3PnzzHU=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=AYP3qesZ8Wlq0wXmeeoDfNCMjLAD6iOF70zLSxSwFov2MhC+rbIB9LxsbeGUlcODhZfhRGemYLXExSb4BBKVxU3LmvDKL/hGorGWh4Sm+MrtiyS119UfMt2vW/KYP/rm0JJJbW3lv4cWmvWUUB0tYMK++D8oVXuuM737WYZSvSI= 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=NQkcQQAr; 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="NQkcQQAr" Received: by mail-pl1-f201.google.com with SMTP id d9443c01a7336-29809acd049so4386805ad.3 for ; Wed, 12 Nov 2025 19:21:52 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1763004112; x=1763608912; 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=YmEuf1+eWrnDRkHWvOdDXellq4Hkis7ltgRYwnn7UgQ=; b=NQkcQQArSCJeI8oK7n88gtgksjeTe92hgvn9NTMy1DGBpLK8hjhBsebY5/u20E3Lxl 9KeDLFf+MA72ggGpkRvydpWrrD2rllvn/JMLJrOCM1XGnz0sEfC9JiAAc1nDNqxg7F0u Ck6zVXxrOPRO2zrijAktDlg/5rtV7rdqoTVRCHNu3VnHrHx81oiOADpCOcGyuWZQZU7e gYhvGAq1GiYeQeEcMVgyLaI7VR51nWP8DikgnkWPFbEjdj4iM+DhznBi7gWCENCDBxof +0yAc1k9ysvWCkOe3pGjH2ooQDLKnc8FpLwVIoPnDcZKWAyoSbtfn0+pOD0AWVwJzZew wtQQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1763004112; x=1763608912; 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=YmEuf1+eWrnDRkHWvOdDXellq4Hkis7ltgRYwnn7UgQ=; b=Ugyu/gFM8MP4wG++pm0J93Rzmqi1/mgVqZXdUgnvjVFKVi8fjFHB8WSZtkhHuM1qI2 j+fx7EbfyHQd6X4jrEyhdjk3icEbcuUVnCG2lG4czFBk1IFCl7cFyExp+oBik32pOe7S KBrljdeQi2g/rn1dLEoAraY0RLx4W3r2FRp5gMXUGIns9QZ20d1zMr+QADEwelPAvm5g +7C4ku/+4XoinHLoPMp0rtUkCTvB5UykyqFpMq5/kMWa5O266P0ar4lz5TCEu6PO5Z0D QgWmiACnu6cqtkPJZaIUEbgAcPbIvfdpcrEukXDO1QDeviBYGs6KMmKB840OoCHjnpVX ngDw== X-Forwarded-Encrypted: i=1; AJvYcCUCVhzgb9aGUQ53wQpC7V4Sg6wCObOjRoB/io90/eTjxrzYEUNs6JRF/uPqlqSnDdVK6baGfOYiXL7MGko=@vger.kernel.org X-Gm-Message-State: AOJu0YyDb1StzHRf+059QPy8lfW5K2AhlJaX0eKvo53AUgT6rHAak7tO kn0R6DSC3bripLnsdIy6wEfJpwBKQK6o9WtgFPICa8MCXTmp0cU93vFrN7FVyBnibQqHygoWM4H 3yYRRys+LGA== X-Google-Smtp-Source: AGHT+IELChdLGepD16cMdJFlCGSq1vQv0//kOzXIur+0B6dP8L4hB1a2ag4vLjYxov3UcU9S5KBpkbBCw231 X-Received: from dlbqj6.prod.google.com ([2002:a05:7022:ec06:b0:11a:4c58:f398]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a17:903:944:b0:295:32ea:4cf6 with SMTP id d9443c01a7336-2984ed27f0emr67157975ad.5.1763004111750; Wed, 12 Nov 2025 19:21:51 -0800 (PST) Date: Wed, 12 Nov 2025 19:20:18 -0800 In-Reply-To: <20251113032040.1994090-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: <20251113032040.1994090-1-irogers@google.com> X-Mailer: git-send-email 2.51.2.1041.gc1ab5b90ca-goog Message-ID: <20251113032040.1994090-31-irogers@google.com> Subject: [PATCH v8 30/52] 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.51.2.1041.gc1ab5b90ca-goog From nobody Tue Dec 9 02:54:00 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 78C25314B6F for ; Thu, 13 Nov 2025 03:21:54 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.73 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763004115; cv=none; b=GpYyJfWsXUigd+sqXOtPAz4nf64SmvxfsSbabxyM0diiYQp9nuIQzfu3aBD8B0gZph0ofKPUFU1XlE7+IhwYwP7v1HSOv7jNr6181D+An72G86+9qq1gJG+n4zHWFCVqlWAaDZVEzMVdw1ilXT7RQ+BM4I0W/Mf975F91YtfuOA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763004115; c=relaxed/simple; bh=Jy2cgwkW8egeRyoWoxnsS1FRkzQntRaPKtYKZlle4Ps=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=O3ornAIdIgQ7HR3M68m7EWiFRUD1BlZPul94VjWod76cfl4dzg3CEv34Kts6hk7etNdKhlS/k17NFpnue6kY7L8m6iF1/kleJMoAdCPLrdPG/+apFukbm2Z5JQKMu31gc2HQhOFx2AzHcfetCw4e8w0wWO1FiiAnPJ0GX6ys0VA= 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=hGVU/pAi; 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="hGVU/pAi" Received: by mail-pj1-f73.google.com with SMTP id 98e67ed59e1d1-3438744f12fso977349a91.2 for ; Wed, 12 Nov 2025 19:21:54 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1763004114; x=1763608914; 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=be31O21DKqYdn30DBEEULDpa1ih1KG6OFOnoEGhmwyw=; b=hGVU/pAi0fF+Jca8P0saH5+hxdzyys6U6qHTBT7iDAAFDQnOvEIfh7dAMWcUkBohfq YWbUgfbO7nd3Y9OCPAsEBRG03O0uTVgeyYKmiNrP0ozmF1OIPQrMhuiyqy01WrPLjduG 0Hduv9lmzdBBIJC4nfPl1Sx4HnvU2UuYIpmQbI7YWTlZxIz54/NZCDBqipI5jMWhAoxv bYS5ZaLlpHT15V6/fDdPi6mB3n/Y9VmO0q0XlXdR/rY/WRCKDNkAzb65KOPk/zHcAxQy tHAZqBAiJhjvzXv52e+fci3GSyrudmtHeZL+V7be3bsUIWEjeKaRLoxitqGZ1oujBOHF DvKw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1763004114; x=1763608914; 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=be31O21DKqYdn30DBEEULDpa1ih1KG6OFOnoEGhmwyw=; b=NYPtKgLeF/Nc8Cq0s+8dWrapVzI8GWulSrGryR6DbpKPs0EtPTCZ2Yg+5zvrz7/Jyt Ost3S7hhxntPy0Ws2TjZjmLss/famOJqanDIEdFhDIoixpGaWXLK5wr6o0l3Z4URgF2o eqNq2b4WjyTx9cb+LkihkoZGdnjr6F1FTSc4n93rKqOeN5UdD8oliyqoxcgE65n48zjx nWrmupkhtiaDm1BOUGgqciL2r+QFO6+0vOE3VXpfbfULCnnapLqngLs1HeHKDGyZfy/J 4i9VLlULa8FM3pUBcPUdN9lM2+OPMY6M6S157AwFpJcL4POzXaWQp0DEAMc1LOkMNbRP xP6w== X-Forwarded-Encrypted: i=1; AJvYcCWw+BoH3W7z8YQucjf/11yraWFyheeY4jOym8a3D0SMvYMjCFKfiWffclr0OqehTEr5WB3d2uhmiuxux5k=@vger.kernel.org X-Gm-Message-State: AOJu0Yxg9UvzGCpO36+1J+IBRD3cAZIUL27ZPQATWLomWVKO1zvks9M5 kY400hfyU8hih/jJp9iIreoufr4fx2jmWNam46UWCPfZHXXyXmK2oaNLUYDgLYsoSuaArqwSxsn hu6+R3dF+lQ== X-Google-Smtp-Source: AGHT+IE6YGfKGpcdjFv8IxcY4PacpJlwo1E8Hps9mVUIZNRMceoNams458BhggmeInfaI8A1J6bJLKwpOd5E X-Received: from dlbuy1.prod.google.com ([2002:a05:7022:1e01:b0:11a:1004:5049]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a17:90a:e7d2:b0:330:6f13:53fc with SMTP id 98e67ed59e1d1-343ddeda65bmr6317047a91.27.1763004113656; Wed, 12 Nov 2025 19:21:53 -0800 (PST) Date: Wed, 12 Nov 2025 19:20:19 -0800 In-Reply-To: <20251113032040.1994090-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: <20251113032040.1994090-1-irogers@google.com> X-Mailer: git-send-email 2.51.2.1041.gc1ab5b90ca-goog Message-ID: <20251113032040.1994090-32-irogers@google.com> Subject: [PATCH v8 31/52] 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.51.2.1041.gc1ab5b90ca-goog From nobody Tue Dec 9 02:54:00 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 DC3F4314B96 for ; Thu, 13 Nov 2025 03:21:55 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763004117; cv=none; b=tFXTkBJ/Uqx9OKR71Be1dHq5CJGJ0hRjbf7ZesW18frJEaN9n8KfSMqXckbusDF6OdjcimpjiKoqASbaxx13mQOG0LMHIav6WN2AhHMzBeBu0kHhdlzPHx7pNjavmv3k2NIMyJE1iDMzs9oUlEATz4wKYbTudeylGLSqe3KawwA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763004117; c=relaxed/simple; bh=z5RnlpBZPvfr6INpWnWxPkma/Gch1LEd0hqJhYDXnfA=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=C/MYUIByToCMclsWKQwzsgpDSgiCcrZhHVe8DVfH9EVBqelmrK+i89kY+SzHU9jo0JGsu7MVe7nqDeuGDP/iwuQ701fKCdnVTFn6K5OPSELnOJPt4HNPauNAAvjFyshz/HN2r8k7MsJK0FuXckiKYeFiSrSCwB4j/C/N6xMh4H8= 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=gPU6hhSe; 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="gPU6hhSe" Received: by mail-pl1-f201.google.com with SMTP id d9443c01a7336-2982dec5ccbso8008835ad.3 for ; Wed, 12 Nov 2025 19:21:55 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1763004115; x=1763608915; 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=UmcjKuNFcJHZDe7xzYJ1gZ2K+daO0s8XALlHIa8vs3M=; b=gPU6hhSewe+CshiPg0Gt4zxBB4psQur9SdgNdowp4ws+fsxfTvxxHC0S//k08hihLV SVLRDD/09e9SfKpwsgs6ftXVeFzTSfsOB+WhmcS69XDIz8lc7XRToj1Fs3rhz//6UFQa gX6g5Pz0Wd05MlAM67r6wnOTS387Y5yA4EsQ/25IeeOFie5pwEY583S/qNMRRtJkTxPl nZoIAneyk/lp+uwLGkZ02qbPakIL1/WR3Ix7y2e8h88LsIQnSxzadpn/OWy9pcg7YDiS 6g2MW7DPW4E6VovrS+gc1WXNhNt+nHNjdXKdqQZYiShGACJXDLUdgBylMSOoG0IjQXWx VvzA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1763004115; x=1763608915; 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=UmcjKuNFcJHZDe7xzYJ1gZ2K+daO0s8XALlHIa8vs3M=; b=RxRq2GBNq7ofk+54WjgFh9OEftw5DDr8b+ncj+XgKqrL9P3r6nYxB2fjSW/Rj6i4Qn tjDh9BwYKQrerhvPRgjelar7fCPxYremM2QPkTpUo1zaiq6CqV0srrcU6Y3QJ4sWicgi lMjLAQ83REXggV+u/RDltaCcD2i6VzR/fpQzSbuBXLXF7ueJ3uy+mtIZK6+LXw1QRCgZ zg8JwOCBbEYT0C+yNR6XPayOyrLBmlQnIDLJ0P7KJjW7FF871ziozVPz2dF5zScP2e7A QBIH6n2Ur3srRbUqzPEU7OLpc3X1TyVbyZG24JRgCcXolgs8pNh9d65a14O1J7Z3K8ds gtKA== X-Forwarded-Encrypted: i=1; AJvYcCVUhL/84g4dlHik9YLJtwo+JUs6Rn/dqUt6bUHUn0KZTvZAUJbzXbFIzWQACHVe9Ug9NOp6LZTQp1lJyf8=@vger.kernel.org X-Gm-Message-State: AOJu0YxFPT71lJ2WrGRchdk40WUHnjXefraZtIUbPiacD9B5ocYUPPEt xWJCUJtOttosu8tMHjXmRrkObCuVUgEln/pY1Qt/m70MO184Vtn5U9NAw4IIJOG40P1gawX2MJf 4amoAnFWXTQ== X-Google-Smtp-Source: AGHT+IHOUSMLa1YSvCkaGBpoVfvjCLq+Pz6jwy7ndCEZnQHlKP1tEJmdy8fGKp7SvMwY2P4ptvvIxoxDtYWx X-Received: from dyboc10.prod.google.com ([2002:a05:7301:3f0a:b0:2a4:559f:7c4e]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a17:903:11c6:b0:297:d4e7:3066 with SMTP id d9443c01a7336-2984ed490b0mr70140925ad.18.1763004115321; Wed, 12 Nov 2025 19:21:55 -0800 (PST) Date: Wed, 12 Nov 2025 19:20:20 -0800 In-Reply-To: <20251113032040.1994090-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: <20251113032040.1994090-1-irogers@google.com> X-Mailer: git-send-email 2.51.2.1041.gc1ab5b90ca-goog Message-ID: <20251113032040.1994090-33-irogers@google.com> Subject: [PATCH v8 32/52] 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.51.2.1041.gc1ab5b90ca-goog From nobody Tue Dec 9 02:54:00 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 DC40D315775 for ; Thu, 13 Nov 2025 03:21:57 +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=1763004119; cv=none; b=HR9eBJbyCXY2MFfDiSDhZC1oQZYtFceQvVysTzcZJ1PEGBAngo9wgwtFp8op+ruZG67jMfMko3QeWxUP/A4noXY61oJMi7eyhdwAjJvOHCiPYxjjN9+V0qrElbq6SIc3oc7Vxgf7nW1agNakJVYd4229Bqd3V63uYCaWAa/zvX4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763004119; c=relaxed/simple; bh=LsyKcinNr3CPTX48GcFwcCHhWozpCKc5nBdCv3vLTew=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=XPp7RyjJ0N2ROsQZzl6D+juGeVT9nlfwA+M/BvbJ91MgVMgMStfbW2Tgn4u+jAmqlSQW7ofOwR2eaXHjZ+a+u0EUrKVSs+q/yMiwHRn48ZgBEjcJjqRJAJn1b4KZukLZyNhlldyiQd8SQExOWqtHDduQO/IHaoqs/HcHdXuuI+Y= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--irogers.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=I88IU/Kh; 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="I88IU/Kh" Received: by mail-pl1-f202.google.com with SMTP id d9443c01a7336-297dabf9fd0so4715175ad.0 for ; Wed, 12 Nov 2025 19:21:57 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1763004117; x=1763608917; 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=dNV1+CYAP59mMY84k0p51lR2XkbcJc2V/Ohr57nRnzk=; b=I88IU/Khfnv2a4sAYh+9ro7eYUXlVv3q9fyoxFREnojK4BQZP1C9xkDEMBOIs13CX2 s3pm4YWJ1S20ANgqKEqWA3tdj6SHxkoz/ctgjl6elnWQtwr61RYgEej7fj7Hz1V5SPIL 9UnV0CrGKVH9+dc9yh/JqguMx2ogfDUm1RGOQGIKPplo4Y0CjCQEMCIaJ8aWo6uyQnsK p0aCNtkz1kAS+HU+gZ1nlTE35EFxdniBMzEK3UGRhJ2xPkasIyVy+L8fPxH6yY3NJmYK eJTOhbuFeJLE74f0xtBxCWHXyM5qDFXiiBVLVGh19C7v5193t3QKZH5YZhRHMbVZgFXH ISgw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1763004117; x=1763608917; 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=dNV1+CYAP59mMY84k0p51lR2XkbcJc2V/Ohr57nRnzk=; b=Et2KXVMiCZ3px3On5cqeN3oMikLkRJwjJ1nIzEaoX493MobPpNcJNV0CtRKyYHFSzh nZ2gNL2qFQIytgO3UqyFcCyGeWNO3JkwRqZAzTd2LMbX1GUMyjhddfbBWq/eQphn7YMv nRBa7uaHSPyUzTi7hqQK6gv9JHsgM1bkK3MyDEGnrm8VFweJUjYn52o+pUd/1qShs6yV yR4bt75WGeuI7E37uWJ0aaKDF1p+xLrGH7MGvPQ7gmHc2wYma41vXS/VXos+DIUOH5SL 5xgFzxN5A931+jzMxppEBXI0SFmB50dVWzIYBNqZBpEiePqs5vFxGBFHecE79Xcv1c+F kkoQ== X-Forwarded-Encrypted: i=1; AJvYcCVrxVlvzpxHvzw+s9XZBctZXFnIUTIRU8xvUBrcnc9+f+8r29pCHw/JKqX6cU9emW/l3oIlaqMIYwSwMhI=@vger.kernel.org X-Gm-Message-State: AOJu0YygtynodekPV4iwfnyZMv7rCESg/GHnwYxj4Ej54C2PxujCwbvf 1Wr9dy54EWpJ1J71L/vtO8qrIfdjBTBr4+uiMMekaFCa+99wq1XSg1yvbZiAsrncSn1TrsyApOu gMJejZFwJzQ== X-Google-Smtp-Source: AGHT+IGA+Oqea8iVXOKqwkrhs9I9SGNm1GeMFGhgWmNebLYA/jXIr5+hkhGFbTjsFBUqXw5DiMYhNbZSyyJG X-Received: from dlqq42.prod.google.com ([2002:a05:7022:63aa:b0:119:c6ec:cc42]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a17:903:244a:b0:295:105:c87d with SMTP id d9443c01a7336-2984eda98ecmr62240625ad.32.1763004117305; Wed, 12 Nov 2025 19:21:57 -0800 (PST) Date: Wed, 12 Nov 2025 19:20:21 -0800 In-Reply-To: <20251113032040.1994090-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: <20251113032040.1994090-1-irogers@google.com> X-Mailer: git-send-email 2.51.2.1041.gc1ab5b90ca-goog Message-ID: <20251113032040.1994090-34-irogers@google.com> Subject: [PATCH v8 33/52] 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.51.2.1041.gc1ab5b90ca-goog From nobody Tue Dec 9 02:54:00 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 04B00315D46 for ; Thu, 13 Nov 2025 03:21: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=1763004121; cv=none; b=V/iTi2XAwKBHe3JXCyBgoWcoZjb3ZgtJZKBkCCgZ62LDRRhQwBhC+VcL1s3ciudw+Jzb9CYFKycO1fJXo2FiUaXclh2qNHLbg5r7IXE5ZS9KOFJvISyZKYeVV4Qnrk3ZULa8rmTYQrNZfn5uQfjcs2rPDJxw6J7tf+GFLEUDfEY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763004121; c=relaxed/simple; bh=oxIzzYTLoJauQ3Xfy3u0Yfn2TVadLlHIWXTHB0uMPH8=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=GR7PkVn0gPqWLyk1Wf7L+0ycjdQLHIGN/HCqTGtuZS9dJ13xCVW2z/dv8ijcYlRBLp1Jd9Qx5Tjsr2MScGQtrdG5Nm/6mtXDWNoIBeLtnwLNLKM1h68b3e2e1KbtcAX5zEMCtJOyv+ZScCgu2dAwJms8P+s7a2TWr8vm6xVBkHo= 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=xn2uJ1xW; 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="xn2uJ1xW" Received: by mail-pg1-f202.google.com with SMTP id 41be03b00d2f7-b57cf8dba28so373654a12.1 for ; Wed, 12 Nov 2025 19:21:59 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1763004119; x=1763608919; 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=TNA1vFEiDV2r0dzVcpCQuiLoeBw9oTVXKzmfAq51nag=; b=xn2uJ1xWPZwW9yPtPcigDyJUOIcRDcsGMbfFTXV+rEVVnJlN9A1u2D5nx2hHYOTBFt shvTr8XTbw3IDp4NwqwPK9mVDWrhY0B+C5zw03rqgNEyBE/QhbDtcIAGsQwra6ccpgWN FTBfI7DzRFXbGdYm/gs87UOZZ/Gv4jBxN67K3/wtQfbmgNO+JmSh5ZgoHe6WEpWAAZli zt7Js48rxmoHs9empSrZcbY1Q4tdZJl3CSUwFjdvGBu0BghHGVXzrMRBS+3AksEDIKLa Q1O6eWLtdae1NfQpDyhBcTxv+n3MUjVVycwxRWO0UAGGSq/EKj/Y1FK5cCI5AQhVKkwt EE0g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1763004119; x=1763608919; 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=TNA1vFEiDV2r0dzVcpCQuiLoeBw9oTVXKzmfAq51nag=; b=CeF9389XBw/GZ3LRmJnJ2pzNdR0L0TDgqI+lxfO9rx4B2AbY1fx0rnklPF4KEw0sOg QaRcFCkJNuprUZd1YCDr+9M0D1eY08FCPUF+4BZqmckEMNa17bi17ZVSwpi8xPH+hCZ8 b/K7ZeSeB8D1onIX8kpsGsnlp0ypoJGI77cOHIFB5NrOnH9YSb9ONthAaksrJqdpP1a7 V/H2Uc0tsfGftB3cIt+7Q0jHJEzkZv+KOFV7DQEHHQEsMcpRLsXP9K9Ke35EnN/WAT0J UxhkD2CwUsVwhjoq7pX6fhRJ3p5kmOyZspOTj6n7gzf7Fdmk75tmUtJ3XLBp8F1Vf6ng Nbqg== X-Forwarded-Encrypted: i=1; AJvYcCX88GjRfpw9BQUOpmbOCqcMpHHfXVJxIpCtxw3l+siP7acKncseQI40OI4mlXZCqv2R92kGBXdvOs3dSFg=@vger.kernel.org X-Gm-Message-State: AOJu0YyOQ4ry/ZXl6KYJYa3AntlYRYjqemQK/rxXmEGDkVDDHs2CGMbC U6SZPDpUEWLL16P1BxUThLi99ixSILp7Vc62/xWlQ9AShOo1klmANYYzPzrzRQNSUOEsj33mOPk WxkphYyU/hw== X-Google-Smtp-Source: AGHT+IFItK+UMqSWwk08n2wB4bbD3Yy9Whvf44yRIG3rO6c84NBNTJJrCvl8to5qym/IguSvlWizqtGKchKl X-Received: from pgbbm20.prod.google.com ([2002:a65:6e94:0:b0:ba6:5f4d:31b]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a20:7d8b:b0:350:31b3:218c with SMTP id adf61e73a8af0-359096951cfmr7194085637.19.1763004119265; Wed, 12 Nov 2025 19:21:59 -0800 (PST) Date: Wed, 12 Nov 2025 19:20:22 -0800 In-Reply-To: <20251113032040.1994090-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: <20251113032040.1994090-1-irogers@google.com> X-Mailer: git-send-email 2.51.2.1041.gc1ab5b90ca-goog Message-ID: <20251113032040.1994090-35-irogers@google.com> Subject: [PATCH v8 34/52] 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.51.2.1041.gc1ab5b90ca-goog From nobody Tue Dec 9 02:54:00 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 C5D5A31619B for ; Thu, 13 Nov 2025 03:22: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=1763004123; cv=none; b=afwDYyP9q0C81Z46/XLls63FcKLsmbtd/EyQbISdCDWlE3bvfaN6L+GE6Q+2XPNp1AqJOajMwB0VgJqxT1+Fy/OVKqgnOwdH/gaiLM+ocfnjg0700/yHpKXVnOdMpv5vRgHf7+e7w1MBHC8g2+QMABJBLA3yl/MXzvvMe6j/nh8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763004123; c=relaxed/simple; bh=yVmvGvYb7C+jMsZDbt7D5PQZZC8wRrAcVHDCtuGBsC0=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=OXPn3I+d0pW63ZHQDU4NTpTXraTuv2kfkUQZx+Bf52TJ3ZKnqCngHFZ8y7pIKDd4k/bFbuHA8vUtE/3drKhX7SQ52PtVzWkAYw6d/Meegn2kVrXMGAC9xmk97AxB96wXecPQWCpu3EDbkHM7UxDbAjTAKEPUJQo6bcfcqjzjpHM= 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=usfpI3SH; 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="usfpI3SH" Received: by mail-pg1-f202.google.com with SMTP id 41be03b00d2f7-b99d6bd6cc9so345878a12.1 for ; Wed, 12 Nov 2025 19:22:01 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1763004121; x=1763608921; 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=NGDim4Ss4cIrUgdOZW5zIcnGg/eQaYNuaW0FNpSWZdc=; b=usfpI3SHOniVPYIvmYbRkOO4NheNgDSrUAmiDSq6gWIHzamvbfbD3/Syp464PRu/PT VZV411bB8xboHxjLGddVx2/gS5MiE4xNoZgl9APOsb3m5i3d+oiyQK5WJ/m0e/+7y6YU PIYxyCJAjKLiTWvVS0KXX8ehjeRiK14DV4dDUBJNunt2YhWLDQ5ehD/sxsphFDLs1AM3 Jq2/i2FKwrL9QMlPGe+bIN8jKZK2uTLbnStRvt7hAD783Op4Vk9rOsTYMAXoxWEgxZkp GpoLoaDBj60MUfcbtRtIaAM+wW1/9E1Dwzg8IayfTQ7hZT76x6naNJxvzG3zlOIocPf7 MZsg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1763004121; x=1763608921; 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=NGDim4Ss4cIrUgdOZW5zIcnGg/eQaYNuaW0FNpSWZdc=; b=HdldeBmII6fFQvXIKDanX65CdLNZ5H6Z6P573KRHS3Em90yyuR0A3JFai2q2CSvsw6 ma121B4accenFUO47MteCIFTH9Lj1rNk4OkL1pkfIyrlb1wRcsmw4QTiFWscGWxBhv2o 3pOPZ8DuyxC2cGI8y0jrPbQEKiR0tWDSpN+ZzdilTz/UBvnK0EQ6o9sXVl1XpHTx6Tux z+mW4NYkuUSgdHYNNGTMBUscDVd4HXDVyi9m6PcgZ9LX/3SE+CCU0t2ZfJHeQFMXJmqn mxtdIMkDRMkVSC/da48BRjrB+uDAP8X32WWteUe7JwiyvhbtuYGB+kZBRb9lb34jM/BL 6Qcw== X-Forwarded-Encrypted: i=1; AJvYcCUhh0teNDlD++FVbzsylWzmoyJEc9iMCSzpUTTrbhlvA4UO3B1jIlqCd8VHu0/BxAceRlVed191ciPg00Y=@vger.kernel.org X-Gm-Message-State: AOJu0YwqKnRi5w2jRL8TSwdh0dnxnvY77/0a9uFWB1lGEEC5a5yvIXbv 7DpkWmew570GAk1CuQKWT+V4FdSB2T9r7tY9Gs8hLDydhNUu5rffbcAa4s4Xho4lFm5mw1EDBM3 oY91BCBnFTg== X-Google-Smtp-Source: AGHT+IEtX7wMRMEYuyE0bXrmIH0iCuyLNbVC9w/ucRaeW8uIrwt8nzLGat3rZT3vAZw+fsaXYqK5C8GB5OLi X-Received: from dlbvv20.prod.google.com ([2002:a05:7022:5f14:b0:119:c913:cce9]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a17:902:c94f:b0:295:888e:9fff with SMTP id d9443c01a7336-2984ed410f1mr74215585ad.20.1763004121277; Wed, 12 Nov 2025 19:22:01 -0800 (PST) Date: Wed, 12 Nov 2025 19:20:23 -0800 In-Reply-To: <20251113032040.1994090-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: <20251113032040.1994090-1-irogers@google.com> X-Mailer: git-send-email 2.51.2.1041.gc1ab5b90ca-goog Message-ID: <20251113032040.1994090-36-irogers@google.com> Subject: [PATCH v8 35/52] 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.51.2.1041.gc1ab5b90ca-goog From nobody Tue Dec 9 02:54:00 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 D69693164AA for ; Thu, 13 Nov 2025 03:22:03 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.202 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763004125; cv=none; b=iz0cxLTE085ZAmh9awb/Da/MoTJVGIBB6IJQ8PrONRi5o6MpXXj2nyBiHxAOomafgWC+BuYRlHbGUuqzIfstyV0ceJlY9bpapY4H9eclzmX9D6rVHLuo0l6JmQprvrKKSlrcguI1fdbH+YflNzAaxiLsxNKuH7z71t4fFKxOSxs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763004125; c=relaxed/simple; bh=ReOI/yw7wKiQdecqgoKq7L03iNCYJDFt1sIl3LZIdPI=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=S3XVmf2SIVgR+w/Zli1EIeX0MTvB4nwothAbIpfRBuQtaQQf9BY9QLBVfT2URYuKilxnsFxRlkWgLdfSN++XLwnsYZZhVUZxHFgIR4qpO0jfbvUySgpVU4Q+ILkJwafP+5ZVuO/5AbouDTuOTK5BiumVmIFRmkKHkpL+hif7RB0= 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=hrvfzhlX; 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="hrvfzhlX" Received: by mail-pl1-f202.google.com with SMTP id d9443c01a7336-2956cdcdc17so3960125ad.3 for ; Wed, 12 Nov 2025 19:22:03 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1763004123; x=1763608923; 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=TDpei4kCaCeIleN5UbRvrQ+OXCtwgMX3eQqxpgwlAMM=; b=hrvfzhlXLnvSHoUqjvM4McJKhrpRqPKr5YVYE9xY17CGjmB/xahJ2s6oMjMa1gNZGM uBgd0ihQ8zigY+LdKDrqGz8qHn4f5JUX52EnU0cP4nBK+I/ng/74QKCayKF0clz9Njo0 qK+A97feHHEF5EuerMR9dSb+QKVasCGUXE6VfB0OgNsqSyv47oeAie/wmABjHCI35W4+ HVQOPzdOU0ydqMXPQNg80IcXCoGRf4S0wyUBCHH2HHCo5btAZvDOcdN6D2guAsa+GnWy Cdt+AsNs5SWJkILUCRvO4P2jFg7t5FPTSMfSGh94+b55X/asVSgB3FnUh1xHNAX9FmK7 7IBA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1763004123; x=1763608923; 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=TDpei4kCaCeIleN5UbRvrQ+OXCtwgMX3eQqxpgwlAMM=; b=R/mg6WLz2PAqfHKIUZ7CzdZg0JIsMCtcXxG+kevikzYc5C1QVZhN2Wffoi50zoLm05 Hs28rzAcvNWN7Gjm3VV6aOXMnramUJsDepaI2yFTMxKF4zPl1E9eTbqjrKbjV70SKwBG +H0jN4PIM2gCirOl96JkWvkYe5sVCjDF6+o9Md1iGZ3xsin1+46GxspzBrp9/UxqUNlh UtphLVcesSiQIBZiwJ9hNBq6oZpYxRUODV9C0bqebn5ZXkHIOQ8SPVIYGMkrgK0tWZGA e01/1FVNbBTrTQIkL7r65QDGRzEoMRAFemvt7WKmSqgJmXPff6b7C4OB6E5PSbBAv6hc yHkg== X-Forwarded-Encrypted: i=1; AJvYcCV/j9wgupW9EGM2vnBe3p+ziSHeUAIZc4fdFNrRtbwO4lM5QLdXJcH727eB42lgdgvJ1tMk7C4/mYsKRsw=@vger.kernel.org X-Gm-Message-State: AOJu0YzFjec1IuG8b1d7aBirA7MW5Cspohl/hGQ8Z0fMvN+oarGIO53Q NQ3ECa6rPzLDIn/8x1krKLMroNoyjxOzBhViTfjYx3xNbTR9HBoJYYSLHQmaFiClH9hs/n/9Le8 CGP3cmUG4qA== X-Google-Smtp-Source: AGHT+IEcHxhuA5X7tAwArcHTSLd4uPktHr67wK87JmqzBFDGMyDOjNJyoGY6BxIloszi7vK/EhVrRowzrs9X X-Received: from dlbcy1.prod.google.com ([2002:a05:7022:b81:b0:119:78ff:fe1a]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a17:903:1a28:b0:298:485d:557d with SMTP id d9443c01a7336-2984edcaaaamr65279345ad.45.1763004123184; Wed, 12 Nov 2025 19:22:03 -0800 (PST) Date: Wed, 12 Nov 2025 19:20:24 -0800 In-Reply-To: <20251113032040.1994090-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: <20251113032040.1994090-1-irogers@google.com> X-Mailer: git-send-email 2.51.2.1041.gc1ab5b90ca-goog Message-ID: <20251113032040.1994090-37-irogers@google.com> Subject: [PATCH v8 36/52] 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.51.2.1041.gc1ab5b90ca-goog From nobody Tue Dec 9 02:54:00 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 E12452F9DA1 for ; Thu, 13 Nov 2025 03:22:05 +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=1763004127; cv=none; b=klG5G5RMvD8axwgvXWKsUAxJrPTARHOy6cH3tge+bNlUgedj5HNJ6VtX9TO76NR69TYRB3Rj8sqNiMGCSb7DVeGtHSgKBn+No6AE8A4cpFu4aaRVYq1GPZVr3achI0QvuZJpLROuWtaHp16eCpXVPbfKSH9qTLPYmHRynh0imvs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763004127; c=relaxed/simple; bh=mk8rXOLPGQjjT91Ps6295FKXze2c7Fq1DmDotFyw2Vg=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=brcRmAsMoenXcPDvvyl0m1+KFvRljpusekToXsMnpQFUMVi1thXqjJf2hHzKTy8R0PMdm2kLuJuH/UL1jMupukHIpSCDYTlN/tYbyJqeeZBONVy9csU6+uhyUKRSab3aimG1MjWu3EAmMjv01PD1MDlMZ1cIwZ9Oc3igedfMWp4= 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=rcsXloG0; 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="rcsXloG0" Received: by mail-pl1-f201.google.com with SMTP id d9443c01a7336-29806c42760so10986325ad.2 for ; Wed, 12 Nov 2025 19:22:05 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1763004125; x=1763608925; 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=ML2m0+F6jTMb7NBmU7ENO0Q+zpTx7rsIDufRbQBUWQc=; b=rcsXloG0DOGOcZjCwZUkZMYyhViL5zGvILK8z2Qif5P0kK1O69aq9YxQFL6b4RDC1/ 55TEHuoL2Z3ZbrnxjYdm2Gh5xZv6lpAOeYJ7rbCxk7LmxVVxQnFFMEHePwzsBQ1PZ1WC 5Ge61z1RZj2AA28pVxHvRxKZpibyvljmgg4+gWIxxfkjJHTelyfCbLmV+6G2KfdGakG6 qIVVgnz3TAkjBdP0hk20s9NAFlKFDkl+cBWs/W41Q1Oac/xePQTp5SzFSI7XzgCINo/D jPSwH5cqr/uKnuhDjfIJ3uBk6wZ3acUiM3zltUljn0rjO4D3uwDVZsft5rrK5EiqmShF I96w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1763004125; x=1763608925; 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=ML2m0+F6jTMb7NBmU7ENO0Q+zpTx7rsIDufRbQBUWQc=; b=I1JWTUOfNSHSTeWmW3aTCtjyvlU+3iAJcUloSbwd5oKiJgmZKDR58UeqbgPKl6KeyB R5W3daQ8zSvByZ+eppX0hq3mlwCeddfvBdMYvjc42VjJtgNKjULD8unav8QIr+K+gVHa m3kkwIRRbRJORp5kjvWMKbL6AKQOGF5e2ONS1hKDkP4H8xVnN0Xo+vOQhtRV2DKrU3zO GuZDvbqIwlIicXTM5iOmnAbA50J11SimlMFtIM99Hat8bMbDEfPttLrPNpYgqj0+inGR guqo/fwseWlpnZUB+8pfIq4DMHU4XlrbyX49zMfEkmm73sHY8DCLjY1xMvAqkf4QRNiU gMqg== X-Forwarded-Encrypted: i=1; AJvYcCUbxvpg7pPqTfKb+CxHHuJahFRtigLry3ot6sPK1OF4MQRgTGzM8sDZfnw+vbA1wyzektZQJSiOMg1BE14=@vger.kernel.org X-Gm-Message-State: AOJu0Yzk1/57k/ovOBlf+kKUtIAfPMklESIGZJDuXDr5u2kxqUYjtpB6 jsIAD9bVP3aHKNAIMV9zmDGkyNV6/Fhuc0YjVBPvGDmJN67MEVxeunLpPnORACw1Y0+161Lfwnd /VhKxLrXlAQ== X-Google-Smtp-Source: AGHT+IFgNFW30jbP34UVd7Ei4IzKaQ4Spe9DELwuFqEu+hl/lZBU67fjH5YNpsWEtXRfCoMANAr8PqpUda1R X-Received: from dybmh40.prod.google.com ([2002:a05:7301:f28:b0:2a2:367e:4efd]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a17:902:f707:b0:295:50f5:c0e1 with SMTP id d9443c01a7336-2984ed48facmr66336125ad.15.1763004125131; Wed, 12 Nov 2025 19:22:05 -0800 (PST) Date: Wed, 12 Nov 2025 19:20:25 -0800 In-Reply-To: <20251113032040.1994090-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: <20251113032040.1994090-1-irogers@google.com> X-Mailer: git-send-email 2.51.2.1041.gc1ab5b90ca-goog Message-ID: <20251113032040.1994090-38-irogers@google.com> Subject: [PATCH v8 37/52] 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.51.2.1041.gc1ab5b90ca-goog From nobody Tue Dec 9 02:54:00 2025 Received: from mail-pj1-f74.google.com (mail-pj1-f74.google.com [209.85.216.74]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 870FA318146 for ; Thu, 13 Nov 2025 03:22:07 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.74 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763004129; cv=none; b=dSFVbTro/nJ9g0keK8db9xPvkIo7r+NrOTGavRKn7GiDUHfBtpKiBUv2BnZU1jSLcDPXCumHRthoDNSo3Lg4rhGxT4EM0BdATqyPr++4asKi+C8a7Ve/loDkCI3HbS4kkJIWI8lZp27y2d3DesJzq/Hsu8wns6Md9vgGYFAl3t4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763004129; c=relaxed/simple; bh=6Puds7ukp7NK3eXiev3oj5BPu6JssTIFLo4kpaVMr2s=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=HdH8dk3oTio9c7g5awfJ4QbpHfDlKVb8eJmOkIzrlBdAc5XIrQ6slrViM++qYDd15QRM09/YJbxa8siB2whjaGF5hOXotfiFrA06pB9A7WgxgoZ7onH17FhCm3bSdpGb8js81krXzqnqjgNZKbK7Gth7r83x02c1MRWXjU+dF5A= 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=R0Ppu6P3; arc=none smtp.client-ip=209.85.216.74 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--irogers.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="R0Ppu6P3" Received: by mail-pj1-f74.google.com with SMTP id 98e67ed59e1d1-3437f0760daso931526a91.1 for ; Wed, 12 Nov 2025 19:22:07 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1763004127; x=1763608927; 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=dXC0+97vfEs1vawtkRlPyHUCH9ZiV+8D6lRhd7+mBOs=; b=R0Ppu6P3JazS8uwgFsHkyNU5Poy5Rcf/WoPfXIVYPJTntVS7vYeXMCQZI74DUaYpfk Q+S9HegGyFL9kUU0ueaI2eciLOmS+eqe6EkMgLtyhDqfhDV3FSUtFzkTN5F22/miC+iv q9JsAFnNE1dV2AOi8SfC0iPvcWFShtaJK7+FZ2fnazerzjGyJ+JzHiT4S/0K1suJhOAt fWsZWtRWAmulT1y/yn9+yPtH1kC8Hpcoq/kVIuLG5swwNNyo83OGEUpLgLJy7QywZyUZ /9U6xkJDWNTBDwM8Y8yuGJcwdBZdo0gZ6LT6Z4ybk/EmFqVAkzPBZyrHmlnHMx5DTqy5 O+EA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1763004127; x=1763608927; 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=dXC0+97vfEs1vawtkRlPyHUCH9ZiV+8D6lRhd7+mBOs=; b=rM39IpJdDS6gcCp7EPVBQC2qTvN2vVWfXHYmQLzGzZr8v3CepYKutNfMRK2CEZSzRc sUiNw89xtYf8ZkMQrBwxJbcCP1mQ7u+mi4uSPfoXJ+k4NvEecleTPc+JDXAQhIHJ3uRd Hwbv3hH6BOvoq9A/bIJyGiQqgNs9iYhR8uUZymjK6naA3MQ+7+c0YcTdPe+K5J46bwfQ rNn5v4/OfsV+LDM//V0v6+jWrp7xcTHw2TB14xeuugd1VRXamNPPld1k703u2uHXWtwq J8xu4XM11+WS1x9Zxpg26QP0KQ6nXxVH1Uf+xs5XFq64aADmUy0qdN8ID1LXU/DPhduu aS2Q== X-Forwarded-Encrypted: i=1; AJvYcCVALieKd97pJq3SDXezRbz3on7A/uE/jstDxKCtp1su/i6LTPO/nxden6vCjctRcBDZaZ+YBNz4YxX4N50=@vger.kernel.org X-Gm-Message-State: AOJu0YyEA0VY4kkYZfCLwSTe+CL/gmzXH+Ai6QfgiYDVLWNRkG2zqERD 5hi48rHXBsoFAAc/WWikE0mfc8mTROk29MuxXKtQi7D286f+cyqL/jeyLycLO5irlqS/gWrEwY2 2SVtThWLa+w== X-Google-Smtp-Source: AGHT+IFx5FJDjsRa1PHy05Szhd2jrGdl02Mx46WTdNqzXpCHzpTCvTW6IDoV/Z082690acNLCItgodJqSQZ3 X-Received: from dlbdx8.prod.google.com ([2002:a05:7022:e08:b0:119:49ca:6b92]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a17:903:3d05:b0:295:8a21:1559 with SMTP id d9443c01a7336-2984edc8d26mr70401905ad.35.1763004126773; Wed, 12 Nov 2025 19:22:06 -0800 (PST) Date: Wed, 12 Nov 2025 19:20:26 -0800 In-Reply-To: <20251113032040.1994090-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: <20251113032040.1994090-1-irogers@google.com> X-Mailer: git-send-email 2.51.2.1041.gc1ab5b90ca-goog Message-ID: <20251113032040.1994090-39-irogers@google.com> Subject: [PATCH v8 38/52] 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.51.2.1041.gc1ab5b90ca-goog From nobody Tue Dec 9 02:54:00 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 423733191D6 for ; Thu, 13 Nov 2025 03:22:09 +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=1763004130; cv=none; b=H2rguq1tKaSuZ//Ww8hmtvfIlLO6W4Wol97aC9csETxZccJq97YVCh4b6PLoBJct3h6LTqUqjaU5xpHxVrkhXdX1z4DHkliYLubqKROuTRtM3jR7QolL/4a6/6CM2V0hnFGghQLzuIamKecUe4IVbmcSlsZDRQIsN8gv4b0VndY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763004130; c=relaxed/simple; bh=BuIAYyNMq3IAp0j6+HENoO3ue/Xt0Y2U744Xu8tCfDo=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=azxRZmKZRO9nSewn/pyzU6+PN6HHGzHCvPwLdd/zTOBRj4LfGZxuw267W/3rpCklAS/TEMPcylAvxn5d8sB4rVXWJETqVhjAdWcAlq8V489dNndfoGa8asQydlfJClPKKhgDylzS88RbVmlFVc7inBAjDdG4NzMjfF0nsiTyVFI= 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=jCBWswWA; 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="jCBWswWA" Received: by mail-pl1-f201.google.com with SMTP id d9443c01a7336-297d50cd8c4so10225145ad.0 for ; Wed, 12 Nov 2025 19:22:09 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1763004129; x=1763608929; 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=eWSeHx62mFtsTcGK4paHRc5k1J5dwqX6QH7NFrtx1f0=; b=jCBWswWAOFAXUh8MiKTRW/CZNXUHYplwqazXfb8Gnd3uNolhZiz/yDDfSc8ycCfoNJ yXozOdSViXBtwrtiOb+wFBBz2BwMv+XePe79ezkMkQuYv5o0g1U8zcLYekBkH65y+eb+ +kpJu+5IocK7utETL0UbKbP3Dy4RIAny+fvHPSZilV9QcYHnV7CmpaH4lIoYMhQyl32N 7cjYKRrF1rMmGkfcHTYoaXKlVSxYs6nSvRpyz9MFbB1Ues0fF3LUTewARb8J3zJj6gMZ vQlLirNlVg00/HJcxXWD1lQXb6TREIBlyySuVDJ1rGgewjffCapaQPFBddhnk8VuY+ZC Sz/g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1763004129; x=1763608929; 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=eWSeHx62mFtsTcGK4paHRc5k1J5dwqX6QH7NFrtx1f0=; b=ChHmFUzuX/PFFjciUS9FOyN+qovPfWw4E3J1fN05ya1rGtykVuZ0HjM0lz4PFGbi43 0g4h3kGKcvy2gTI1dKuKWKKH3sGFV2zOyihsqZFv1U8MtK+8DCO7wVNFa2uC2NqWM3eD ffZKxyBGQ/+EQPIsjwK0XNmCYRmIHZ8I2CbHWkTFC+VudikJ0NwiPvVEgwm2Tcv/qpUC 3j+FncQ38HigGIj4iKJByBzCv4yUVhboXYtIBMmnzaY0Uj+vq30J9i5+XoLBLXLmv7El XhiXQST+bAEpKM0SIXo/hpjDsA0ZLA1qLpIIKUkqoUfUsKH0XLTwPTYndhObK/jZcx5R YKOA== X-Forwarded-Encrypted: i=1; AJvYcCVrimOx0c5fq9q0DmGkSi9Oixu9eM47hATnawvFC3sLjEjhISXnS+2gPy4De1vNrp00W6fBuUi5hZg/1vY=@vger.kernel.org X-Gm-Message-State: AOJu0YzVFDQMAUM7eULP7SOy5nfrHt9WddNIJCGbMT5SrYs239ISDJCa v5F/kWEt811lAYJAmUFiTL4khAFq4Kjtg9oeAQH1Ngwwntf9SqdTixjz9muUS2N+plOWMCAPV3k BL8FB5KBGpw== X-Google-Smtp-Source: AGHT+IGle4B5YsI4ZJFIfE+2wzp5CoEpzKhiQOYTSbpWS9Y97npyU8+xFp1rVZyv43ldRhi/EH81rCFybKd5 X-Received: from dycpw12.prod.google.com ([2002:a05:7300:de4c:b0:2a4:61a6:6c]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a17:902:e947:b0:295:592f:94a3 with SMTP id d9443c01a7336-2984edefe32mr68231395ad.48.1763004128714; Wed, 12 Nov 2025 19:22:08 -0800 (PST) Date: Wed, 12 Nov 2025 19:20:27 -0800 In-Reply-To: <20251113032040.1994090-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: <20251113032040.1994090-1-irogers@google.com> X-Mailer: git-send-email 2.51.2.1041.gc1ab5b90ca-goog Message-ID: <20251113032040.1994090-40-irogers@google.com> Subject: [PATCH v8 39/52] 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.51.2.1041.gc1ab5b90ca-goog From nobody Tue Dec 9 02:54:00 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 0814E319612 for ; Thu, 13 Nov 2025 03:22:11 +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=1763004132; cv=none; b=IlJXcaBDW1TEHant16sCzLm+GlkZjjFzbrM3voCHWYKUzOaGTt4TLzmpnVYOGJprdvUVyM8sqIuB+iKdAEndiwsdX7Kw60j19Y0CYVg5nFFSPMXn2+ijflGSu+k8sJhVtUidBd2Pc1C0TrO/g0YZdUrQD5IpNWp8iBBLIBNdd/E= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763004132; c=relaxed/simple; bh=3V2VLVo4pUTUZsrMQpMZJINP/Qhv3zRsmNC+KVt29MA=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=LGGuGYJASLLawULEkeuVsiQcsQphx2mMjLHEuYIGj/AY10lwvmq2px5843NWIIad36QDBiK9V/SUEkInAaHtmGdelWIiucvy5fzAev5OHepIXl1ieBv6VV90Sd8SY0eZWL9wplBrtc1NPr9aSLWvVMQGoffOZLcZZJXIF+fevQs= 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=l2FRAtxD; 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="l2FRAtxD" Received: by mail-pl1-f201.google.com with SMTP id d9443c01a7336-29557f43d56so4366945ad.3 for ; Wed, 12 Nov 2025 19:22:11 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1763004130; x=1763608930; 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=KkSWIFF9K6+WvuhLC3J+ZaMa6l3rfvikZA5lkR5D2LU=; b=l2FRAtxD86PaPFkiLyxjSsRLpL7ujq+KfVFuDW9g5IdtVr0sEdk6sUL9auQUDJGBey DFvbmojrLcySrDuYrglmRRz4scDVCMLN8zQs/j/YoKekmNa6mc3i4PZ7uZgB686kv90z cwYbXAEMANYyvrqZYFDnV7+dt8L/d41LEDqmusTeYli0N9KGg7YpZ71BX3WdHt/Hb1Vr 2qVg6rLyw6UEiQikyncaC1UWujGf+J8nL+qEsqlKSfZmZ1NEC5QI2MIvmkeNE4NBVm4f 9gw8nBXkdR5ZQHIIq64AB8zyUp8mnbAOuqQSSZWRarcBHzc905yGczF/Ly9eDbkHuiHp Z4pw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1763004130; x=1763608930; 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=KkSWIFF9K6+WvuhLC3J+ZaMa6l3rfvikZA5lkR5D2LU=; b=qpu0SHwG2zBgintK1mZHM2DOcfnnNiGhBMJBaR6rFzNn/usVyOIHRrAOVaLlWnUR2t qmmdcJ7ScOnB2kqxX1mkdCPNgc01denxpgn8Gz5SCKXhw6PkKeWLC0AbZmmPnb1/SbWN oAemXiizph6Iy1x0fleAHVPkFyveIHDKTFbGE6fJVG2dUjfjlnBJHmvost6aic/8FAPr LuYWHEKmiE4BrWMUtlCOUjZGpa4EdnO+oZdzlOhrBDGcznPRGbX1OWx2itqqsFzc5SKJ K4rtDLzVlwDRDDkYkLSNIgQMsjtieTFGboyarsNlRVZLaNGN2jIfvGjPdYJyxoCCS4sN vuyg== X-Forwarded-Encrypted: i=1; AJvYcCWQFHielLpPwu+Z59p1JYMuJcMEPlgYmtqjU1EOf2Hnt4fyFCmmxvW1mQImzYI38ZfwQozPUEUMrQieTiI=@vger.kernel.org X-Gm-Message-State: AOJu0YxT72YpUxxTgJ7VKo0AUHCNRfmz06Ec6SmNj5gI/HKYlEReIf7e PvljewTcWxNyUlIL/mXB5vZ7PFg+GfkPexvDe0pHaP70Qk11grBONV8PLBK0L6ISHS7jz9cnl9X n0lTufzZM3Q== X-Google-Smtp-Source: AGHT+IEyKyltlyCDbU4hqbiexDDPHzceFc98l5CXkwmdG5KoGmmnni7fKQrLRjEIkACVFV7MlkhharS/1GA+ X-Received: from dlbuy17.prod.google.com ([2002:a05:7022:1e11:b0:119:9f33:34a4]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a17:903:2b0f:b0:297:f09a:51db with SMTP id d9443c01a7336-2984ed45caemr68610415ad.15.1763004130509; Wed, 12 Nov 2025 19:22:10 -0800 (PST) Date: Wed, 12 Nov 2025 19:20:28 -0800 In-Reply-To: <20251113032040.1994090-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: <20251113032040.1994090-1-irogers@google.com> X-Mailer: git-send-email 2.51.2.1041.gc1ab5b90ca-goog Message-ID: <20251113032040.1994090-41-irogers@google.com> Subject: [PATCH v8 40/52] 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.51.2.1041.gc1ab5b90ca-goog From nobody Tue Dec 9 02:54:00 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 0C5EA31A06C for ; Thu, 13 Nov 2025 03:22:12 +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=1763004134; cv=none; b=n2wI/nf8YRPOX83WxvAfiqTwED3s7/y7S3O0HZVKqPG2leJ72cNPDnacv5lwaXuXNk82aGudOY51l900ct/FF+QATVvzRAwbOQBRnz9IjOkdPvVwYVLyrk6c6KFZasUpqXVefsp8niZcHcKDLIuqVHkuCFKnldwaW5VvxhUMCq0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763004134; c=relaxed/simple; bh=d4RxGLSdFIeTYV96kruzxgnuztTngpebtrIgct661XE=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=B7nzxotFGRVqqlrJG2Y2iMrqH9bc8Gidb60e9S0JxsHoJPJ4RzVCieb1VXgQlaZXeqHQfc4QklUNXhhS+M8OgxzRG4Ra0zX2aq+yB5okJs4cEXbGNT/aKWf/gThOpaoyopMfymlA8283ASRelmk0m8XZclP0JTRfWfl1yLhq014= 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=kiC/hXZI; 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="kiC/hXZI" Received: by mail-pl1-f201.google.com with SMTP id d9443c01a7336-295915934bfso5287745ad.0 for ; Wed, 12 Nov 2025 19:22:12 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1763004132; x=1763608932; 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=hKqE3/yUj8MumMyIK9pHYeAOfW6nk8QbcPfRfBVP11k=; b=kiC/hXZIW48a1cYhm9QRZDNEZFvGdcs7+LBsZaQj8RiI6Sz1s59w4eKfbHP/ESFy/P BV0sJ5782isrACb6dnsgpEh5fVrRvPL4UsAtiqcrKlkaJDCANWK5Q56I1OxKaMRS+yQq 6D5bPEnkPi99gefMamcdKTaM9MRvLyEyuBp+/31uhk32cBVfZYOMBKGAA+UUeTDRJHnt k7JtAiUbnVbOjOyTTKr5x858JHYnswdeVQfitDu3DVanZlLL1JFBhGyOdXgu5TCE/4BK sSnh6+Hno0iIY2goUtjmCmxQYKlLiWmmbaCxpi0a+9r2en0nX6neagPkeK0FZiq5/R4N dylg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1763004132; x=1763608932; 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=hKqE3/yUj8MumMyIK9pHYeAOfW6nk8QbcPfRfBVP11k=; b=afVOhuSxzZLbzsSuV92Ph143O+iw7VE1cLIUVUDW8BtrM1tG8U8HzyTS3BI9SK6W6p pApf2OSTt5rBPWTA5Msc2ba5h6U/m21SntGWrp/HZtHgppXsUfy4bZ/SIO9LW+9zDGtf Kjr2Es+MDCN6pz8F0dJLY7RfJ4GlKWTHKZiBsWVhv+WYnNsrz1b6EV4ZU+ncXYjZRjad 4L7H0535FPrtDergCDmMhDbYfJHAiaqH7sm2iQ6r12ZCJrvKvdAHpJGX00bUXXfpxYIw Z50JpL8euNPWErfQudNuHGdZuaMQNIj51hChQtgubnAy3yzgyGrneyg+KxXIoAHF8yh2 8c8w== X-Forwarded-Encrypted: i=1; AJvYcCVnyaaMEwpNyxrPzNDqOp/eWSc9AD9YIrJydDXg9QkSFJ7Uy1DpOClS+CS6Y/6gqu4UucCaNscywUpGrSA=@vger.kernel.org X-Gm-Message-State: AOJu0YwnCpjA7OkD+166npM0gZb/Q3MbinjMryPfqrpMXRmiDyYcRNYQ 6AW61uhufeSMb8Z7HpGOzSlaHOnIqWHj7AGU1DTRms98OUpeoeqKVWNIWAhH94KPhl+GS2kgt28 B1YQuKrVhCg== X-Google-Smtp-Source: AGHT+IGTAgI7kyVDNSTXGTAp6u8q7KFtPSl45CEhXLw84AiAiZn6LPcNi40toInj8/yjq+uquBDZPly4Sk0P X-Received: from dlah24.prod.google.com ([2002:a05:701b:2618:b0:119:49ca:6ba2]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a17:902:cf0e:b0:295:54cd:d2dc with SMTP id d9443c01a7336-2984ed48921mr77228725ad.16.1763004132359; Wed, 12 Nov 2025 19:22:12 -0800 (PST) Date: Wed, 12 Nov 2025 19:20:29 -0800 In-Reply-To: <20251113032040.1994090-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: <20251113032040.1994090-1-irogers@google.com> X-Mailer: git-send-email 2.51.2.1041.gc1ab5b90ca-goog Message-ID: <20251113032040.1994090-42-irogers@google.com> Subject: [PATCH v8 41/52] 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.51.2.1041.gc1ab5b90ca-goog From nobody Tue Dec 9 02:54:00 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 325BC31A053 for ; Thu, 13 Nov 2025 03:22:15 +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=1763004136; cv=none; b=BbwYu0oIaBh5xSZtYa/4/BvIBR58dK+8jL9yJlyDZZL2Dc9LRmc37C3Vw8iSrwUU4yEHKrYEWhqzahKjG8YRXqMi+mqKGdl1Ly1L6ebbCmiuQ45Sn6Jh+IMqxYXO3kXORmt4vICxKpic+D93ltfCJTvUDqrdTNH0N0oMsMwt0wc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763004136; c=relaxed/simple; bh=aof78n+qXDg0c8e2xLQ6nv2btzFyt+M0yFV/x/avhsI=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=M5GEITZlcCmdv4kiEJWmnLw+u/8hKLwdPgdJQZ6DIrgf+7fZFUNj+K0h+F+7YJ+8sN4PTeHHNdnia3GugpOxxAacH4TUNXGRLR+59ZmN04+5zpaWT80i+Ecat1I/kV2XiuCcLyxQ2XcHVteTlpjv2+zJP5A0ZsILA9asU+Bb2kY= 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=3kp4QsgX; 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="3kp4QsgX" Received: by mail-pg1-f201.google.com with SMTP id 41be03b00d2f7-bc2a04abc5aso310456a12.2 for ; Wed, 12 Nov 2025 19:22:14 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1763004134; x=1763608934; 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=/rc3vNPxf2jUSlVFOyC9V3KttOj9emUQIRVikRtApQE=; b=3kp4QsgXV7mEsH7lDBZ/7gcrjbG9w7gFU2F5KOw8z8ivkm3n+O7ANmNE3hrTiUD/FC Hh36SP2MGP8QuKWCaw0vcwuexj+/BqsR556Pb+oEuN/2h+/SaRoUrjhsIW0lIXPXpaC4 L/ApiFct/1z+1JZIEIwVHXf1x/M1kV6CBKyheiljGKYzLMf6UPSvHxacGR0zDl074JGG j+zrwRcLuEJrgrm+Y3UANxfPklCQE1cbWz6CMjuExI5w7Eh2amwfjyDl4JXvKOLLL9f4 WFpRUVJNQhmWxucIY40ivDip3EgOK1N9jSzVweB+x420Dvnbx6Bk7lRyl3QG6gLWfkxH YeNw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1763004134; x=1763608934; 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=/rc3vNPxf2jUSlVFOyC9V3KttOj9emUQIRVikRtApQE=; b=e6a+3TrUr3sH7Ws5TxNtD7gU4shiOCmmftaTEAlF8jFa5/Hroaqaw2PMdwj4kPL6qw uucBJoyZ+xuFqfTdKrT1CBUUnbRQ3QLVio79WN8Pjn5Thd1rEw4fP7JptxmVELn2tbjj pq/Sm0tM1XFtvaNQ4RbQaywX0P54cy2ZRQv4o566F4dVD/qvOwPSuzJVEy7kFLhPA95H jLib4NCrNzqpnbV3b+UgsQnd9xsz3QZMb9c3ewTOTtSdgBG+oZ6oQCTE4bxMikkPiITI /IvuHLJ3q3zzNmOoMvyu/Lcbe2KNPeF6CSwEAuF+qRZyLlcaURH1WwFtgwLMeqAUp9UV JQnQ== X-Forwarded-Encrypted: i=1; AJvYcCWJXS5RqF7hthCMpiejkPNElpUbzC9VaareRJK2DGk+UA1Bm871RutJOfmc0cM0TePYcYfzIybb0JfbCnY=@vger.kernel.org X-Gm-Message-State: AOJu0YyKlZoCvk4ctgczWIbNeU+/B7wWnUB4etgbwADY7eBJYlau4F1w TfKAhQUiJ99OrfUDnA8RKMRFFs6749F0rimwaf8vfUP3pwTA7klLV+zaYd8JRFObQorc7/T03DA FC+BZM5ZtKQ== X-Google-Smtp-Source: AGHT+IG451KaGljKW2LZv3uhYjbm+8KjnbK7p3zGZIkXlmpEzkSU86j96z3iWIVFLyDJsjPJwDfCrT09VOAG X-Received: from dybqf8.prod.google.com ([2002:a05:7301:6488:b0:2a4:8a9d:ddc9]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a17:903:19d0:b0:298:1013:9d11 with SMTP id d9443c01a7336-2984ee0354emr68940195ad.43.1763004134472; Wed, 12 Nov 2025 19:22:14 -0800 (PST) Date: Wed, 12 Nov 2025 19:20:30 -0800 In-Reply-To: <20251113032040.1994090-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: <20251113032040.1994090-1-irogers@google.com> X-Mailer: git-send-email 2.51.2.1041.gc1ab5b90ca-goog Message-ID: <20251113032040.1994090-43-irogers@google.com> Subject: [PATCH v8 42/52] 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.51.2.1041.gc1ab5b90ca-goog From nobody Tue Dec 9 02:54:00 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 1BF0D31A81B for ; Thu, 13 Nov 2025 03:22:16 +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=1763004138; cv=none; b=t3iBUtGwKx4+K115fvzOyVYErgfdN2Zm2hmK/MJJW51WfLrmCdwQLsWSb6/1KZGBTylJLEBmZGMH9YTnDKY50GzedI0e5rQwPOwW+Z7+W1R9AK563+BmnWiNT3Cu7xpEI5y8YI5EEZsHCS7Xwnn1uH0Jw5m+gJd0LGONs0NJIYY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763004138; c=relaxed/simple; bh=qX35Itbhc9e/KIdUgyGaBHn9MzSy4DTE28eCMkaEh7A=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=g6BO7X/0rABRGo2gXHcWYw9aHre6CPxzBWNi7/jmViaXCrazdJ2NZKoUogL3Sk2ET6ShhM230XgoBp7GYBxYr9BfhgQvoAPhlNEhPv8nZKlmqDN9LITXPF7SBC1eUJ3IfEMSFrJc0LNf0DHIzU9zO7sB8TTj3ikoauL9QDaoBKM= 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=cUvLhWKo; 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="cUvLhWKo" Received: by mail-pl1-f202.google.com with SMTP id d9443c01a7336-297fbfb4e53so6660125ad.1 for ; Wed, 12 Nov 2025 19:22:16 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1763004136; x=1763608936; 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=QzgYRCX3pVVtIR05a0Z3xw8tCxI0VGc5K9zhDx5EIhk=; b=cUvLhWKoonICsbKEv72LykSer5MYgUi4KT8aOE0AN1wn7yvjzXveqiTJ7CaRCxSLnw Oa5VYhv54IVcw/owIJ4ju1Y/Ft9oAjaV9teKdQKP3i7oMhAtVjU/+CnY5ctIn6Fgeizn SNX3CUTH8ssaHu/9k5nA897oSirdwTMJNzPcmUUP+dORsOKi/Uv6ulLYMOfTvk6Tt69s 13X2NMiHbJjLTWOr/hNxBolzu+KSX9V5ZK+o9uq0zDoRgOEPAHusyvJy51Zwo3h0BrnQ EIsBPPMf0aneXlWT/mLUeIzVZ+leI0+BcN24WfWzVJf89pJU1ctC5I7LiKDRKi26JxIY uhcw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1763004136; x=1763608936; 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=QzgYRCX3pVVtIR05a0Z3xw8tCxI0VGc5K9zhDx5EIhk=; b=WtvO72WmlvBl+Gx6c8HUobM+r0QF31SAagvs8f/Nj9VB9UyAw+d4ZvBcjcUvJyiHRa T3x5tvxqcAhi+tgduZyELzJ1EztTl5oDQbbO81WzC/f8rYSQRh7HkXT6IN6Skt2aqNFJ 2pq56IKUiGe5RqrkUXcSEso+QRBuVdCpxJr+s4L2RazlFtZQmXjK/No9Y8wXifuluZfI gF6vHj/sy3oJKMlKy1ujZ3ew6QdO+uqmaWNp2RyAau0FIT1dVueqsqQWiP0UM6t6jQz2 1rcv0bdFQfQ2TOHNzCrmG4kOc+oKO2XjcDL/qxrCT7s7/xO9V5WJAW0LZb7pZZuj/Z9O mbig== X-Forwarded-Encrypted: i=1; AJvYcCWuexM48HR7QMZ5FeXTowTbDFnXvg9PU41Bzhuws+DhytcAl31yBeIBoHp2rddDK6jrZhqVKeprMnz66QY=@vger.kernel.org X-Gm-Message-State: AOJu0Yy7ca0UysxKl4dOfzt5d8KpgJ31IjNu9nEQ4yHithl0JfH+f+NM 85G19d7yZEzJTATZdlNraJTBJnzygX8FkyRlc6/ZHyW6HAYb0tO7UYUCSC9H7I/zfp9ZyK0rY+Q XA3ldPtiugw== X-Google-Smtp-Source: AGHT+IEZCezrht0wRpY2FhdRaSwQk3QXkFXPVCUQaWzxv4AjxTWJNrJV8HcgONax7nnWJC9i563gEFQ3KSOW X-Received: from dyblc25.prod.google.com ([2002:a05:7301:1319:b0:2a4:6a22:9865]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a17:903:22c2:b0:246:7a43:3f66 with SMTP id d9443c01a7336-2984ed30d18mr75545335ad.7.1763004136368; Wed, 12 Nov 2025 19:22:16 -0800 (PST) Date: Wed, 12 Nov 2025 19:20:31 -0800 In-Reply-To: <20251113032040.1994090-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: <20251113032040.1994090-1-irogers@google.com> X-Mailer: git-send-email 2.51.2.1041.gc1ab5b90ca-goog Message-ID: <20251113032040.1994090-44-irogers@google.com> Subject: [PATCH v8 43/52] 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.51.2.1041.gc1ab5b90ca-goog From nobody Tue Dec 9 02:54:00 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 8606C31AF34 for ; Thu, 13 Nov 2025 03:22:18 +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=1763004139; cv=none; b=KIDldeWH7qy/u219HniSzQByt6IrDEKC/w2HHiBCngeMRAb0ki28ozx20LrmPmRq+et/qVWWgNkoUr+rS0yH0HAKlAgTGv/uf/miZ4wjHPBTLX9KciAbndO/0/BU0HPLUzMmUuYPzSk2wtFNWsCr4W31It/skhHMevg/a2CeaWw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763004139; c=relaxed/simple; bh=lXLTlXYkMozj3jIiw3KIl1Ckfzke53CA+5xZr5zxW48=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=mAEdh/FFRVzv0IcQhdUILcP8CnO9trDaacikr4TJh/BzfHzNlDzPtuOMAv3Jvb+p6LbcTHhJ0nCK7V6X2s8+FouhVKGMX5pqRH2dE8YddQZ3IqMkQAVA9cku0ibAdvUZ9SDpQ+rlzECh9YGnSJ4pGnm3hMlX6fZeU5aJ9/OtUy0= 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=Kwe7uTNW; 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="Kwe7uTNW" Received: by mail-pl1-f201.google.com with SMTP id d9443c01a7336-29557f43d56so4367705ad.3 for ; Wed, 12 Nov 2025 19:22:18 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1763004138; x=1763608938; 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=0TucWF4PwieCGC/x8w64I5/j2ZTqiIY9tNTYUgbMZpY=; b=Kwe7uTNWIou97R5PBN3NLxl0JoZkrtzGlCCHrlsbt6WSM0OwhmhIHF1w5ftPJSv0xV 6nmFLnmsvPQE425ABoUo6eSnpMmVjDm7DU5SynHo82UFiZMHQVHKhK3YNTPB+iDvyhQY mBrzu9FbyoEwD4u7XCpJUrIjlzaqb2wwcI5st8HsEtbxrTFbgMk98JoYf93l2t4ddtTF 7qNRmoa/Q6Jvz2bZNQnIHP2IVwARakvOKTsFnFEQR4Ux1qpDN2QRRx7HVZBC662O2MrT Y9zpnOEbTx7EgpFISkYTEIcxkSMifZdWtx5VfmmXOdjanPNVI1NegcYuy3v3BlMVB2SG 5pEw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1763004138; x=1763608938; 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=0TucWF4PwieCGC/x8w64I5/j2ZTqiIY9tNTYUgbMZpY=; b=B5qWhc6sV0YnD2QkfEHvuA1tVhSCKV8c2JN28m2x7e2DIqFFYMybeLvqYPCuipWEAA b3z7WQaxmJHwVXewmkGIURWCH92gYAL9SRimtupU5Lwi8DfIEC6K5VsJ/GjgxVXG5EiF CCxi1KDy0BV6N6lAWl91aCn4zB76BIcr0LNuGEwQSuieABKN+0axO4Dz/viogRBSsL7a cQjCCLSMUWC5kqyP2rQcUDTOb7J1FK9D0Meh3GD44Fk/whbcm1XfwbknSmxO94/agLqn xBhD9S/7AwppaJR8xsD/++Arij/I0fHpAoFOxPGo3iVjyjGEWGXUHKlFGQeJJO/E1Y8L ap3w== X-Forwarded-Encrypted: i=1; AJvYcCUploATOIya1MXe+zw64YdoXteqhbMQDPdLLnSLwkPS3JCf1T7AgXxSTm3mVD+zRnQ83ECZrxERnds6hJk=@vger.kernel.org X-Gm-Message-State: AOJu0YwVKwVKckjY3X2bzR/Tz3bnixMXaZOPwKeKjSRublbWRPR0nz7U wJ9hiRDKulJluw7lqRJm4l/qRmj2PiJrNVKGLBZmw79tyh2S43fZSL5nllI8o03rM8Jsw09nntx jDazfM1Htvg== X-Google-Smtp-Source: AGHT+IHysAQYHS4kPNj5jjWLgGYrrdQwUGr7MM5sKTK0QIrvTOQJTaMMXJXEMFACThC+ZwyCdZ0XiPQKIkBc X-Received: from dldoa11.prod.google.com ([2002:a05:701a:ca8b:b0:119:b185:ea75]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a17:903:19ee:b0:276:d3e:6844 with SMTP id d9443c01a7336-2984edc8ea9mr64852155ad.33.1763004137979; Wed, 12 Nov 2025 19:22:17 -0800 (PST) Date: Wed, 12 Nov 2025 19:20:32 -0800 In-Reply-To: <20251113032040.1994090-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: <20251113032040.1994090-1-irogers@google.com> X-Mailer: git-send-email 2.51.2.1041.gc1ab5b90ca-goog Message-ID: <20251113032040.1994090-45-irogers@google.com> Subject: [PATCH v8 44/52] 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.51.2.1041.gc1ab5b90ca-goog From nobody Tue Dec 9 02:54:00 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 A8C8131B825 for ; Thu, 13 Nov 2025 03:22:20 +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=1763004142; cv=none; b=GC3D7GdL0DnSNfECNaA2cOzPvltJ/5l+iQO5rrnDVhMkWAH+m+lPy65I4h+WEYEsXcUAM+xuNVPJwA4Jtbk33mgiCT/EepugnexVTx1EZBOea92Ui6G7xejWqpoliU1bxGuNHpH3C9V2mkus0yvONh9Yy6YCWhUalNA73h9LsK8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763004142; c=relaxed/simple; bh=cJ+BPl3FaDItsU7YGTrU6qOMUqTf6c8cSliMMmt1mbI=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=pHDnxOWsl4LNJ5PeZKT+1QmO3/n+hzWF8ufogJaNFNkHcm2VcDPPfeQKMsDxB41TGPKraD4MYnh5HNnabi6Nwt5+nq318dBbLtVglMb6Y49amFnamYP6N+ayKfXzBSFB+duOaX+RiHtevEgYtCqydlE+LurABKpKws6Q5CBA04w= 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=EShfdruy; 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="EShfdruy" Received: by mail-pl1-f201.google.com with SMTP id d9443c01a7336-295952a4dd6so19094045ad.1 for ; Wed, 12 Nov 2025 19:22:20 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1763004140; x=1763608940; 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=ypdzgSTwEWd6G+LcFtKTyJXYeIL/SBVyTJRI0e2/Re4=; b=EShfdruyF8SfhjxgMIORirkjBxNY9BibTfXJKTLiU2WHMRd4IFRTibvWHhJRzURruJ blMIDfxO5kWCg+ZVH7mm97EPJuKsa+YMRoFKgNkaz7CVht0nJQv0FIJCyJPvNYRT918/ KjovjVqX6+t0zGKp29w2vehE3I3Y5qUSmtUKZwrFUmbxChb5/u9SfT/SCd00DJ42dOl8 689NDO3R0FonolaUJHioqx146AYhuWjLf2K2gshAzAYJRoU2rmcON1fGng2Xxe/KwjoY XaQZVsBgUCDl7MsfWybo5cnkwU0qBC3JZDDc0Ggj8pHibpUZ+xp4XwUPJ/OMA0J9Opjw CGDw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1763004140; x=1763608940; 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=ypdzgSTwEWd6G+LcFtKTyJXYeIL/SBVyTJRI0e2/Re4=; b=dXmHkTYvIQ3aN5e2gUteNAB2+LjDHNjjmw+ATlJqoeZjTZwFS+ven+Nnjqqs7VzwI1 fjkiUfcZ6bPuVZ1UliRHmhVpeYYsVkNAKQUEivOcQIQ2OPkjdt0C4EO0b++K6mPENP3E 93qk8skztTriRVP2ETgTo3q1J2nIUiSusBLkY7XiLOJt+JKkBfsSE+vqveUUeHz5vxTK 0gkkcewBPA5rw+WcR3tuoShw2lLWEkUKdNUrvvIwiaR/5OcA3qdgHUkKr8rUzlq/AKWb D0/hOXIRv1Qt3kkmA3LjUL1FN3beuyv27Zg8vOvwLXLfm85hCUSIh4QX/ArrjbnA6Vda hAaA== X-Forwarded-Encrypted: i=1; AJvYcCUN2FosldW6iqiwroISRPCQnE+jYsWrg5H36vqtz+uMoYLDp9lg2d+dhvefezDD+980z96b27NW6DdfT4U=@vger.kernel.org X-Gm-Message-State: AOJu0Yy1uQoG3XlWoiGEB1L8NhCUS6TgHIZHkqq5EwK/NIP6BMtViL+s Diy7IjV5rEXvm4Su7DD9GXoFycFy1QgTE7EXI5YVzl3tWX4dMGWuy3SfZMIjFk2H84lFJCEVwOF 6++ClKUEHTw== X-Google-Smtp-Source: AGHT+IEz64sDja4OyVOtnjAlvWZmvSmjq/FZJVcysiZTqacQ6mURxQa9cpHygE/XMAsY93LQ8KkShfUWqh45 X-Received: from dlbay38.prod.google.com ([2002:a05:7022:6626:b0:119:49ca:6ba6]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a17:902:f60c:b0:297:ec44:56f with SMTP id d9443c01a7336-2985a52b15amr20520485ad.14.1763004139855; Wed, 12 Nov 2025 19:22:19 -0800 (PST) Date: Wed, 12 Nov 2025 19:20:33 -0800 In-Reply-To: <20251113032040.1994090-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: <20251113032040.1994090-1-irogers@google.com> X-Mailer: git-send-email 2.51.2.1041.gc1ab5b90ca-goog Message-ID: <20251113032040.1994090-46-irogers@google.com> Subject: [PATCH v8 45/52] 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.51.2.1041.gc1ab5b90ca-goog From nobody Tue Dec 9 02:54:00 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 9040431A81B for ; Thu, 13 Nov 2025 03:22:22 +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=1763004144; cv=none; b=pmWF+vdBp/kSMg5zISNkysi4pmli0/hUyJxNvnB+rOExxvfmoOMkAvVE6R8IiceO9OQHClFSR+3xdt/0EF0F8frbLLG9WQEyXHHCQJiaBFRMudZJ/jvsxXZpFsy2CaINtXOfEJCmwLF1HzZ3dOMbyPcBDyE+A0jaozbSyDKiLsM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763004144; c=relaxed/simple; bh=ihHX9rfQI+mk7JQWS3ayfuEUt8pdUkdVHim6eGZCJlQ=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=GmLdNIqFZtppL4xrb1VlFSD0PiOc4C3GcQlutsSZhK1Cl96h+0ByFE/o7/iU4zkcGmjXS+dSqJ19RpnDxp9mqjLY3TP50tzicww/M7xvSRvnShGHTxvbKNtrBFH3SvNs1u8DIrF5XEh3qfuIgawpcIG3j3Q/ZMgWNWCRT3V+JBU= 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=CrYnxX41; 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="CrYnxX41" Received: by mail-pg1-f202.google.com with SMTP id 41be03b00d2f7-b522037281bso303560a12.3 for ; Wed, 12 Nov 2025 19:22:22 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1763004142; x=1763608942; 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=8jEfyet2B1xXlE/uoLh/D9/nC+lDkr1+Ax7UiiYEKLs=; b=CrYnxX41U2jMXpMeddKa+IeNILLq82KTcMjLKwPDFJjp4ZrfMmc14EIUXpgExnA+/p uYFUrVQV3atsZB3/oNl+L+Rus9ojNISXS6rfv6MNkJd/E4X5IZmoLESYfIY48Sh1LFQ9 HN9dvNQbTtaDbrWbrZmRYbUJc8ULpWnP7on0sROzAtaS/8vcNaDF0Dc+NAX+aFYBD1LX 8dAjfDV+j5Q8gV/OTGP7L4275BynvgM9cYirw4dxHzn7BjxQ3dTLzFYgR21fLEzPITRS JTAX63P5QOx+1oZ1P+iRmDdJ71eBzqucG1C0cHlSPNef7EOK9bwJlYEv6I+N0DqxroMu 0kHw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1763004142; x=1763608942; 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=8jEfyet2B1xXlE/uoLh/D9/nC+lDkr1+Ax7UiiYEKLs=; b=kYFiVJOJTm/RIwgLIVJFLiK2XODZceTy9Sqphj5fAZGnDUnoL1Ux0rhH8GKY0/9Q7v jGGWxtSAX8QcR0J6K5HCcig0FtCa4WkDeWsg3h5TWYK0DYA2IDe0URFug9knSNPOPcRI z0Bokfuxy5l+9yeXjmrG4ZruYJAWPSpTtuU0RBHeMTHseuvL0Of5SgBRq08OTSbdEPBc S/Fv6+DfIeBA5K+UstUr/0+F3HDk/nnvHVRJLJHTQjapwPpDBRNImMruuiU/z9ULLb62 bovEjHAZffykvxc5+Yg9goTP3SG4IzasN+KOKBGnDDGNptH9dqQzo4d5ZRoJ73irDa3A TnVg== X-Forwarded-Encrypted: i=1; AJvYcCVBypGLoljZSx/pc3QWhdK/KlKMx09IbEcoT2/DsKemMskFx4DOMmnaPB7kdLnXoc6Lr+emJlG/Pa7AEX4=@vger.kernel.org X-Gm-Message-State: AOJu0YzF3oDaKyZafN8Q/O+wIKsu5P2qHWwHQYPse15vKrjUM2GlcBD/ aQFGuMv8D54xQUULa2+OQHSzsXqjrgXXTxxVCTaZecTl7qMbdkuppjj4a/Sq8YmHVSA/QC6a/0t khjOEwUuZIw== X-Google-Smtp-Source: AGHT+IGpyPmryq9xTvHz9AjmIUhc8XIqDl1ryeGRMzQwFxEm0NYqkC5Odg5FUHwKSjdli29SyJ1qcArAzA/u X-Received: from dybli13.prod.google.com ([2002:a05:7301:128d:b0:2a4:7052:5652]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a17:903:18b:b0:295:9cb5:ae07 with SMTP id d9443c01a7336-2984edaca29mr76719475ad.38.1763004141690; Wed, 12 Nov 2025 19:22:21 -0800 (PST) Date: Wed, 12 Nov 2025 19:20:34 -0800 In-Reply-To: <20251113032040.1994090-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: <20251113032040.1994090-1-irogers@google.com> X-Mailer: git-send-email 2.51.2.1041.gc1ab5b90ca-goog Message-ID: <20251113032040.1994090-47-irogers@google.com> Subject: [PATCH v8 46/52] 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.51.2.1041.gc1ab5b90ca-goog From nobody Tue Dec 9 02:54:00 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 146B631D374 for ; Thu, 13 Nov 2025 03:22:23 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763004145; cv=none; b=OHBeqljlYpfgSLqLrtpDmY31GBSagUZTeq5DdCEGlL+2ezbA6V1jAPJktm+dysvOBKQev+pbnvMXjPDXE/9Rx/4wtxfYzmueZlnlfJdwQLyCE1PEH8hYGpsT8RQ7+yhLpu1QgtPzq8xOQXC2MImXYtoX3rgARSDFeLqfQHvzEXA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763004145; c=relaxed/simple; bh=kR0Wpo93b/9yAlKTiVxb2htRYYMT4bJcY7/ZDrnuZ68=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=r64wz85/qr833zFzDyXhabnImkoPuO1Hm3tUFCRLEmvUi4bYGZ69sPkyIRIFdpxQpNHG7ZtD8fDp3HNd8t9TVUWoRQE1X/3S9Vfr1rYtrbY49yKevaEKgf5xDfkaXeHw+H4pI/aM+d1mLNp7sQ004zzqsSOROfzb4taIDEnoi2o= 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=Fe0zSLRR; 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="Fe0zSLRR" Received: by mail-pl1-f201.google.com with SMTP id d9443c01a7336-297fbfb4e53so6661505ad.1 for ; Wed, 12 Nov 2025 19:22:23 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1763004143; x=1763608943; 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=Cr2E/rZyypVk16f+Wt6vPqyku+fBwmlpS/IKRSeeaw4=; b=Fe0zSLRRFmZyH+N3pIEpDFddfvGLAql3BG6TbanDHFdSsYIc4tEtcAzVFX2hP+MuoP XPFtsgGGlOMXwAlopAt6J8Zym1hQpW5T8lWB1KG3Fh+n6/WODw8KGj/Uwmzjy5rs4x2v DGQDR01KzhguXXthdVchj6qB89SyQXXKcQrny9IoItAmE5lz/fqjE9utiFcGnUAShs2e gbi4NXhBu/f4XE5VaNqlflDyNnNR5KycC2vzhO36Q3LJWXLz8Q13jHzYayByak79D6r/ +jvYgkOBP54tN06UWHyNDE4b2ctxJ53p70TgSRmgq7+i/VT7AELJwSofEEehfBCxTl/C 7QCQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1763004143; x=1763608943; 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=Cr2E/rZyypVk16f+Wt6vPqyku+fBwmlpS/IKRSeeaw4=; b=MFd9VcYYPdiIGghTHyAIz6NorTb0A+Z6Pd4FoMgj14SK+dW+S3l5IT7jdA2bygKbo4 BovPnwI91FfSSc+IlzSjswdCUsR/tVqhwKhRl1KsgRsYfpXMzOv72ajIWVjMMaQRbTtt 9Z7MVX07tpuxObP0WMcFQPOlRUH5a1eJFM8x+dEXDsl2IU1TjAJA43b3JjbHY6rKyjDw INsV1YHvOwRe1sGbWnd+UoOY/KMB0l7UuHKVjq9jefrj0yBaUMYvvqk2zCAGoqGu2N0I rxlh7RIx9WBzqzrkihGVW9dp9UGZJOqqEqk1f1OIFzfCFe5d4ilmfnkViycQyNpeSP8+ pyfQ== X-Forwarded-Encrypted: i=1; AJvYcCUU43ibPDt6cva8ah8VSl3fQ2g8r9vAysiZgFf2dICeIlT8SALSvAAPfDlG4YrIaa+VkwpT2Xan5byXugU=@vger.kernel.org X-Gm-Message-State: AOJu0YxmNVLYt3CAZvQPqg7pdYcCXCeTyQXYt73BLFCiB/xURwSYfqwn GRW0VVs6lBiN5z8LfOZzPVHrVrTy4x7ZqCNqvhOd/uZQ+zmKoMYmu+wAQ0k1nEsl4nKpv2g9pLo /tu5KbUuRRw== X-Google-Smtp-Source: AGHT+IE6eVlzja4UQ5/pkJgOkZTTiAGzuIai/Hfr0TKpmjMhTj2VL9yJ26YOe2smGEyiD4kOc55+w++vd0Xw X-Received: from dybqm12.prod.google.com ([2002:a05:7301:670c:b0:2a4:5ebc:ca00]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a17:903:120e:b0:298:485d:5571 with SMTP id d9443c01a7336-2984edee8a0mr62542065ad.54.1763004143292; Wed, 12 Nov 2025 19:22:23 -0800 (PST) Date: Wed, 12 Nov 2025 19:20:35 -0800 In-Reply-To: <20251113032040.1994090-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: <20251113032040.1994090-1-irogers@google.com> X-Mailer: git-send-email 2.51.2.1041.gc1ab5b90ca-goog Message-ID: <20251113032040.1994090-48-irogers@google.com> Subject: [PATCH v8 47/52] 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.51.2.1041.gc1ab5b90ca-goog From nobody Tue Dec 9 02:54:00 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 31CBC31D749 for ; Thu, 13 Nov 2025 03:22:26 +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=1763004147; cv=none; b=AO6DyePmTGd0ffcJOiQx2+iY2fscliR8mjreBlsaILUcQ4IbTjvTm0NWoDH5axwNwSU35uKe+LtSbETTUNt9uDveU7tvUXSgiExmxj7hboaIugBFbDMafV835l+vnufulzLDdc4acAeuhcNfPkCHro9iJAthlDIqtlX+7g8BGTY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763004147; c=relaxed/simple; bh=Cgrn5s9K+hOhdC3Kkof0GurfCoyskQbob4D8Z7OGfPI=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=uJiorZIE32WK2ddgL+v+Moa6T811Ye6jdAFlpu9gA6lEWcoB/mpdDZyY5mWcGCsX8BHumGzExZ39yomhOfnJCG1kcymwe3awOaQbD2ajYnM8969vQy75bBNvBLIRq9c5G1jTWqoSSVvE9PT+FySLQ5NGbHZyZ5LtmE9zSxOoYZk= 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=z4R/pcSW; 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="z4R/pcSW" Received: by mail-pl1-f201.google.com with SMTP id d9443c01a7336-297f587dc2eso4397205ad.2 for ; Wed, 12 Nov 2025 19:22:26 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1763004146; x=1763608946; 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=IHh9aOjep5ch3f1bENK/wIAmZh80xO2AoWISVhbZGbs=; b=z4R/pcSWzswSLaP0yycA6hkLdo6Ml5KsnjXKQdyGWn2Hfb68o52sGnWNIG4awEIg56 J2WSWHU/3xTAyiVdOZRA6WYsV92w7ED57U10/POT+Q8/tOPozs2XmAoCOzSqth+Yao/B nwzCsVn74EEWYrLA2JbL2bUmricMzyemF3BNIfhFmMfphy/+E49QtQenxsjvcnfIqn2U HIEVVVifFS83MJqp3/hMjxuvenHy+2d+jHIdTd5agGQduArB+f9PxggDC47P3lxSIalW HtEw5JnMqmWraV8LC4+KQoRPZl2zH2D0dfyiUH5d9QcNT0JN5+Onm+OAuy8ngngV/aW0 u5pQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1763004146; x=1763608946; 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=IHh9aOjep5ch3f1bENK/wIAmZh80xO2AoWISVhbZGbs=; b=jZLBmAuYB1FHTNLgPsRMzjjD9rE791x2NdyjNF6rhTMwIs6GvVZSFzbrv7XOh1080Q TUlNbcm/A+YRD6sdspQHzUPDS8pjx++OOkGiM5c0lhw81orgY2L8wOUOPg6ACK2Bky4o TjFY+LtXIk1kvgLmp0CrN7cfoczhPvRafIJNj1LF7OxAeo17D3zHYnuUr3lO6EzdLTmo w82JqTAl/v+vqWf1RTo7q2V7KbKC9l4CQ3WSDToo8wO/sLRMR2C82QAUgPek4ZWRRu2G FZTfDFITHl/AJL9Mobo3IuAuyuhHZYX3medv/aBx0nSdDMzlkv5SAXqHwhZ81jyXVP/B aZoQ== X-Forwarded-Encrypted: i=1; AJvYcCUZYi2QTD86C2KX5zLakoRcDz7w0xREUaFZZRl+8V0r7jdqSWnb6QD0pUKYY9VheddAsSBlArq8G3/TZbU=@vger.kernel.org X-Gm-Message-State: AOJu0YzSWy4VMd7RGmFDW3rYFZcD5PVvbixoh0AEQVMgssqLaP3sa/NH YVWZPxa/6524mnYkgQo+ZIFEVwhdOYnmG2SdNxviR40b3roZgbhCmSCUv3tm17zz+UnEwNSZX3M PbLZaKT9UVQ== X-Google-Smtp-Source: AGHT+IEteJFe2wj6/twulKdAFdi8lqJ8Hyr8xL8nUMpnOp47DYZOzTaZS9eX1v7Kg+BqzewYZ3Xj2icn6/1s X-Received: from dlbvv8.prod.google.com ([2002:a05:7022:5f08:b0:11a:29e5:12df]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a17:902:f712:b0:297:c0f0:42d7 with SMTP id d9443c01a7336-2984edcb752mr71037525ad.41.1763004145593; Wed, 12 Nov 2025 19:22:25 -0800 (PST) Date: Wed, 12 Nov 2025 19:20:36 -0800 In-Reply-To: <20251113032040.1994090-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: <20251113032040.1994090-1-irogers@google.com> X-Mailer: git-send-email 2.51.2.1041.gc1ab5b90ca-goog Message-ID: <20251113032040.1994090-49-irogers@google.com> Subject: [PATCH v8 48/52] 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.51.2.1041.gc1ab5b90ca-goog From nobody Tue Dec 9 02:54:00 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 ADF6231DDBC for ; Thu, 13 Nov 2025 03:22:27 +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=1763004149; cv=none; b=FSBCDgZWH2G/Rmphpe0o+629xg/1P+8AmdgN2Vrv8rM54lYsrSDTakIgFhyz/7Dgoy2nshV2dRcXNiLSMdYAxM2/eT3ceb1+S8yDrZRdb57mTPPBMCRY0taNp+1Y5AIwLDBw8LuzqDiza+xtiZYMugy8fWI/R0YRilUoLg9zOYo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763004149; c=relaxed/simple; bh=oXAmtgsImllTRrtDplcjWM9IZhTB1W9ikRhG0FFfEH0=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=gVoL7ZaPH0pP6e0c5T+GsutcU1pdcL+kCcK6HRa/CNWkvIw5Vo5/oJBNeoCvxf5KTbzfaYRIEtIpzozbpnaLLuyT+Hyafdw5t2yuoqftZVPIMrBw/6aVub4Gxn5OROa4NXEHDDVBEGVv/r65aPDdF3xnm1GEQcWdcyD8SZPEzl4= 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=sXfMHv0k; 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="sXfMHv0k" Received: by mail-pl1-f202.google.com with SMTP id d9443c01a7336-298389232c4so4279135ad.2 for ; Wed, 12 Nov 2025 19:22:27 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1763004147; x=1763608947; 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=G2yA77Jngt2V93ChqEEVEBYrKD8KbAxrlMWRT/ziXs0=; b=sXfMHv0kyvxBsexoL3bXR7KC/F7yyw69URQKN1b4Y+q/PNXkBT35SwHdlTVUoD1Pux 8olA3ktSZjvZgK1ow9xgMbQ3ZZt7UB2STwo90pVhdsTuONBXAqMaRr4sVgt69y0SSgQ6 kemooEtJPm/6rxf/RJ708pVVhD0RwOjga6oZ0avlwtY8Hb76EGS5gLtEdrH2yK8GCj65 K9RR6f04pTTcKHJTp7bT9lVJcIwly6TjYFNh+UoIB9quVzIMtP2VhMdqmHnv54W4Kwp6 uGML98NPs4LgsZ218b+GCvnbH6vVyR/pVrZMKrsX0hzQ8IljUNU5TtZmUe9uIR4O+O9x k95g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1763004147; x=1763608947; 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=G2yA77Jngt2V93ChqEEVEBYrKD8KbAxrlMWRT/ziXs0=; b=iH3ng6Z0Z/XcU1yfMtohVLk4HAv8oINg0Ibco2dln78H4Ocwrb/NJJbzcvLjPAPdpg cqmNvx7C6TU/QUU8iP58V0jaI/y4plq7gUgrGp+5GzQSvrJHHzNNIUkxp3WUmiTWaFUF eXxbIfprEejSBADwN7N4fKXhjS+5dHE6K4AchpbFWU70gABD/lh040MxEawwgO3+Cd/y YvzSG9K1VyIzClRSW/O3YbQLAkXJyPaZHtyko0TNnniZtIHD29IOuw+/O9Hc20v9rhcH YS7svDWWciBMS/ELN2S4Y8Mj5uKLclmYuAfdK66Ump0QDH9qy7saXgdP9+oJFaL+RBnE pOYw== X-Forwarded-Encrypted: i=1; AJvYcCVVjvsc1CQWfQOrXum7ro0B2mssPGQOU9gkVc1MY6v1GVrTmKdQF8S4mj8n7bcapwrmlRAdLP5vkkaWb4c=@vger.kernel.org X-Gm-Message-State: AOJu0Yy/DfZfKsRBa9QdZ29gG25dMO19CBRNm/82pIXXr2fd7k4eh5ZA PWBYBtaX37kID7dd3TtVI32ts9vuTytul/qSYJrzEX/UtGHYkgZdRSPbKnqpqXuywBRJsARtThc bfYc+Wjp/zg== X-Google-Smtp-Source: AGHT+IETV7NmdBB6OQQbZJCyttKLnd5FX/GWTU35O2jI5hlKHBRCYYEaswxN/MnfzJGT3I6n2GJ1fJDmCeS6 X-Received: from dycaj13.prod.google.com ([2002:a05:7300:fb8d:b0:2a4:849f:60af]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a17:903:b0d:b0:294:ccc6:ccfd with SMTP id d9443c01a7336-2984ed41a1cmr58123335ad.24.1763004147161; Wed, 12 Nov 2025 19:22:27 -0800 (PST) Date: Wed, 12 Nov 2025 19:20:37 -0800 In-Reply-To: <20251113032040.1994090-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: <20251113032040.1994090-1-irogers@google.com> X-Mailer: git-send-email 2.51.2.1041.gc1ab5b90ca-goog Message-ID: <20251113032040.1994090-50-irogers@google.com> Subject: [PATCH v8 49/52] 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.51.2.1041.gc1ab5b90ca-goog From nobody Tue Dec 9 02:54:00 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 9468F3203A5 for ; Thu, 13 Nov 2025 03:22:29 +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=1763004151; cv=none; b=iI9wF74zZCfGYEwe/oJo9bWjzJijbwC4t+V+E0bUEoNfFp5eNjvpwEijIceenE6Zt12WiXlPKgzne3lIl4E8t9/a/e4frvIBbpNQo4Gpz6WrlYyANnFeH+cgItUDEcnSBXQtM92YMBECgA8/4DeRD4jzX/sIj41HFAEORis3VsU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763004151; c=relaxed/simple; bh=gx3ZMnSYtNIuR3G6XwpmhwyPw3htrhCWEk6aSMYO74o=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=THfvA5NKDdU6ipAcC1ZIcrWOnPedEd/UWuXwbExh2ebI0i3NhrvmUMDWFuq2F0jM5corgOnKQtV+yYcrpM2DMzDq7oL+VZwMr8URzta2HQH/3ZRcQa5i+AvPuDpunmjYn0scP0IAk6W2rX8FiKCiN2kzpwtOjvHwB5He5e/9ots= 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=o2iBnDHp; 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="o2iBnDHp" Received: by mail-pl1-f202.google.com with SMTP id d9443c01a7336-2958c80fcabso9450205ad.0 for ; Wed, 12 Nov 2025 19:22:29 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1763004149; x=1763608949; 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=Py7UXsECNzbINGh7G1N+IUTfJZI2trHuRJHUZOKXcoE=; b=o2iBnDHpzugsrfhhHGTzGzEYBPwYISIvs9YMnSbc1cbSGI5vH59FGmIVXJe3llgr8s 0HjGnOVDfy0WjrVvucSfjhKImvSY5qhffnMRsaZahh3LqAgn2zXZQ7fgTDJHL6XgBzKN 7o3oQtGOGAdgGeglipzl5spf2+vhyil3vrQkg9UTQWTQrV0a+Rm9XhyXLs9OGEeJbGKL sqAv+cJO0t+NfkxwF4SoTuIBQ4r4K2O2K7N2W+X6ZEzKa//qvX6R4HiXzxmWmIBp33yz b+G4EAaOYGXTuKno2mt4rCuT4/PEi+fGjpOyuy4ZJMcgX2z6I2+4oPk3kMSNy50Unhg0 JVXw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1763004149; x=1763608949; 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=Py7UXsECNzbINGh7G1N+IUTfJZI2trHuRJHUZOKXcoE=; b=BuTI+1pW3xJ7oOa9obbVeuFTaOFwqGu3hOuZ8MEMTVKDTRFMxm8QR46xhBk8dqa3y4 rs96HJVn6UDPfw5sDL8g8hS6MKdbHAlMQWzsnq4XRWmahKsooKS4KZttgOrOMATIYBBZ 8WZT9Ll7tfxy0iK+DQPOBqtvDmDcy+E9OniM3Cd87Mbzw/4QAgy5QqkUhlpKYHBi6kHz w4jbsK1H84UIuORv59d04A25seAAvIFrhR/wVm/ND27oM0GIfQ7qB3SqaIovIWbfW9ct KUVEWC2FKQpY/9RfLmb9f937o5DgPkb8BuUlv1PS9fBr8+e0OmyCkroVflSCIA9euN3e btrA== X-Forwarded-Encrypted: i=1; AJvYcCU9Q1fFdgfcJ6OuIxzSrv6F7oPhsVBLmGQH0BceB4N1rwYiKjuBO3zCmEAyTxsp3vJE3+KjxORvY0ltL7U=@vger.kernel.org X-Gm-Message-State: AOJu0YzxaPG8y3gtHYdgtTc4JI/Tg25vI6/CbZulB85CEibb3j9kML/J Ze74memJyjZQTei8Wthy2gHrYQMtVReClXL1/UmDEV7Jb0NECB5KZvtKPlDfbrWRGR3MdZ7/GEC cDlRcrKulaQ== X-Google-Smtp-Source: AGHT+IFnpk6PysmHuavubxWMqAYlCEJEyOobEwOluQgkYTeGg/TSO0+cKMWOUVR/Kv+k72uf/DWMPvDPKgbr X-Received: from dlbqc12.prod.google.com ([2002:a05:7023:a8c:b0:11a:3b81:6bc6]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a17:902:e948:b0:298:2e7a:3c47 with SMTP id d9443c01a7336-2984ee01fb9mr61445375ad.42.1763004148816; Wed, 12 Nov 2025 19:22:28 -0800 (PST) Date: Wed, 12 Nov 2025 19:20:38 -0800 In-Reply-To: <20251113032040.1994090-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: <20251113032040.1994090-1-irogers@google.com> X-Mailer: git-send-email 2.51.2.1041.gc1ab5b90ca-goog Message-ID: <20251113032040.1994090-51-irogers@google.com> Subject: [PATCH v8 50/52] 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 Tested-by: Thomas Falcon --- 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.51.2.1041.gc1ab5b90ca-goog From nobody Tue Dec 9 02:54:00 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 6036D320CA0 for ; Thu, 13 Nov 2025 03:22:31 +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=1763004153; cv=none; b=sp1uEFwKa9Pv/gQQ8j4rgJy0voixYoBd++xy4zFwQz38L3yY5fS6+eEfvvXYgNPlHuoYJN2fgR4QU9Ya32ov37ZVL7dpsByHcrCcIeBNfSr8BlNj695pdpXDxHSJTo7P7IqPrClekdGDv15MTuOS/2CL3P4wT4rYwjhH7Y8fUYA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763004153; c=relaxed/simple; bh=EWVkfWqqYmbyjAo4nAJxatebtVSY1toHimrIScc33EE=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=kqOzTRXeGpu5ACIBfwicSBlv++NRyi6GETfzh7zMwGA1vMPWyqglLffDTsU2c+sSfdT6X3rC784ZeU0X1Igum4AyA2+Fvi0Gvt7wQqzbfkb9BsNAXo84+15BgVpMTakaygSXOjmnKHtcN+vuANIg8aB1F2JBNcdv6RSJoB5dIpY= 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=SJda9TOZ; 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="SJda9TOZ" Received: by mail-pl1-f202.google.com with SMTP id d9443c01a7336-29809acd049so4392685ad.3 for ; Wed, 12 Nov 2025 19:22:31 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1763004151; x=1763608951; 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=SrSg7omVnmpP0rBqjcVXTJz9l1QAuCL3y7FniiXAyiQ=; b=SJda9TOZx/ZxjWU6wGAENMlw492+cOBYcZvm9PNPyfhsqGeYtr6xUUzt4aBZfYIRHb 084aY+bEabnH/2ZU5sz6u8lr0X677C7tAexh0ANgUu3Bovw1tpVyuwX90L/syL9vqPp8 9rU7PPb53aLngNJ3z0X4E8EpwQLCDMe2Q2zC3JZxePFoe+0lXlN4Ze4upqPYzrDUpR0H YKz3QjLzdSGmIFpOsHL60Gw+VkURa44z7MDBpdPHChIorlCGa2azolZprEp15eK5fRAe SvOMvsfJeOfHz6IvIzK8tYCn8f8IJaGd2QSpc9RSD5cu8c5DL+znNAVaH9zhE5AgaNM7 QBbA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1763004151; x=1763608951; 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=SrSg7omVnmpP0rBqjcVXTJz9l1QAuCL3y7FniiXAyiQ=; b=wFp5x1ENS4dNUnfVgNdlTCHDBzciZPQD3uWNZmF88DAWOZtcfoDJnFazrPWOn6R5BI 3zDthtQTcMGdigkRqiTZkDWnjMwMqvkqmED6eoa1XUMVH0mEPqzu2bHtvgohsf3+k1IW EtnHdLAPp8Qg9jaXBBSEkX0SKEvLJBRhR99X1+ARbq2pAdbNhcf2QsYTliv7XuktTvRV 5rtyggS1sAlWzC47Zglk3epZKAxO+HnCBFvDxjehuVfBcv3XiyyOLRIIdp7kly6KASQ7 dFfVsZ8e8twOeRXl48c1QxzPZoTxJOzietTa3Rp1tV3igQNKFUyyHeAmJ6pzzMNTxLNq 5yMA== X-Forwarded-Encrypted: i=1; AJvYcCVgh/5/Pcdb5diMDcta4WErnZiqdaboxPlnZPp7/NUBMJv/7zMIlHLFGhNFTSvBTDdajN+XqQwFKbsRMrQ=@vger.kernel.org X-Gm-Message-State: AOJu0YzDRfDbCJjo8ttMYxseZ/OwzQHIleDIAGYjbsEsOn7SVFqOK0Zm 6B3yr2Tg4HL7Ov+A0k4G5nytBeXZrq1xcKJPvGv4m7aQNQo5OjUUIRml87jwsVgk1bQxIhZ1qhR EFzY/w/4Mpw== X-Google-Smtp-Source: AGHT+IGOxhLpT19n0pWCaBa8YeErZkfPs0LRwBwiEB80qpJZFDciKQrG45pU5mVxAVZQo34jnYygsgguea5q X-Received: from dlbur6-n1.prod.google.com ([2002:a05:7022:ea46:10b0:11b:d67:8ccd]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a17:902:f711:b0:295:98a1:7ddb with SMTP id d9443c01a7336-2984edf345amr69415045ad.61.1763004150490; Wed, 12 Nov 2025 19:22:30 -0800 (PST) Date: Wed, 12 Nov 2025 19:20:39 -0800 In-Reply-To: <20251113032040.1994090-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: <20251113032040.1994090-1-irogers@google.com> X-Mailer: git-send-email 2.51.2.1041.gc1ab5b90ca-goog Message-ID: <20251113032040.1994090-52-irogers@google.com> Subject: [PATCH v8 51/52] 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 Reviewed-by: Sandipan Das 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 b2e3e2883022..5bc53fcf6448 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) @@ -694,6 +695,7 @@ def main() -> None: AmdSwpf(), AmdUopCache(), 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.51.2.1041.gc1ab5b90ca-goog From nobody Tue Dec 9 02:54:00 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 11087320CD5 for ; Thu, 13 Nov 2025 03:22:33 +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=1763004154; cv=none; b=UqQZWdq8qez5FLNzYVzNpM3q0W5EGOY9DsHSjnuU1aWtCDl+0pDo4zc7DC5h264UtDntUavFwQDlUYw9NO1WFlK6+DJE2HdAbvuB8vXMAaW3enN9bjPE1hXC8A5rJF1CRAs0lo34rMGHJj/saEn0ko2mOEmG6sb8qao7AFH4JdM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763004154; c=relaxed/simple; bh=PYYj0BU/XGMQcfYDNwI5vZ9QIwJJl77gXefIpVh8h6k=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=iTvS3VgpwIOJX3UwBQy1X6JgTrou8T1E8VbZyMvskTeT0NOftaUe/0yfhODkJu83SIlt8olDvWy5MlWhYMGojm90pq6TaEVYeHKUrPvnTpC21d5vfMUXwg7+R1K4yQLEft+sII4Rbfqz833YSVjsiwqz12ZZMc7lc8oBedjBiHA= 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=z1jwEihb; 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="z1jwEihb" Received: by mail-pl1-f201.google.com with SMTP id d9443c01a7336-2958a134514so4598605ad.2 for ; Wed, 12 Nov 2025 19:22:33 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1763004152; x=1763608952; 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=EpiV5EOs3sfeUi27FfFfkzyZAK5h+RJI1H4AImCQC2s=; b=z1jwEihb833qgx6lwt7G8LED0bvXxjOmoXKk2hli9jK+YfiOuXIjV8NF3VgYxuwZKk tUDNSzPsxCYB7swJVTXtlSbSaGlOJ2Q20y3EDrYxVghVKdmKvLUS110HPERQEPICUBf5 3A00aBzVeELOlnSpDxbcBrgjVRoBvXGWpdcIj1H9FspcTToz/i8OivKnw6AUkVp4lftC ouFL8yD5Sxk73wxXB+Q9RXv1CN9jxS/apo3vFJhVe8fXF77zAUdolzarhoxvP7QK3Eap n27gQBsOO73lnihX20xXn6MfP13AzsgQrKbFEnaomlijj9PWjL40E4RRyuWlMGNJGQQt GX7g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1763004152; x=1763608952; 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=EpiV5EOs3sfeUi27FfFfkzyZAK5h+RJI1H4AImCQC2s=; b=s58N2c7CGJTtIdRRULyPEEqlj0yz/UXLFiRMXAn2+puE72ESMogar5HSOVkcKMaDsS no99XMkMEwrroiiPHr8CEDV2895mxQYYywcb4GE+/5TL6h6YyuqbcIpPokgrGY0ki+eQ hRF76LJ4W/pMsKAq2j7YN/bMpmz0GDiyJXrhPLMU8jJCIEgyqt6Hql0K79LwmlpFgPPv ihzlnfjnh4IwHjwLVaHLYzWKzTMsE4Z92odnN2ci1y83IjB8eevlAYrc29VyRxYvssM3 wijh/xsXcYuV0do0VqeAGLS3OKNj4zHgs7woJDZE6yIFAU3yrvy9Zb9X4cAhCunxSYuA 9DQg== X-Forwarded-Encrypted: i=1; AJvYcCWxKSpNyEVyJ5cqEFe3VBKJ5ebIf7hZgTmX/RvCZnW3DXZxv2uKIcg6BMYC5KKGtIzXD895UtTB0rXP8hU=@vger.kernel.org X-Gm-Message-State: AOJu0YzcgoHuHDwp/71/5dt6+okiUNmGjPl7W2XRJmHF6V6PfVpowRDn vgEe1HqP8Wanw+pNIHAML2D+kK2QltcBFXSdm/LZKQm0K9bqxJ3sqTCo4Y2IWNph5+ZnfLkVath h/DxGyPF9Vw== X-Google-Smtp-Source: AGHT+IGwLbEYZHnLyWaZ1D+XpbNhBJmfreqS26xY8slF2pPAsU5UgWmp2DKmUKpTsYFsPo2XCG9i/zA5d4VO X-Received: from dycrq23.prod.google.com ([2002:a05:693c:2c17:b0:2a4:633b:7a61]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a17:902:ce10:b0:298:3a2f:2333 with SMTP id d9443c01a7336-2984ede9f70mr69159195ad.31.1763004152511; Wed, 12 Nov 2025 19:22:32 -0800 (PST) Date: Wed, 12 Nov 2025 19:20:40 -0800 In-Reply-To: <20251113032040.1994090-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: <20251113032040.1994090-1-irogers@google.com> X-Mailer: git-send-email 2.51.2.1041.gc1ab5b90ca-goog Message-ID: <20251113032040.1994090-53-irogers@google.com> Subject: [PATCH v8 52/52] 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.51.2.1041.gc1ab5b90ca-goog