Received: by 2002:a05:7412:1492:b0:e2:908c:2ebd with SMTP id s18csp665348rdh; Wed, 23 Aug 2023 11:02:48 -0700 (PDT) X-Google-Smtp-Source: AGHT+IGM20xtbN3WaFxet+0+tgP2dgsdhtf5/HviGuWvyPehEwJZx/H1vgpMlrjMNRXBOiov2N9W X-Received: by 2002:a05:6870:8a09:b0:1be:f23f:99b with SMTP id p9-20020a0568708a0900b001bef23f099bmr15107005oaq.42.1692813768329; Wed, 23 Aug 2023 11:02:48 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1692813768; cv=none; d=google.com; s=arc-20160816; b=ah3ulTlWt/bIFiqi3Q4mCDWys+UCv7MTJRviRzEISkPBbPpVNbc+wzFxwjqPAQSCJ7 STUw46a4Gdd/Kw7q3RWcmHTWSb/0hy3NEoa9tZWDF3DjXoO3L0RPw6zqcFVwEvt/RBlv hXb/TIlVIOrGLEjcZDAp3VfRXiB4K0CEEYdche/82bZVckbFGEg9I2kaafbDu3pCokjL regkOI7d0PY/bepnJhHX4vFBAL5DNvYyxJoMj+USCO8x/qaetDOpce4uFIppNVHm68m1 lTwhHI0Z5TK1Jd+CikIKP5rqFhhfW/AVOAN14epJB2UD3q1/fLqZfC+YWzeTAT2CL0hp rJqQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:in-reply-to:from :references:cc:to:content-language:subject:user-agent:mime-version :date:message-id; bh=Df5mmmLtXZf6WlQwFjrOZQ9SqPC005zfHtvsnmykjXQ=; fh=BTTzuchlfvfrSLqFTklgPA2fS6EXR5KnFerVGNT6MWg=; b=MTw0sQYYOJaU0J/Ry1EIm9iNRhHMXmHEfH2xtyJ17lzUqDaMBNzw1vG46g30ZCEMNj 5lpZZUbhWCr95J39mSwHUVRTxQ0nCv7S/yk6ou/n8qXSmpr66EGI77uEEYaxeMrOe0s2 X1NjM9fbBH2sBeGddlEyv6tGzpWAmm6I+qVyskFj8CgBaVTdpfawse3fj1Oq36pfSb/V A2NhjhHoAwQHq/1WZnqquLrKsJthKFBqH9OZC84LFbSvSbhUW+N7tQx8Q/9GzmPwouYW m1JqL+xxd2c2TbcgKLOEiUfso/triYGHPzfxy+s5UWLhpXRBU85DMpu8hy5aZFmYN12S X7ZQ== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=arm.com Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id q59-20020a17090a754100b00263d0beafafsi156420pjk.181.2023.08.23.11.02.35; Wed, 23 Aug 2023 11:02:48 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=arm.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S234195AbjHWJ3f (ORCPT + 99 others); Wed, 23 Aug 2023 05:29:35 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:55862 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S235292AbjHWJ0L (ORCPT ); Wed, 23 Aug 2023 05:26:11 -0400 Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id D681E5FCD; Wed, 23 Aug 2023 02:12:51 -0700 (PDT) Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 30EAE1042; Wed, 23 Aug 2023 02:13:31 -0700 (PDT) Received: from [10.57.3.6] (unknown [10.57.3.6]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 6E6FD3F740; Wed, 23 Aug 2023 02:12:46 -0700 (PDT) Message-ID: <166d2a93-0d86-b106-e996-d74fb4521aa2@arm.com> Date: Wed, 23 Aug 2023 10:12:40 +0100 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Windows NT 10.0; rv:102.0) Gecko/20100101 Thunderbird/102.14.0 Subject: Re: [PATCH v7 4/8] perf jevents: Support more event fields Content-Language: en-GB To: Jing Zhang , John Garry , Ian Rogers Cc: Will Deacon , James Clark , Arnaldo Carvalho de Melo , Mark Rutland , Mike Leach , Leo Yan , Namhyung Kim , Peter Zijlstra , Ingo Molnar , Alexander Shishkin , Jiri Olsa , Adrian Hunter , linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-perf-users@vger.kernel.org, linux-doc@vger.kernel.org, Zhuo Song , Shuai Xue References: <1692606977-92009-1-git-send-email-renyu.zj@linux.alibaba.com> <1692606977-92009-5-git-send-email-renyu.zj@linux.alibaba.com> From: Robin Murphy In-Reply-To: <1692606977-92009-5-git-send-email-renyu.zj@linux.alibaba.com> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit X-Spam-Status: No, score=-4.6 required=5.0 tests=BAYES_00,NICE_REPLY_A, RCVD_IN_DNSWL_BLOCKED,SPF_HELO_NONE,SPF_NONE,URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 2023-08-21 09:36, Jing Zhang wrote: > The previous code assumes an event has either an "event=" or "config" > field at the beginning. For CMN neither of these may be present, as an > event is typically "type=xx,eventid=xxx". > > If EventCode and ConfigCode is not added in the alias JSON file, the > event description will add "event=0" by default. So, even if the event > field is added "eventid=xxx" and "type=xxx", the CMN events final > parsing result will be "event=0, eventid=xxx, type=xxx". > > Therefore, when EventCode and ConfigCode are missing in JSON, "event=0" > is no longer added by default. And add EventIdCode and Type to the event > field. > > I compared pmu_event.c before and after compiling with JEVENT_ARCH=all, > they are consistent. > > Signed-off-by: Jing Zhang > --- > tools/perf/pmu-events/jevents.py | 20 ++++++++++++++++---- > 1 file changed, 16 insertions(+), 4 deletions(-) > > diff --git a/tools/perf/pmu-events/jevents.py b/tools/perf/pmu-events/jevents.py > index f57a8f2..369c8bf 100755 > --- a/tools/perf/pmu-events/jevents.py > +++ b/tools/perf/pmu-events/jevents.py > @@ -275,11 +275,14 @@ class JsonEvent: > } > return table[unit] if unit in table else f'uncore_{unit.lower()}' > > - eventcode = 0 > + eventcode = None > if 'EventCode' in jd: > eventcode = int(jd['EventCode'].split(',', 1)[0], 0) > if 'ExtSel' in jd: > - eventcode |= int(jd['ExtSel']) << 8 > + if eventcode is None: > + eventcode = int(jd['ExtSel']) << 8 > + else: > + eventcode |= int(jd['ExtSel']) << 8 > configcode = int(jd['ConfigCode'], 0) if 'ConfigCode' in jd else None > self.name = jd['EventName'].lower() if 'EventName' in jd else None > self.topic = '' > @@ -317,7 +320,11 @@ class JsonEvent: > if precise and self.desc and '(Precise Event)' not in self.desc: > extra_desc += ' (Must be precise)' if precise == '2' else (' (Precise ' > 'event)') > - event = f'config={llx(configcode)}' if configcode is not None else f'event={llx(eventcode)}' > + event = None > + if eventcode is not None: > + event = f'event={llx(eventcode)}' > + elif configcode is not None: > + event = f'config={llx(configcode)}' > event_fields = [ > ('AnyThread', 'any='), > ('PortMask', 'ch_mask='), > @@ -327,10 +334,15 @@ class JsonEvent: > ('Invert', 'inv='), > ('SampleAfterValue', 'period='), > ('UMask', 'umask='), > + ('NodeType', 'type='), > + ('EventIdCode', 'eventid='), FWIW, this smells like another brewing scalability problem, given that these are entirely driver-specific. Not sure off-hand how feasible it might be, but my instinct says that a neat solution would be to encode them right in the JSON, e.g.: "FormatAttr": { "type": 0x5 } such that jevents should then only really need to consider whether an event is defined in terms of a raw "ConfigCode", one or more "FormatAttr"s which it can then parse dynamically, or reasonable special cases like "EventCode" (given how "event" is one of the most commonly used formats). Thanks, Robin. > ] > for key, value in event_fields: > if key in jd and jd[key] != '0': > - event += ',' + value + jd[key] > + if event: > + event += ',' + value + jd[key] > + else: > + event = value + jd[key] > if filter: > event += f',{filter}' > if msr: