From nobody Fri Oct 3 06:35:26 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 8AC4545C0B for ; Thu, 4 Sep 2025 04:32:14 +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=1756960337; cv=none; b=LFQtm7kR75UKEUY6f7mdrXI9EH9Ju3IWz+0bWZJCsfeAWXmiQEVwggFUFNjQ2Mc8KhO8040BEgheG7bAVIOT6LCpcFScZ80JfyByxC/yjU1RJPQhLZ/6UHFzmN2kTld573TmZNL6eZ0HuO3dj5zprbQ+oThOsWyoBDugqwH3+zo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756960337; c=relaxed/simple; bh=B9mHzIhfhAcdWo7nQHHvHZn4fthTHV8+8EhrmlUHhAc=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=uwZz7Rir62aqVd9vYg5rYChqn4JwQQIwKiLMVyL8cAUd9yCjVVfU282mFmQDS2ghjIktC4CDyoNSlvAoIHoCwR4dJmfz9hz34JoO1MJefQxo/18g75f79DRzV7LZSJMNGEukBVfHzRp3UdIr90+MTBUaq5OEnTXIfRkSRfM2skQ= 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=3A041FuN; 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="3A041FuN" Received: by mail-pl1-f202.google.com with SMTP id d9443c01a7336-24c99f6521dso7844385ad.3 for ; Wed, 03 Sep 2025 21:32:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1756960334; x=1757565134; 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=+GNxDn1hJSLin2tsB/qhtwhct2wgEUy65xdgFGp/uQE=; b=3A041FuNjaROZ8V+JEbjoHulBfVcbaiJdgDVGRB0O0V2goHYE8Z+TbhQsjZEx/IOaU R5i/xDt9a47Yni+T1YCVDUVfX9SpSXVrancc/Ku5t09522wIIFRd0IZy/g0gJmwQ4l5t KGXoxuR2gbuRYVDAG1dNLuqW8ffCDW0q29RojGROi+vzQOjfFdFmVbNtv7SFoeGBthN9 KzH/hp2efTZMNMux10VEUpy0Kq3nApzI7/3YpazhgTLmQeeVHJKEbcq0BwiObaJES14N EAC8i1CGMJH7cmtAO6o0XJg0rZyriDLK7IJoSHTws7D+rY0la82zqooWaC/BnxygxnkK Ec4w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1756960334; x=1757565134; 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=+GNxDn1hJSLin2tsB/qhtwhct2wgEUy65xdgFGp/uQE=; b=HKMgHifsgDTmBWX0sw/ZPeRzk/qr2Dq3n9mzGaYjx107UI91h23BIT9wGlWOJ1FQY/ hDO8q0Fk74DsHeLJgAgWtCdw9TvMTftFA65B70WC8qzQt6OAw5F3pz35jetbbR702AYq iDbg/OnaL9ZKICSqOculs05BmKIA3C3HZ2zKL7Gd6J4fWqVr0DsnVpxJqfJMDrtkx5RO pNMRv8z/USLj3Q6mlGrm1cfgDUDXB/We7FaY0iQxZKaFmcDuQRGQkpy+gL4WPB9+HEBw enLehil6jeFbsCwp5U9JapleR1Dr025djcqRzPCkBFqksn4vkLbpVI6ldzuQQEI1yB+1 k0Vw== X-Forwarded-Encrypted: i=1; AJvYcCUjJxgArlJWCcQRjs377QopUjMLIBlXwWa2xzH23Q0Oie0++F7OA1QeP57eZSrcyuov0sZIG3BZmPJ/A1E=@vger.kernel.org X-Gm-Message-State: AOJu0YyWhzTZb9dZENQ59PLtxfJH4H+RmxhBl8dZGrPAeBh9TCj+1ItY gTW1UqadxqjhnudB0a8UTjN8gBv/ez8TzWgB4ZH5DxYy1lvvkKy4WKX71Ef6sghMiPKXzrIulrv pmr5ficpWag== X-Google-Smtp-Source: AGHT+IEcUJQmMLlPKbWysCmhZb7EhIQjj5QYlH7tlUVAI0ZtsMpLePIj+gdD+aXuIDG2RNxhKtgWcKpKIDQ0 X-Received: from plhz7.prod.google.com ([2002:a17:902:d9c7:b0:24c:af07:f077]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a17:902:ce8c:b0:249:3eec:15bb with SMTP id d9443c01a7336-249448e1ce7mr208010235ad.14.1756960333846; Wed, 03 Sep 2025 21:32:13 -0700 (PDT) Date: Wed, 3 Sep 2025 21:31:56 -0700 In-Reply-To: <20250904043208.995243-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: <20250904043208.995243-1-irogers@google.com> X-Mailer: git-send-email 2.51.0.338.gd7d06c2dae-goog Message-ID: <20250904043208.995243-2-irogers@google.com> Subject: [PATCH v6 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.338.gd7d06c2dae-goog From nobody Fri Oct 3 06:35:26 2025 Received: from mail-yw1-f202.google.com (mail-yw1-f202.google.com [209.85.128.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 CA17523815C for ; Thu, 4 Sep 2025 04:32:16 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.202 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756960339; cv=none; b=sWeoBnNRwb2ZBX1XiW3Y77xVABr7AHcDrghadbVjrbD3u/B46mhQLS0Vu/ytgikXQVgVGB/Um/eKx1FLSJPm76Je6yvFn2rYtFsXed/ykM2/7SMJofXIg+mJMDyslBRvjCHrHVzRFAk6j9I5e1FvVwh/esxcwansSF9ulRrbWyk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756960339; c=relaxed/simple; bh=LuTtqrZtMK/LT91ZBhYeb6dv2+IYGH4Y7JmRH9yoVWk=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=GcfEtRBDr3pf04CMZLt/J5sZOQDwhCiRdLlE/Z6CVN/Vf1A/e0toEdvNkW0nM2NFsAVzD7Q9xI2szxymd/AAK8WaermHMCMXRmW+AkXFw4mDyYVPaZQwUrpAbVKPjN6xnnXUXHKhVQ33fqjsN2lm/YWug091flNdyUbPsZcvmBU= 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=qWH0F62a; arc=none smtp.client-ip=209.85.128.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="qWH0F62a" Received: by mail-yw1-f202.google.com with SMTP id 00721157ae682-7238c2008b8so10171897b3.1 for ; Wed, 03 Sep 2025 21:32:16 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1756960336; x=1757565136; 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=fAXms+yNTcz9MOzTz+T4V/K7WtgdGpeN8pxEyZvcsEg=; b=qWH0F62aS+0d9k2Nmyc7cj8FhsmHgwrdeQAsWurIvg3fLOHfiIcEwAGnJ1REnqyd6W yrMrqZqg8azJaI5hiItyFvTsK9M60rD9m3qOZ/soC1M/5HbxKJ2zSZZhk4zN8lNiBBvx DBaGaVLpag+7bmGSr2N+DTTZUbukw/clcA9cHnqS6hqgl07CEskP3tL1qr0mIbt863mo pjnFeOMRcBdBIfWeHFxdRcjTOXK9GwqVp3OcxC6FQ5KOQgD7zvaVbku6Sz/a4ax7OJhV q4BEjdz3nXtD7XgIqwAQJ8sp1iDKIlLVbkgywHAIgrmUZpq0BwbBbexHi7X/8qD0UATx pCgQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1756960336; x=1757565136; 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=fAXms+yNTcz9MOzTz+T4V/K7WtgdGpeN8pxEyZvcsEg=; b=wPHTTEOgiK3YGEd2TWgr/u9Nihq1xW84FJILK9dwgg1Q4EURxHnDgyw4t5sLwWPr9+ MQ0PbJ4XjNS2mOtRSorjCj31zAMESiR8Js8AJy9jfIpcsQK1keD3+RJ6c6GhpF6kEYgi /ykb2z05X4YqEX9dwo99B5VyxZE5RpoVoJrsDVNmbikUGDF63vGKgO2S651Op1E+XEVr B4LKKXXpfHXWo4nr83DZBjwWBttYfiFZRnnBUWl/R6zukSLYC+jRII8OvaTpxHqWPa9u BLYHPQHQgF18yg/oL4sORqFeSkunccovZ5ZRzA7UgzRq4J7uzPpDYFKP4iWjetfhAMLw D9WA== X-Forwarded-Encrypted: i=1; AJvYcCUTOGYnd7XWQ3UBJpOsQwxAIEdWvvnH2oa4Nuo6RPOh1GAbJQ++ASCsOLyJQtLwgV1g5Oeyq5S1YjhfoOA=@vger.kernel.org X-Gm-Message-State: AOJu0YzvTYBrLWz1UttoRKE9yn48H8hh1R4uRKPWDCLe+WppG4Nma0EP Q0WX0gfAC3OmcfFCZGgV64C+z3hM4hsZE2Kgs9YvmxqrrA5xv1lwOCI5pEpXVuKP1PdHYhEukYn D7/4kHO/jzw== X-Google-Smtp-Source: AGHT+IG+eJur2f22n7KQAymFYTrbd/O0gLRQuIRAxqa77rwiU5CGGfSQr4EMFEWvBCN1nq3atksUkihmbzFH X-Received: from ywbci4.prod.google.com ([2002:a05:690c:a84:b0:721:b03:972b]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a05:690e:23cd:b0:600:6ffd:899f with SMTP id 956f58d0204a3-601786c8ebfmr1342251d50.36.1756960335787; Wed, 03 Sep 2025 21:32:15 -0700 (PDT) Date: Wed, 3 Sep 2025 21:31:57 -0700 In-Reply-To: <20250904043208.995243-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: <20250904043208.995243-1-irogers@google.com> X-Mailer: git-send-email 2.51.0.338.gd7d06c2dae-goog Message-ID: <20250904043208.995243-3-irogers@google.com> Subject: [PATCH v6 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.338.gd7d06c2dae-goog From nobody Fri Oct 3 06:35:26 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 3546223ABB9 for ; Thu, 4 Sep 2025 04:32:17 +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=1756960339; cv=none; b=mzobIS6ZBAL1TjXjkS6ggyafBWzYdcm0HUGajQ7EUE5mCPlUobKW8Er4UFnFt4zwtlzU3lmCzw84TipaCeqtrfqQgSENpFw8nXBNKGb9j1+d4DnukQAhhMkbCDGVSmq+rHTdtQlBTLmhRagJ1KOA7B275kX6c3DL5CmRLLAU3xg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756960339; c=relaxed/simple; bh=0RPBjnceF5UpLiqTTakM2AaSGE5p69eLJpir3NTUx0I=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=e6FfGZrZIO1XtptzwLuiJRP8bTRvVc7g9FLXdOphYtI5+Bl0xKCHp2s+rwpZxCvk9H3BnkORkFsrbm1s8x2k3estRQ3pCUWd5LHvnm+Xi7W+HMg5YqTDnIUbnPYc6uWDbOi1C8u+YqDwoIeC0H7Wp/OK7hV7xrGmhazy7kaBuRk= 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=Y+yV2qPW; 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="Y+yV2qPW" Received: by mail-pl1-f202.google.com with SMTP id d9443c01a7336-248942647c5so22335835ad.0 for ; Wed, 03 Sep 2025 21:32:17 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1756960337; x=1757565137; 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=b2lfIBu5f1DxfhgEKiV2IDDjUkUIidIMEUpWK67aUsc=; b=Y+yV2qPWblknkHxJboQnnlEc/8ruGV17CtFCeivcYu/NS3UjsBoz4IvCXrvQOZBLyw iVPGPjE5ojL1kk89iRyLF3zgCcNwIq6hsgFrS/Yo/iJkCGKogx2UFVFqjOZNH5qyP3e9 4H8zZnD5GFhbUz5GmaGqHgQrf9ByIbxCW1doUnCQhdaUt7NmZWvJWptgGpAW7CJbc/HE VjHscczmMZOFFHKPKxS4N9ujGFKMT5w4YL7CXs0xAC4LgbRvaO+rOh98L/gq9HWSSMH6 szGqy4US3IpRrkPIEQ5dFkwxCiUQgGwIvKVPwtlOW3xXOQ46cPWdIzyAIxsdLMArDdBn 1VTQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1756960337; x=1757565137; 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=b2lfIBu5f1DxfhgEKiV2IDDjUkUIidIMEUpWK67aUsc=; b=GcXmsTBmWKNn2NU41noJerYN8wTuHww/EAoRZbhaWQEBnzr0+7d9gfP+WFfNcGYBVn 0sdfThxwSKB5BwGHpxZET1EX1VFrm0gi/qz1jvmFB2HszU/IyCqzRjjb/U423067bXtJ nxqxaLvseYcbvCq4Z2FVaADoIoLanv65gDKFd+62Om4s6k6s0ltIG2dQ4lSsd0opDiH+ 8gXJyZ1AXLZ6MWSaf2vI0zV4K6YRQSehmPLBXJfFJsD81BPADdW6s7MC7nQcjIJBzRM2 zSkUx66QFHQCeUKr5qO8Z6N79s0VvL7E4l8/VMtGS9esYrOCD2HD5rzIQmvSrllU8Uee h1zA== X-Forwarded-Encrypted: i=1; AJvYcCXl43nkxPPYvsdZP4B0u+ug/xOJuwJs0TfdpCWwwTx61Trdz7zLoQPyE1H3EDOgBZ9+YqwSg/OVnL7DgbU=@vger.kernel.org X-Gm-Message-State: AOJu0YwsvLj9Equ3z923FzMrDJMRG61ihYJMKzsMORs68mPP51zbuKoz NZpoTZNM6WhoQu+zc0++9/4djW8joqc4R/xqwIkUJ0vTPKiOJCgTCQQgoeUV33ZrEOK8Zrh+RfI JYeVxllEH1g== X-Google-Smtp-Source: AGHT+IF/ZqUKvU90sQ2w6nn0OeK1VO0/1UHdn3i3JpViVGm3hRUc0lal3yb0JJNQn2HdGoQ4pPEVbxu4o+X9 X-Received: from plev14.prod.google.com ([2002:a17:903:31ce:b0:242:fe10:6c5f]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a17:902:f54f:b0:24c:af27:b71 with SMTP id d9443c01a7336-24caf271a3dmr38228775ad.20.1756960337405; Wed, 03 Sep 2025 21:32:17 -0700 (PDT) Date: Wed, 3 Sep 2025 21:31:58 -0700 In-Reply-To: <20250904043208.995243-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: <20250904043208.995243-1-irogers@google.com> X-Mailer: git-send-email 2.51.0.338.gd7d06c2dae-goog Message-ID: <20250904043208.995243-4-irogers@google.com> Subject: [PATCH v6 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.338.gd7d06c2dae-goog From nobody Fri Oct 3 06:35:26 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 F09A223E347 for ; Thu, 4 Sep 2025 04:32:19 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756960341; cv=none; b=OcBsP1AIDOLPwHpVn4fhjiGq14VD0DWDzob4ilUjMGikHsmT6+BxZlEeYLsShWFTFIGwhmcJ+pVzhN0F6sNjIg1qKQt9ZMWiI2tq0JKUbjEApK6HCQUPYDqhTWexq/pLGF3a3e2YL3OKRQT3laKMLsYfKu9gARcJiEkohXxoccU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756960341; c=relaxed/simple; bh=sJpAsx8mv13dx5/WPM3rBOP4a+4Z8onR4PgYsxydnM4=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=GmlgcMBJ9VJ6mhR+VoxRo4RU0CT1gQnUdMhQ//RfLdyK3dXLuMBiBs1PONVzfkxQKN+LTPxLSHNNyh4sEmOA7savyYzH2yTYImj9b1OFr0Vioerp+fP4waUNuvDaTPnFZh9u0gZedIQHIXZU9wnbQMi8hlzkIrnebDk7dw0Yc4U= 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=XVZbuCnb; 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="XVZbuCnb" Received: by mail-pl1-f201.google.com with SMTP id d9443c01a7336-24cba71c71fso4874485ad.2 for ; Wed, 03 Sep 2025 21:32:19 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1756960339; x=1757565139; 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=i4KblLTIcCyuYf67LpT+wj9Bc/JO2zogWh7Nn9T00cU=; b=XVZbuCnbFirnqmbTJpolKXBKNAKWTAgMvKf52GV9KHElorgKJV6TrMfJ+dkyHkmgIT Hxekgt35aVX39UtcpP3ETsmMsuC+6b648RFpOmQ6qMy1wLYhdgFEgB1mB8zocupdyTmR w0qMr5gVrFzzHEoaVzvJREek8mW0ddoQ3WVOtQiKxD88je9ckgIEFd8A/HrSmIRNiaaz HIA9auLKmEpu47G7PEbC43eOy08/9i55FBTzgd/EzhmcEB1KxkznmkRV3Hi53aqtEY85 hZZRDhW7VM4fNrxYKVXFAeyLCx+e3358UR/bSdwOnSGdASONiGiU8v6Ed7j38Jd39Sc4 BGwA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1756960339; x=1757565139; 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=i4KblLTIcCyuYf67LpT+wj9Bc/JO2zogWh7Nn9T00cU=; b=tlPMvrPxegV/ChuIR1hDlGmRFaXK7uYMtFx5YsL2DGZp4hov7HDwKta+RO/juAOPVW FqTlq0/USoEDWKDtnUBxPTSBCBvXgJeXFPvSouPkaTOLiFPrVcqjbm3lJiybxptcUSfh 2takIlKpJiZzUOkEZbVEmlMRrCq6k4VgZZ+GCRKDq7wneoQPNDHLVN45vLdqJb6kUtVn xjnVlwLuBrgk8ik6cnFegOQcGCJjiK9anwi1eEYAK3BwWjUWNgtUz/fMPsx12vMCOlpw inzr84xh4VpIjRUcwILKQ4zDZi1e/BS1jJdBIEKFE2IXDzRQJ5atdz2WflL3OQa9hCPh bVuQ== X-Forwarded-Encrypted: i=1; AJvYcCVq24mBQhXTd9OIdzCsQcj8n0kWUZDCoDe4/2iGXCq7PV9XWZ/rqeiYo8DLHi6cXOlaBbdt9CSd/6szC+g=@vger.kernel.org X-Gm-Message-State: AOJu0YxZUQa4mDLe9AuuqRDlh1A7XaPwYwRVcOSLYkuJLhDhDjYUnsi8 8OSRRg6Rs45S5kXwJ4ExU98g0sHKSQNixuVknOhLqzEKFOyCEhbrl7HeQjAuN4MC8+mnBr8+5e0 f5bQGfk9yKg== X-Google-Smtp-Source: AGHT+IGxW7TBij4TdZWKoXUnYmxnIDkSyPeGRhAu0ENkJ9eeD7HNZ2OHN/FfNe5z9vzdeahi2zHg8J7OT5Dm X-Received: from plnr5.prod.google.com ([2002:a17:903:1905:b0:24a:a3ce:a5d3]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a17:902:cf09:b0:248:df64:ec6a with SMTP id d9443c01a7336-24944a27103mr206219885ad.15.1756960339205; Wed, 03 Sep 2025 21:32:19 -0700 (PDT) Date: Wed, 3 Sep 2025 21:31:59 -0700 In-Reply-To: <20250904043208.995243-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: <20250904043208.995243-1-irogers@google.com> X-Mailer: git-send-email 2.51.0.338.gd7d06c2dae-goog Message-ID: <20250904043208.995243-5-irogers@google.com> Subject: [PATCH v6 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.338.gd7d06c2dae-goog From nobody Fri Oct 3 06:35:26 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 2327A24468D for ; Thu, 4 Sep 2025 04:32:21 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.73 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756960343; cv=none; b=h3vuZ6OolFQt9rmT7g1v3Q7FeMxQwyFiamIthVR3EFb7zTc1Bk21WPcUx0aWKesH9XBm+TgtO2o4pgfca9PZY9gM2ZK46XR1ePPBf8niAmKPOyP7doi/fL7TXfDKgWdTUtura4T14Q/CPqC703r8T/kuvyo/Kwc17mxXx7JYsdw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756960343; c=relaxed/simple; bh=ob1BOk0xpWJ/65Y/oICDF5KmX0QIsSHCj7b4gJHHsMk=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=I+ugN/ZSdMkbQer99pNjzFd/7QyVzpSaBeklSL2Fofv4cB6d/viONA7lqNarmTuHztcWev9JCqLoYgmLrnM+71ai+K7xmNEEyco0t6yATp+pjeF1x7wMZAzWSawgx4g4kJlT0m69ayVwIR9SECo1FIj+TQk0kSRVpo3WbraHe3A= 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=ZqUP3rrS; 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="ZqUP3rrS" Received: by mail-pj1-f73.google.com with SMTP id 98e67ed59e1d1-329e1e3b25bso535255a91.2 for ; Wed, 03 Sep 2025 21:32:21 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1756960341; x=1757565141; 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=DKUbez+xUjFw3Ps2ZoGOBYgPDtEbw+fIaql4cuAQlrY=; b=ZqUP3rrSVgtoeGTcs31aXIItu2XV6xQUqnALJWlnuTusN83NPX8slVoUx2gXJVJ0wf O0UCRBIvjadTGp5JRsW6HLgzRKT/nxK6FS515GGrDoXvxhstPL+Qxoy//CSb8ul9r7Az iZ0rJO/j0cLDR5S0YTJq1BU+y2HlHNfjFtlqiHDoRsWFKOdwYLfhURPaIP3KtfqRorZt Ca2IMuiTG81FemDe7ZLwabhIFY+PNOBZI3qmKJdGy6txg00FowuyJVn+YIXOqXpTkHsu 2w63luYZYoz6J3Yiouku0bHVrfpNC8zP/eKJYwWeaHf+b8K7cP6msi2CK6/OgwOJpYZx t3nA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1756960341; x=1757565141; 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=DKUbez+xUjFw3Ps2ZoGOBYgPDtEbw+fIaql4cuAQlrY=; b=UZURW17Djbm8gaW/hgDD0aSWdrma6VXSkCbyPYWLx3zeSZ8FbgVK1Q5Z0KmvzvTCGT ijOc3ULyViY7X/ez5PPrVJpducBxrRAYKsM+tIqHXfSjU/ihV7bLpTHCUZ7KsfD70fzS E9FQ+KBTKUhQTHHYf6e1+zNT0+ZIVrS+rGeY1Fry8XlkZT9wiz+5faVxXKNXfutYN6Bw hhynAxKl1xo+8F0gsR545nWyZkNAIgQn9ZZB2NiZNwOXMCSAwPbdwHVLOV3ciPhAubIj h7qQHFMJ8xDZReXtdetfbSvvkZLhFITHtPKf7OlhBLBOohrN2JalpG1X+p5Jhp9XG9IN rXRw== X-Forwarded-Encrypted: i=1; AJvYcCV97t7aLlF8zJglNwO2/8JA46eJu4Qfg38F/xerwrq0ZQmLli2NPCK9r8F4pvTxAdW33/3O7rn1h/lauyU=@vger.kernel.org X-Gm-Message-State: AOJu0Yw/3p6a/qJ3Qx62oft2Sz/6c76+BfOOKxcxwLk5+wALu0GYKDSB fsIJAbqP32xDFZlbKqghXqBEf4+vy6LzbXiRjs7QvjDfwAbGabWvkGBBDpWxueT9JTw82Ko7ii6 PmObyXQPTgA== X-Google-Smtp-Source: AGHT+IErc8+ICD+hbg4Hw78DlTvjcXZ3MoDT39jCspINC2OKdOchCVWJDAb8lKhuNbcoipstdiQEKgrpOLme X-Received: from pjbli2.prod.google.com ([2002:a17:90b:48c2:b0:31f:2a78:943]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a17:90b:1e51:b0:32b:87b7:6dcd with SMTP id 98e67ed59e1d1-32b87b76f7emr2907125a91.14.1756960341131; Wed, 03 Sep 2025 21:32:21 -0700 (PDT) Date: Wed, 3 Sep 2025 21:32:00 -0700 In-Reply-To: <20250904043208.995243-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: <20250904043208.995243-1-irogers@google.com> X-Mailer: git-send-email 2.51.0.338.gd7d06c2dae-goog Message-ID: <20250904043208.995243-6-irogers@google.com> Subject: [PATCH v6 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.338.gd7d06c2dae-goog From nobody Fri Oct 3 06:35:26 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 356F3248F58 for ; Thu, 4 Sep 2025 04:32:24 +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=1756960345; cv=none; b=sOexz+TkoBZ+b6LrgZPn0tgrAmEwXsUCdU6Wmu4F+tK7UZEUKH4NaaoX4NXi6ns9DyBPE52t6M3QNCppqpwNcFEx2vJDnD8zljBzD4Psczv5zC31fRwKGmWlgRwZzCKEKtpWpCyJmexZ5qP2OOVg1cJVi6hGilzqrRAC/ZS2O7w= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756960345; c=relaxed/simple; bh=FFQ/x33xzyhT+pBobfBGMnFQAl1Oel8/+ZnnHcvlzxM=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=PnhasWss0wccFlJTg+E3hIDUQujqRCP49dRjsNM1BlmjQYqPi/upRvmchCkUH0zXCiMbpVOCcBAsZ0PJMLGMaSlQAwxyjH913V9gEqvHj5vi94Vylubmt/yQADqJgR8liKLuYS5/kg9vXBf5uWRDSj273qanouWc2IcjLC/wk+g= 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=OP6gn1Ll; 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="OP6gn1Ll" Received: by mail-pl1-f202.google.com with SMTP id d9443c01a7336-24c9e2213f8so8488675ad.2 for ; Wed, 03 Sep 2025 21:32:24 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1756960343; x=1757565143; 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=MCXvDfYGDTlr+qC+I7oGN3PyicDpMP6nX3TsXqjq6Oo=; b=OP6gn1Ll0ejzHdn5bjhJdUe1gHQjD2706y0kMeHOLcy4dLplUn2h7qLUPhjKkgCx8Q oHIQfip01mjcL0/in2rJnAA4wSWe1poWyZK/IrgRUumrZD6gP+ZwNQYV7tNBf3+6iMYo EzSb4egeypN2Zpa03Kk8yjuioTuHiFV7vx96BkleHxaSB8h65G2M9CXHAmgRjne1PTqf 9zO2BaGv8G5n16OYGBneb1Taoe7PTjIFk/QnetsqFxKsIOe4cxRih7Etodj/xM/9Z5mm 5/PYdA9SKx5i50/ZHv742tcfH8G142+hJL3fwGkM2ZGWAgZqe/mndAJS0VLLGxD5AewU AeCA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1756960343; x=1757565143; 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=MCXvDfYGDTlr+qC+I7oGN3PyicDpMP6nX3TsXqjq6Oo=; b=M/dfsHDorqfaEK1m7a4cO+Ye/GfCkBqOeYBuF13g2h5o04L6P5euMT2LiqAkZnR65m MGouaQyGJ2VhGP5khfkuRfQ+DXyf/S5VtdQ/5/zPsjpLaSRmRvCy8vgz/d+HAFRUTiJj rlOqCxcE+2TLp2LvA0BACFnqi4qelqnuQ1s7vJ0wtpW/JqAQg3KI5F3OoepzB+cd+Ysi QLR7NM15ipRO3THwH9ZzBefPB2QCMYlonhjjNAe9Ja86I3C/YagIuSMp+yEgRhsDy2TG YjRuA9j7vXCpOx1yXPSzb/+GwSQNSCQdhivpsfN6119oU8x+N9GHNWQUmJRdC3RHxshh 6Reg== X-Forwarded-Encrypted: i=1; AJvYcCVxID+gpO0jTyzNG21H4JDno65mqm6cVdWZf+OzXCCiLJxraOl/lNQO4Oi+0gZNcjp3O6dX0cdx5FHbx6A=@vger.kernel.org X-Gm-Message-State: AOJu0YwarT0EKMhTBuDSBMr6bKzWaiWAcS3ii4nr4a+norCMpWx733O0 WnTJxgMBeeeGkm5qDfGYw1+lbijQN+wDswrLjgcAOR3Ds5pNE1caGIsmvtC93TnYSqhBwrYwroy y1zDQngJRcg== X-Google-Smtp-Source: AGHT+IH7GwRMdQR+RBPrmWyFZ/A4EthQI6tg5cMIYUtM2Dh9hmW/Nn6vUYomzB+1byco7CEhbd0iB57wU0zS X-Received: from pldy2.prod.google.com ([2002:a17:902:cac2:b0:24b:4cb:e1e8]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a17:903:1b06:b0:234:9656:7db9 with SMTP id d9443c01a7336-24944aa33a5mr192938775ad.32.1756960343447; Wed, 03 Sep 2025 21:32:23 -0700 (PDT) Date: Wed, 3 Sep 2025 21:32:01 -0700 In-Reply-To: <20250904043208.995243-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: <20250904043208.995243-1-irogers@google.com> X-Mailer: git-send-email 2.51.0.338.gd7d06c2dae-goog Message-ID: <20250904043208.995243-7-irogers@google.com> Subject: [PATCH v6 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.338.gd7d06c2dae-goog From nobody Fri Oct 3 06:35:26 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 7AC6A253F05 for ; Thu, 4 Sep 2025 04:32:26 +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=1756960347; cv=none; b=HFXkGN40JiNslo5LSx7xjaodf6yW4qA86zvInDc4ahKmvaewZy7bbrjTV/AHlaHC8hjSNBtiCc3Hw82gC3KwPkkqt82o6/YFjZBJPM0/70ccDClOX+7REGxnRhc0UKtoRoR4Z8CcyL+FpJHvRhs1FtnlsNmmIXo6Rf23SW2+xNY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756960347; c=relaxed/simple; bh=6hx9FCGwo9obLiXV66ieeFUH9/2K3nzqZZDJWzXqIJ0=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=OIgSd9TMDccycA17aGiQX7Jo0Rnj4qZZXxLlgy7dbHg/ACn7KBfmBRgM2rfDY1vNptx8YnmGo+i2ydc7xPJThcS6f9l5atTEFuVtV2pYX6gF1dI1kh7qqYUUIB//FG6W+6E9QbMWH0UwIgy6F3PD8Vos26EzGvlD5JkZ1eV/Ql4= 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=lksqOCZ5; 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="lksqOCZ5" Received: by mail-pj1-f74.google.com with SMTP id 98e67ed59e1d1-329ee88fb47so861187a91.2 for ; Wed, 03 Sep 2025 21:32:26 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1756960346; x=1757565146; 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=6Cer2P39Ih4bfooa7p7nfW7RgyenKFu86JvHBS91XmM=; b=lksqOCZ50R3uneYiPkcq5/sLzyTP5KwjqtvNXbrj25WcbH3xjMyzfiGIRop7MAauSK oRGF/inDC/edsWOltreq+nXdz0hFQyNWS4gpZ8V8tmjeL8YaXS+/nzD/2Z97ysRv4Qpx TszOdadbSiW2whs1NqTfzvdetuk7qIbE5c7BtasWOKBCZUuxRYj+pqQH+bSW5geTht09 ptF5PQyR0i13CiPyzmaVeYz+XeREJJUX+QOgKRPoYc3Ov5S7KXUFsLRjp0aTDNkwH3R9 x7s7Oa2SOeovECzCcFPZBfcP8L1jmWu7UG/sJyne+7nUdHpsF8cTNeGsRkLvwH7ttfsC v5iw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1756960346; x=1757565146; 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=6Cer2P39Ih4bfooa7p7nfW7RgyenKFu86JvHBS91XmM=; b=oG+qgpqVefJNVeslQMW3EhPZ+Z2yZZ9tO+3juSKadmpEhD9PYW2j9fHm5RlW3Sv/rh GUKqgUKKYTRcLa1fGi/Mr9Zi5n+ui157khPCs9qPR1sIqSAOgPaV7t8dmCxvkVjpcxZE PqNIViQP30ivO6Q8nW5F5cZXezPU2ANoqN+gttibxLsYdtxrCCc7el+w+QqI2WPT4I4U MVGVgjB0kTogOlqYP1bt97cl2KTiOTAv5EWX2T07SGC8GuwJXyI/MVWxBZRYXE9rmUjw HohBnehA9fg+hTHran9k9BYAnNUdah/S9Vhnmt7nFQxy4vI0rnyHRnnQICiToPBJRU1X N5pg== X-Forwarded-Encrypted: i=1; AJvYcCWRkRP3+o+wtuCG+gbaLqh/c8FIzqJTrQuMwayxUWcavUBnuTDqNzwUR52g+oNzX7e1I/56x0rt0s33TNw=@vger.kernel.org X-Gm-Message-State: AOJu0YzX40cXzp6zy2A61bV66pweGjnJcivayOz3+7gkhRsc3WoC+vfr cih+zVvYAl+8VuFJMPUfyBX3p85eGdEExviVvIoOkDYQPsNa7xrnk3uSYVPmtQeXKXtl/xCaAAn nrB6k+WAGhg== X-Google-Smtp-Source: AGHT+IHyQxKJmyNAJJrGrigBYmDUy5dVHf2arQPFVlnAYLtEx1g3ARj3ZzOV6dXsOUyDoW+XNGxu58XXzmUX X-Received: from pjbpb8.prod.google.com ([2002:a17:90b:3c08:b0:325:3ada:baa0]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a17:90b:1e12:b0:31e:cc6b:320f with SMTP id 98e67ed59e1d1-32815412adcmr18770023a91.5.1756960345406; Wed, 03 Sep 2025 21:32:25 -0700 (PDT) Date: Wed, 3 Sep 2025 21:32:02 -0700 In-Reply-To: <20250904043208.995243-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: <20250904043208.995243-1-irogers@google.com> X-Mailer: git-send-email 2.51.0.338.gd7d06c2dae-goog Message-ID: <20250904043208.995243-8-irogers@google.com> Subject: [PATCH v6 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.338.gd7d06c2dae-goog From nobody Fri Oct 3 06:35:26 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 427B0230D0F for ; Thu, 4 Sep 2025 04:32:28 +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=1756960349; cv=none; b=VrZuleSgdX0GQry+UdywmAyO2GI/OvbkfUZZRn9DiOt5HXPiLrUj6+lFif9zD2zuJNDU891IGOTi1GX9F38Ic0l5VEzqeXZjJINuO2GQus3T9Yj6sqpaAqVbKlLcemILxorIu/zIqodqhJy5UoScbPDHLlbW4ZVWU9iUynZG1zo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756960349; c=relaxed/simple; bh=ui2NdSfnCSI3LKNJX9yOFKQUdrXm+Z6DoI/4/pw3Rac=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=JNZ5Zm5fjQXOGqfYRH+Chp75kJXogCWuim+v9bT8EUg/g8L6YC1ljF/AswAK6sxm5wqxxBsj0Oi+iv521lOZd+eAy7XmQFQNh3MAHP9+hD1NRKtOqg61zhoR9ANO3g7v7al6cOll2LtiRknrh7TS7EuARbt6htVBNb3+VZ8215I= 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=SwcugEqo; 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="SwcugEqo" Received: by mail-pl1-f202.google.com with SMTP id d9443c01a7336-24b2336e513so9313895ad.0 for ; Wed, 03 Sep 2025 21:32:28 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1756960348; x=1757565148; 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=rY976CsvGExY3BkK5ltk0kMiD/v7wyV09FcFSRUtR+E=; b=SwcugEqoec/1wzEA2Y8DGg+rxFpBz/3raSFWIJncK5pqjueIZNurvT5E/c+ZvYFh5P do7VcJFAf/ZF1YMUzZhaaG+x4jOodIO0zAJfseqJ8n4M0gBUDrH5mIKzq5d4oyqrlLov xTkeb/FgLbMhu+yMbQWa7GI873KeVLXtwV+6nfjDEUP654IEzEhJiREZB1QB5HmU6PFC C1a+NSVXJjPQZgOUIixiUHs89wJxEMVumhOGMoFnkNlmcAmAnTI+HA2JD4NnuoxW0Vr4 Bg3qryQxZgeCPHQqIH0ED/jaFl/5R/J0gvcTjqMSmu1T7QGuV8x2DOSU7k5U1BKQK+SV nwsg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1756960348; x=1757565148; 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=rY976CsvGExY3BkK5ltk0kMiD/v7wyV09FcFSRUtR+E=; b=KAbwqFlQ3AEKJkAc8tsBt//LSYWbbcMguDv/dusP6sVAqTGdLBXIAVzWFszyRDbkRK wH4MPg85n0rd/tkxIf8nmN7w1rIx4kU2O6ehXT879ikdFFHovUYBHUiy0oRkX9FAlhA2 80SbDEM6wltDxtJPl4v+84KtkoAMRSDR//a72NvGjXt/UEO+w7KR40cWHanVkNWXPMm9 8L7TdiTRuOLieqKmEBApKzagopBF8lRSNRAzuraCewcOkqWAFSRBQ0o0lkf3Wis1EGtL HRdOlp0jkO9IO5tvI/ZOleioInHsu0VFGLhO9cFKrU/UxVNgzOlpu18gg5cQFzZfDtLS zc/g== X-Forwarded-Encrypted: i=1; AJvYcCXfqaDi/S7TCm4GGYE0FGHZTNLslMF4/ddlIKKTHnMkMTcHCYYB01L+2lnncxJVNN+NDHlNZwPh2ooaw40=@vger.kernel.org X-Gm-Message-State: AOJu0Yybsm2p701PBfV1RgxKCfR3ZIuW++2q1IwgntO8HTrOE7pSSelQ YGjHAoKk3BiCUknKQNplV1qzYs99ZEERRR1WfEi11fann+hca9O9cBuvx0Er44VMLa6bXL/Z4vA jCR2BC6ENEg== X-Google-Smtp-Source: AGHT+IHQjGaaw0xJYft2AtK/lNOIJoRU1I5rB+ZoDKT0YFs3WNJS6Oo23FyOeJ+gplrMorT1zATLWNom1sBF X-Received: from plgt2.prod.google.com ([2002:a17:902:e842:b0:24c:cd65:485c]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a17:902:e888:b0:249:1f5f:f9a2 with SMTP id d9443c01a7336-249446d298dmr219922095ad.0.1756960347412; Wed, 03 Sep 2025 21:32:27 -0700 (PDT) Date: Wed, 3 Sep 2025 21:32:03 -0700 In-Reply-To: <20250904043208.995243-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: <20250904043208.995243-1-irogers@google.com> X-Mailer: git-send-email 2.51.0.338.gd7d06c2dae-goog Message-ID: <20250904043208.995243-9-irogers@google.com> Subject: [PATCH v6 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.338.gd7d06c2dae-goog From nobody Fri Oct 3 06:35:26 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 23F7F25D20D for ; Thu, 4 Sep 2025 04:32:29 +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=1756960351; cv=none; b=d3WTWsrVhbB4RkKrlN5Nb29H0a8WogfbQOn96/7pLJOqj+jawuOTd1JwLmoSc6cI+lCUqHvwqEQXt8+IUxrTglWMXIOEa/xAfhowU7Cqml78pjf+0APIbOLNd52GmxzmSoHMNDK+8nQaim9j3T8AfcqhXore6/9zhEdgRNLjos0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756960351; c=relaxed/simple; bh=u+bva/+LfPt05RVTOBRKCLoU6rA9fPkmVSp5pxfNe4w=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=aaKRb8+H0XqY58DlKKL60wPJ/+OAnT1qiMxg1zM8c1iryXHtPw05SWXwm5vgfwNef5Qc27o7HwPw3bdnMpb/kOfcmhx0aKJO4FT1tb3PYYXucJVUmtTd4U+IT2NI7eyhpQLDK/gimpTwjhVexcaAhIe8Bz7PoxF+A8mtOK0qK4U= 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=iu5iX7Xq; 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="iu5iX7Xq" Received: by mail-pj1-f74.google.com with SMTP id 98e67ed59e1d1-32b698861d8so533469a91.2 for ; Wed, 03 Sep 2025 21:32:29 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1756960349; x=1757565149; 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=TqLlT9pOYsKIiELgr3Sg7FTquyunCdkidduCA3qG0sY=; b=iu5iX7Xqxk9Vif0dn5Fowxaphbx0DlRWup3l1seG+M35HU4IDGrcsVx/FxGbJKtkr7 BMyX3R35/slybeXhwPPxyM6auBlQSOB4ETMUeCbbNZmeTy+/6EFlpI0Miixo1fkP+zuM ffpa8zBoFW3j3DrmWBvEtmdH0CTHYwPGjJPnMuccGT+vou0MmtqNwhQil7x2NHLIXbXI Gptgf7ySzMBGgjFu/LnrsF3aZjq7YspRjTf4TFhvoSQpnQCgXmI04IUHobpyKS+Jr/j2 SXZ/qjSuSSCw4BHrGkpDqB+FB+H7Oe1d6EzbsH5l2J1l+7eglvze3umdowzvklH48Nv0 bgtQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1756960349; x=1757565149; 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=TqLlT9pOYsKIiELgr3Sg7FTquyunCdkidduCA3qG0sY=; b=nW6Dqm+bnab0ph9Fb7ettixWnCEJqfSqAJ/bWzBSUjwIUkZgDGZcrNGX/aalR1/z7K nQ2xYPTNnGhNDdzVgUjyzCKaLaunUX2HC8oR7BqGZFKi4m0ToaRff0QJcAkRY3T46r4v omn8XLuKoqpkP/7uAWPKDtSCDa7X9kyKS5f3XISrxPynY3xQuhYAIoStgpu9lL8D79kX 8ZiJyJhUGNoZkfCkcK6XBJZfIuG1bPQEeWXcintS9Oo6SjXJgmHV6reW9nPku1vmJknZ RIVaBTyfhkI6PLdDa/7f3Bejy/6ri4NLoq+o/rHOFk1AVAvDxY/5Ry2FW05trr8cLy41 yMPw== X-Forwarded-Encrypted: i=1; AJvYcCVU+qLxzGB3W9n5Oaiqosf+iCp3ERhzGlK/iA90ZKkM8QnhJRt5Km8rkXe1I4i6TySMaoj3G3p5blMvu4Y=@vger.kernel.org X-Gm-Message-State: AOJu0Yz0kEqxbgFlJzxB/xFVQSMAtirsOOfnygDR6VUmHqzzbnnkRN+F ZWJdU7LvBe5KE8UKbMa3v5or30dY8+fMekVUn3rGlBfDbLok27o1Q7ecU1WtQvJy2vikSR4ZfAl wzGdF3bLA9Q== X-Google-Smtp-Source: AGHT+IGwvTXeM5FCHwvs/qwb/80EVYFAoeYn9+s/Dro0JccJkyeGUVVcrEWod7xx2CAJya7A68FcFv/+i2DT X-Received: from pjbsq11.prod.google.com ([2002:a17:90b:530b:b0:325:220a:dd41]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a17:90b:4d81:b0:32a:34d8:33cf with SMTP id 98e67ed59e1d1-32a34d834d4mr6945280a91.31.1756960349273; Wed, 03 Sep 2025 21:32:29 -0700 (PDT) Date: Wed, 3 Sep 2025 21:32:04 -0700 In-Reply-To: <20250904043208.995243-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: <20250904043208.995243-1-irogers@google.com> X-Mailer: git-send-email 2.51.0.338.gd7d06c2dae-goog Message-ID: <20250904043208.995243-10-irogers@google.com> Subject: [PATCH v6 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.338.gd7d06c2dae-goog From nobody Fri Oct 3 06:35:26 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 A86642641EE for ; Thu, 4 Sep 2025 04:32:31 +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=1756960353; cv=none; b=pKmnh16X8BerrIEpnW4/1zeip/ohHsaqN0mR/Z2nN6ppOARfQY6CVexNVe4imKve1vVP2+6fwdHVv0J4BJSuGPO3aUO+kkJiHDsdyIOBPpBLQTMx201jgnwjXudwztrkvZ4BJp/L7xPrhAoLp4VhZHiyAv2nO61qKLDCU8zEhG4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756960353; c=relaxed/simple; bh=dIlZN+Gnq+Pv5HEv7+ksLpTCYIxfcbn+jjj/qtsjp1I=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=MRgMXshFiExkXDNuYkhpssk0vo/ejSE6UomSNfAuZgWPQJi3uxXSQod0bUmpbCNU7ih3Rl0hcfKRKMOrwzXY3KLmlVKdsHkB+1gRjwQESB5cpNqFaxYZ7jFiD9HW8eJpG5+3EGbzmaLTGnHN/4KhAYT9BEiayCnQwuZDDLzGUFA= 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=wQ1CtVtb; 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="wQ1CtVtb" Received: by mail-pj1-f73.google.com with SMTP id 98e67ed59e1d1-325e31cecd6so471862a91.3 for ; Wed, 03 Sep 2025 21:32:31 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1756960351; x=1757565151; 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=Kj89/Vi/3/nUoe6eIg4s6aNnEGzrJCs7XuJ/Hgh7cMM=; b=wQ1CtVtbHapajgBj08aLNB8CPI/WdKYJ0ZiA7/9xpDVDxldhUrMqE1EH8WBBJZ7UQM xzX48G6h9ekNnvWtEkPoRixxXoB1h8zfh58dTqwKtQntXHA595n+9Paj9ozzPPaIMM73 MyWZoM7sDw06fUFC/yKtNO2OrgFA4wAaVFAlNhxAbOxixWUxoCLp3B424RzyP1QY63Fk vS4ivqTAm3gFOYPYpmYYeuKB9oJLk5QryTeE1JFKPA6jDAhD1hJwxTl/phJhi+mdb1N3 M4aDESGFyXQ+VGGLezgT4NqzOJffauMvhRFSlan4k36RW/8QVXPT9nVln3nIXCXJbmDk 2XJA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1756960351; x=1757565151; 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=Kj89/Vi/3/nUoe6eIg4s6aNnEGzrJCs7XuJ/Hgh7cMM=; b=ti6AjYzO4EJVmpIoCqgkGAMjqW0w3dgbdyzmDWEzq5RUZOI6YnyGMOm/N5DKQxOd9D NTOQYqGMdmrU7b800kd71lEGPQJbaS4ihstmqzk3QP7JjAV6X64/GUjihnNobg7aYz/R mCtw+jXW9vg6pzkU+pg1hMXCuLdxo1PjIMWSSrp8PNrZ/DhsKj8tGmI+v+1724TB4hzH DXszK3VjWcTWqmq77wfsQlxRZ4JsvTfLaRF9raSkGWpc4G+OihpDDeawOlw9wNJhD952 Rl08C+GHKKaglUMF52Eql1SeXVak+3eN0P+sNg6R2lwGLH3LX4xUkIYbR/T7xZ9xOh1B iZlQ== X-Forwarded-Encrypted: i=1; AJvYcCWdkLP1Vg8rJ3LZhJLLivAJOw+7BfstLDUu0DntA5QYnugJDN6BZd2z758gjqtOA4eDGtlOKeE3+7JejPI=@vger.kernel.org X-Gm-Message-State: AOJu0YzR/0sonNrJlbqKE1mRoVCaUwVVlCkY8kZf0spGAma8Y/Denc++ mELh56uXyJ4jlapI3mXo0Qmg3AgvSRG3DQqz+VjOG+rloLkieUya9AKk3BYuEfTFv82gm3Q4kFY 1mYi/30pj4A== X-Google-Smtp-Source: AGHT+IGgjt+IiGsGSAAjlyLV/quvNNUrswmcbROBM/SIWa0AxVHu52i8VUE/NkmFDhksdxI2sqtyfjPWgnZQ X-Received: from pjk4.prod.google.com ([2002:a17:90b:5584:b0:31e:c1fb:dbb2]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a17:90b:3c05:b0:324:e794:70b1 with SMTP id 98e67ed59e1d1-32815412ac1mr24371288a91.4.1756960351105; Wed, 03 Sep 2025 21:32:31 -0700 (PDT) Date: Wed, 3 Sep 2025 21:32:05 -0700 In-Reply-To: <20250904043208.995243-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: <20250904043208.995243-1-irogers@google.com> X-Mailer: git-send-email 2.51.0.338.gd7d06c2dae-goog Message-ID: <20250904043208.995243-11-irogers@google.com> Subject: [PATCH v6 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.338.gd7d06c2dae-goog From nobody Fri Oct 3 06:35:26 2025 Received: from mail-qt1-f201.google.com (mail-qt1-f201.google.com [209.85.160.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 489C526B2A5 for ; Thu, 4 Sep 2025 04:32:34 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.160.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756960356; cv=none; b=VZFOr7MClFwsaXSiahdxPv4zLV2KLmyPmiU0e6BEYVXzlVPXHJpYrWsExO0M2dK34TCVqeYH5Xkn36M44P7zf8V1zV00D9Iq7+YtIhb5loD8GAZqyMmxp9a4w7z97mtjN28qwEY1j2Ii3oGipo/fr0f6o55OAeJbP31MUY6p2X4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756960356; c=relaxed/simple; bh=ffRgbCW+mwLvKxlr5G/zDLTTXB7A7/iZ7lLI7n5/B7M=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=SVyyMofqE2efdeUDtSYavBpoNCcZ+DLiGIIdzyWXpgrU7QKnhsAPThJI0sfAGiyjscHSY8176RbP/VnEO02t/isyJ8Mh/6QKwng8JuVhC8nh9LFAz7pta2hBB/htWUHw1w+2YfUzXKKlxJPIZHKGXhnt/lM1FpJ1zSbvH1OdKI4= 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=Iy7OTgK0; arc=none smtp.client-ip=209.85.160.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="Iy7OTgK0" Received: by mail-qt1-f201.google.com with SMTP id d75a77b69052e-4b302991b39so10709961cf.2 for ; Wed, 03 Sep 2025 21:32:34 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1756960353; x=1757565153; 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=sAh/vefV0zbzf710Ctp3hGyMWK0fEN5QciWvBjtY5IM=; b=Iy7OTgK0iOO6hnJB2pmf4wy+pqSCdSqfPPFTklZ36u/6bMIMeUC9S5TFqmxyM1afup 59YWWN7ER7tJqdyD1MtNBkmTcjEftF1OgWDcPz0EWPCgZELPXqvmuKyqI2zZBmHPbW5x vVA7rf+sWECGNio1hwICiiVNmDU4YSimpPU+qV312mQ9M1bLMPUiOvMMEp21OWenpC+9 lcHMqESmX9cXIsBcuBIoh7abdHTo+zoGVQoyuNTuakGEeIU85D6qcG71PRLWrkvNCgEP sUZW2zA7mOnzNAT41+fnpzAfi4WUE0cA//Wfoi+B2AU5TbCYIM+7Oxj3JuxhbArmFF/s RE6A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1756960353; x=1757565153; 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=sAh/vefV0zbzf710Ctp3hGyMWK0fEN5QciWvBjtY5IM=; b=OrzwqzXf9RlS/NIz81ftDcVo97IVOxxydzHsXImD2PjHtIpd2wykor9XaKNzuYK1MA eLs0X1i5arzWnd46IK66UFhE5qEx/AwMQAzXB6gO9KX9byfOyWcZt3NUJkZ+qrI4Udgq I2sg9bxNub575NrmGXTL7zsf2yPwbpe6mYc/RIQfsUr998NHKHV/sgZ872n2WsIT9+2i R4h988zg7pi0caeywEAI81U9bmS8dgcK4pyShU9lMqkGozTz5YXrDteGVNHt6mFtKNpO o1qWgIl721K1vkKxmcPocLmkausCmLPIRn6JnFqZc9UR+ppRsoLsSL1SMjuehn4FPHLo IwpQ== X-Forwarded-Encrypted: i=1; AJvYcCVth9TWI19zxx8XkIIz2mEG1EOtMXKEc9gRKiIDuPRRgmZyoQGUMAfKKRLy66DxPOgIXdgQzc4txGpBTVg=@vger.kernel.org X-Gm-Message-State: AOJu0YzUe5nLYJwdMl3nMOGb9VE5Vq6VgsbcqP+Lt5IUrxDskvKZJ+bt voTx0bmStSJGF/EDbbc1+3l7z92dwlDLbU+UkhDbY5JVYyh/tV97VeuqEb0CFmQeeRfUj41aETD 4W3F80A37FQ== X-Google-Smtp-Source: AGHT+IGEdNHFm7B7CGrnsxnQU0WMllIJFENZeBz9HftJVdwxs6kCXS9cT1zRuS7Q3IX9kPrWJUOHvT9hRfq9 X-Received: from qknua1.prod.google.com ([2002:a05:620a:6981:b0:808:15f9:475]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a05:622a:14d3:b0:4b5:d932:15c9 with SMTP id d75a77b69052e-4b5d9323596mr10750201cf.37.1756960353102; Wed, 03 Sep 2025 21:32:33 -0700 (PDT) Date: Wed, 3 Sep 2025 21:32:06 -0700 In-Reply-To: <20250904043208.995243-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: <20250904043208.995243-1-irogers@google.com> X-Mailer: git-send-email 2.51.0.338.gd7d06c2dae-goog Message-ID: <20250904043208.995243-12-irogers@google.com> Subject: [PATCH v6 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.338.gd7d06c2dae-goog From nobody Fri Oct 3 06:35:26 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 39F2F26D4DA for ; Thu, 4 Sep 2025 04:32:36 +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=1756960358; cv=none; b=Ulcevsis9eHWQta5b9Ty95vQc0uGGZr2hf46HmLZuSog2nVQxmqV3nwGe7YNEz5ISZvMbEDR2e9UyJ7sYguT+YAhevWhPJCwcvyrlnHYTeQ19Up/aqah3Ui5fZ1/G8RA7GOILKb2umw3Ll6N0suvsICNRi0exO7Jdf+DMPKva/Y= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756960358; c=relaxed/simple; bh=uOdqkqdSzW4Dmmlo6sfJmMLpPlifrugxSM7HCX2d0RA=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Content-Type; b=DcQBAClsEFL06pCELRl3e2ARbjWfrtwlND026eqYkc+H36CJqBQcDlwQdpNJ6DqryWjoHJsA6Hhg/tN6PoNWRaGdoItz2cPpo6YbgErCwa0Xs2dpGe20jC79f4OnX+Qq5YPSZSzv5mBKCFnLLRlYYpeUvp05gyF+JG91gPcuc5I= 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=hJTdIWaT; 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="hJTdIWaT" Received: by mail-pj1-f74.google.com with SMTP id 98e67ed59e1d1-329cb4c3f78so532955a91.2 for ; Wed, 03 Sep 2025 21:32:36 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1756960355; x=1757565155; 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=xUwT+w8blYW9VWDtocCp6rvrdJRShZimavEsL52zW9Y=; b=hJTdIWaTWQYSS8xL5YO5C8BKHU/2ymB+YeyoCv0iEMSft3B9NAVk0vQ/wFKcB5qvWa 3akqkcDIz7w22ZbeIRxXhBX7fvLTRiyOlfxEPN1FTehZCh9bL6T2+xHgVR/AWt61X6dc LvwwEas7Rdbzs/69hOfTLzZbUeK2xeOl+lZ+AcxXRl6USAd3V/7S3RDVA4woiEJcB3/V D++BMkjp/7DBRyv4brrMm72XNsBsKzOBQG4D/iFZDX9fWOHovHjrDTXBD8PjXYsSCRyV MVINjdJ9a/mAVgfu5VY4YWdsFATmDqn3sKzq0DrOZNvJB84TSdLwcWhM4/aPcJwVYfGD hYxg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1756960355; x=1757565155; 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=xUwT+w8blYW9VWDtocCp6rvrdJRShZimavEsL52zW9Y=; b=kU1BT72dfyTZlgH6J6vdbZ+BpG7AVH89P+WCHBclOvLriR4o01MqfDH0j4gZov+GrJ 4/vkERcUvqGPyDrukBuZSoxUq0ViQjnjIt+dLkwtQRx1bkNyzECJLNvKmqSD103YTjSk OXKCXL5RPEwihp94wU7x+vgMyTMD3I42HBGtBcpqsuEl7sy2gWB0zYCS+u6DmNEvbBXJ BDQ2vbWSEe85sUAIwfdLf9jTeqKsmMf0khKa1FBWETtvA+8BDBpymPg5R4JPFVFtXzSA TFPLf+sbX9zELXWLcanDk9CesCHMNJw2pfz2iK4+U5aJe61R/MnqCvUs5UYoZ3z8dfX9 tBbw== X-Forwarded-Encrypted: i=1; AJvYcCW5y6pW381gAkrscqSq6/2pupoHj8AZMKdZUNeuu5Af426SUcH+PioTGJmhhau50r2ikvQGMBCDlLpIMfk=@vger.kernel.org X-Gm-Message-State: AOJu0YzGBOgcwJF08vHoX0eH/IfwZof3+lTFwcyZg4fyui/sTfFVVT2r 9J7oD0r6d9nfrE+tFq4J1uKi+KRgCVpOD6KuCflL9hSYgEGXC3X8GI1MdR5DYggty+BPMJOuYnN szV3HLCLHZA== X-Google-Smtp-Source: AGHT+IHlL+ryoIVhOXWSjI+5zz0037zJc6H2kzUnY86l5dIDcYh+9cIrvTg/Nnvfv39gBWIxr4yTCh5vBbwr X-Received: from pjbsy12.prod.google.com ([2002:a17:90b:2d0c:b0:327:a21a:7e8d]) (user=irogers job=prod-delivery.src-stubby-dispatcher) by 2002:a17:90b:5190:b0:324:ece9:6afb with SMTP id 98e67ed59e1d1-3281541225emr22512277a91.3.1756960355345; Wed, 03 Sep 2025 21:32:35 -0700 (PDT) Date: Wed, 3 Sep 2025 21:32:07 -0700 In-Reply-To: <20250904043208.995243-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: <20250904043208.995243-1-irogers@google.com> X-Mailer: git-send-email 2.51.0.338.gd7d06c2dae-goog Message-ID: <20250904043208.995243-13-irogers@google.com> Subject: [PATCH v6 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 | 83 +++++++++++++++++++++++++- 5 files changed, 101 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..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.0.338.gd7d06c2dae-goog