From nobody Sun Feb 8 08:43:01 2026 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 A98FCD267 for ; Thu, 14 Mar 2024 05:51:20 +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=1710395482; cv=none; b=UBJu9u+JdwFZzmO+Es7G08B4fS8j3HZsbSP+kGJDIvgDLQYdtBPZjHBM0TNDzA9ujQAVqYyWm7jfaznBHpcG3dtyoN+GbbGFeQYYxW5ryQil8GdstG7B+EjqSxw1/vQ7RYrlmj4otSv5rAPtU1WPMTkGbJV8f5FOFWE2uuquoJo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1710395482; c=relaxed/simple; bh=pYwFBWamBieIdW9SZt9AVp6RucUVMKW9akUtx9h7loo=; h=Date:In-Reply-To:Message-Id:Mime-Version:References:Subject:From: To:Content-Type; b=q/mgZWpn2PqkBQgkjoShUJGLcJQGPFDTxIB/zrRIiaj+9qBhDW5VeMVogvhMaGVVhQEXOd/AbopVoV0+ziJaVGNmrF/zKealf6vYthtdFIVe/ICkoiNfZfshWawtJc0YlA7oqTM4WFxFTo6QfigGNv1YAliSVliLxK10DWeGeHk= 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=CO9py+S1; 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="CO9py+S1" Received: by mail-yb1-f201.google.com with SMTP id 3f1490d57ef6-dc6b2682870so841172276.0 for ; Wed, 13 Mar 2024 22:51:20 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1710395480; x=1711000280; darn=vger.kernel.org; h=to:from:subject:references:mime-version:message-id:in-reply-to:date :from:to:cc:subject:date:message-id:reply-to; bh=2Ycxt5yLzxCom5vbiObPBkTkTg6hjsPvowJcvLZ1CJY=; b=CO9py+S16TCITvJ+syklCg+mB0n32HiRA+0gFeySmLSIzl53wuaezzVvag8TAxi83o mC6TXaK7YEcAbKC9f4tNXmA+IOihaKqwAw1Y28+cWyFxDdxMtM7bVk+h/b5BLnK10Nju f4TPF60EZh9W18en+4GnW4tyiMap3XxIvZ1QSDsWZDnW8+qhp8hqt19wC4Z1+glZqdz5 GP58P814iYmB9a0wFLW7WFF+xCXuC456XENaHkEwGZMf+jvbWUKkSBhTdAM/esRyXdZq n3EOYKt6kpyGdsOrPuLig1rJS+Sjq2GBdLOiCQIUx8bsYKJPwJOziOUXnqL1usQP6AfS 1tQQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1710395480; x=1711000280; h=to:from:subject:references:mime-version:message-id:in-reply-to:date :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=2Ycxt5yLzxCom5vbiObPBkTkTg6hjsPvowJcvLZ1CJY=; b=D0UE4aF/s4kK52NWqo2JGyxkZcdw6zYwHRCIF1ptNyzIpVRKn+Ymo5lrhSW/ic6mGQ doHs6Lk3GDDH22KiTFRaMLnYdwbrWWGNvCvb8/2cc8KW13rl58q4GiEooFDRIgS+VwCk 1nunZIf6oDbMLI02AliMYg6nOUvtAN+gFGXUsASq4ZSHwDnmwnMFRAuObJuLEEdq6hgb IQ4oy5bCKt2xoWFAUjoJFnb0KRncrS3bpjTxS1/xrsyRMC9kJYLIW5uZxzxcIj+rB4bk BYLfso41fZpQU0ImNSOEmJ4C4kWjLymcLaY6s9uRCdEeTefpPISB+3hZViZksbLHaApg W4Dg== X-Forwarded-Encrypted: i=1; AJvYcCXv3orUL8gN6uqg9qRtursEMQH8WCOSJ9bZ28bXYMcFYk/HcFt4pJSR59GiMloZX+0kMgWwekQFAX3mbsFYKWBOyEyY+bnIneYa5auT X-Gm-Message-State: AOJu0YwzAeM3EKtpm/57Hr6aRou8Z2B2g49pjHS8Ja/306vgc99cvjyU 4pKz7z0Wya4dWnqhfEqkBLTjZZ0bBN6Qo8ekFitUg0+8jZCPf/t6Z1yHEysMzkPRT4iFDoLWlPX D/Qvm7Q== X-Google-Smtp-Source: AGHT+IHe1agMqsMATLFIo2OsHql0jl2X0vTCAH83A2XiKg/x3LK3+VtXRJBuf2uvfomEwPmpZr6WfAQkwEAE X-Received: from irogers.svl.corp.google.com ([2620:15c:2a3:200:449f:3bde:a4cd:806a]) (user=irogers job=sendgmr) by 2002:a05:6902:e04:b0:dc7:68b5:4f3d with SMTP id df4-20020a0569020e0400b00dc768b54f3dmr250371ybb.11.1710395479705; Wed, 13 Mar 2024 22:51:19 -0700 (PDT) Date: Wed, 13 Mar 2024 22:50:40 -0700 In-Reply-To: <20240314055051.1960527-1-irogers@google.com> Message-Id: <20240314055051.1960527-2-irogers@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20240314055051.1960527-1-irogers@google.com> X-Mailer: git-send-email 2.44.0.278.ge034bb2e1d-goog Subject: [PATCH v3 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 , John Garry , Kan Liang , Jing Zhang , Thomas Richter , James Clark , linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org, Andi Kleen , Kajol Jain , Sandipan Das , Ravi Bangoria , Perry Taylor , Samantha Alt , Caleb Biggers , Weilin Wang , Edward Baker , Stephane Eranian 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 fc704a96ba0b..f68b0a60cdef 100755 --- a/tools/perf/pmu-events/jevents.py +++ b/tools/perf/pmu-events/jevents.py @@ -608,7 +608,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 @@ -658,7 +658,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.44.0.278.ge034bb2e1d-goog From nobody Sun Feb 8 08:43:01 2026 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 9637BDDDA for ; Thu, 14 Mar 2024 05:51:22 +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=1710395484; cv=none; b=pwpbs0VNLWdwxgf1VdMR9jFeeNPDqbCWGVV+EZL9zkW5GEbmzohYv2G1WxaOXYSXRKmzcgFn9UrvT8CWK7fFbDikjeVuvn+ukuUA70XL1DQMRo2+gZMrdfAvl6S27nYBH07hqRhhVyVcRnhhFj6zIKg/vA69JaYvh2pK3mauVEw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1710395484; c=relaxed/simple; bh=hLfRLYYEBDGHVllbq1W2MRKFt2uEVseZ3ckqP7HQcJs=; h=Date:In-Reply-To:Message-Id:Mime-Version:References:Subject:From: To:Content-Type; b=AmNGKoR/uHbZn39VtirD/6/AH7O8yXOBgfUX6oqYpiJuypcqucsm/ZprQQZvymwi7lBqGIzcmuGZukIsianugDZ+6lGiFS/mrzsELQ5n3R2/XpQX/FbnmNE8m6WMrbbGsgEBDqhlRKL34DH7eJtOD1+a3Z3NPRNDs+3hYRsiDGo= 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=vvYfaUPj; 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="vvYfaUPj" Received: by mail-yb1-f201.google.com with SMTP id 3f1490d57ef6-dd0ae66422fso1338590276.0 for ; Wed, 13 Mar 2024 22:51:22 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1710395481; x=1711000281; darn=vger.kernel.org; h=to:from:subject:references:mime-version:message-id:in-reply-to:date :from:to:cc:subject:date:message-id:reply-to; bh=KxFo9HXrMBHPfRGQr1WhtYDEqITe1Fw0obEsjgP5vwk=; b=vvYfaUPjXrX5FwXQ52ksdJXqqZpVHMCEtLRQBNlEu5W3jpwxXl3pVw9Ppz2lIm/uT4 U5PH3DAndc7Y0z2jiKU4i21S/DBhYKhGBp2P3tXkOo4Lm4cMCeC+pTQzdJWMwqcq+y2Y T9mEZSqQYF4eLTsHw2Jlw592pCVuX/uWQalrPGXWD8EDVoAJJDefFFHn5fQ8PwAoOsOZ 4k3XhaZUll0e/tOuY5mNkPf69ZyckGhnmQ9p5fDDQjreCRwXpxfLj46v0VwS6KDVaLe5 8XnnbHpcE7i/V8lRKIlqwzV/Zbp3hDwRKftiwQPjsEL7gdcFzZRZNf40v2qrZ6+AgcuR L7eg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1710395481; x=1711000281; h=to:from:subject:references:mime-version:message-id:in-reply-to:date :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=KxFo9HXrMBHPfRGQr1WhtYDEqITe1Fw0obEsjgP5vwk=; b=UvPyHI1p6gABAVTsXt1iScWE+Z8d0YpoRdQca5KYHtdI3LYDHbvazq9fNbtShbdb9U BMI8nKR9jsLKtDdhhHwkKWFzeGJWG0A2nPG7nDiq1A9tUgKOXPkVbNE6XsqoEiktUaxL 5FY6ulPHW4Ml6jvos7JfsfcsBHC7BO/WP8sXm1MsBsorD7SCvSxUlKxAy/PLI3vm2OoJ 1qWEai5KgPh+2UAwJeequJJhiUBJDsA9mKhP83UuGkMRfDqrFGHNai+R6OWLEzEMYtlZ mveUT2j9860ZLinmdnYoWyo+zO8ZHpBE1GuVETfMLQvJj3kf8kLVcMUwbOwc86Eujxdk Axug== X-Forwarded-Encrypted: i=1; AJvYcCXjhi3BNxo71UlromYyJIPvFFib29gPwmyHY99qZvZXb65lQju6T83h2IHZecCds76unMxMGGwFV3uDl7t0EeyxSpAN0IrJzDOEIjQz X-Gm-Message-State: AOJu0YxvDkTBoJvcWcHnf7gjdV7w1/A5+U1pa8c5qDUHZYx0xSrrmGi+ T+2QnhNFsUBmm+WphOpp63nw8LgXi9FrdizRoxNFFpI0TuqJXTQ/09QrrCmI55vDehsDXr2dLE9 TiTvn4g== X-Google-Smtp-Source: AGHT+IEX3XhByYWB+A84RZSWQnLA6MNuWBZhhdltJMDC98o5Yyv1SEyQ5sd3VauVnhEwit4sY9Nz/bnRToWj X-Received: from irogers.svl.corp.google.com ([2620:15c:2a3:200:449f:3bde:a4cd:806a]) (user=irogers job=sendgmr) by 2002:a05:6902:100a:b0:dbe:d0a9:2be3 with SMTP id w10-20020a056902100a00b00dbed0a92be3mr255447ybt.3.1710395481665; Wed, 13 Mar 2024 22:51:21 -0700 (PDT) Date: Wed, 13 Mar 2024 22:50:41 -0700 In-Reply-To: <20240314055051.1960527-1-irogers@google.com> Message-Id: <20240314055051.1960527-3-irogers@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20240314055051.1960527-1-irogers@google.com> X-Mailer: git-send-email 2.44.0.278.ge034bb2e1d-goog Subject: [PATCH v3 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 , John Garry , Kan Liang , Jing Zhang , Thomas Richter , James Clark , linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org, Andi Kleen , Kajol Jain , Sandipan Das , Ravi Bangoria , Perry Taylor , Samantha Alt , Caleb Biggers , Weilin Wang , Edward Baker , Stephane Eranian 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.44.0.278.ge034bb2e1d-goog From nobody Sun Feb 8 08:43:01 2026 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 BB7F3FC0B for ; Thu, 14 Mar 2024 05:51:24 +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=1710395487; cv=none; b=njh6ctSLOxvB6q+I4nl5whRpqJmtgnAGS8f4holT5jQqFNPYi5Wf4zhkkGP90uDYHDOC4cYRVGV6yjTmUYLDaTCJ+bbL4fjdV/9O7x1WjCBaY31Je54PLNg/UDSrtmt5KPw2Ij4VTfRyQy602J+2zh3kKJGgfVcswszaKvTb13M= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1710395487; c=relaxed/simple; bh=GN4Y68feIoyK84NORTnkVtG7K1dAvlvEPxB9mo8klN0=; h=Date:In-Reply-To:Message-Id:Mime-Version:References:Subject:From: To:Content-Type; b=Y3WHJHN/RCudL7liGaOnOPFP6CN/CyBEsLE3SsCRdVni56ZQQqj+sybc942SmNtDxO2sXICwK+S4m/lJ58TOfhbHbJiEZpZN2Qng31rwJZshjNgwqP5ohrIYH6emg9ZkwBWYnraZJ5CG1NKizYE473qQGZYQUnsxYxuHv6F6q6E= 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=r/br7fOA; 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="r/br7fOA" Received: by mail-yb1-f201.google.com with SMTP id 3f1490d57ef6-dc746178515so888708276.2 for ; Wed, 13 Mar 2024 22:51:24 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1710395484; x=1711000284; darn=vger.kernel.org; h=to:from:subject:references:mime-version:message-id:in-reply-to:date :from:to:cc:subject:date:message-id:reply-to; bh=cnw+7frKkpFIuv39tcYmSQZnvJ8fkaJfcm6LBjLqiJc=; b=r/br7fOAkQIniuUdpruKaK5brvGPEbh6x+MG5zdOSLmXtIVUPRF0BKma8RoHivK1d8 iyIVQbLynDywRHyG+4g8BTqFCiyl3XQICcTBfUAhYF5Qf976302JG4h5zuXlEDxJymMv WnhA/moikRgEGQWCFMeNpHWN1OOJYdFffYZgqxL2fFzItdx3LWJ6cr4z7pGUAcjvRWqL NDLb/VhnKD+7Go+9hmaxbdjkJ/hNZsd+ZbcBbUCCjbzOrl1jrqSx0WGRDisaMZ9dEb/S IllSSBkM1eHRspfZOc3G/LCaUvzhqh9symfoACOEQyz19tVbIExxsWeue1JM2XJTBlO0 4+qg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1710395484; x=1711000284; h=to:from:subject:references:mime-version:message-id:in-reply-to:date :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=cnw+7frKkpFIuv39tcYmSQZnvJ8fkaJfcm6LBjLqiJc=; b=otFidQkDwjdnjY4F8+yGVzOB8rVwDD15fMlXmk90lZEYqS+hPq5JbwStodKg8VFzTa Rzp97OBqpMNVduuzLVt3Dp0jZWCFmI7ZOdoPWhrEIPVCC1gh54TlQOSt+lELa64hG8xe ib/LAm0b5xZLAsm49tnQZVkeohzThxKkYBRfmhsA4PkkiXIF+vd4BZEvd1dufacVvRNR EYg/51v/wMGbvS4yo39LZxGxLIrOCJkpmqGgC639QZi3JbP4AgOQ5mC77ouQynzlIXuy Htt6YsjhCBda6NGsS1I5B2M6QzKjryIAlPhgLdFlaAFrzUuhIa2WwosICdG6utzGhus8 5Iug== X-Forwarded-Encrypted: i=1; AJvYcCVC9kBBtVbIlhCBBZ446K9vTk2Td0PukxyEGs9lTRoCNk60u4gt+eTidYgDg3kzVL5ZG6y20/HIJRGNYkOrOaDe28kJ8muP/t3L4cFT X-Gm-Message-State: AOJu0YxuMIrYb/1kxomdKhrg0y6WFlShEPcu1hOrEbgg4Otm/jyI/D5p Xf68XXmh2v+Hc2X0qIh3z5gdrBT48MknIhTYFCTKDm16F5qhH+XsWOJmHa2K7YHzjBSqqcTCNIa EtWMCmA== X-Google-Smtp-Source: AGHT+IEefVp2QC5OaHOxVr60zApScmAZ36NzCqADLg2CL6GAfBmQEcSr+9+qOERum4cvJPHr1mGvB2mN3KA+ X-Received: from irogers.svl.corp.google.com ([2620:15c:2a3:200:449f:3bde:a4cd:806a]) (user=irogers job=sendgmr) by 2002:a05:6902:2206:b0:dc6:207e:e8b1 with SMTP id dm6-20020a056902220600b00dc6207ee8b1mr252265ybb.2.1710395483764; Wed, 13 Mar 2024 22:51:23 -0700 (PDT) Date: Wed, 13 Mar 2024 22:50:42 -0700 In-Reply-To: <20240314055051.1960527-1-irogers@google.com> Message-Id: <20240314055051.1960527-4-irogers@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20240314055051.1960527-1-irogers@google.com> X-Mailer: git-send-email 2.44.0.278.ge034bb2e1d-goog Subject: [PATCH v3 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 , John Garry , Kan Liang , Jing Zhang , Thomas Richter , James Clark , linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org, Andi Kleen , Kajol Jain , Sandipan Das , Ravi Bangoria , Perry Taylor , Samantha Alt , Caleb Biggers , Weilin Wang , Edward Baker , Stephane Eranian 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.44.0.278.ge034bb2e1d-goog From nobody Sun Feb 8 08:43:01 2026 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 D799210979 for ; Thu, 14 Mar 2024 05:51:26 +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=1710395488; cv=none; b=TvP69NpyS2MUpNEfYsDRQC1eUDcQbrZYG4H5kw1EqrRTDv+S9iNk7JxsNg9m7SRgIDoqUv7yQoFnOmF9IZVLn58h+XjTDyvN415g6FyQfccUjJ4YsejmNw2XMRgU11uwS8RJhKhNyURFvJxyRX1Q2ADDgCV++kF0YbaDcbonIQw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1710395488; c=relaxed/simple; bh=0IeSdmWuvcjIVBTAhF6kJkhdSlGmwLTCZHLsTn46VzI=; h=Date:In-Reply-To:Message-Id:Mime-Version:References:Subject:From: To:Content-Type; b=J12Ph1Pf1DAH+z5KMfhV+lbisuN0V7KIYreV57u3caQObb5S2bo9+AU5Y39kd2ikV/L0hI9l8mPocUJxbl2urDigBfJ+uEhdoZDaGiKl1NTAvlH8ywrzBZWQl3YKxxTTsizHK4Gwof2mltI0U6hbJLYYF1FTu91KEeUZS0RyrOE= 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=Cqa/Ajnv; 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="Cqa/Ajnv" Received: by mail-yb1-f201.google.com with SMTP id 3f1490d57ef6-dbf618042daso842557276.0 for ; Wed, 13 Mar 2024 22:51:26 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1710395486; x=1711000286; darn=vger.kernel.org; h=to:from:subject:references:mime-version:message-id:in-reply-to:date :from:to:cc:subject:date:message-id:reply-to; bh=0l9FS4zSa3KVc8IImImj1SVx9SNoPylTIMS2zSJSapM=; b=Cqa/AjnvWM+D9pUSSoE2IB/bUcFo6AB5XZWJ4zZpT8TRbEsBJ/iQXNUUEw8D7gyrTB 0VUmM/ZX/3KI8TBQHUo0mh5ZElapr+Ti+c6YUt7gNXm6O2fl0u4wgXDaiceXbFH+J8oJ 9RlMOEbi6myM5aCeBjk6c+ytJXTsR8ql2+XvpXbSa+dElycdC38EhbxB1crwJnSLCvHR CzyjP3niqwTGdLY7HWOH3LgRYGAWNmtCYIHvH+iYrDZObzmf456gbAKKSgJZ16k0jki4 Xobo0J6AI59rwep/e/GohIL/mznlLxRiA6tUZOFoElgwUEMUDZWKHOmiAJHKHNbgwtS4 ElDA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1710395486; x=1711000286; h=to:from:subject:references:mime-version:message-id:in-reply-to:date :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=0l9FS4zSa3KVc8IImImj1SVx9SNoPylTIMS2zSJSapM=; b=KxAsiuz/Re2xgKXW6B9pC6UAMh3EoWL0mLKSu4nh7eZMAwPcgpFjOqiF16p/OaGQ7d vUQ/v9NLdzSzTHogWW17lW9BLfHXSGyuNJUp32aC3P7iM1UhVEJ+E5Losn4apdNIahzR z+qnJPKf49yCzEIBCZV89KN8BDA0eY1oh1Ewv59YSoIRMeCtv947DdjmAyMzr9Z9n8rT SNoyCrm6npXWPPzpXHep4IgbSwjPSj8JB9oET2bu/ozsdkgre9dVsevy4L4LE9Qzar0+ in4fstYYZ/n8NbEdbKJ3lbIUF4jyKq2SW2J6tAiklojiMcdjF6eXK0qwa63fKp4n0970 fYIQ== X-Forwarded-Encrypted: i=1; AJvYcCVAWpj2TVTRkDfDWURBZjyzyKG9+CopLmkO9msdtn5ZJuYGMv0rtY1UrLdBFSE5LvizX5O8KGqbulYgXYmvb3G7kr+2dz9UqP7aKuAq X-Gm-Message-State: AOJu0Yy24qu4hKNP4VjRVodUrQYsi9y3Ow2OoPlS1yvSZLDiYBg1gsgo iWIyqLPhQOenYpbsYewNmplBUUYv5mraG0803B/GigvJ25XzOpfRkvLhAOkRMRMhszt7fLvoqs6 oYda+9g== X-Google-Smtp-Source: AGHT+IHH79mYs40F7BUOVmWvFB09LOQpAhVrdOQEbqFP6DpavW8hsUs5XlfpYxn7j1hIau2yyW/X2EXz7AAa X-Received: from irogers.svl.corp.google.com ([2620:15c:2a3:200:449f:3bde:a4cd:806a]) (user=irogers job=sendgmr) by 2002:a05:6902:2290:b0:dc2:5456:d9ac with SMTP id dn16-20020a056902229000b00dc25456d9acmr34068ybb.5.1710395485890; Wed, 13 Mar 2024 22:51:25 -0700 (PDT) Date: Wed, 13 Mar 2024 22:50:43 -0700 In-Reply-To: <20240314055051.1960527-1-irogers@google.com> Message-Id: <20240314055051.1960527-5-irogers@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20240314055051.1960527-1-irogers@google.com> X-Mailer: git-send-email 2.44.0.278.ge034bb2e1d-goog Subject: [PATCH v3 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 , John Garry , Kan Liang , Jing Zhang , Thomas Richter , James Clark , linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org, Andi Kleen , Kajol Jain , Sandipan Das , Ravi Bangoria , Perry Taylor , Samantha Alt , Caleb Biggers , Weilin Wang , Edward Baker , Stephane Eranian 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.44.0.278.ge034bb2e1d-goog From nobody Sun Feb 8 08:43:01 2026 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 EB50E11C85 for ; Thu, 14 Mar 2024 05:51:28 +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=1710395490; cv=none; b=fsvNJY8ZvtLL7R2jLlTH5zojyxnkPuzc/9kHlKNM1y/YUr8SjYiTgEeEQ32EB1lxZswQDoe40GKM6Q/w+p5GUhTsjMhwkg0v1QLz8PBY125lLGDZDQPSjgUKiqRO8n3qWqqQN53VcL5xCALl9O10EZnhNZlANbOVpWrA4eXErns= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1710395490; c=relaxed/simple; bh=j1Uteud1mWr9qwRDjsafkmahAN/I9mDRvh5Ckh8gIQo=; h=Date:In-Reply-To:Message-Id:Mime-Version:References:Subject:From: To:Content-Type; b=EI3WBS4ls4UeF8nhaEu527/hBudgNK9pEhKgglBq7Usu3c8w6AOvpFzpagAcK1vUWFt9SpvsT6FFWArTV55TQBSh12Ys4HMpWza67aFTBmHSnc8VN1LpVNkGfVBBGIISGQdzAyU5aJbVZSHz05TTVIWw7aqOsx6nt6TrL342vsk= 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=Ixsn8cOj; 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="Ixsn8cOj" Received: by mail-yb1-f202.google.com with SMTP id 3f1490d57ef6-dc6ceade361so938636276.0 for ; Wed, 13 Mar 2024 22:51:28 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1710395488; x=1711000288; darn=vger.kernel.org; h=to:from:subject:references:mime-version:message-id:in-reply-to:date :from:to:cc:subject:date:message-id:reply-to; bh=bBWDWJvSshoSjEVW3Suakt0O9q+vGDdTpywx5NXn+PM=; b=Ixsn8cOjAx0Rphql+mkLr1x8nVu2ueFwRt+a3RdTaOW2qUU/TJ+BbOkkTsy+4EQSFQ BtdlFAYWBeyyeFV9JQbRqZ3CEsrs8PYqLvP124lAVVSWGC7yoqjFhff4fC1FkaYj+Sfq BztnyPoC8qS1mgcSoWLMZxoFr4OPmqa2X9hRPrxg0YXseeTtUw1wU9R2WaXRYWt+SpRO hj37wu4yLs2rufBQcmD4nH989PKU2bx1Q05Q8HPcZGAcTLgIqLu5IUFW9aMEv/uGKaaa Eeu3oWPXHkjZb/cUybS2wfHZ0X/FdKaoJuk4mOVj80o98twVMT1EWPIVzZXY50dRFPOQ zCbQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1710395488; x=1711000288; h=to:from:subject:references:mime-version:message-id:in-reply-to:date :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=bBWDWJvSshoSjEVW3Suakt0O9q+vGDdTpywx5NXn+PM=; b=b/IcM9+6hTeP2I7oDfUn2Ia1ezvIzWpQwMKfwfthM8ebBSS+3uqSVTM3/8qkxP/LP6 Tq3jdsWcnqM76yo86Oxed7s7vuX3g1BXRDbne7sw6O+r6ZQFyxsLAsjMWDmQP3CTO4UM Dw2CyWakmSfSHUkm/qv4EWdeuFJhEoOUKQrzOclCKHqBTm/B06IqCEOir7RD5hBjQfHF d7tvGVpZ6ajzcyPuY5E4CrCWGv2EjJlNoqKSGMOO7EPffht8nqWXU5yS9+/F9XVS6y7A GcoRN7+1DKedcwcYCAX5kFISHjX3ozvk0PXrStTXxKdfsPmYAbW74fG1goArZ/vR+x3G 5s4Q== X-Forwarded-Encrypted: i=1; AJvYcCVsoje8m8sSefkWlaWPyCyhm50HWengUcrA895kQJOif+CjALkDoILErFAbYxOZarVSSRtA7b+x760QiTtCuJo/afV/6Etmm91JFJ2z X-Gm-Message-State: AOJu0YxCdmNj94CDIC07rH6CL6YEGZrtRlq/jsPg+1ifSWdjzfUH52cq WTMD/+06xx8cXQb2QMeAjZ2q9lD7aeHcj5JPUPn8KHBaK5KgxMysNofbHv7ArOjLtAMSc4aaKUM sz+1nWQ== X-Google-Smtp-Source: AGHT+IFa7AP3IAGDDTK1TeUY6o785EBxZQfo4Yqw/fB+vYDzS43SHEh9iogU9Y+RZYdamDFOvOpYMXb0Ud1v X-Received: from irogers.svl.corp.google.com ([2620:15c:2a3:200:449f:3bde:a4cd:806a]) (user=irogers job=sendgmr) by 2002:a05:6902:e09:b0:dcb:abcc:62be with SMTP id df9-20020a0569020e0900b00dcbabcc62bemr260520ybb.6.1710395488045; Wed, 13 Mar 2024 22:51:28 -0700 (PDT) Date: Wed, 13 Mar 2024 22:50:44 -0700 In-Reply-To: <20240314055051.1960527-1-irogers@google.com> Message-Id: <20240314055051.1960527-6-irogers@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20240314055051.1960527-1-irogers@google.com> X-Mailer: git-send-email 2.44.0.278.ge034bb2e1d-goog Subject: [PATCH v3 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 , John Garry , Kan Liang , Jing Zhang , Thomas Richter , James Clark , linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org, Andi Kleen , Kajol Jain , Sandipan Das , Ravi Bangoria , Perry Taylor , Samantha Alt , Caleb Biggers , Weilin Wang , Edward Baker , Stephane Eranian 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.44.0.278.ge034bb2e1d-goog From nobody Sun Feb 8 08:43:01 2026 Received: from mail-yw1-f201.google.com (mail-yw1-f201.google.com [209.85.128.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 F0ADD14A8E for ; Thu, 14 Mar 2024 05:51:30 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1710395492; cv=none; b=kx8K+He0fi+NqDxQNKUco0da6N7mQFvQxg2lAkGbXGj7aLvy9BUaspCR6POK6nV0CZXskSpAymqaviCPA7O297uVWTsYSRzFsQhjL8yp8qPjCtOO/GY1BUvT0h/GrQVSH3cmDqnKwxaHo97rrvYTD3b8lpVxZg51mTKsuaBNv60= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1710395492; c=relaxed/simple; bh=oswX3i20yiaJHjTAeWqAXOG6a2/1Ta4qOMh9xoJeXu4=; h=Date:In-Reply-To:Message-Id:Mime-Version:References:Subject:From: To:Content-Type; b=ax1YxUn9S7jWnkBzn16CyKWh0J+UbrzeQpFn2O3CKvVuXUeCzi7A9HJ5kKJp+JDnthXPOBtXfKGrUkzNt+HWokNZqivdRdZb8uRovqUc/z+QNKVpz2GptsRmcEL3kdrR62DEkUnyhHgNe+EiRM83S5QZ4XiRdf4iYiWvjL/VbFQ= 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=Z0SKOH5l; arc=none smtp.client-ip=209.85.128.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="Z0SKOH5l" Received: by mail-yw1-f201.google.com with SMTP id 00721157ae682-60ab69a9e6fso16991137b3.0 for ; Wed, 13 Mar 2024 22:51:30 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1710395490; x=1711000290; darn=vger.kernel.org; h=to:from:subject:references:mime-version:message-id:in-reply-to:date :from:to:cc:subject:date:message-id:reply-to; bh=F9W2L65moWfkRODZWtj1+8FpZZOCQB/UnzNIcvAZEKE=; b=Z0SKOH5lBDXANRYDT3FT4OtVU/68DBsGFiAedYfoHYtmAtNZjcYdRi+bT/VG3Ge2m+ tKX2QWO0JlasGCCSH1SHWFMlaZci74YOFqlZhT0Yjgx4L3gHJnPxCP8qITe5VpXVPFm7 2LUOFALrcWicwLmzzLrOIBPzVC1Jg8XuVUQF30yt7zysz+6hUKxYGMYs6wM7DawEyfoc GIEC1MvYJuEdw3dEWKOpNFvc7BdJ6P9g6GXiYRT+JDfpjZ7PPt15a7L+Ep7KcGKoe/qy bfm37x+P1gcTFWuRxaURc9WO8OyS03qVQ8TuH5YDKnK1kNEKQd6XGKeMo/CfEkmdXuNh 1RJA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1710395490; x=1711000290; h=to:from:subject:references:mime-version:message-id:in-reply-to:date :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=F9W2L65moWfkRODZWtj1+8FpZZOCQB/UnzNIcvAZEKE=; b=GDeBmMbo4mZ8e9pdJSRUvl0AfTHBtIQb5ng5uymj9rYvtVe4JuAZljxFF2C2FhCeoo AGUzgceq2To2tJhO4Y22LK755C3OXxDEezioKk11Yr+ctEk3WboZnBiqUvWnvhiGTbTa Q/HrrbSPq1nETtlGkaMysVociQ2uVJxRJana1DoeEhtAGmUVVZ2V/xJGTWEXBFa/HPg4 YdnW9IUlSg6uf6RxMkLw5soEO+gfrMQ0+5X8W0+blW160SMjWp46wpP+kQdVxa8B1clF 5ZKPYkQ5560PWLvQlO7rTyh9wDH/MJ8uwpwH0F1zP9KL3fZ381GUxF0yGiHLQmST8Kt4 wrqQ== X-Forwarded-Encrypted: i=1; AJvYcCXXLUcCc4KisoWodEW3Fdb/l818uVToAvsz9c/so+VwpzFPuyimt9AxWeIks8cY4+D3VJdaN0BaH/z/TENNy6mrN8HybC49dMEHLp9z X-Gm-Message-State: AOJu0Yy9R59h92MH8SXtMm5SqSeILBOKqf+pK7BgHvAs2EFYpfSofiN2 ZWSWN9g2ZdieDm9Sus2taIHrT7bhqqCgiTUGgWi6aG0se4uShjNuAmtKuTn64YXQUQx+yrg579Y KUxv2FA== X-Google-Smtp-Source: AGHT+IEWSnrDCNmwOwoNayo+Na8bh0N+7sXrpF4N0p5X7i9MQDILAXeEfZ+11sj+7d1o+2cE64r68zbGMoSY X-Received: from irogers.svl.corp.google.com ([2620:15c:2a3:200:449f:3bde:a4cd:806a]) (user=irogers job=sendgmr) by 2002:a81:5255:0:b0:60c:3c63:92a with SMTP id g82-20020a815255000000b0060c3c63092amr238651ywb.0.1710395490226; Wed, 13 Mar 2024 22:51:30 -0700 (PDT) Date: Wed, 13 Mar 2024 22:50:45 -0700 In-Reply-To: <20240314055051.1960527-1-irogers@google.com> Message-Id: <20240314055051.1960527-7-irogers@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20240314055051.1960527-1-irogers@google.com> X-Mailer: git-send-email 2.44.0.278.ge034bb2e1d-goog Subject: [PATCH v3 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 , John Garry , Kan Liang , Jing Zhang , Thomas Richter , James Clark , linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org, Andi Kleen , Kajol Jain , Sandipan Das , Ravi Bangoria , Perry Taylor , Samantha Alt , Caleb Biggers , Weilin Wang , Edward Baker , Stephane Eranian 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.44.0.278.ge034bb2e1d-goog From nobody Sun Feb 8 08:43:01 2026 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 6A74216427 for ; Thu, 14 Mar 2024 05:51:33 +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=1710395494; cv=none; b=L3MLibgdVvLhglnGK8CFMkweVAHk/b1YyzCDgVuMg09awBMDPKAVN05GVd7pdp9CRUWYJWVTW7jLqwC0ocn4jIOsM+2vy5r9jn4vm/0Ia6JPWtBTt0g87rgCeFAdKKTPNxppOMZk2uaAMoQ31mjZHbIWvW3rWam3TylAGiPwx4E= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1710395494; c=relaxed/simple; bh=ZXVWxGkn7pnCvmd8l6DV72SPICzKi/Gva//TpBe7PFE=; h=Date:In-Reply-To:Message-Id:Mime-Version:References:Subject:From: To:Content-Type; b=b2vFgtc7kHg0x8H2XoQw7lTK0SgBIYdOm9Uww+S75sqkcL+ApdMK18bcFeXoWqP0zvlzjFFgYIYWdc3+wNAteIkbNhFe9wjodx92gw3X//rA7xM94NkXqkh4gaLon0fQe3WVF6TQ380eGRpzSNSKYPx4eJdIkn5ZPyOxCBE1Ces= 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=NhDD+RPh; 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="NhDD+RPh" Received: by mail-yb1-f202.google.com with SMTP id 3f1490d57ef6-dc6dbdcfd39so983997276.2 for ; Wed, 13 Mar 2024 22:51:33 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1710395492; x=1711000292; darn=vger.kernel.org; h=to:from:subject:references:mime-version:message-id:in-reply-to:date :from:to:cc:subject:date:message-id:reply-to; bh=/C1Fptl7F9oJgqV/SnZtPnw4T5ATAHSmXZQvuFpHbZA=; b=NhDD+RPh3rHlVtWYFWIW0V7DrUHitrNiDOjKSPAFCokyfEYSIhypiv/y2pc6ziHFEt 1/+RdNLqHxBaP1Nci6FXFFJilzRcFOAq5aSYHKnnBFAnEFcGQqogkbsqqY5K7N3pVPJO D5ip0X+8U5jzBJ107DYGeZ0Y1mMW9DUvVjKpEmbCDNKm0F271c+C5KrSV/OBTv8OnBOz FkSWDb4Re3BfeK6q5jMU0bS4VhVbB79Ih6ShuFP1+BcsTdYfj4ihpF2XAMwfvBrQKUiQ UtsOTi3+s+AO0cpz1Nuy+qLL+vTmmh7Mirwa09hm/7vAhGactidj927m5FhvXONlmGcO kqNg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1710395492; x=1711000292; h=to:from:subject:references:mime-version:message-id:in-reply-to:date :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=/C1Fptl7F9oJgqV/SnZtPnw4T5ATAHSmXZQvuFpHbZA=; b=ie392BWuSmyxg7gLM0xrk9gvWGGTaITtvwkPjYJD2AGVR6OL6Ca6jTuKGFKLkEQp17 GG0Q5CHHa7do7ZhmYTPAhA6P2TAUjtaTo1ZFjWInre/4T/672eBivUl9JIKjc+mhkIQb 646taupkewMDFK1hYT2VS2dKEVWzOtBUvUWqdFZ73lJlmTX/POuDpjGk/CvNP86KcPYO pSC2CkUQHuoiW4ns3Ora3OazG0/5Qam4CNHILRBifeVpT/2C+Z855upSRAroLg9z/Fr7 SofX3IbnXI08RWi94APoX6Bq+SrsVaClhb5+u42sAdU4hN2KiTlyzJBL2LBoQ0ultiQL z+0g== X-Forwarded-Encrypted: i=1; AJvYcCXE9JM90TtZKVZPaJFMOJ1vyeM7vTbbaVeaWmcKNihLJ8rbd1/uAjHAihqcV5unlubXURhu7hsyjtcvQNvZlhCXPJYqk26IGxvWHIDC X-Gm-Message-State: AOJu0Yy7dMYAjSnWd+LQ2C8kxizYHUg0jwVF128TzmtzIhexlbpDgclu ED8FG/m5CXnsndyYRVZPxVB9CiyAICNNwoigFJFriRid5cUdu9ovMcfJeOuMWO0l2QZLxlDHwLg F3r7NjA== X-Google-Smtp-Source: AGHT+IHw6hjxV9hhspQnyQcHkhWwT+EcUhpj579SmRSVmnT7yCS95BNBfP3BMnwEWgPrdRais/+kEfahu9uL X-Received: from irogers.svl.corp.google.com ([2620:15c:2a3:200:449f:3bde:a4cd:806a]) (user=irogers job=sendgmr) by 2002:a05:6902:1895:b0:dcc:f01f:65e1 with SMTP id cj21-20020a056902189500b00dccf01f65e1mr255453ybb.8.1710395492472; Wed, 13 Mar 2024 22:51:32 -0700 (PDT) Date: Wed, 13 Mar 2024 22:50:46 -0700 In-Reply-To: <20240314055051.1960527-1-irogers@google.com> Message-Id: <20240314055051.1960527-8-irogers@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20240314055051.1960527-1-irogers@google.com> X-Mailer: git-send-email 2.44.0.278.ge034bb2e1d-goog Subject: [PATCH v3 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 , John Garry , Kan Liang , Jing Zhang , Thomas Richter , James Clark , linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org, Andi Kleen , Kajol Jain , Sandipan Das , Ravi Bangoria , Perry Taylor , Samantha Alt , Caleb Biggers , Weilin Wang , Edward Baker , Stephane Eranian 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.44.0.278.ge034bb2e1d-goog From nobody Sun Feb 8 08:43:01 2026 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 8E7B31758C for ; Thu, 14 Mar 2024 05:51:35 +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=1710395497; cv=none; b=XKjBYRtlMgd6LhQSIIPLQVecIsrCpkgkj1MIuKT1LlynhT9T7lPrqp+1aIyGzmUmaLt1LN1E1RjCKAmijvbCWfH194TvfDlyRN7l61Mq0phbrWOKxfR+dr2AnaVDc+ZD1oAy9q4c4EXnzBwU/FKc6WiGO9qG9XWNN5fj+djlXAE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1710395497; c=relaxed/simple; bh=KBRLOPIttIVmUTXmYYpZ5y5zAjJINB3dv9EpY8rLPGk=; h=Date:In-Reply-To:Message-Id:Mime-Version:References:Subject:From: To:Content-Type; b=DXE6u61TajIXJqrF8Vb4NsV2qu3o3iowtcTrrcXfuFr4OtUnPHL9wT/LtUJS1NvGe1cmipHhEUXTQK/lB0+A2TsCOTIsG/4COzKgQugSbPAMixaLhMt70HjMg1Wew6hz/o01/S5W/kfWHxfPXn8EWQeG78UrJaBGAsPf8PYi0L0= 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=iqyN+p1/; 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="iqyN+p1/" Received: by mail-yb1-f201.google.com with SMTP id 3f1490d57ef6-dc74ac7d015so648142276.0 for ; Wed, 13 Mar 2024 22:51:35 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1710395494; x=1711000294; darn=vger.kernel.org; h=to:from:subject:references:mime-version:message-id:in-reply-to:date :from:to:cc:subject:date:message-id:reply-to; bh=CEuSAf1lkMchEU55uC9f020RZIQvzTohuVPV0uKWKVI=; b=iqyN+p1/fsXvaY6NdOvI0iLy5MVYnJwaTEcSfjsceeKGFBBEq2YabDH9X8r6gKeCXz X8IRl7TBJwUaYRGW/SY5Scm0o59HQiFXdNm5GqY5dVk70d3VXeiFRurpUVow9GWa/apI RYuw1fonkvcbugukNyYPS/Ut04RQtKAngSJcHezlYRQlrCy6JGz4k8tF6oiFYVxfWDd+ +aoV+96Yrs76KwrfnrxDvDyKAkrSyNnl1xNxmea3grBmsCLsLKfu/17BZZ4Dp5740Zuz ARLtYEFKLJE4JH5wbYCDE5w6WYdVx1Xu2GXaY3ef4GIxEidefS7NQKqlsNS3iURGPCRm ku1w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1710395494; x=1711000294; h=to:from:subject:references:mime-version:message-id:in-reply-to:date :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=CEuSAf1lkMchEU55uC9f020RZIQvzTohuVPV0uKWKVI=; b=Nv2WyP0/26SgvbhoIFiII3HU3PulOLUzkpWWQV0c4gtWwAu0US52MKo2CI4oLUNC+u WxIU4q1aNqm7SmrqBfY0p+S2YYU14jQYEXZDWXwMcEF6I36amgmTqeX2bnpP+Hz7yky0 jr7sRJpJUrwCwdKfNoKhMv3z5ZW48aTd7LIxky+XacZqJjUqajx7CDtHIQc9BXoqd5kK gdo3XQtIXmeOz8ZtMb7Zpb0Vf2z6AsMCXXhAn8u1Q2ptE/OBwysRV5Kp0Y3OON2ehU7h dRQl6zlz2enbcD4CKJYjCToZyz/Jc7AVqO/6cSN+9ytrTZ0phKW52UXzBxfOy5u66bF+ 4tqA== X-Forwarded-Encrypted: i=1; AJvYcCXAS3P93bKzd9YOVYdwedTJ6XNoDKwl4L+Pzn6+XEVMyhv/izfWL/gT6Gnzrw77jgn3wcmt2jIN3NMMv/vAV5AcKmNYODZgJjlFO58O X-Gm-Message-State: AOJu0YyWkOi0cnWgolUdjLDCrRraIx2qNR2tWBnGG59VyyFfDp0fBBi8 NkZBmFBt1WovB/yfoJsIxGp3D8N8ozYubhSoG7uTNDGelQD3DYJhVSNhgtArw0qlQb35IScxK/J /nlAHzw== X-Google-Smtp-Source: AGHT+IG0CL5cqXQIbZ1eaywOmmX+tgnH+dpd1oudAB+T9cu4RUKk/wH22kkWUmezUlgBl5zJvsLXxla13pjm X-Received: from irogers.svl.corp.google.com ([2620:15c:2a3:200:449f:3bde:a4cd:806a]) (user=irogers job=sendgmr) by 2002:a05:6902:2503:b0:dcb:fb69:eadc with SMTP id dt3-20020a056902250300b00dcbfb69eadcmr20395ybb.6.1710395494388; Wed, 13 Mar 2024 22:51:34 -0700 (PDT) Date: Wed, 13 Mar 2024 22:50:47 -0700 In-Reply-To: <20240314055051.1960527-1-irogers@google.com> Message-Id: <20240314055051.1960527-9-irogers@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20240314055051.1960527-1-irogers@google.com> X-Mailer: git-send-email 2.44.0.278.ge034bb2e1d-goog Subject: [PATCH v3 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 , John Garry , Kan Liang , Jing Zhang , Thomas Richter , James Clark , linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org, Andi Kleen , Kajol Jain , Sandipan Das , Ravi Bangoria , Perry Taylor , Samantha Alt , Caleb Biggers , Weilin Wang , Edward Baker , Stephane Eranian Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Have dedicate 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.44.0.278.ge034bb2e1d-goog From nobody Sun Feb 8 08:43:01 2026 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 5E329E556 for ; Thu, 14 Mar 2024 05:51:37 +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=1710395498; cv=none; b=IVB9EJzwPtsP4QsY/zM8D1oFn95ajPecxbqZtmreA9XT1vpIxP8NnSOsInuEQW788DtJDKofSAlB2t7ZGMPC7i1seQSnY9KMxbNe42U8+ni5qspOxlN4q2ULiByuTvSSj0zTheiGBOYQ2cs28vt8IBsKGIeqnWVijmv5SmRAbmI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1710395498; c=relaxed/simple; bh=m3oJ0mXN32pvFxa3HNuzQht4jUNMZshZlST6PBRItUc=; h=Date:In-Reply-To:Message-Id:Mime-Version:References:Subject:From: To:Content-Type; b=RUlKhu4Qda+b8XOTNOZcslseAuROebqVMReR4uXp1Y8dV2WtvhTc0IyG+8o95vgUqc7VN5aRnsQdvIj9MjshkjoFsGf6CttwtcCkjrRlshMFP5cnXuYbDQWxsLIYUC338ivNr0RMMVgZ3Zfx9gx600y8gRtlFeRDlGRV8+bZy14= 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=wlMR0Pop; 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="wlMR0Pop" Received: by mail-yw1-f202.google.com with SMTP id 00721157ae682-60a4ee41269so12723887b3.0 for ; Wed, 13 Mar 2024 22:51:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1710395496; x=1711000296; darn=vger.kernel.org; h=to:from:subject:references:mime-version:message-id:in-reply-to:date :from:to:cc:subject:date:message-id:reply-to; bh=zYw1KIQafOm2w25j3LEBCqeBTh5wSLQ0jlgOzqEYYIQ=; b=wlMR0Pop1j8JYxBfzSXjMMvy+j7dluxnoLdwqXqpBrtWlEaYyszYe3EGcQ23DAgb6V ODBx6FIjIR1hYFnnkwECpl+eTu6ErVVXrA3chzOJjp/XJQkA8PhSRYnuOt7/V/Scw6nB J+vARhXe0CxMZkzWtHobBmMl9+7Z4aM6jXW22CUfbaBWbia5eKdUM3YVZJGIihV07nJG Y9I5rSt6wVacnABY+wKiHMIQUkioN82xePZnPxy9wEoU3u3QXb0qADfvhhWPIbVBi87J 0CMTmLGiFtAwJcRi3Wk8fFy+8dg0BY1di3wLkBJ80lWTF39VJRNS6E8Ezg/iM8KnwFpB hqsA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1710395496; x=1711000296; h=to:from:subject:references:mime-version:message-id:in-reply-to:date :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=zYw1KIQafOm2w25j3LEBCqeBTh5wSLQ0jlgOzqEYYIQ=; b=mk2urveRVx76V2hdk2aXyRqXPFugcKOGqOdmKKDi+Eq3W96pRjSzfDXChBaOHuuxDL qHQ6wCetue0YPcbS6eadb5rCSiUqknPIticg9G/hCB+Tt0DiMhsWMhIolPR4fVedCghz 2E6uZnkHh5j6kuL8Amq0e2WD9MZVF1H23jBBazLPdUEUhmxSwrn6xHjZD9iJ1LAPOMV7 6ujQutZauOvc6RAuxzRgD9/BZs4n5gTVpydA3J/0FZx4jFtUmjze5I9EEW51YfTacZuh 9p/wtxMSQCT9RW0SbRxQ3lxAXpcdlxsK6iNeDkLA3jtWFgJQUpQ/jj6lNlLSxx217pK+ WOvw== X-Forwarded-Encrypted: i=1; AJvYcCWQ/x8TLpfFjrOCtCAGYHfDVty85NemlMFpnnFwd5mZtexGu5nQ3PyGtqVzwhqjueX0aLews0Z0i/3bUu1lNK1Ylr0d9M6GjpBierj2 X-Gm-Message-State: AOJu0YyqoE1nUlK9iGhQ3mJTmKFs2vBjeVife7+EfCFoqctopWC7qAaq EEq0LhlhOGRk1DQRSd0Mp+dnZIk1n/lnqU4smyc6MyYZ7/wwG6axvyap+RvDCixQYjq4h54B4hI e5+cHvg== X-Google-Smtp-Source: AGHT+IHufyxlOBu5xph3k0/I1Hku98LKXxQohgESnL4gnpB414LdzU0/xLhN44SUjZnXQdXfOyq0giwBG1f7 X-Received: from irogers.svl.corp.google.com ([2620:15c:2a3:200:449f:3bde:a4cd:806a]) (user=irogers job=sendgmr) by 2002:a81:848c:0:b0:60a:e67:2ed0 with SMTP id u134-20020a81848c000000b0060a0e672ed0mr178750ywf.9.1710395496481; Wed, 13 Mar 2024 22:51:36 -0700 (PDT) Date: Wed, 13 Mar 2024 22:50:48 -0700 In-Reply-To: <20240314055051.1960527-1-irogers@google.com> Message-Id: <20240314055051.1960527-10-irogers@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20240314055051.1960527-1-irogers@google.com> X-Mailer: git-send-email 2.44.0.278.ge034bb2e1d-goog Subject: [PATCH v3 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 , John Garry , Kan Liang , Jing Zhang , Thomas Richter , James Clark , linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org, Andi Kleen , Kajol Jain , Sandipan Das , Ravi Bangoria , Perry Taylor , Samantha Alt , Caleb Biggers , Weilin Wang , Edward Baker , Stephane Eranian Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Drop adding a pending metric if there is an existing one. Signed-off-by: Ian Rogers --- tools/perf/pmu-events/jevents.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/perf/pmu-events/jevents.py b/tools/perf/pmu-events/jeven= ts.py index f68b0a60cdef..23f9809b3850 100755 --- a/tools/perf/pmu-events/jevents.py +++ b/tools/perf/pmu-events/jevents.py @@ -473,7 +473,7 @@ 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 for x = in _pending_metrics): _pending_metrics.append(e) =20 =20 --=20 2.44.0.278.ge034bb2e1d-goog From nobody Sun Feb 8 08:43:01 2026 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 D7CDB17C67 for ; Thu, 14 Mar 2024 05:51:39 +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=1710395501; cv=none; b=B1r2a8f0qJcze+YghzMSqW2yRKP/XGNMnA59dbyc7gOk2EuTkli0oCGzHQrgP7TKVS/DIh0LArjDkuHvx2nBfpG3V4BLB1v0P0IpqOxPcQglEDy0U1fFAiyTccg61LB2WMUxhdq8P2vhBVqTEMz8a6MwuQDftGtGZ4Cd3m+FNhQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1710395501; c=relaxed/simple; bh=gNv29+h0IhWRsa2qydUVk3E45fI6zH8amlK1YqhsJZ8=; h=Date:In-Reply-To:Message-Id:Mime-Version:References:Subject:From: To:Content-Type; b=btOTKEViTDkVuV1+fS+FqReYGGlSvBTCalrqqgVj3vBmWK1zoNgfHpu4JgMIC6XecDTX66oNU7K65GzdgxZXBmMYTA178rzzbx1Tx1G6uKOOALFHu7axfTB5m7AEtHN6DABWxWirXRvPtbcMICGrjrGMfGUgnpjS8IUSqTuMIko= 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=rYyViSrD; 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="rYyViSrD" Received: by mail-yb1-f202.google.com with SMTP id 3f1490d57ef6-dbf618042daso842733276.0 for ; Wed, 13 Mar 2024 22:51:39 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1710395499; x=1711000299; darn=vger.kernel.org; h=to:from:subject:references:mime-version:message-id:in-reply-to:date :from:to:cc:subject:date:message-id:reply-to; bh=gGG+6HzWesnJ1eAogyUwc6CZn4obQaKW0ElKvKW4EMk=; b=rYyViSrDpKKNMMGJ8bjP6bqb3Tbwe+tVJm2kn+qnbD49/uyfV53ltlm0UQFYRGsKTs bjLxNMyGNxf76f04v9vXg5nuM4hDNqiLAhiqf4w5vjZTXmWV8EZ244KqP/UutZsXWpw9 7AA6C63KMiiSFuh7LKOOq2j1Wz0Y0nPMECuuOXXO8kNyeDIW/2qhkVpOnSNwohOAppFS MX+cDPPwNseaJsPlolq2W1AVedORiPDJzxt7BrRmmlkWe9AwciN/CH3EdmcwmKpRcbZv eCTZuhiR8EPPjduJ4j8bsVh4ejxS7v1leNSAvUlv6cd0AMGREbKkI8y96u+cbeCMbs8s W3YQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1710395499; x=1711000299; h=to:from:subject:references:mime-version:message-id:in-reply-to:date :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=gGG+6HzWesnJ1eAogyUwc6CZn4obQaKW0ElKvKW4EMk=; b=MPh6dr3IXE962I4AJrMbFv+rmtLRcTaQXGX2pjXe0BBA71T54T2e6eyVyQLgib84FA V/EbXL6Abo1VeBzvUT1oHU74+laXfg8Bobxa4AwrNS9boUwr1nAvbvZ4dWMZwoGhngDy igbJRfAGF4PLxXeZKOmqdOidErWcp/57hqFKz3kf2C+eBP1P8NnAIwZOSGomgRKj+/Ds 7TEBRT/vGuflAHhC2qaO6wK4zh8qjHDGYsind2IHnDSgq8Hn4HfFnscde+EJtX1d0Hxn q/APEVszjLZudqF9CppNIRivzvKhNj1UrXBgi3XD2R0j1csX+xAFHpicQvbjRlkUR1YY eQZA== X-Forwarded-Encrypted: i=1; AJvYcCWxrdWmccAYJ5GEvtpzVas6KqtRZ8qTmzmIwde03mQ4P/lI+kd59ZlkDHrUtkGz6pzjZagsV66S/JKt15V0pG1QBoG0qjwdieT7/P63 X-Gm-Message-State: AOJu0YwXAlH+LKX1RCkhaFuD4/Wac18sEkO5ldN/j2kd3fks2vHsGZ3O zH6wIRss7fnbQkgXkJTj2uKhcUzPUr11tKvIRTafteWG8zrwDwmaoAK89zYTMZHjsq5//LbHNFS O8enUBA== X-Google-Smtp-Source: AGHT+IEja1wmZDBHKsl/XJi/skgaumi6X/bo/V6oGWcJkhbKkYCs0Yuuo9kxFl8375k/lLdaOYPUHsEYJmOt X-Received: from irogers.svl.corp.google.com ([2620:15c:2a3:200:449f:3bde:a4cd:806a]) (user=irogers job=sendgmr) by 2002:a05:6902:248c:b0:dcc:41ad:fb3b with SMTP id ds12-20020a056902248c00b00dcc41adfb3bmr34206ybb.10.1710395498856; Wed, 13 Mar 2024 22:51:38 -0700 (PDT) Date: Wed, 13 Mar 2024 22:50:49 -0700 In-Reply-To: <20240314055051.1960527-1-irogers@google.com> Message-Id: <20240314055051.1960527-11-irogers@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20240314055051.1960527-1-irogers@google.com> X-Mailer: git-send-email 2.44.0.278.ge034bb2e1d-goog Subject: [PATCH v3 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 , John Garry , Kan Liang , Jing Zhang , Thomas Richter , James Clark , linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org, Andi Kleen , Kajol Jain , Sandipan Das , Ravi Bangoria , Perry Taylor , Samantha Alt , Caleb Biggers , Weilin Wang , Edward Baker , Stephane Eranian 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.44.0.278.ge034bb2e1d-goog From nobody Sun Feb 8 08:43:01 2026 Received: from mail-yw1-f201.google.com (mail-yw1-f201.google.com [209.85.128.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 DF41917C96 for ; Thu, 14 Mar 2024 05:51:41 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1710395503; cv=none; b=nQ+giL51rimk6o+/nSNcse4tEjJ8Uo5T6zHT8r6iDO/YoNzNdexA8Zq69PDHb/KOEl/sW1WVKBSRDukSb5Snem/46NxHJcla2bY3Y/SSbk9sZdAiDE5NGizrIv1HoGqZL47IgPrxpYfEu5XzzzvuLU2gqz3woVydpF1DwYiSc2E= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1710395503; c=relaxed/simple; bh=/Cph8E3z3J/cdOk1NiaEQQjTF6m8QI5lIuIA5AhbRQQ=; h=Date:In-Reply-To:Message-Id:Mime-Version:References:Subject:From: To:Content-Type; b=LWKp9zLbUOqSTOdX8rnN4jeG4S2q91ToSbVnjyrSbcuoLkAWS9S4WTlxfr64e9FdLnA8D0eTMAFfZHS38mQmSFGXBhGmGxhSBLmjy17GvxE2rMLZ1HmpsVlT6+qUcZ1+OUxJJZKQq4h9Afsy7MOx0vsMEoXDyflJlHLi1omqhkE= 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=1vN7Aj8E; arc=none smtp.client-ip=209.85.128.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="1vN7Aj8E" Received: by mail-yw1-f201.google.com with SMTP id 00721157ae682-60a0815e3f9so10204327b3.2 for ; Wed, 13 Mar 2024 22:51:41 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1710395501; x=1711000301; darn=vger.kernel.org; h=to:from:subject:references:mime-version:message-id:in-reply-to:date :from:to:cc:subject:date:message-id:reply-to; bh=vAFc0IFKb4+x3EKZ+3bUKGnX340NAknB9DybGiGSjMk=; b=1vN7Aj8EI/3enjYZvAJZhtEFiYjcbkb7ctTazjSMcDupX162Vsd6FGSvTk6u0VwWat 8rxTet7ysll7nvrlNcjaV2mD3ph7qsaOtPkaEr9Ymj/4fae3fv49bLwR2+9hp1c1RfEO NQSGIkAe0ldDYwHYxhqRDJJMzWUxXOkX8E80ZD0hsC/y+wsoeX4qpZyvgqVUqDXkHdrp NXYXr1UWO7uSF5N1su8d24AjzNpIXfAj3bf+0Gmq9u8eN7f9TQm5tu+RdT/TQAWfSo+F 0MsrNkuYkPLNNTWes+z+MbSXaiHreryizCPeGFuzkyArJTxQSyFLyd0T91YkJw2mNIU1 WYTA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1710395501; x=1711000301; h=to:from:subject:references:mime-version:message-id:in-reply-to:date :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=vAFc0IFKb4+x3EKZ+3bUKGnX340NAknB9DybGiGSjMk=; b=olV/lbgcMmRbZwBhhW0jJu+rq/cj8QO4ODJAIwp0QYvTLS7qLOFkt80sA03ciK0Qu4 7O8fOg7j6L3UL3KmCd330isX7UHL22gfTIlZRoPj+G9Kr8JiZONGSMPzzVXlknoY//av R4AMeL2t0vEtteeok5AtP03Vd6PqBI2pk1nIJRjH5MqeIbeJrBNUokAOltPYxA02ST5r 2MK+nEGhp6LdoTDUeJ5raLK4QZ2yA0hDTXqZsYqpil1/FMvg9EtP424Go+v4Zym8JSNd YByiI38pR+0/PAUaYNNrbkg5M+pR4BcO2nqHUplaOY4yNXAt4DsX1oLzql2sDvlmrFE7 uLtw== X-Forwarded-Encrypted: i=1; AJvYcCW3cUElGoIcrpHcY+ogBaNpH7PaB2vL3gUynBI1704Z02IXIt2/Uwb1Y1ha3SyJfcNpcpm6KgbiJn/0ApABN+wQlRixWho1Giu25msb X-Gm-Message-State: AOJu0Yy7bGYa/nOYaqnbK48YUOTieUS+RPWy7gzgV/LA1ZGSOZJckHP4 ZhNLlRuqBa5Jl3xpXE2s9eTQt06h8xw+KAuTQveTYqyHg4E5sNyc6D+/TaaTyzHwnnHOgc6EsG6 Tlgypvw== X-Google-Smtp-Source: AGHT+IGIiBwDYY+8rdkzzfcp2/1WS7POaDVFLe8ewB8yZ03OVoV+sARl0McwBl7JE0u7SSGwhYVAN9BUGfcU X-Received: from irogers.svl.corp.google.com ([2620:15c:2a3:200:449f:3bde:a4cd:806a]) (user=irogers job=sendgmr) by 2002:a0d:ca57:0:b0:60a:253d:a54c with SMTP id m84-20020a0dca57000000b0060a253da54cmr152472ywd.3.1710395500973; Wed, 13 Mar 2024 22:51:40 -0700 (PDT) Date: Wed, 13 Mar 2024 22:50:50 -0700 In-Reply-To: <20240314055051.1960527-1-irogers@google.com> Message-Id: <20240314055051.1960527-12-irogers@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20240314055051.1960527-1-irogers@google.com> X-Mailer: git-send-email 2.44.0.278.ge034bb2e1d-goog Subject: [PATCH v3 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 , John Garry , Kan Liang , Jing Zhang , Thomas Richter , James Clark , linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org, Andi Kleen , Kajol Jain , Sandipan Das , Ravi Bangoria , Perry Taylor , Samantha Alt , Caleb Biggers , Weilin Wang , Edward Baker , Stephane Eranian 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 | 2 + tools/perf/Makefile.perf | 17 ++++++-- tools/perf/pmu-events/Build | 60 ++++++++++++++++++++++++-- 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, 187 insertions(+), 7 deletions(-) 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 f5b81d439387..c9a8da5bfc56 100644 --- a/tools/perf/.gitignore +++ b/tools/perf/.gitignore @@ -39,6 +39,8 @@ trace/beauty/generated/ pmu-events/pmu-events.c pmu-events/jevents pmu-events/metric_test.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 diff --git a/tools/perf/Makefile.perf b/tools/perf/Makefile.perf index f8774a9b1377..e8e70d02ee92 100644 --- a/tools/perf/Makefile.perf +++ b/tools/perf/Makefile.perf @@ -1169,7 +1169,20 @@ endif # CONFIG_PERF_BPF_SKEL bpf-skel-clean: $(call QUIET_CLEAN, bpf-skel) $(RM) -r $(SKEL_TMP_OUT) $(SKELETONS) =20 -clean:: $(LIBAPI)-clean $(LIBBPF)-clean $(LIBSUBCMD)-clean $(LIBSYMBOL)-cl= ean $(LIBPERF)-clean arm64-sysreg-defs-clean fixdep-clean python-clean bpf-= skel-clean tests-coresight-targets-clean +pmu-events-clean: +ifeq ($(OUTPUT),) + $(call QUIET_CLEAN, pmu-events) $(RM) \ + pmu-events/pmu-events.c \ + pmu-events/metric_test.log + $(Q)find pmu-events/arch -name 'extra-metrics.json' -delete -o \ + -name 'extra-metricgroups.json' -delete +else + $(call QUIET_CLEAN, pmu-events) $(RM) -r $(OUTPUT)pmu-events/arch \ + $(OUTPUT)pmu-events/pmu-events.c \ + $(OUTPUT)pmu-events/metric_test.log +endif + +clean:: $(LIBAPI)-clean $(LIBBPF)-clean $(LIBSUBCMD)-clean $(LIBSYMBOL)-cl= ean $(LIBPERF)-clean arm64-sysreg-defs-clean fixdep-clean python-clean bpf-= skel-clean tests-coresight-targets-clean pmu-events-clean $(call QUIET_CLEAN, core-objs) $(RM) $(LIBPERF_A) $(OUTPUT)perf-archive = $(OUTPUT)perf-iostat $(LANG_BINDINGS) $(Q)find $(or $(OUTPUT),.) -name '*.o' -delete -o -name '\.*.cmd' -delete= -o -name '\.*.d' -delete -o -name '*.shellcheck_log' -delete $(Q)$(RM) $(OUTPUT).config-detected @@ -1177,8 +1190,6 @@ clean:: $(LIBAPI)-clean $(LIBBPF)-clean $(LIBSUBCMD)-= clean $(LIBSYMBOL)-clean $( $(call QUIET_CLEAN, core-gen) $(RM) *.spec *.pyc *.pyo */*.pyc */*.pyo= $(OUTPUT)common-cmds.h TAGS tags cscope* $(OUTPUT)PERF-VERSION-FILE $(OUTP= UT)FEATURE-DUMP $(OUTPUT)util/*-bison* $(OUTPUT)util/*-flex* \ $(OUTPUT)util/intel-pt-decoder/inat-tables.c \ $(OUTPUT)tests/llvm-src-{base,kbuild,prologue,relocation}.c \ - $(OUTPUT)pmu-events/pmu-events.c \ - $(OUTPUT)pmu-events/metric_test.log \ $(OUTPUT)$(fadvise_advice_array) \ $(OUTPUT)$(fsconfig_arrays) \ $(OUTPUT)$(fsmount_arrays) \ diff --git a/tools/perf/pmu-events/Build b/tools/perf/pmu-events/Build index 1d18bb89402e..e2db33577707 100644 --- a/tools/perf/pmu-events/Build +++ b/tools/perf/pmu-events/Build @@ -1,7 +1,6 @@ pmu-events-y +=3D pmu-events.o JDIR =3D pmu-events/arch/$(SRCARCH) -JSON =3D $(shell [ -d $(JDIR) ] && \ - find $(JDIR) -name '*.json' -o -name 'mapfile.csv') +JSON =3D $(shell find pmu-events/arch -name *.json -o -name *.csv) JDIR_TEST =3D pmu-events/arch/test JSON_TEST =3D $(shell [ -d $(JDIR_TEST) ] && \ find $(JDIR_TEST) -name '*.json') @@ -27,13 +26,66 @@ $(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) + $(Q)$(call echo-cmd,gen)cp $< $@ + +# 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 + $(call rule_mkdir) + $(Q)$(call echo-cmd,gen)$(PYTHON) $< $(call model_name,$@) arch > $@ + +$(ZEN_METRICGROUPS): pmu-events/amd_metrics.py + $(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 + $(call rule_mkdir) + $(Q)$(call echo-cmd,gen)$(PYTHON) $< $(call vendor_name,$@) $(call model_= name,$@) arch > $@ + +$(ARM_METRICGROUPS): pmu-events/arm64_metrics.py + $(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 + $(call rule_mkdir) + $(Q)$(call echo-cmd,gen)$(PYTHON) $< $(call model_name,$@) arch > $@ + +$(INTEL_METRICGROUPS): pmu-events/intel_metrics.py + $(call rule_mkdir) + $(Q)$(call echo-cmd,gen)$(PYTHON) $< -metricgroups $(call model_name,$@) = arch > $@ + +GEN_JSON =3D $(patsubst %,$(OUTPUT)%,$(JSON)) \ + $(ZEN_METRICS) $(ZEN_METRICGROUPS) \ + $(ARM_METRICS) $(ARM_METRICGROUPS) \ + $(INTEL_METRICS) $(INTEL_METRICGROUPS) + $(METRIC_TEST_LOG): $(METRIC_TEST_PY) $(METRIC_PY) $(call rule_mkdir) $(Q)$(call echo-cmd,test)$(PYTHON) $< 2> $@ || (cat $@ && false) =20 -$(PMU_EVENTS_C): $(JSON) $(JSON_TEST) $(JEVENTS_PY) $(METRIC_PY) $(METRIC_= TEST_LOG) +$(PMU_EVENTS_C): $(GEN_JSON) $(JSON_TEST) $(JEVENTS_PY) $(METRIC_PY) $(MET= RIC_TEST_LOG) $(call rule_mkdir) - $(Q)$(call echo-cmd,gen)$(PYTHON) $(JEVENTS_PY) $(JEVENTS_ARCH) $(JEVENTS= _MODEL) pmu-events/arch $@ + $(Q)$(call echo-cmd,gen)$(PYTHON) $(JEVENTS_PY) $(JEVENTS_ARCH) $(JEVENTS= _MODEL) $(OUTPUT)pmu-events/arch $@ endif =20 # pmu-events.c file is generated in the OUTPUT directory so it needs a 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.44.0.278.ge034bb2e1d-goog From nobody Sun Feb 8 08:43:01 2026 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 0694718048 for ; Thu, 14 Mar 2024 05:51:43 +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=1710395506; cv=none; b=WPm35RfF7UdL2Bjgy/kg2JFThRcc+XqdwVTdBR18+IFElkvpyIPNkeNdPSGgtB3ATDXfwCLlWBwBe5QuwS1OLbVp+5cIpD8G+9E8qyHgZHl+jd0pqeWiywHXNhwOpUVYMmJKrzqLzaTX0lcrGg2DCJ5v73AaJMeGnYRK11QRYqQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1710395506; c=relaxed/simple; bh=keY5cFKHjwhdpBjFcXwkRzglZaSf4GRCA+DhQhy2gDc=; h=Date:In-Reply-To:Message-Id:Mime-Version:References:Subject:From: To:Content-Type; b=DY4KFRVrkUavNBm9m1Y2+X9ASt+rWj64P2EEeaiVW4Sv3mp95d7PUkJ1B2zvkzV4oVtnshwEMQ65jRmNV38QhTmnkPfyirNBv1qWemlu5ItYEa/ugFMJXA8yH5blemKVHZhzsEXk4oUFBUg5BTVviEIlg1JbE8224YauEoXxngI= 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=wg07HEdT; 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="wg07HEdT" Received: by mail-yw1-f202.google.com with SMTP id 00721157ae682-60a55cd262aso11678027b3.2 for ; Wed, 13 Mar 2024 22:51:43 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1710395503; x=1711000303; darn=vger.kernel.org; h=to:from:subject:references:mime-version:message-id:in-reply-to:date :from:to:cc:subject:date:message-id:reply-to; bh=AeUUhq+4yzhedbfApHNS9dE0zQ4nQa4+W19zr8OUhx8=; b=wg07HEdT2Pi+kWJEvpN+jaEhEAn0savfeM/QYRC0nu+XpPZTeJNyc/eL1KHqY57qs4 /eEO8lFzD7j1aYP7aJWjHHR0elgxR4Mt2NYJPbgxiCoR5AQ2+SU8WYpFWunIW0YQbBr8 5EaDD8v66zq3UUDmhnRkdJaPd9/qjuKMLoqRkQWoLAx732tAE+fdAYPq8Ty5We6M5aaW md0cfpHv4FefOkHIQbQBlboWjIjSBX5m/UZWmiCNaLV+aeILOyDIvcWbhLsfrVdf3cWk HmJxtaZXScMeA9TvHh97H6mLLk8IfdoCWkDIfpi1nCw/ZR65Q9wgwCy4elK8dqIAK9rI TZXA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1710395503; x=1711000303; h=to:from:subject:references:mime-version:message-id:in-reply-to:date :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=AeUUhq+4yzhedbfApHNS9dE0zQ4nQa4+W19zr8OUhx8=; b=KqJsfR1dEsNpssyaTVH5Mwk5AF7LS79FZt/9/nuaYtvwXuay3Vm2A0APwiZ3xQxEBX trQbmLAyUEauTcb+rnBH2yzT2qHBMq2QzYfOIka/7rvFnwo1xqD+kBKGcz/0IgUlQLY3 87dOVGT9N/5uGUaqkZvIPZemmsz928HD7z0XVnD9fErzxvYOWx8U3kfrchYiKKSsO7f0 i/6bMv8qMoEvrfEumkU9Sv++V+Rpi6pa7UQ/wWCKitXztO2G6Irdkoz+m/qISS+z4l8w Qp48ybndwcqhBKOfQfeVWTjY0GinkpXmiSF/7/pfhMP60vnxDc+ameuU6yvFHJ7pFjY5 nZMQ== X-Forwarded-Encrypted: i=1; AJvYcCUp6P15HE3aeuSt2N+1rQAO1oKqKlwNQ0K420tN55TYTW4fxYnOfhigEBviKVV84i8LJblj0T5bc4c5RPkgK6MlMBK05Jv+8bKbNFGj X-Gm-Message-State: AOJu0Yx9L3Cyf4vHZCA1j33A0T454qXwtywTsJ1tzvwViwNjIcHuj7rt VYtELNNUfeS51pfC0g9SOoDynNdSVW+VBTo+i9yPJq8rqnp9igTneRESs5lkIQsyhO2EjR8FH+0 7DzyeNw== X-Google-Smtp-Source: AGHT+IGgGXoZrHEt3XSsCy/U5vGRGVVLEUUvkSOKcTNML3mYGeJnGPm9KqZKNL0hx/SsABgOJ9tX+BLbIOiJ X-Received: from irogers.svl.corp.google.com ([2620:15c:2a3:200:449f:3bde:a4cd:806a]) (user=irogers job=sendgmr) by 2002:a05:6902:2181:b0:dc7:49a9:6666 with SMTP id dl1-20020a056902218100b00dc749a96666mr252533ybb.3.1710395503060; Wed, 13 Mar 2024 22:51:43 -0700 (PDT) Date: Wed, 13 Mar 2024 22:50:51 -0700 In-Reply-To: <20240314055051.1960527-1-irogers@google.com> Message-Id: <20240314055051.1960527-13-irogers@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20240314055051.1960527-1-irogers@google.com> X-Mailer: git-send-email 2.44.0.278.ge034bb2e1d-goog Subject: [PATCH v3 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 , John Garry , Kan Liang , Jing Zhang , Thomas Richter , James Clark , linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org, Andi Kleen , Kajol Jain , Sandipan Das , Ravi Bangoria , Perry Taylor , Samantha Alt , Caleb Biggers , Weilin Wang , Edward Baker , Stephane Eranian 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 | 77 +++++++++++++++++++++++++- 5 files changed, 95 insertions(+), 12 deletions(-) diff --git a/tools/perf/pmu-events/Build b/tools/perf/pmu-events/Build index e2db33577707..a2c5c04e5c46 100644 --- a/tools/perf/pmu-events/Build +++ b/tools/perf/pmu-events/Build @@ -42,11 +42,11 @@ ZEN_METRICGROUPS =3D $(foreach x,$(ZENS),$(OUTPUT)$(x)/= extra-metricgroups.json) =20 $(ZEN_METRICS): pmu-events/amd_metrics.py $(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 $(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/*) @@ -55,11 +55,11 @@ ARM_METRICGROUPS =3D $(foreach x,$(ARMS),$(OUTPUT)$(x)/= extra-metricgroups.json) =20 $(ARM_METRICS): pmu-events/arm64_metrics.py $(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 $(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) @@ -68,11 +68,11 @@ INTEL_METRICGROUPS =3D $(foreach x,$(INTELS),$(OUTPUT)$= (x)/extra-metricgroups.json =20 $(INTEL_METRICS): pmu-events/intel_metrics.py $(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 $(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)) \ $(ZEN_METRICS) $(ZEN_METRICGROUPS) \ 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..03312cd6d491 100644 --- a/tools/perf/pmu-events/metric.py +++ b/tools/perf/pmu-events/metric.py @@ -3,10 +3,50 @@ 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"): + 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"]) + + +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 +357,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 +387,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.44.0.278.ge034bb2e1d-goog