Received: by 2002:a05:6358:d09b:b0:dc:cd0c:909e with SMTP id jc27csp5264451rwb; Mon, 14 Nov 2022 01:44:29 -0800 (PST) X-Google-Smtp-Source: AA0mqf5XCF0tUp0TP700c5qvp0NyAsIeSOQ/7J6itZvpJySeEt5DEwXmy94xMwWNqRBXQkpj3HsQ X-Received: by 2002:a17:907:2957:b0:7ae:1826:b27b with SMTP id et23-20020a170907295700b007ae1826b27bmr8968123ejc.692.1668419068849; Mon, 14 Nov 2022 01:44:28 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1668419068; cv=none; d=google.com; s=arc-20160816; b=M6XHGkJ687R2eyetHQwfK6fwDjqrdUxULNgYsK1VylZmRlgTXuaLZdMKAaamXGL36y fGZDPYt/kf+jw2WrQPiOtncHnIniNqJxCkHE5/XNqK/h3KHeusejVbyaBJ21kzbZRLFA s8ZJCj50Nu4K8Vj+MEnfX6n7JLw2HDkvUR79gn+e3bZwuT+ge3LYz0GH/95nC/d3q12X EYgWOt7E4ThqdaFjphjNZLt/yTRPDH0kXUMI7w9mhZ9l7nWqsv+zUuSpRTrGfrqH94mf pEKhVaaIxMODxw8tFmLIZxYgDUD5pzrUAVI0V0ta0kAUb+SydXbHGIREGGpQfEp4WNcP YgYg== 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:dkim-signature; bh=D6jk7g0JYp1AlBFcRbeNJYSmxZyrdfKxhsoCUj9ufeY=; b=f374/37tJuwpfhHwk81gwD5m/WrfFPr+k5RwY3oD1pCr7al1k0txmqwelgZZO9H6hB wgeBizf7qNPri6/qUsZn4rNrhlsKz374+HtbefZuc2EhQRP92dSiYebweyBBA/hKFdAd aecuN2W8ihfGlSlTNFgyEQA3AUbIApU9LluZsbTsLs/gvBi0l08lEuu7QORd/Sa4Vcrx vy7Fw7Ij1lfJJNXr54deGddN5M4/UkCw1m8uAJBU/6Lim0wLUmco3rt1+5kWZCll6C2F cKxLkplzLY9+Y0itHKPoFMfU6bNi8s8hLDvOZu+u/K+rjmr9k1ACQ57Kq81tlLZMBdiC sI5w== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=PSsQGYoK; 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=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id dz19-20020a0564021d5300b00458ab54baa5si8689674edb.503.2022.11.14.01.44.07; Mon, 14 Nov 2022 01:44:28 -0800 (PST) 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; dkim=pass header.i=@intel.com header.s=Intel header.b=PSsQGYoK; 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=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S236135AbiKNIvb (ORCPT + 88 others); Mon, 14 Nov 2022 03:51:31 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:35632 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233166AbiKNIv3 (ORCPT ); Mon, 14 Nov 2022 03:51:29 -0500 Received: from mga06.intel.com (mga06b.intel.com [134.134.136.31]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id AA36719C35; Mon, 14 Nov 2022 00:51:28 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1668415888; x=1699951888; h=message-id:date:mime-version:subject:to:cc:references: from:in-reply-to:content-transfer-encoding; bh=xFTYNBP+TcEy3dDL/kF6xEoY/vWH2jxHcttCdo+RdSg=; b=PSsQGYoKxMTwLQfmrxDc9OYL8M63IHfwHURc6kCiM6k4MxS9Qw+/jXjh 96tc1zL4hYMJoyzDNKldQZCg1ZEZ/W96Me0YKlPiuWqlO4BPXrVDglSH1 C48mqQXzBlFRSF7XACKsMJmA12tx8Gs5DnLa2F/eorFExn+3etFbOZ26K DmUGu0uqwqrsrKeTILPKfSyugEZDcw6yNO5oPv9TzmuIFxhrzsAaDpG8c 4Yar/q7VKq+EQTqsPSDcB2I1qissYE15QVVjXUC7KdopgTn82yU4fhaCD myGAqmXw2scTqwCgKcJb3dETxPNrDzEtTBNZQRnK1p2nnGONDJjVT/CiO w==; X-IronPort-AV: E=McAfee;i="6500,9779,10530"; a="374046209" X-IronPort-AV: E=Sophos;i="5.96,161,1665471600"; d="scan'208";a="374046209" Received: from orsmga008.jf.intel.com ([10.7.209.65]) by orsmga104.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 14 Nov 2022 00:51:28 -0800 X-IronPort-AV: E=McAfee;i="6500,9779,10530"; a="669562754" X-IronPort-AV: E=Sophos;i="5.96,161,1665471600"; d="scan'208";a="669562754" Received: from xingzhen-mobl.ccr.corp.intel.com (HELO [10.254.211.184]) ([10.254.211.184]) by orsmga008-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 14 Nov 2022 00:51:22 -0800 Message-ID: <63b7b6d5-f441-7ebc-fd3f-9d5f36d2938d@linux.intel.com> Date: Mon, 14 Nov 2022 16:51:20 +0800 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Thunderbird/102.4.2 Subject: Re: [PATCH v1 4/9] perf list: Generalize limiting to a PMU name Content-Language: en-US To: Ian Rogers , Weilin Wang , Perry Taylor , Caleb Biggers , Leo Yan , Adrian Hunter , Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Mark Rutland , Alexander Shishkin , Jiri Olsa , Namhyung Kim , Sandipan Das , Kajol Jain , Kan Liang , Ravi Bangoria , Xin Gao , Rob Herring , linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org Cc: Stephane Eranian References: <20221114075127.2650315-1-irogers@google.com> <20221114075127.2650315-5-irogers@google.com> From: Xing Zhengjun In-Reply-To: <20221114075127.2650315-5-irogers@google.com> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit X-Spam-Status: No, score=-4.3 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_EF,NICE_REPLY_A,RCVD_IN_DNSWL_MED, SPF_HELO_NONE,SPF_NONE 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 11/14/2022 3:51 PM, Ian Rogers wrote: > Deprecate the --cputype option and add a --unit option where '--unit > cpu_atom' behaves like '--cputype atom'. The --unit option can be used > with arbitrary PMUs, for example: > > ``` > $ perf list --unit msr pmu > > List of pre-defined events (to be used in -e or -M): > > msr/aperf/ [Kernel PMU event] > msr/cpu_thermal_margin/ [Kernel PMU event] > msr/mperf/ [Kernel PMU event] > msr/pperf/ [Kernel PMU event] > msr/smi/ [Kernel PMU event] > msr/tsc/ [Kernel PMU event] > ``` > > Signed-off-by: Ian Rogers > --- > tools/perf/Documentation/perf-list.txt | 6 +++--- > tools/perf/builtin-list.c | 18 ++++++++++++------ > tools/perf/util/metricgroup.c | 3 ++- > tools/perf/util/pmu.c | 4 +--- > 4 files changed, 18 insertions(+), 13 deletions(-) > > diff --git a/tools/perf/Documentation/perf-list.txt b/tools/perf/Documentation/perf-list.txt > index 57384a97c04f..44a819af573d 100644 > --- a/tools/perf/Documentation/perf-list.txt > +++ b/tools/perf/Documentation/perf-list.txt > @@ -39,9 +39,9 @@ any extra expressions computed by perf stat. > --deprecated:: > Print deprecated events. By default the deprecated events are hidden. > > ---cputype:: > -Print events applying cpu with this type for hybrid platform > -(e.g. --cputype core or --cputype atom) > +--unit:: > +Print PMU events and metrics limited to the specific PMU name. > +(e.g. --unit cpu, --unit msr, --unit cpu_core, --unit cpu_atom) > > [[EVENT_MODIFIERS]] > EVENT MODIFIERS > diff --git a/tools/perf/builtin-list.c b/tools/perf/builtin-list.c > index 58e1ec1654ef..cc84ced6da26 100644 > --- a/tools/perf/builtin-list.c > +++ b/tools/perf/builtin-list.c > @@ -21,7 +21,6 @@ > > static bool desc_flag = true; > static bool details_flag; > -static const char *hybrid_type; > > int cmd_list(int argc, const char **argv) > { > @@ -30,6 +29,8 @@ int cmd_list(int argc, const char **argv) > bool long_desc_flag = false; > bool deprecated = false; > char *pmu_name = NULL; > + const char *hybrid_name = NULL; > + const char *unit_name = NULL; > struct option list_options[] = { > OPT_BOOLEAN(0, "raw-dump", &raw_dump, "Dump raw events"), > OPT_BOOLEAN('d', "desc", &desc_flag, > @@ -40,9 +41,10 @@ int cmd_list(int argc, const char **argv) > "Print information on the perf event names and expressions used internally by events."), > OPT_BOOLEAN(0, "deprecated", &deprecated, > "Print deprecated events."), > - OPT_STRING(0, "cputype", &hybrid_type, "hybrid cpu type", > - "Print events applying cpu with this type for hybrid platform " > - "(e.g. core or atom)"), > + OPT_STRING(0, "cputype", &hybrid_name, "hybrid cpu type", > + "Limit PMU or metric printing to the given hybrid PMU (e.g. core or atom)."), > + OPT_STRING(0, "unit", &unit_name, "PMU name", > + "Limit PMU or metric printing to the specified PMU."), > OPT_INCR(0, "debug", &verbose, > "Enable debugging output"), > OPT_END() > @@ -53,6 +55,8 @@ int cmd_list(int argc, const char **argv) > }; > > set_option_flag(list_options, 0, "raw-dump", PARSE_OPT_HIDDEN); > + /* Hide hybrid flag for the more generic 'unit' flag. */ > + set_option_flag(list_options, 0, "cputype", PARSE_OPT_HIDDEN); > > argc = parse_options(argc, argv, list_options, list_usage, > PARSE_OPT_STOP_AT_NON_OPTION); > @@ -62,8 +66,10 @@ int cmd_list(int argc, const char **argv) > if (!raw_dump && pager_in_use()) > printf("\nList of pre-defined events (to be used in -e or -M):\n\n"); > > - if (hybrid_type) { > - pmu_name = perf_pmu__hybrid_type_to_pmu(hybrid_type); > + if (unit_name) > + pmu_name = strdup(unit_name); > + else if (hybrid_name) { > + pmu_name = perf_pmu__hybrid_type_to_pmu(hybrid_name); > if (!pmu_name) > pr_warning("WARNING: hybrid cputype is not supported!\n"); > } > diff --git a/tools/perf/util/metricgroup.c b/tools/perf/util/metricgroup.c > index 4c98ac29ee13..1943fed9b6d9 100644 > --- a/tools/perf/util/metricgroup.c > +++ b/tools/perf/util/metricgroup.c > @@ -556,11 +556,12 @@ static int metricgroup__print_callback(const struct pmu_event *pe, > void *vdata) > { > struct metricgroup_print_data *data = vdata; > + const char *pmu = pe->pmu ?: "cpu"; > > if (!pe->metric_expr) > return 0; > > - if (data->pmu_name && perf_pmu__is_hybrid(pe->pmu) && strcmp(data->pmu_name, pe->pmu)) > + if (data->pmu_name && strcmp(data->pmu_name, pmu)) > return 0; > > return metricgroup__print_pmu_event(pe, data->metricgroups, data->filter, > diff --git a/tools/perf/util/pmu.c b/tools/perf/util/pmu.c > index a8f9f47c6ed9..9c771f136b81 100644 > --- a/tools/perf/util/pmu.c > +++ b/tools/perf/util/pmu.c > @@ -1694,10 +1694,8 @@ void print_pmu_events(const char *event_glob, bool name_only, bool quiet_flag, > pmu = NULL; > j = 0; > while ((pmu = perf_pmu__scan(pmu)) != NULL) { > - if (pmu_name && perf_pmu__is_hybrid(pmu->name) && > - strcmp(pmu_name, pmu->name)) { > + if (pmu_name && pmu->name && strcmp(pmu_name, pmu->name)) Why remove perf_pmu__is_hybrid check? > continue; > - } > > list_for_each_entry(alias, &pmu->aliases, list) { > char *name = alias->desc ? alias->name : -- Zhengjun Xing