Received: by 2002:a05:6358:3188:b0:123:57c1:9b43 with SMTP id q8csp562628rwd; Wed, 14 Jun 2023 21:42:55 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ7ba/p2i5mbICnZwOFRH2+TiEiIj5wiwCLxtajciY9dEqGCJzmsHfb1PK0mIhWy8wX+U5w6 X-Received: by 2002:aa7:c513:0:b0:51a:2013:583 with SMTP id o19-20020aa7c513000000b0051a20130583mr1044768edq.13.1686804174914; Wed, 14 Jun 2023 21:42:54 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1686804174; cv=none; d=google.com; s=arc-20160816; b=NMOH+VivJrg2DuUlRMq7JEwkyLDhse4oqygfcjNl+vuPIHiaW6oh697j2iEQf7lbG+ Kj5xCfqIAxvdyRn4ewgU0OH4WP0vm/6m/0BHjU2OYvwtl2sgiqyd2JIm4Ruy/ZBrFIyG 8BP44zXjREOTYilTiEvy2h93RWSb5ep3AIr0aB9S/0Q62hkgy+4olMgh0OCT4rtb/OMx qjC9ufM8bAJCDUBbq+62Q9xh2YQkTa04BFjdMFk5uvJqB0sB26udK4b42YPt06yoNXvK 7fhCsqiZYCe927G4MvxtTEzhErtyVMmnbi+rZvvgCjyn5pE7Q6x9gB6z+HS3PrrW/VvG H65g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:cc:to:subject :message-id:date:from:in-reply-to:references:mime-version :dkim-signature; bh=NpMkYu68kVCSeADHU3WzS0gNWUL6UGuCaTOSPQaWnBY=; b=wZ+5pUrvgKSnxREQPHiaYUJduJnQ9YRYgC9XGB4s2/yZIyTQ6bSeLoO73y99CUl7FT Mess1peqXhB/X4pNGlKQT8RxqC52NH0KS4UGdXwAeT3AMXC4/NNcDNn8V9jGctE6wFVq tg4luYDVL0EEQQFEbZdHVgrMXQsEBgGYlJ0yJ4DjTfItW2binVOIauTxjn1XBuGi4PKS Hv/jB4ghvSQA6FPRWUnFa0eMc1jowlgg4sUY27wj8dM/4zIa6zEbsobbMA748R3demh6 ZuU9tKyMlVTxhB8IMi5ggp7/fo/KlY4IDW3aogLVZyhdG+zLxxFuRVgPMPngQ4bQwneZ P3HA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20221208 header.b=p36xzpFy; 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=REJECT sp=REJECT dis=NONE) header.from=google.com Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id w23-20020aa7dcd7000000b005187619f8e3si3266455edu.155.2023.06.14.21.42.28; Wed, 14 Jun 2023 21:42:54 -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; dkim=pass header.i=@google.com header.s=20221208 header.b=p36xzpFy; 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=REJECT sp=REJECT dis=NONE) header.from=google.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229529AbjFOEad (ORCPT + 99 others); Thu, 15 Jun 2023 00:30:33 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36522 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229944AbjFOEa3 (ORCPT ); Thu, 15 Jun 2023 00:30:29 -0400 Received: from mail-qt1-x833.google.com (mail-qt1-x833.google.com [IPv6:2607:f8b0:4864:20::833]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 0D2C3212C for ; Wed, 14 Jun 2023 21:30:28 -0700 (PDT) Received: by mail-qt1-x833.google.com with SMTP id d75a77b69052e-3f9b7de94e7so136661cf.0 for ; Wed, 14 Jun 2023 21:30:28 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20221208; t=1686803427; x=1689395427; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:from:to:cc:subject:date :message-id:reply-to; bh=NpMkYu68kVCSeADHU3WzS0gNWUL6UGuCaTOSPQaWnBY=; b=p36xzpFyQSMpMiJHPw0/Pdew2Stos4FU9DmAXYJwWjGHT56YbT2MCu7Ci8b/U23JpT jdUzXZRwLx8pEUu2QsgnomXr+MbIo1mSSCUatUTumirV2XyQzDxYpCqjucb3osckFpHD 0zPi4YLRfN3ydsujAYJ+G4ZJeqf3j167CQAF2G9AHI30kcwJPM9auqEaTRjk8zuMTAab efaScxq7ge81XrsuaZEnNrSX6+k5fqS2uZOHdAT4bJ7jdFy3OEwBMWmPP2a2hUa4xetY bssvB7NQY560fnbKA6DramQoxR1pQdGgEAsXdgqeB85m/Ru8fK47dQ2FoYUB05aBmSdq gTkA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1686803427; x=1689395427; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=NpMkYu68kVCSeADHU3WzS0gNWUL6UGuCaTOSPQaWnBY=; b=atCMaYGPrh8+DsTtQ/JSYZeh5OjjXCNGFKyQgNVr9M99HEDhdZNr27iKWfi9zG15GV Mx9LJh2PTJVc/FXBgzPymUJGtSKcm+r0CmLQxLTXvtizOG40qhxFTmzuFHBEaiRVerbj oV3OH3IYQqtUXJ4rJo7ElqcflXCuowemC/GGtu3bAGc7V+BDFXGzeSPkXXEnXmYCcKDv ouL8TBqGCYuv8jNwmLAkERE7yJ6YMdVRGflfAA5vFX+J7W09J+P/OFnrSlNRuGqQE+nh uOMZD3KWiPWnQFMW53dPEsl1/WkiKexxCO2XQQWpUYBCTBXyI7qYOwDygvZ/YcIJJz5m QhxA== X-Gm-Message-State: AC+VfDw6zumdItF61XQ6CzBXk6URPO3nNMutU8p2ge+8NfM0NsMbbYJr ovRZXpeVU8ks0/n7fdc3ZPtV+Q2H9RMUXVdKA16UHg== X-Received: by 2002:a05:622a:1447:b0:3f0:af20:1a37 with SMTP id v7-20020a05622a144700b003f0af201a37mr55182qtx.15.1686803427047; Wed, 14 Jun 2023 21:30:27 -0700 (PDT) MIME-Version: 1.0 References: <20230615001735.3643996-1-kan.liang@linux.intel.com> <20230615001735.3643996-5-kan.liang@linux.intel.com> In-Reply-To: <20230615001735.3643996-5-kan.liang@linux.intel.com> From: Ian Rogers Date: Wed, 14 Jun 2023 21:30:15 -0700 Message-ID: Subject: Re: [PATCH V2 4/8] perf metrics: Sort the Default metricgroup To: kan.liang@linux.intel.com Cc: acme@kernel.org, mingo@redhat.com, peterz@infradead.org, namhyung@kernel.org, jolsa@kernel.org, adrian.hunter@intel.com, linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org, ak@linux.intel.com, eranian@google.com, ahmad.yasin@intel.com Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Spam-Status: No, score=-17.6 required=5.0 tests=BAYES_00,DKIMWL_WL_MED, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF, ENV_AND_HDR_SPF_MATCH,RCVD_IN_DNSWL_NONE,SPF_HELO_NONE,SPF_PASS, T_SCC_BODY_TEXT_LINE,USER_IN_DEF_DKIM_WL,USER_IN_DEF_SPF_WL autolearn=unavailable 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 Wed, Jun 14, 2023 at 5:18=E2=80=AFPM wrote: > > From: Kan Liang > > The new default mode will print the metrics as a metric group. The > metrics from the same metric group must be adjacent to each other in the > metric list. But the metric_list_cmp() sorts metrics by the number of > events. > > Add a new sort for the Default metricgroup, which sorts by > default_metricgroup_name and metric_name. > > Add is_default in the struct metric_event to indicate that it's from > the Default metricgroup. > > Store the displayed metricgroup name of the Default metricgroup into > the metric expr for output. > > Signed-off-by: Kan Liang > --- > tools/perf/util/metricgroup.c | 35 +++++++++++++++++++++++++++++++++++ > tools/perf/util/metricgroup.h | 3 +++ > 2 files changed, 38 insertions(+) > > diff --git a/tools/perf/util/metricgroup.c b/tools/perf/util/metricgroup.= c > index 8b19644ade7d..acf86b15ee49 100644 > --- a/tools/perf/util/metricgroup.c > +++ b/tools/perf/util/metricgroup.c > @@ -79,6 +79,7 @@ static struct rb_node *metric_event_new(struct rblist *= rblist __maybe_unused, > return NULL; > memcpy(me, entry, sizeof(struct metric_event)); > me->evsel =3D ((struct metric_event *)entry)->evsel; > + me->is_default =3D false; > INIT_LIST_HEAD(&me->head); > return &me->nd; > } > @@ -1160,6 +1161,25 @@ static int metric_list_cmp(void *priv __maybe_unus= ed, const struct list_head *l, > return right_count - left_count; > } > > +/** > + * default_metricgroup_cmp - Implements complex key for the Default metr= icgroup > + * that first sorts by default_metricgroup_name= , then > + * metric_name. > + */ > +static int default_metricgroup_cmp(void *priv __maybe_unused, > + const struct list_head *l, > + const struct list_head *r) > +{ > + const struct metric *left =3D container_of(l, struct metric, nd); > + const struct metric *right =3D container_of(r, struct metric, nd)= ; > + int diff =3D strcmp(right->default_metricgroup_name, left->defaul= t_metricgroup_name); > + > + if (diff) > + return diff; > + > + return strcmp(right->metric_name, left->metric_name); > +} > + > struct metricgroup__add_metric_data { > struct list_head *list; > const char *pmu; > @@ -1515,6 +1535,7 @@ static int parse_groups(struct evlist *perf_evlist, > LIST_HEAD(metric_list); > struct metric *m; > bool tool_events[PERF_TOOL_MAX] =3D {false}; > + bool is_default =3D !strcmp(str, "Default"); > int ret; > > if (metric_events_list->nr_entries =3D=3D 0) > @@ -1549,6 +1570,9 @@ static int parse_groups(struct evlist *perf_evlist, > goto out; > } > > + if (is_default) > + list_sort(NULL, &metric_list, default_metricgroup_cmp); > + > list_for_each_entry(m, &metric_list, nd) { > struct metric_event *me; > struct evsel **metric_events; > @@ -1637,6 +1661,17 @@ static int parse_groups(struct evlist *perf_evlist= , > expr->metric_unit =3D m->metric_unit; > expr->metric_events =3D metric_events; > expr->runtime =3D m->pctx->sctx.runtime; > + if (m->pmu && strcmp(m->pmu, "cpu")) { > + char *name; > + > + if (asprintf(&name, "%s (%s)", m->default_metricg= roup_name, m->pmu) < 0) With EXTRA_CFLAGS=3D"-fsanitize=3Daddress" this is causing: $ perf test 7 -vv -F 7: PMU events : ... 7.5: Parsing of metric thresholds with fake PMUs : ... =3D=3D2072355=3D=3DERROR: LeakSanitizer: detected memory leaks Direct leak of 6199 byte(s) in 340 object(s) allocated from: #0 0x7f24cce7077b in __interceptor_strdup ../../../../src/libsanitizer/asan/asan_interceptors.cp p:439 #1 0x55972b328abd in asprintf util/util.c:566 #2 0x55972b251dbd in parse_groups util/metricgroup.c:1667 #3 0x55972b25231f in metricgroup__parse_groups_test util/metricgroup.c:1= 719 #4 0x55972b139aff in test__parsing_callback tests/pmu-events.c:837 #5 0x55972b5119a9 in pmu_metrics_table_for_each_metric /tmp/perf/pmu-events/pmu-events.c:61641 #6 0x55972b511fdf in pmu_for_each_core_metric /tmp/perf/pmu-events/pmu-events.c:61742 #7 0x55972b13a3bc in test__parsing tests/pmu-events.c:898 #8 0x55972b106cd7 in run_test tests/builtin-test.c:236 #9 0x55972b106f7c in test_and_print tests/builtin-test.c:265 #10 0x55972b107f96 in __cmd_test tests/builtin-test.c:436 #11 0x55972b10927a in cmd_test tests/builtin-test.c:559 #12 0x55972b19584a in run_builtin /home/irogers/kernel.org/tools/perf/perf.c:323 #13 0x55972b195dbb in handle_internal_command /home/irogers/kernel.org/tools/perf/perf.c:377 #14 0x55972b196183 in run_argv /home/irogers/kernel.org/tools/perf/perf.= c:421 #15 0x55972b1966eb in main /home/irogers/kernel.org/tools/perf/perf.c:53= 7 #16 0x7f24cbe46189 in __libc_start_call_main ../sysdeps/nptl/libc_start_call_main.h:58 SUMMARY: AddressSanitizer: 6199 byte(s) leaked in 340 allocation(s) As this is mixing allocated and unallocated strings, you like want to strdup the unallocated ones, then add a free to the exit routine. Thanks, Ian > + expr->default_metricgroup_name =3D m->def= ault_metricgroup_name; > + else > + expr->default_metricgroup_name =3D name; > + } else > + expr->default_metricgroup_name =3D m->default_met= ricgroup_name; > + if (is_default) > + me->is_default =3D true; > list_add(&expr->nd, &me->head); > } > > diff --git a/tools/perf/util/metricgroup.h b/tools/perf/util/metricgroup.= h > index bf18274c15df..d5325c6ec8e1 100644 > --- a/tools/perf/util/metricgroup.h > +++ b/tools/perf/util/metricgroup.h > @@ -22,6 +22,7 @@ struct cgroup; > struct metric_event { > struct rb_node nd; > struct evsel *evsel; > + bool is_default; /* the metric evsel from the Default metricgroup= */ > struct list_head head; /* list of metric_expr */ > }; > > @@ -55,6 +56,8 @@ struct metric_expr { > * more human intelligible) and then add "MiB" afterward when dis= played. > */ > const char *metric_unit; > + /** Displayed metricgroup name of the Default metricgroup */ > + const char *default_metricgroup_name; > /** Null terminated array of events used by the metric. */ > struct evsel **metric_events; > /** Null terminated array of referenced metrics. */ > -- > 2.35.1 >