From nobody Fri Oct 3 14:29:35 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 961B1126BF7 for ; Fri, 29 Aug 2025 03:07:34 +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=1756436857; cv=none; b=Copj35SOajAEPgoNIsIvHge/89tnZZO0wwUhqYOIjDpCeNPxnM7WUXGOe2yMySEeWpIjsvx6pKkygoFeNbmSoaq/q3bEtTAWWH9DKOqXJYtA07A6njEU8Voh1yZNKggF8X8A2TvLsm9X73q9Ziz787XSGJBnCO7EP854rLnnEgw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756436857; c=relaxed/simple; bh=t5xyoj8wIHdlPAnXsxGru1L/7ouPIq9H4n+12YXzBfA=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=NRftMED1n2Q+JZaUs4khYNF4PXSXkrMq8+cE6CHQUyOZFgkzBqLIQkr3EVAhuzynGO1fuYyS3aTx5Lv9Fq/r9DbdT41JZ6P+nmTdPJl65srr3XtxIx4I87rRQ1v7N9wNww//YoU6OzMqIHiGprftTvfUaZLWbo6yKEI0lFdQU6M= 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=cbr9SVSP; 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="cbr9SVSP" Received: by mail-pg1-f202.google.com with SMTP id 41be03b00d2f7-b4c409a09a8so2245253a12.2 for ; Thu, 28 Aug 2025 20:07:34 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1756436854; x=1757041654; 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=20U3jn/8wAJzOpL1hveSchRqqYuGX3fi3dVG3vYVRqs=; b=cbr9SVSPM71mZrYr+PJm5ncTC5NKQr53jBnNbmz415jNvHDT8+VwlQs31x88EYCd+h LHSAC5ql5AcFeVyqvfq+aqbofxQ4EhHqoa5EmG2+SWz8XzAyyXZlSqwzFkC4hwJff6uf PjHuS+YY05i08GBSPsrpSRJRAgfOy8zmgX4rvQjsYRj+XUIT7l/+CHpT39zTkvlNytet JKFIwPboOfVOXXvCnn9BUeCbFM9JEHGjgIfTJmD4yBPy6B+OVGraJ/du+Y4aORUdlr2U YeNLkyR5aAz6Z9vAPdoLux4Bjkz5H3E/e3S1Yz5FCdEPvIUDV/aF6CtKq+LQPEJYi0BY 3xcQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1756436854; x=1757041654; 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=20U3jn/8wAJzOpL1hveSchRqqYuGX3fi3dVG3vYVRqs=; b=V/651RAIXBti0ASEtbVhu2lCWYuK9UdQuzoBh7KhtVCNL2r2J67ghaJTjNPVzpIcYj CSaAIX7XO9uZod2PNRMnwanYK6un8whZgQf4iOyAoycyPQtAL3dekgWkrMcCKwZAToEG KmwTZZxcg0xdsf04LEc0VbVEzTkaCJntPPk+OOCEAwaFJ6gRytAOB5rYkjVggKSQKDQt 2f/Vv1i8a1csYMUfDCItrKwMjZqVsqmUSugoutDHSu6hl5AZt1wgW9x7DR9n8tihtISM 80r+Cr5HTnrs18vPaHqTO0cGd/8DktxigSmm1msQSYP4qVBlfBQa+A8buXp1jA0kcG5C Yffg== X-Forwarded-Encrypted: i=1; AJvYcCUmmYF3QxN0TWEeNeKO9Cttib0wHINVEb4KJcGjMOjGLEKzsO/yUai5XYst9ugQrMpnLax9E68jQzlScKY=@vger.kernel.org X-Gm-Message-State: AOJu0Yy/1FqadjomdEjShyfKC3+hMkomKuWzMJfhJiw9c/jn/ycEzQ1V SP6YzJFYZ0CL65NLCZW7xgbtj/cxwUFxv7E6Vb5qQc5BSbUrLNnBdJJxvyjnKMiaE5bdVMkxZF2 PjyKirojyLA== X-Google-Smtp-Source: AGHT+IFjxqk31hpFMspKZJBhWcvU3koR0zXOFKwFgSTPECY2WmzRaTFOTjIKkldnRUAUvOddJHXUhArN7+TH X-Received: from pjbdb15.prod.google.com ([2002:a17:90a:d64f:b0:31f:335d:342d]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a20:a128:b0:243:bb99:a100 with SMTP id adf61e73a8af0-243bb99a3d2mr4303651637.46.1756436853865; Thu, 28 Aug 2025 20:07:33 -0700 (PDT) Date: Thu, 28 Aug 2025 20:07:15 -0700 In-Reply-To: <20250829030727.4159703-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: <20250829030727.4159703-1-irogers@google.com> X-Mailer: git-send-email 2.51.0.318.gd7df087d1a-goog Message-ID: <20250829030727.4159703-2-irogers@google.com> Subject: [PATCH v5 01/12] perf jevents: Allow multiple metricgroups.json files From: Ian Rogers To: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Namhyung Kim , Mark Rutland , Alexander Shishkin , Jiri Olsa , Ian Rogers , Adrian Hunter , Kan Liang , James Clark , Xu Yang , linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org, John Garry , Jing Zhang , Sandipan Das , Benjamin Gray 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 --- 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 c896108ee4cf..69aec4661a13 100755 --- a/tools/perf/pmu-events/jevents.py +++ b/tools/perf/pmu-events/jevents.py @@ -637,7 +637,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 @@ -690,7 +690,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.0.318.gd7df087d1a-goog From nobody Fri Oct 3 14:29:35 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 63D32224B01 for ; Fri, 29 Aug 2025 03:07:36 +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=1756436857; cv=none; b=ITSTgkblEmYx7R2u51srQGZ3CwOQym9qC+NldSiXNEmtZpTCAqltamMZyL7VemdymcARj/wVuXizqMyw45+GD3jyQPXYszf6JkFA9UM6zxBs7qDUxVWpvgPagHQLppymnLEvZckQtoPMtc78EoxmCNwwy1QD6eQoNNXhw8wyC0A= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756436857; c=relaxed/simple; bh=DW95+ROWeRh1f+uKQY+1pJ9Rl60s07F9LROWdSTmwMU=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=W3Y8iIoDE2r2WnoMaMD5EgWJRWhDa7wXkoO09N0dOzgjMpfqAfWixV96sq3wENQ5+yVLGwwBBsGlS6ETlsSs5S1CmQyrcF95+RFxf33CCrxhPd4cLWNBOBJxVkxhuikhF+7BlaCCvmQ2ZEy4nA+rmwvwigpcLq3mrlh6Ppidoxs= 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=vPAzt7FS; 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="vPAzt7FS" Received: by mail-pj1-f73.google.com with SMTP id 98e67ed59e1d1-3259ff53c2eso2335361a91.1 for ; Thu, 28 Aug 2025 20:07:36 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1756436855; x=1757041655; 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=JQN8o0Ql3jo0PeWKZ5rEvbUgELTGNYwgjgL4vx70CkE=; b=vPAzt7FSYFyaaKm8O37AntQm+dGJgkknMz3DEK0IYps/FFQTwJF8EfnivkOtGwkPRP xIpIYp5fPLN/8A5eds5e6gPwQ4275qUOx/eX/Ac1ru+kb26KshjUmhENflG7dKtGdZGU b/YPVL83w2n676QGt4tzoh8N5jbQwG+Pl/0dY5NgNKEp5S5kHsyDc9mLK+uLKAOo0BEC xB9jGEDow8QX/V32W1hVGjd3ukH6rd+Z4EA70GHhhXFGgOdiNy2JKhrQ8w4afYZkzZvt Bxu4d3/DW+lYW/Svbugpyegw+mYfd1HSA1NStISSkEJ7qjk0HYY8vuKqxYc41SKu5C3D i/Gg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1756436855; x=1757041655; 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=JQN8o0Ql3jo0PeWKZ5rEvbUgELTGNYwgjgL4vx70CkE=; b=N2Es3O6gISd5UBPXSTEbn8lvCUti42/5oetfnhn8EmMTyd1LXlDN8JsT65fb9ip8HG VYBLou7WWJPOIs5M/BycdzeRhgP4i4rv1cyg0erf26/vM0KbkUbqk/jPuski97aZausa KUzAM+D7AR25GCvH9l2g/tsk9ROCqDoCOJ03GjFr6rIlccOZVBITnuJOSkvC4S2DIc9C f/AmBeXILM8TNEmGtsGE8xfwLpDG5PUu6EX45erpLEI1Rz2hYL96vFzmk/t75T/XRiRK xfDKZCkZvWJpCb//5u59QWDv2a2FaQ35wpAZtYi6+3QtejfbXTpkJukrwO6RrXKTCHXs oiQQ== X-Forwarded-Encrypted: i=1; AJvYcCUHXgzMwr6OKIPcx7ZQEcjNAAh2uVa8aw19XT24YTnwbr/dAiP1TKatYANHgpqjOjehRHEXChiqEJycs5g=@vger.kernel.org X-Gm-Message-State: AOJu0Yx7yoqdyETzzJs6HwO/7SqgiF0pfkR+z/UiKYNfFZMG5aHrvMVu okd28uQ2MPzRGsd+qOMnKDQDwS3cVkz0XXhJ+F+30ilsdKXQueQ4r9DpUGguK6UaezulAXTMfKl TqdZ1/4X/2g== X-Google-Smtp-Source: AGHT+IFR/Hp+eBJPAAV7DMXkQEy7huzl6iYCK/AsfSYzwTRaHCQq1hJGtlXTIyhm0OUhww6jIR6wNjj3iO5D X-Received: from pjbsq5.prod.google.com ([2002:a17:90b:5305:b0:325:220a:dd41]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a17:902:d50e:b0:248:fbec:7c9f with SMTP id d9443c01a7336-248fbec8090mr35229745ad.25.1756436855474; Thu, 28 Aug 2025 20:07:35 -0700 (PDT) Date: Thu, 28 Aug 2025 20:07:16 -0700 In-Reply-To: <20250829030727.4159703-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: <20250829030727.4159703-1-irogers@google.com> X-Mailer: git-send-email 2.51.0.318.gd7df087d1a-goog Message-ID: <20250829030727.4159703-3-irogers@google.com> Subject: [PATCH v5 02/12] perf jevents: Update metric constraint support From: Ian Rogers To: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Namhyung Kim , Mark Rutland , Alexander Shishkin , Jiri Olsa , Ian Rogers , Adrian Hunter , Kan Liang , James Clark , Xu Yang , linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org, John Garry , Jing Zhang , Sandipan Das , Benjamin Gray 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 --- 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.0.318.gd7df087d1a-goog From nobody Fri Oct 3 14:29:35 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 200C62309BE for ; Fri, 29 Aug 2025 03:07:37 +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=1756436859; cv=none; b=Y+/Fw9eRfrAOhiGWLZZiQTHz5ywddz7bE5fKRZjUUy1PpiuBRpsUkPrnwArktt5nS5JsABs8VD1YfG7maH6CHReU4EE0a7DyHcu4vuj8EKWwn3OCDbxBQTR5TFWQpOzaHQqam3Wwnn6zq3+xeNk0eh3voSf9u1STFiw4PIgpOWk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756436859; c=relaxed/simple; bh=2SPnKIFCU+FQBYmrghSz9B73YgOF3w87PVycTgRd918=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=eBA6VTMRY/lfkZlZ1+9rgm4ElfiWdIEjU3uBdabUFgft9a1VCwcntkrgUjCxfidORtkA3L+bXmSyN3Y5OaezEEb+ePIIMSdNwmwDCQS6gNyMypZzEFpdiNLy5hAjDCyLJqgUuAlXU4XK8LFNlp4FEoxPbpEHmknL2gFUO1aTiOM= 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=E7QxjNIC; 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="E7QxjNIC" Received: by mail-pg1-f201.google.com with SMTP id 41be03b00d2f7-b47174bdce2so1327364a12.2 for ; Thu, 28 Aug 2025 20:07:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1756436857; x=1757041657; 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=wF9CmQztZ8m+ClwavvS0RwKzE4shCD55tHGvz6T3N3U=; b=E7QxjNICA3TGuUks7yjnoMKY8MPqj8J5SDks4QfTZzo8BGnqjUHYm8NL/PxjEHLy0i /FFmn+e7xz0lO186z1H1iv2xUuOM4ElZqDYRvQlaWPyhNvW/CyqGYu2Lz611E0h/7wpm FFZNTLtjbUSenM52L3ZaoyUhZYlEpjyycP9XgDIpirJsf3930jNgST61nSvmL8eHkDx9 C3vGUJJ5u+z3lz3RaWVInpRDCLG9rSbQy+dpUQ+lZ6lDj9Q1Ev9ViuB8Pi4OmTil+0U2 Rb+JDE1IQpUl0Xi50S1xNKjSJ5bkHdSsiakANXeuRkv1m+eyEZl7WwcbWjPBzNFEfcVh SniQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1756436857; x=1757041657; 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=wF9CmQztZ8m+ClwavvS0RwKzE4shCD55tHGvz6T3N3U=; b=dU+NwW4Qz3yIlAkmIQ1f0MNnMi1ANL4Nwto3G6KMCePTuCOd6swNRCXtf14M5rdAxc IjQTBbWMM2icF1Sfd4pHG6eS93Zkeqb40ttVoFKEUDuHgpyrDamt7yUD7EDL4CXwEkEn rAIDNPr60Q1+T56035BoegLGjz2+W/Fm5+s5blw6/JaTWfewPvlUKDdgGwylK8KCQ5jK KE5+VpjjNjZihWZEvhwWLiGrtUnUa/Yhtp1s8s3+3hvhiKJWgR40zm5FhSCB5GNI9/1w re+4lp22gVRJuL3x/g3XGKZ4bEmZX2oDzfIMNP6pgTmQjG9MxJojXAIVF/1svLfXlKjk Pang== X-Forwarded-Encrypted: i=1; AJvYcCUjY3REcaKYsK9xehNvqxpuI2GJMoLFgnP24aLORlr06qego7qtkF2ywJjuZ4tRT3ROvkq22ESS5kXdyaU=@vger.kernel.org X-Gm-Message-State: AOJu0YzegFU5HHIX+oR46LzPwsU63fu/StL8V/5/3EvxMxaF/8inEbSw QUmGhiWtb/4pbus34BmBXvOXaSex46ucIBPPPR3Ny1wM5eBmRPxCjEvTuNmZSNy7wAspmyzVc1n w/9d8CWjTqQ== X-Google-Smtp-Source: AGHT+IELgHMT+riRT6ooQjHoRr7Egdxg8DnVNOmmHcV20ZKxJTX+CwreDH0HXsKO/ZJVtC9CnbSyJrVGPJgH X-Received: from pjbnc7.prod.google.com ([2002:a17:90b:37c7:b0:31e:d618:a29c]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a20:6a03:b0:243:b20d:5df8 with SMTP id adf61e73a8af0-243b20d61bemr6950671637.10.1756436857397; Thu, 28 Aug 2025 20:07:37 -0700 (PDT) Date: Thu, 28 Aug 2025 20:07:17 -0700 In-Reply-To: <20250829030727.4159703-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: <20250829030727.4159703-1-irogers@google.com> X-Mailer: git-send-email 2.51.0.318.gd7df087d1a-goog Message-ID: <20250829030727.4159703-4-irogers@google.com> Subject: [PATCH v5 03/12] perf jevents: Add descriptions to metricgroup abstraction From: Ian Rogers To: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Namhyung Kim , Mark Rutland , Alexander Shishkin , Jiri Olsa , Ian Rogers , Adrian Hunter , Kan Liang , James Clark , Xu Yang , linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org, John Garry , Jing Zhang , Sandipan Das , Benjamin Gray 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 --- 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.0.318.gd7df087d1a-goog From nobody Fri Oct 3 14:29:35 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 A281A2367CF for ; Fri, 29 Aug 2025 03:07:39 +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=1756436861; cv=none; b=MTk1fvePLb11QwSeMLal0GxLW/0rFewPBmFu/oJzh/e211loGUHTXt+Nan+xG6+85kXG0tE9D/377DpR3sZa4PJ5h7TvQOxWw8NKKdsKaORyrYHHFcRx86F8mNdCLYzrhFazLd2VtXO0JP5atyoX+5BYLu/LwCG+uUUAjXGOmVk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756436861; c=relaxed/simple; bh=t4ReXMJgriC5I4KqqQbRdSp1YY/UN9E1HoYL0hXqW28=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=PS9Y9Cufjfl8oJCzvgLyIDQaHYqO8VIbwr6iZR2cJy6Drh579slUodJmh+EHnrXA7WZt79vbPsNpKHmoOHqGeqqc0+dVWmu19DKmP4rKBW0eDJ9yTd9XZNswNf082tByIaPlbqA/DYM8/D8biRPBicWHS0cWLKcP6TRU5Iq+TiQ= 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=vyUlXrg+; 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="vyUlXrg+" Received: by mail-pl1-f202.google.com with SMTP id d9443c01a7336-246cf6af2f4so31822445ad.1 for ; Thu, 28 Aug 2025 20:07:39 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1756436859; x=1757041659; 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=miRE9bQUs9E5F/zguUv2KfDf7fNpSn7w0KCF34UFGOo=; b=vyUlXrg+MN+B1jM0EiKGPLrWDQYjunQmt+WWpNSNtgaqEavo5i5C6Y3n3DSJnZ2Jbl b+irn7Rs3J7O2zMozQovv+daqm+1hwFHm5Lm7RnQfy1gs/HhIwaMd6qYQ/y60y2IWOA2 nTyPG8oP9pFr1fNXeQTPQN5ZnQSyxyDTsco1JZIi5Zdscrchil+KcQaig93eytpm4tAw SALv5SM2JowLi6u2uK2Gcm6KDDH+skYvBuM/H3CbYepA6tasxJD7bikQLeGyZmnZ+e2k Fc4mIYyAouoCzb1hoMeHrZoDdoC8OFFRg35bOy0fOVB5+9p1Bz8WnEJSt+eck+UZVWIZ c+Eg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1756436859; x=1757041659; 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=miRE9bQUs9E5F/zguUv2KfDf7fNpSn7w0KCF34UFGOo=; b=A9Rhbn/DA8byOUTTmR3Q/zLl6aDhXM/J3lcobNqFTVe+I6TqiQDYXM/yjv9wNw0IAR pRtq+REyDez31PGr3RXnfafoaf5aTk2nBeaHc6amc2+nvVJjMkgOXj3fcXCcDdyAbb6N 19iQTD3WZwA93UKXvNQ+/6r9QBsMHvBrhAn66RzxlgQRE4S+hYWo/RH11QcO8dyJvhHy JzqThTAroqDo9qwxJhngHxHrHw5SqCnPuWJFnJZXm9XnUsLUtyWNtS0Hxw1qvYOMyb0f xGfkrDAS6ChFRSDIDoi0djHbYREPn+ZCPzDhOFsLeLCULE3skt3eyzNcOzLAWMk5cm/j VTRg== X-Forwarded-Encrypted: i=1; AJvYcCUhxVAu+xPTZRNFQ9yqQ12Jj0Bsvxz1mHoX0inG+xr8Gb5GTW3htZTUe0J6lJh34oHb0/7h3gHk5signsY=@vger.kernel.org X-Gm-Message-State: AOJu0Yw1Xv0qDYxBqfsaPXk+Bm8jMN42czNb2G2B0vCQd4cg2+VfIXvN wvlrvNzXLhw8ZK72y05UyM7PqKFa6qRWvn19ITm5E1P5asL8qFMqZiYF7XGSP5fMzHoP6O3yKR6 2fJo4ta3Xeg== X-Google-Smtp-Source: AGHT+IGIZiYj6zApZF0kJzHfxqReG02e/qq1X9hh5OsvTs758zszvYqfayhjbJhomTpvOiQotDK/zGCPfRj7 X-Received: from plqs5.prod.google.com ([2002:a17:902:a505:b0:248:7327:44b8]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a17:903:1aef:b0:248:e3ef:13fc with SMTP id d9443c01a7336-248e3ef16e4mr61366975ad.16.1756436858995; Thu, 28 Aug 2025 20:07:38 -0700 (PDT) Date: Thu, 28 Aug 2025 20:07:18 -0700 In-Reply-To: <20250829030727.4159703-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: <20250829030727.4159703-1-irogers@google.com> X-Mailer: git-send-email 2.51.0.318.gd7df087d1a-goog Message-ID: <20250829030727.4159703-5-irogers@google.com> Subject: [PATCH v5 04/12] perf jevents: Allow metric groups not to be named From: Ian Rogers To: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Namhyung Kim , Mark Rutland , Alexander Shishkin , Jiri Olsa , Ian Rogers , Adrian Hunter , Kan Liang , James Clark , Xu Yang , linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org, John Garry , Jing Zhang , Sandipan Das , Benjamin Gray 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 --- 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.0.318.gd7df087d1a-goog From nobody Fri Oct 3 14:29:35 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 8069623D2AB for ; Fri, 29 Aug 2025 03:07:41 +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=1756436864; cv=none; b=aw2b3ArGImngwaF5d7XbJBFT7kR8wxP2YYXJh9zD3neMRHvLEVw9TYOQnl/72rSPshr4fx+PYTnmGaeRA6PDOsDr9ihOUxWZyprmScfE6HRMxAFwy5pADFCz76BWO4ZFAzXXGxcTSsJvJWpiZd4p4rMHfunvfxfxX8QHnDkM72g= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756436864; c=relaxed/simple; bh=WEaVVhSK/6Kzfwt0tio2m5fgLf4Kjhprd+htTRjdV5A=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=phZyjLSuDhgWfegCXjbF7zcdVfG5WpKUOpEFcAwTb32cV87cZrWL1LGgD9Huq6TsECq6kNEA2EsnAvqULsdc7n7g0R/guJggJsTUIc/umpS/bAB5TkLiK9ADMr0j7OxuTAPFI+Jmc9qM+WgYLEqImlwgtBNKJXYOJdkbR050uv4= 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=2LxhrLpH; 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="2LxhrLpH" Received: by mail-pl1-f202.google.com with SMTP id d9443c01a7336-248fbfc35ddso14673305ad.3 for ; Thu, 28 Aug 2025 20:07:41 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1756436861; x=1757041661; 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=OvBU2ACyciLuXu2F8DfOv8SJAwYRyI89UgDkHEBBKZ8=; b=2LxhrLpHgalt7Akro+UCkUB1AVxt3d/wAQM2h+2iLti2fLutqnrWM9msrhvyi3POcI wmtemXS46JVF440JcQQtKxVReRswNXQwc+R7grMwNrKsLwUJvKY5g11FlVAr9WcGJyXI cYjsWjykGi96gjWv1puPCfwP+wE/f6pKcT+1UwXcMPjW00hkZ4Lk1weSpNM/aDQXSJ3/ l0+UFbBz5vW2OcrexrMowwSesktpqmVnslu7eieutcneYeSIWnRlq3z+r2rfcWEf/Gbp 1FyZ/aNfnf30XkQZhGbNxp1FV/wxYIFrWH+2aXHLcps2XZ3yGlxa6xMWrDwgGF1HZ+/z kczQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1756436861; x=1757041661; 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=OvBU2ACyciLuXu2F8DfOv8SJAwYRyI89UgDkHEBBKZ8=; b=hDUzsAO+q2MEvBfms8TcxDSGuSTK0FgRyA6H+LxOuJq6rad64fF4TlB0Nd/GidRRrj 0iPiZloLGy9gtm3GEtY0Qr7+xWa1zzY5Gk8zqA07iA9fziIItJKhu/0+VuE8FO3rRHi9 eKtcR5g4RMHPH7ZvsQDyAc2cYlfmUMmgh3w853wNroVbk89qqD6jUht/F3nA527FiDS4 gJuiMngmeUUUgIVbMnnyPHis+pEEpMhRn/0c1D46+ZDR7wSSPMDh46UPwCKQH9tUPMmP XvmZYsJhkKavRqawjB6bRV/Ho64nmJErChXoYMDN4wf5KxBc7hMSHmwHjT/m4FlkqV3J thSw== X-Forwarded-Encrypted: i=1; AJvYcCWD/6+VKxYp34OQgQ+X9Dq7EF3wuxsMgPyCVDfx8FFqvgu/mab7M2LZpiL6cv/KiXwjgodFgsdNQYz4Ka8=@vger.kernel.org X-Gm-Message-State: AOJu0YwgOeQ6DHGoCuJYAvK6e5datfx71LlGAhMBxsl8cO/KcZUUX0wR rGTugmoy9ysPdOTC/Nuvl0VuMttgnjmMc3wTcIR046SksKIcWxysn8x+GSQ/QBMJrCqIv4rivEN 1c0owcDii5w== X-Google-Smtp-Source: AGHT+IHba7bj3xJQLnoAbns1ymqnpb7bf2P0DkwLSlskvstOEnoDpXVS8KhuocUtjzKfuHN3Kpixn1JcklXc X-Received: from plqs24.prod.google.com ([2002:a17:902:a518:b0:248:a265:c642]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a17:903:1ae6:b0:248:84eb:74ba with SMTP id d9443c01a7336-24884eb7babmr151051685ad.50.1756436860874; Thu, 28 Aug 2025 20:07:40 -0700 (PDT) Date: Thu, 28 Aug 2025 20:07:19 -0700 In-Reply-To: <20250829030727.4159703-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: <20250829030727.4159703-1-irogers@google.com> X-Mailer: git-send-email 2.51.0.318.gd7df087d1a-goog Message-ID: <20250829030727.4159703-6-irogers@google.com> Subject: [PATCH v5 05/12] perf jevents: Support parsing negative exponents From: Ian Rogers To: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Namhyung Kim , Mark Rutland , Alexander Shishkin , Jiri Olsa , Ian Rogers , Adrian Hunter , Kan Liang , James Clark , Xu Yang , linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org, John Garry , Jing Zhang , Sandipan Das , Benjamin Gray 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 --- 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.0.318.gd7df087d1a-goog From nobody Fri Oct 3 14:29:35 2025 Received: from mail-yb1-f201.google.com (mail-yb1-f201.google.com [209.85.219.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 EF88C24502C for ; Fri, 29 Aug 2025 03:07:43 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.219.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756436865; cv=none; b=UrSiP38lHx/UnpIpusD/pHzJg66Wpqx+aPmlUxqRlSReenzGi3QGc+JUvCIkMIAn5+iGH9VSRLcBkRpzGdDi2wESuH0dYas0BnCzwhSZa+vfCwv2h4JYJ+Jzd1SKMnHtP40MLMPUegfnmV8Iesy7j1Yx2UVtE6BrlfRatmcIvvs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756436865; c=relaxed/simple; bh=vTlO2/C8HAs4GVTBSdFmOVDic3vZeo0uYSBYeJMOGbc=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=ovv9dac+2xRrLAkE8btDE33UKbif5w+6CH0fgqr6KwV6ntSwT4nbbAHimDt93ccradRa1AvhUYCMXLxp0u4gOI4jSGgCx8ngAogUiGqMgR4F8etkNnqg+Y4/vk8L7LQ8m/5+dgCGMtdtN2a7jZsp7lJoeNifbZTf6Wvg9LAPBMM= 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=IK1Y2BLi; arc=none smtp.client-ip=209.85.219.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="IK1Y2BLi" Received: by mail-yb1-f201.google.com with SMTP id 3f1490d57ef6-e96e02b1c8dso1812523276.3 for ; Thu, 28 Aug 2025 20:07:43 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1756436863; x=1757041663; 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=rdj/Vu7Opnsxqusyddu5GlS1bLdJY2vFgx703YA4bB8=; b=IK1Y2BLiX9JB5em6e9SysxSxQZ7zZuOHkaRwIPTH+Y6EzxBxrGD8n5aYqQ8EgoqKtf l+IJwR+qhvnnv7mL80I2rb9JB6GXy0RW5v+8DQoDNrjiFNpbmlqsRTfIMaGxsxH/cZfh XQbGM1bwE5+/Oz9eUtD3hgF3+RQQr6Qo+tiuKdMX7Et55DURY7WEbh/wxD417DigLYus dgQZnGjovaVM8Ml3AEVOJljSsRxxdA3RpQ0Nshu4cHg1HCIQV0NjInT+m08nK7EvQH/o Pb5+p5XCX7YSOdfuIkUWn3x6UKIhO6jhT8R0Rlmq8fULS4w9NM89LcIFLe8ovPcAzpQ1 Fmsw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1756436863; x=1757041663; 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=rdj/Vu7Opnsxqusyddu5GlS1bLdJY2vFgx703YA4bB8=; b=QntolIJsdD1sM79y58WWe99a1YlUpUeYIgjeV7KIQwuHuMsOzjv9Ven6QUAbibzX9i kwEYpGl2kUHhA3DjRry23xVuz7TOfomAnekJdR7ugTbvkbIMe0PO+YZHwsEKjWakiOdX o5CSdUntJPKUfYdlpBFlCD8v/75N/JGa2AzpbD9zomkDqlBVzcppiO/2U4MCXfT8fZHF bAaZNJL8wSZHJl0adDi+kQFrnrY2NumZceF0NprW34WTnS5g/GlRE9zlTQZ7bK0UJ1xn 34X0xcrcy9KKgpYZrq+rbYpGoMoPI9UcV6pbxEsKh5eeFH5sUcGFhWYNLV4axWm0AIts v04w== X-Forwarded-Encrypted: i=1; AJvYcCUNxqr3waEwKkib1beCflrLSGS5KBtmJIm0XEfE1yrVOH0VfuiPLCytvJbBAEuc+gQU6xPGqsKX+YwzV6k=@vger.kernel.org X-Gm-Message-State: AOJu0YzR+UMFAR6O3oaZc70cJsDVuqc/6CdVngEmqK4cFV8+W6YuqY1Z AYF3p31MhUMv2LYW6qrLu4szo3tXNA9iO1TSRULA7n0nBKuWa5cbIXLrBIYUFQLMECW9jjW81jD kozF4RYnXBQ== X-Google-Smtp-Source: AGHT+IEXYuffvoKEoilxW0f/OEuGZiRnHOaE1V6OQNTnjuayen0x0X7m7NRfydjSOoHuuU2VH3qfDaINIf0b X-Received: from ybbfq15.prod.google.com ([2002:a05:6902:2d8f:b0:e96:e420:30df]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6902:630b:b0:e97:9b6a:daaf with SMTP id 3f1490d57ef6-e979b6ae17fmr2460307276.21.1756436862973; Thu, 28 Aug 2025 20:07:42 -0700 (PDT) Date: Thu, 28 Aug 2025 20:07:20 -0700 In-Reply-To: <20250829030727.4159703-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: <20250829030727.4159703-1-irogers@google.com> X-Mailer: git-send-email 2.51.0.318.gd7df087d1a-goog Message-ID: <20250829030727.4159703-7-irogers@google.com> Subject: [PATCH v5 06/12] perf jevents: Term list fix in event parsing From: Ian Rogers To: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Namhyung Kim , Mark Rutland , Alexander Shishkin , Jiri Olsa , Ian Rogers , Adrian Hunter , Kan Liang , James Clark , Xu Yang , linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org, John Garry , Jing Zhang , Sandipan Das , Benjamin Gray 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 --- 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.0.318.gd7df087d1a-goog From nobody Fri Oct 3 14:29:35 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 68433246327 for ; Fri, 29 Aug 2025 03:07:45 +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=1756436866; cv=none; b=ZW3j1GTV5dBSTjALsHdUHM/H+r51Gb5kCHu8b34q6fhO2laZdDMUOOZdhglcHsRMUhnWdHz12sKDXpRVt//8APRyfkG5AVCSebtsayuTnWRZD3YDCpd46M+mozMSBbH7Mj9eRFa/u/0yoMdufINvQJNzgNpdljq2pVwbKhzSRu0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756436866; c=relaxed/simple; bh=s70LreTJZvpj/UsPUpkL5mH/ObEy5UgYgmp7RgZyric=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=kBhsC4DDwlCrmDAWraiP0+HRiaP1e7wnMuj/DAlR2Pb7yIBjxfc5qqEsrEc5eQG0ne+hPKj3b5g3QQWo8m9AY9Wy7WLhR4IbCS6DAarzTBU20TjpM7zcKMEyTbdRLZh2QTqOcjBbc+tHEI5PyYokBfk7WI7TV/+NvNh66Y+/YMg= 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=LjgJY+L6; 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="LjgJY+L6" Received: by mail-pj1-f74.google.com with SMTP id 98e67ed59e1d1-325ce9b32baso2008163a91.0 for ; Thu, 28 Aug 2025 20:07:45 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1756436864; x=1757041664; 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=CdhDBFzLixhDw1nJ2o5nfgu+L4QKWT2FN7h03sEUhSk=; b=LjgJY+L6B8ydp63HPto/iYa8CKeDI8XxbRSC4UU0FhySG6Kc67SElckYH4JkfLJcWj RnhLPRk8HktFoXT4Je9Kzxjh/gZZin4pNHY0ekR29JxeIsibpLdtsA/2rogMPKCyKeeT dkw/EvwHvEXaacvq8DTfa6DqUiaEqbAb5I8UC38NxKOSEx0Auh20L5FYFtwGIeR+Vqsd gw9M5QTMiaa8f8qs6YiOxPNO+K5yyHnFi6rZdOrZ0MoJiKt+iIK9HPCkTIIfqn9RZ7iN 9qKZG0hL+IWV9bOW9CecjnPYzzr6oGYJ1EI5hq/gooky/eGgAkUhD4HaOAoiE1bSCHfe uxIQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1756436864; x=1757041664; 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=CdhDBFzLixhDw1nJ2o5nfgu+L4QKWT2FN7h03sEUhSk=; b=dn85xdB1WRk5vOqczny2KVjPgRXQLocdp7A6u4vsn9kq+UEJDBGhh7sTo2wc1YqpdM F3+3HXQOgvSzBOlIpVxThWSZkPNmtmJ8CxvMSnw/CWBZ0qDFrQQ2RSWSdjUsXhavW/rj XbHYx0+vINP/yeoeNy+kmbJsx6W6rthYuEDuEjiVKLrrHoMFpyBUqymfZ20+EGo3y2VK nspbVWFud7OIyChui1Y1AjP+KKX0rqlCLUC7K6xNnx34WCqC0tOwr4Tdb8MuMdMKyj8D MbikKztqdEe8liE7nufEAYwZ/Lx3rOiLSOWOjuhpjvL3h8OAiUf2Qa5bnKwachLU81L8 VDtA== X-Forwarded-Encrypted: i=1; AJvYcCVIRp5LStNQFEFkr/6JXrapm7uv85P8yOiR+ELHnWXYG+zl/R8NPKF6sABtArqahsAZiqx8HBIEGElOLSk=@vger.kernel.org X-Gm-Message-State: AOJu0YxZ7eO6JM/qQwEQR90xUu+p1ZoOe7l6aGNUL3T1m9B0esQKfpDq wXRy4N9TIKncpoYRf0KH4PmtxrcOyGZxZ+cdPLHMpzAMzPdAO7uOH+o6batKQJljo+B5RgSsEsa EM8I2hZ/S9w== X-Google-Smtp-Source: AGHT+IEbT+wkcETwIt3TUVHTdsXkGurRbI70ZJMFBroFp7ZiFb9MonRdrQNpj5wIIoMAOuAeZRG7Q1KXiLsI X-Received: from pjbpd15.prod.google.com ([2002:a17:90b:1dcf:b0:327:e9ca:a5ae]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a17:90b:2683:b0:325:58f6:1f91 with SMTP id 98e67ed59e1d1-32559056397mr24152621a91.11.1756436864622; Thu, 28 Aug 2025 20:07:44 -0700 (PDT) Date: Thu, 28 Aug 2025 20:07:21 -0700 In-Reply-To: <20250829030727.4159703-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: <20250829030727.4159703-1-irogers@google.com> X-Mailer: git-send-email 2.51.0.318.gd7df087d1a-goog Message-ID: <20250829030727.4159703-8-irogers@google.com> Subject: [PATCH v5 07/12] perf jevents: Add threshold expressions to Metric From: Ian Rogers To: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Namhyung Kim , Mark Rutland , Alexander Shishkin , Jiri Olsa , Ian Rogers , Adrian Hunter , Kan Liang , James Clark , Xu Yang , linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org, John Garry , Jing Zhang , Sandipan Das , Benjamin Gray 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 --- 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.0.318.gd7df087d1a-goog From nobody Fri Oct 3 14:29:35 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 E2B8D248F7F for ; Fri, 29 Aug 2025 03:07:46 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.215.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756436868; cv=none; b=rlSMnunwt7b2LWsenPtc64PRPBlBnIWNEMkX3Y2w7rRuOT8qTXOf7ICMXxwW7DIIphrsOy3YigNm60O0MFiKPbsVLZAf7dmb14GsHXjmGkA3aad8deqQhDte/2+glE2YgcH7lBlezbcy7+fnykmErZH5YI6aN59L/W2/QhLzku4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756436868; c=relaxed/simple; bh=EojQsIdJN1GuyaOl2KgVOYpdyL7ZGtnSEaoqswJcMlE=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=HN+3JJKZlQCqdjRS9xkUzvYFHpZc8P1743RtdPvH9cRvz5aTHq3/usH1uAmwXkMKA+EnOmSPesOjWA9F7lnzcCJv3uzt04SMXe6zSIL7SRUfiTfTKApAjEE1rsQXqz3Oan9nPhI1P9QZ///qk/aqugKuiX2NnWODPQQs1Vz9UoA= 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=4ZtlC7wG; 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="4ZtlC7wG" Received: by mail-pg1-f201.google.com with SMTP id 41be03b00d2f7-b471737e673so2513172a12.1 for ; Thu, 28 Aug 2025 20:07:46 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1756436866; x=1757041666; 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=XpvrhTjgsn/qk3aSFs928zmUukaE0KfqqZKqz4DFQQM=; b=4ZtlC7wGQZzmdh+q7kP4d2YegWDu7ArJj07kTpbUOi/HbtXnA9a4P7WHjxM/ywQou3 BkeGAOUaCcJz8PrOGVU9F0tp0db9eqmcH+ogT7B60uKKY61wKQXlPsn7LQK8u0imgNbd kTneuZZwkOe2HKW4aHlbMcr8BSZRw8mUBX3Q5UZqujpxC6OAQm6qkIdZxoJt1Ige+y4q rsB1gW/WTWu34BQZWowR/ATd8dP78B+JHZogEu5yvEGJ2POLr/YdeqVkLm9I+b7Vzrmr P5qCHXdfP7oSAsviOaAh8q65aFWc6dtUgZN/jH4BmnnpNvrzLa651Y721F9zXVOuUIHJ y0dg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1756436866; x=1757041666; 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=XpvrhTjgsn/qk3aSFs928zmUukaE0KfqqZKqz4DFQQM=; b=jSlrLHdeSRhMoSPuZrT30gfCtYUYK1DJNkCXUvJCrWN79/SDQNdvMSZZRuwd6r3C9a 1XaXJkk8f8HW4BB715pgheF/0Mfv9BoapNsXYyoZtfaKz6qkQUMAqoxNHgjZhiGYeq7r mo+Hbv6ZL0D/erTzXhQj25glWwYmy++RMC2r2Ztq3fUyUlnTRFUVJX7XOBOc/p8x0B1e +GApbvF4G1nVwHx43KuEsUMx2lDsfG3HdypRE/Jf2wT4bkRK927nDdxW0bA5Nqu9fO3v s6fBosV5jXgWE1SomKScowKjhp2gT5G2d5eeNEwqydgkYV+6lGFQUxiXqIGUsRfZm7Ph vLTw== X-Forwarded-Encrypted: i=1; AJvYcCVhouWcjp2VAvZFv3RTrLxQChcBzm6dCfq3zjmWrVbnr4wXkA7vOacc8DjQCHpbyPmb11ohmXrTVPFwgjo=@vger.kernel.org X-Gm-Message-State: AOJu0Yx2rg+VVAi1YLHQYcYPrtrKQyXxLAuLWMB4Gfwd18UU7e54BRqt vs9p8wWvPL8nbMUySlwzHNVT7TmKu2Ej6GAvh4R+NZRTFjd9dnWVCy+X+Rv9dQqe66zXFNVqvpf WHEgiO43E9g== X-Google-Smtp-Source: AGHT+IFZRJlDlWDv4YCFoPK8CVnuDonQ45vbo7lM64LoLVkiN6b58RAMtn1zVT5LsWMELR8lo5acltefU4lK X-Received: from pjxx6.prod.google.com ([2002:a17:90b:58c6:b0:324:ed49:6c92]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a20:244d:b0:243:bcff:b436 with SMTP id adf61e73a8af0-243bd0036aemr3707842637.34.1756436866203; Thu, 28 Aug 2025 20:07:46 -0700 (PDT) Date: Thu, 28 Aug 2025 20:07:22 -0700 In-Reply-To: <20250829030727.4159703-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: <20250829030727.4159703-1-irogers@google.com> X-Mailer: git-send-email 2.51.0.318.gd7df087d1a-goog Message-ID: <20250829030727.4159703-9-irogers@google.com> Subject: [PATCH v5 08/12] perf jevents: Move json encoding to its own functions From: Ian Rogers To: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Namhyung Kim , Mark Rutland , Alexander Shishkin , Jiri Olsa , Ian Rogers , Adrian Hunter , Kan Liang , James Clark , Xu Yang , linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org, John Garry , Jing Zhang , Sandipan Das , Benjamin Gray 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 --- 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.0.318.gd7df087d1a-goog From nobody Fri Oct 3 14:29:35 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 80E00253B71 for ; Fri, 29 Aug 2025 03:07: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=1756436869; cv=none; b=FYYl5R/wxoxRJiAlCIrcQsHbprCSWTv1qUC66mI218sDd9SY3SCdriMOdGgrCvobvczl3I10RdhsjbO2EA7OgmNqk1pDSFbVHKRxkg1FD+IMeNxXdHKSHyZtcOEwsUTmhfl3e0EameMd5v84AVagEgZVHHGf81J/VWpgKsW99cU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756436869; c=relaxed/simple; bh=mvK/PV04tjW1I5Iw9kLq2VEIUkQXS41ViqzoKNrB2sE=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=s2/0FqZVVGBOAZF/D+ePXCrdaiC0jQKRJLaU/fKWdm87xCu/Fes4E8Q18xHgdcZJZ+w5nMqfDNwNlaaeVpqLrMaqcQRx60o8a/fraAKBo9gKGzm+mdd+OL7Hk3NTu0NNX5/p6lcMBQ5jLdig7q7YdSMq19UDeIV1qTl+BI4Ffv8= 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=PyKtlH9+; 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="PyKtlH9+" Received: by mail-pl1-f202.google.com with SMTP id d9443c01a7336-244581c62faso22360465ad.2 for ; Thu, 28 Aug 2025 20:07:48 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1756436868; x=1757041668; 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=i2+LKUGuiZnKRHudSSVQ03215Sw1VGb8XqCbcRcD/4M=; b=PyKtlH9+krvllDuBAPDaaHp4AJR+rGSpHxtN7syUEap/EzvAteQF+KDFq4gNIdkbtq QR6Kt8Hc/iWaUBBF26sP1I3sQja36ON172kTN8twN+nAHZosT6hIfx509zgJuRgpA2nj vxFwjJUbfyTXbG8J/6M0yz6EcveZg2TnWFR6CCYLoiFxX6GdBhCIVsTEqdH1piKUfK/0 JfTfL7F78s5gZaSUptH2TwlBhj1B2qXegF3ZgXIOEB5VHPdcgc+ndGL8dm4Jwflyz2ok yDoVUjFFRLRm+Ar+ylx5YJ6BBfnXD52wXdEusruNqFbAAe+Twj5bbsiOYzi61X/j3d9P kFuA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1756436868; x=1757041668; 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=i2+LKUGuiZnKRHudSSVQ03215Sw1VGb8XqCbcRcD/4M=; b=IXAfwblF63zkvmJMaRfLrx46iDWhm45ric3+0a1EZE8X5SAMCdFvfjOS2mbZXnKJvC +r9gtyzZLodnqePwcVADiF8IQeY/r84dMNV+/8LqhGmvSUUhtZvuA1dLx5GhPyspTkLf Lb7lVdiH6T7cSXyFF1sabF18SdEnvHSapZ57OuPHFHUid70j3sQnQ5lWSPxLb750RUhF c+lIJiwD1JLBj8wPLCppzvzEhWB5GZ6HRzSVuTxyeELRzLUopddjuDGne3rnEeeJvfTB InmMPTLKiX/W/vZWKfBBCDQM+PoS9OxFU+Uk8FNPKBwKbOFEtM9CF4Fc7CCGU1+4c4ed Rfnw== X-Forwarded-Encrypted: i=1; AJvYcCXWWnm2j16+VNJT2Afe/taod3FKhqOdnIzlMjDqALuXyxtSWRBhhXH7PJ0ZYIBgCljLqZ6jQBxzWSPkd24=@vger.kernel.org X-Gm-Message-State: AOJu0YwAXIbJIGqKR6sHdBBnxFcCxVvWvi+l8eNc0LrQxFWl46m1koHG hKj/64qkDuNBi6OohIns6cuBYSpFpN7gKqtOPpXY45MlngM961LqRYRn7eZZS6qlYKBGqMm/36x KRvZuHWDM/w== X-Google-Smtp-Source: AGHT+IEroOEo3hGTKFAfP0Od+3SOyQkeBBe0t3oUNE1ihXwHPekCxy+kGUzb2H7xFpNLQerzUDJtr5nhJ85s X-Received: from plgo17.prod.google.com ([2002:a17:902:d4d1:b0:240:2ee5:24be]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a17:903:1a84:b0:246:2ab3:fd7d with SMTP id d9443c01a7336-2462ee5d672mr347754085ad.25.1756436867866; Thu, 28 Aug 2025 20:07:47 -0700 (PDT) Date: Thu, 28 Aug 2025 20:07:23 -0700 In-Reply-To: <20250829030727.4159703-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: <20250829030727.4159703-1-irogers@google.com> X-Mailer: git-send-email 2.51.0.318.gd7df087d1a-goog Message-ID: <20250829030727.4159703-10-irogers@google.com> Subject: [PATCH v5 09/12] perf jevents: Drop duplicate pending metrics From: Ian Rogers To: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Namhyung Kim , Mark Rutland , Alexander Shishkin , Jiri Olsa , Ian Rogers , Adrian Hunter , Kan Liang , James Clark , Xu Yang , linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org, John Garry , Jing Zhang , Sandipan Das , Benjamin Gray 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 --- 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 69aec4661a13..7978ca7ef16c 100755 --- a/tools/perf/pmu-events/jevents.py +++ b/tools/perf/pmu-events/jevents.py @@ -498,7 +498,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.0.318.gd7df087d1a-goog From nobody Fri Oct 3 14:29:35 2025 Received: from mail-yb1-f202.google.com (mail-yb1-f202.google.com [209.85.219.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 60EF42580E1 for ; Fri, 29 Aug 2025 03:07:50 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.219.202 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756436871; cv=none; b=OUdch0JgMKuN2u6FpFUxYmjZwCt05baUiD/bl2+SKC6IDcsDsqGwUhWBi8njjPpUMtqPQH7+ucet9df27DsyHLg5xa8uKjyE5/7bOC8bryJF1QlW7lsZYcwakpnbM/MGFrvkqim5s3WBEeTgHIZ09Qj7UiBnvCGJKjB/Dc/Weig= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756436871; c=relaxed/simple; bh=vPT4VQvFRG2eLzpiomf4pL9pOT2iHADuHZfUC5NZtbk=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=ssuv2TSTHT019FI4SmW5w0aT1rPXL1cSKHGJtR15EjMTnehfsVFkSfxiKM18raWY11CjcqE0wkzAp9O22jLhRbLuzBFjpu4TTPclczwk73n3zt0EJjWxyd5T+lwCmKILcbvg1wSxHSNvfB7FcMqvkfO8aGKu/PlFAUxoot8oXws= 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=2QkEsJEg; arc=none smtp.client-ip=209.85.219.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="2QkEsJEg" Received: by mail-yb1-f202.google.com with SMTP id 3f1490d57ef6-e931cb2a9d4so2311181276.1 for ; Thu, 28 Aug 2025 20:07:50 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1756436869; x=1757041669; 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=8HQ9OhIA434ZXQq0lhegQ9wYn9PPiz6by3gG/UF8TfU=; b=2QkEsJEgJ2QQgd0UBSgHuG0KOD9XoEWK1QTE9oXO5Quq79qyhrlYnaed3cVjZHIxHQ SGeRdRpkZRAg8phj7qHyjkQtrHvsqW/Ph+a3PlBxgDf4gfaqa8bf37Rz+2Cxjq9YVrXG fBky+vMW1EaFECsFCqJGhIIgh7MorCX0SRACquDF4LQPTLS9ZdkorXH24Mzgmv4DOJf9 ymizpVXzFbYPvjeZMJ5cPgUBJO6w0fgdh2Y7E//bh60zwTdyj7g3E3A2K6qtP1r9LGCc IwsIfMLP9rlwcAC4nbLwtQZcngMsB3KJ2EbO7wFusF3h+I4fruZ4umXXzF3qN5mmen7D +hOg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1756436869; x=1757041669; 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=8HQ9OhIA434ZXQq0lhegQ9wYn9PPiz6by3gG/UF8TfU=; b=H3OQF7dwjSmGETrrkv+7pia68kbrY4q0INqmkDkz8MyvTjA8wJs9xFRPZK5Q8DAZQP RuNpo9ylQKGCd7NqpzKuOJIue1gOVw8tJDw3CDmk5Okge1zZARdwN97OQmSXL5jWEu5W bOpRvx6XkruyAegZLgStGPsglD4HSrWno2GYYflyXYX6481DKcyN0JZaET2zRWsr/UTs mWZ/PEd8DS27hGxm8lMkDD/L7w7QAwdNXZooavONCGCUkYmQt4HfNwh8uNu+JE0chT13 9LycL7kiHhu3RavunmdrJtnO3ILT43SzERHaHeGVEQtYbxZQ0/1gOyB3TwyjRnrXU5fR t6JA== X-Forwarded-Encrypted: i=1; AJvYcCU9L0ZTx33I6rkYL4xI4uMzMDO1JG5CNXgSK3vFMv9wg7QrO5RQovrnNs8h4GllYAjJUNVftfLOM7t/nlo=@vger.kernel.org X-Gm-Message-State: AOJu0YxLbBO4UahbIQf+i/tKAR33VwUIatMHVQq52qVkggO6S9qAyFdi Jk/iqjkF62CiiKrxyae2ruDldkN+BCAEHIQNJlb27Y3uGO1ZsPgPe/8TOHALOMdroTIHvLOpAtR C76rmF3iHTA== X-Google-Smtp-Source: AGHT+IGdzjHIa0BbGqS0yZ9Tt3V+4NRLwYmzIEe6Qk7aryOvtgBfXEMbMlaQBPpL6a2bVgBwK4ll1x4z/3MX X-Received: from ybdq11.prod.google.com ([2002:a25:f40b:0:b0:e93:3801:f5e]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6902:1506:b0:e87:b880:7dee with SMTP id 3f1490d57ef6-e951c22463dmr33733875276.12.1756436869532; Thu, 28 Aug 2025 20:07:49 -0700 (PDT) Date: Thu, 28 Aug 2025 20:07:24 -0700 In-Reply-To: <20250829030727.4159703-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: <20250829030727.4159703-1-irogers@google.com> X-Mailer: git-send-email 2.51.0.318.gd7df087d1a-goog Message-ID: <20250829030727.4159703-11-irogers@google.com> Subject: [PATCH v5 10/12] perf jevents: Skip optional metrics in metric group list From: Ian Rogers To: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Namhyung Kim , Mark Rutland , Alexander Shishkin , Jiri Olsa , Ian Rogers , Adrian Hunter , Kan Liang , James Clark , Xu Yang , linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org, John Garry , Jing Zhang , Sandipan Das , Benjamin Gray 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 --- 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.0.318.gd7df087d1a-goog From nobody Fri Oct 3 14:29:35 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 C1EA625A2B5 for ; Fri, 29 Aug 2025 03:07:51 +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=1756436873; cv=none; b=on80aVS5NahEjFvtEcxycM5aPj8fN/v9g//L/y3IzmX89SJ2cSIKqtbAYKzy7rlvvC3p3g73zT/UxlmVNuFWwS9YW6SwZjN0Y/Rpir5vVKs1V7BEciIeOuZdTonJt4bZJlCNcSF7NMhCmTDGA+ne52u8Vvo5C2rJPklVLHch2jc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756436873; c=relaxed/simple; bh=FJ2GIBG1BsAUWQpMLjlonQ8xF0TkI0HYkC/wcGmiYkc=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=a1Xjv2XdM8vbaiRASwaK08RmCjUEa6KHwFhMNCNFZHZJP66kAALdRrx+nII8VdlJUz0YodSIhIMgM4lILW1DZ7JU5hoZSoSxdIUiMMiBUZxBhvQLuWq73wDJ0vweJIIUO8gbXIiPbKmVojM/5Jg66l8TtQYGuec7g60Lx3Pchw0= 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=GOLo0W5K; 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="GOLo0W5K" Received: by mail-pj1-f73.google.com with SMTP id 98e67ed59e1d1-32752f91beaso2149477a91.2 for ; Thu, 28 Aug 2025 20:07:51 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1756436871; x=1757041671; 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=VdHUScYT7W2VGRMgw68PcJ7pKiSlfY+0dw+HmuAdspg=; b=GOLo0W5Kd1crfouTzg6htZZVdqQjta/Q1vHBDAX4m2aY6+kYd22EuKQ6UaQMg7U4NA yr0xzfeK4MO2mfgtXfZWYBSNW4zuYYhSate1UWm5dbro8guIWNYLJeuD98RPuxcT0hSM m/2pW6w1+AgUR43iqMq7Po8f2BKQbr4dDc15F39wXabtd/jHNrIeBEvkoOZpLcY4mTWh YSWC2Lsd8jgnzj5bpsL3A5sA/ySFi4+dJZnGXcY2e+WzlPuFHBTXAp9kr1lxJ+CGw/zW pe3nCqNT/Sley0RYvOiAkVMf+2Ec9zyc/W46NiZlGLiYQ2VqEYVBv0zKyTq6oZvfTSzb E2+g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1756436871; x=1757041671; 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=VdHUScYT7W2VGRMgw68PcJ7pKiSlfY+0dw+HmuAdspg=; b=j3WWXTA1YWVX7KYDR4Svr7DEyDAfDClPBpI6Ng7j3kBrcclHvxsmHxdHghdrWkbJHC fa6WMefcuU0ffjRo7YrYX9YdSJ5T7LNjo6nZlfx6I4u/3z5uV947rAhWJfKNpI1XjcMJ 8g7vqhUJHS5md/jnad22mQ/NAG2ky/j7jfe7ltFyqySGlLqRGRacrCAxwPlXBqN3oFmQ VmoL1NDza9S6gu7J/4THSY4PnZAyd9SXDW2pYkzVHfFl5V02NZY6/1Je7EHqFcL1BkI1 J1IHDtotpUj1pZvrVxBDgWwc9YSFhXzYO04N1eAKPxGTTq4M2fuRT0/PiQ0VKTcpnUzJ ltjQ== X-Forwarded-Encrypted: i=1; AJvYcCWljnDbR/jbBX2pkcwQLFtk7rf74y09gtbfihjHXDB0q5QM8gdNbaSvqMJag9BLCgLB8qUPNnFvC77OiO8=@vger.kernel.org X-Gm-Message-State: AOJu0Yy2UxvRyb74m5g/KqKN3hLSYDiaQbclWq/JG6WgA+MDVC9uX6H+ 11JOUEeXISkYHnX5j4QEFA/T/59WSgZBlV3Dypbh8dtA5QTTYuk9F6o17ogleY5uQr7yJZhEXph uQI6MF4/2YA== X-Google-Smtp-Source: AGHT+IG314ujKFfTaDY0VW2hUce2/LUImMQR+ihljf4A+twxxq05CUzMuW4zeIgA+if1zd/ANQmJ0eI6fV4N X-Received: from plem10.prod.google.com ([2002:a17:902:e40a:b0:248:d08b:a337]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a17:902:e80c:b0:246:b3d4:5c82 with SMTP id d9443c01a7336-246b3d4620amr283293095ad.16.1756436871187; Thu, 28 Aug 2025 20:07:51 -0700 (PDT) Date: Thu, 28 Aug 2025 20:07:25 -0700 In-Reply-To: <20250829030727.4159703-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: <20250829030727.4159703-1-irogers@google.com> X-Mailer: git-send-email 2.51.0.318.gd7df087d1a-goog Message-ID: <20250829030727.4159703-12-irogers@google.com> Subject: [PATCH v5 11/12] perf jevents: Build support for generating metrics from python From: Ian Rogers To: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Namhyung Kim , Mark Rutland , Alexander Shishkin , Jiri Olsa , Ian Rogers , Adrian Hunter , Kan Liang , James Clark , Xu Yang , linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org, John Garry , Jing Zhang , Sandipan Das , Benjamin Gray 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 --- tools/perf/.gitignore | 5 +++ tools/perf/Makefile.perf | 2 + tools/perf/pmu-events/Build | 51 +++++++++++++++++++++++++- tools/perf/pmu-events/amd_metrics.py | 38 +++++++++++++++++++ tools/perf/pmu-events/arm64_metrics.py | 39 ++++++++++++++++++++ tools/perf/pmu-events/intel_metrics.py | 38 +++++++++++++++++++ 6 files changed, 172 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 cc1635335586..96ad9ea60f68 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 4ebf37c14978..162d5f74cbe8 100644 --- a/tools/perf/pmu-events/Build +++ b/tools/perf/pmu-events/Build @@ -30,6 +30,10 @@ $(PMU_EVENTS_C): $(EMPTY_PMU_EVENTS_C) $(call rule_mkdir) $(Q)$(call echo-cmd,gen)cp $< $@ else +# Extract the model from a extra-metrics.json or extra-metricgroups.json p= ath +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 for generation. $(OUTPUT)pmu-events/arch/%: pmu-events/arch/% $(call rule_mkdir) @@ -39,7 +43,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..7ab2ee4fdb17 --- /dev/null +++ b/tools/perf/pmu-events/amd_metrics.py @@ -0,0 +1,38 @@ +#!/usr/bin/env python3 +# SPDX-License-Identifier: (LGPL-2.1 OR BSD-2-Clause) +from metric import (JsonEncodeMetric, JsonEncodeMetricGroupDescriptions, M= etricGroup) +import argparse +import json +import os + +# 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 generato= r") + parser.add_argument("-metricgroups", help=3D"Generate metricgroups data"= , action=3D'store_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 containing = 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..a9f0e6bc751b --- /dev/null +++ b/tools/perf/pmu-events/arm64_metrics.py @@ -0,0 +1,39 @@ +#!/usr/bin/env python3 +# SPDX-License-Identifier: (LGPL-2.1 OR BSD-2-Clause) +from metric import (JsonEncodeMetric, JsonEncodeMetricGroupDescriptions, M= etricGroup) +import argparse +import json +import os + +# 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 generato= r") + parser.add_argument("-metricgroups", help=3D"Generate metricgroups data"= , action=3D'store_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 containing = 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..f004c27640d2 --- /dev/null +++ b/tools/perf/pmu-events/intel_metrics.py @@ -0,0 +1,38 @@ +#!/usr/bin/env python3 +# SPDX-License-Identifier: (LGPL-2.1 OR BSD-2-Clause) +from metric import (JsonEncodeMetric, JsonEncodeMetricGroupDescriptions, M= etricGroup) +import argparse +import json +import os + +# 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 genera= tor") + parser.add_argument("-metricgroups", help=3D"Generate metricgroups data"= , action=3D'store_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 containing = 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.0.318.gd7df087d1a-goog From nobody Fri Oct 3 14:29:35 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 0BA4725DB0A for ; Fri, 29 Aug 2025 03:07:53 +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=1756436875; cv=none; b=VWRX31YOWMTsZwjXq8ZnhYKAAVCC1V0ubVJc6N3plaEHjJ0r0zJTT5eX5kHpl6VPPPDMajW+Gtrw9Xcy0NQ5cshZ7+5LWPfJcyrx9NgzfLtDcCKvsqwmoopRRkVUFMDXT6jQIBzODIrBPcPE+7RqkLmahl65XmU/kgILhyw/SiE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756436875; c=relaxed/simple; bh=FFx1dYPXVKqYdN8RYVwUXuaau5b/R/0LjxqzhH83O44=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=r8hvMnFvi2Q3flbvTVsNWT+elC3XLLTVvKNmRn3vN+IULXe4WLyGypB929cYTUKrVvNZaFLuS9hO7mSZIffiSQbPNPMxQsNLZRrWcq9974K0n0MFG/HSsfkozcIA/zF/gcU/ccztRINsGVHI2JaG4JnodyWM+1I/sZq/Qhdvji4= 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=HGO7nDtu; 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="HGO7nDtu" Received: by mail-pl1-f202.google.com with SMTP id d9443c01a7336-244570600a1so18939685ad.1 for ; Thu, 28 Aug 2025 20:07:53 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1756436873; x=1757041673; 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=BDIf8MPVJpA1DiHojusqqVZbsBmk5aBglPDni0Vbkyc=; b=HGO7nDtu1MmwPoPPvL7gzonEuH+mWfK+nWqFPjSt/8GzmtNrrsVwszivKQdL8Y9oig ZzH1VpdtR/C9+cuGBQ/C3lF8KIMkLHZglkkl33hkn+YGLokwDxiL6wPsrv377leISM7O FoBXF3VDlyLZOTrUo2SAyXyai+DicVTa82WnPzdh5Vgw9OCxJktoyUSKqfOOJdb3t8YF MicR2JR3pAXrgl/4dBG7FBrxqJ7vJxUt2LKLyObcv++2zyPfRaizqdAM2kqNQ0xnWQSl 0NBjiqmgNEcd/qQCGxyQ4xqwtRlRkZb9+dlP9aUoHD1IgxbGnklZqnrPbRNXl1MV98E3 rLkA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1756436873; x=1757041673; 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=BDIf8MPVJpA1DiHojusqqVZbsBmk5aBglPDni0Vbkyc=; b=tsn12iPjbNB0qiEmS9UvWnZCsiuf6V2MHnx0Pf3S6qqCjw3fE/G73hoJVoeC6KcdyI QuuU7pl+VciDvlIL1IE5DuQgnG+eOIRXUWK0aacBzs2aRLBo8Xx6CoBFQuenxFoxWZv8 wof+1hdsLZzo9nByPEImb4thvp9bwuQPHmkn79F2oI5lAHLIqsWD6d6UNQV5l9KER7PV 76D+1n/PnDIWOIJEECj3Ihw/Y0b3dQaGBuFmkZXpIswBcpO+ONoBwz/kH+00uIfCxGF3 Jk/I18tQztGzLeGc+UNMJzIaV/Qz3wrt1KokA/9bRGbTEGsbMIZ4ADWinqBb2kxDXXFJ Jt8Q== X-Forwarded-Encrypted: i=1; AJvYcCUnPU4n97MeCX/OcJqRFEClyAPootF/jdwywQ0HaQnw89FeaKGrndjaw3fe31pFQqIxYZ9+9594t4yPoiU=@vger.kernel.org X-Gm-Message-State: AOJu0YybFTDClouubvLOMk0ot9ZS/iwbZRQ31mPNXJLNCG05vR4vgWlS ctiHtYXIa0ld1PA+ljZWSN6ZpxxUIrwiQ/1oYbgi82k36XmHVeBtmR+pj4r3DXH4Or/xtRZcXRj N2ePG/Ei1Wg== X-Google-Smtp-Source: AGHT+IH8FnFgYYKVktzxwkDqQbB6t7WoEXR/RYmo4JCj3a6rKZy7DWGgk3scoWAxW4dRpT5jWFRwWTNsnZ2c X-Received: from plpe3.prod.google.com ([2002:a17:903:3c23:b0:246:222a:4ddf]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a17:903:2285:b0:246:b5a3:134 with SMTP id d9443c01a7336-248753a2949mr149310595ad.14.1756436873303; Thu, 28 Aug 2025 20:07:53 -0700 (PDT) Date: Thu, 28 Aug 2025 20:07:26 -0700 In-Reply-To: <20250829030727.4159703-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: <20250829030727.4159703-1-irogers@google.com> X-Mailer: git-send-email 2.51.0.318.gd7df087d1a-goog Message-ID: <20250829030727.4159703-13-irogers@google.com> Subject: [PATCH v5 12/12] perf jevents: Add load event json to verify and allow fallbacks From: Ian Rogers To: Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Namhyung Kim , Mark Rutland , Alexander Shishkin , Jiri Olsa , Ian Rogers , Adrian Hunter , Kan Liang , James Clark , Xu Yang , linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org, John Garry , Jing Zhang , Sandipan Das , Benjamin Gray 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 --- tools/perf/pmu-events/Build | 12 ++-- tools/perf/pmu-events/amd_metrics.py | 6 +- tools/perf/pmu-events/arm64_metrics.py | 6 +- tools/perf/pmu-events/intel_metrics.py | 6 +- tools/perf/pmu-events/metric.py | 82 +++++++++++++++++++++++++- 5 files changed, 100 insertions(+), 12 deletions(-) diff --git a/tools/perf/pmu-events/Build b/tools/perf/pmu-events/Build index 162d5f74cbe8..366cd720659a 100644 --- a/tools/perf/pmu-events/Build +++ b/tools/perf/pmu-events/Build @@ -52,11 +52,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/*) @@ -65,11 +65,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) @@ -78,11 +78,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 7ab2ee4fdb17..4f728e7aae4a 100755 --- a/tools/perf/pmu-events/amd_metrics.py +++ b/tools/perf/pmu-events/amd_metrics.py @@ -1,6 +1,7 @@ #!/usr/bin/env python3 # SPDX-License-Identifier: (LGPL-2.1 OR BSD-2-Clause) -from metric import (JsonEncodeMetric, JsonEncodeMetricGroupDescriptions, M= etricGroup) +from metric import (JsonEncodeMetric, JsonEncodeMetricGroupDescriptions, L= oadEvents, + MetricGroup) import argparse import json import os @@ -27,6 +28,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 a9f0e6bc751b..c9aa2d827a82 100755 --- a/tools/perf/pmu-events/arm64_metrics.py +++ b/tools/perf/pmu-events/arm64_metrics.py @@ -1,6 +1,7 @@ #!/usr/bin/env python3 # SPDX-License-Identifier: (LGPL-2.1 OR BSD-2-Clause) -from metric import (JsonEncodeMetric, JsonEncodeMetricGroupDescriptions, M= etricGroup) +from metric import (JsonEncodeMetric, JsonEncodeMetricGroupDescriptions, L= oadEvents, + MetricGroup) import argparse import json import os @@ -30,6 +31,9 @@ def main() -> None: =20 all_metrics =3D MetricGroup("",[]) =20 + directory =3D f"{_args.events_path}/arm64/{_args.vendor}/{_args.model}/" + LoadEvents(directory) + if _args.metricgroups: print(JsonEncodeMetricGroupDescriptions(all_metrics)) else: diff --git a/tools/perf/pmu-events/intel_metrics.py b/tools/perf/pmu-events= /intel_metrics.py index f004c27640d2..04a19d05c6c1 100755 --- a/tools/perf/pmu-events/intel_metrics.py +++ b/tools/perf/pmu-events/intel_metrics.py @@ -1,6 +1,7 @@ #!/usr/bin/env python3 # SPDX-License-Identifier: (LGPL-2.1 OR BSD-2-Clause) -from metric import (JsonEncodeMetric, JsonEncodeMetricGroupDescriptions, M= etricGroup) +from metric import (JsonEncodeMetric, JsonEncodeMetricGroupDescriptions, L= oadEvents, + MetricGroup) import argparse import json import os @@ -27,6 +28,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..36e9cb3acf6a 100644 --- a/tools/perf/pmu-events/metric.py +++ b/tools/perf/pmu-events/metric.py @@ -3,10 +3,55 @@ 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", + "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 +362,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 +392,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.0.318.gd7df087d1a-goog