From patchwork Wed Mar 8 22:59:02 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ian Rogers X-Patchwork-Id: 66506 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a5d:5915:0:0:0:0:0 with SMTP id v21csp635106wrd; Wed, 8 Mar 2023 15:26:02 -0800 (PST) X-Google-Smtp-Source: AK7set+4KOhGwzt+vrpGMrqK5VLV9E37vYJGBO+pUggW0Iv8bxR/VrUwO2vqWZ8leZkjVudGg65L X-Received: by 2002:a17:902:ea11:b0:194:cc66:66f7 with SMTP id s17-20020a170902ea1100b00194cc6666f7mr24364167plg.19.1678317961929; Wed, 08 Mar 2023 15:26:01 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1678317961; cv=none; d=google.com; s=arc-20160816; b=pRNiRT0SEBpISSFKn+Av/MwdnKVrjQT+ikN1IUy39NgNC0kMsRzdxI4dAwj6/t59G0 hcldradSPHPELLIuDCYU4D0C0+gObUJBQHExaKDIPDBLlQg9UZ8diTuRWZT5UX5yZA9S ZAksrrm2EWgeUtH7YTtwMqA1fN1x5U1fAoM/BZnDFPXQwNGaFAK2KVUoPMzyqRNED08O v1k0wPYgw7dL7wN1SuF5FA3aTnA1yocKkoO47Ohejm32b6j645n6Cg7gVo3ggLJyr3ku H5epaulAm2JXCDuru19DxDSfiH52/aQRPd2MxU56kCGCdJ9lFz2PSCt+VXcbp9Ym/MXT XsGg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:from:subject:references:mime-version :message-id:in-reply-to:date:dkim-signature; bh=ywTh5n03SqFTSvl6jepwvheFrqPaSHAy7v4KxsLV2lY=; b=mx0egj484p+QouuTJgA6NgVpniBI5sR9VsmgRPGefIhHb4YIm2+DWN1gFy091D21Ao 4vsGhTi1LvjNyxvaubf1tbqQ2H4j5VEjPbSjTneX840uJ8FqqY5gtnwvmDiV6pwTyOac WrBMQ7JRrWftJ25hJtgxcUrtV93D+BvyRwXPMSnSbhpjGcN1sg/R9TNPpYArTmjSNQps 9z9JL8upqX0Gr8fXJ2Ey4XkXtvb8sb3Cefn3um0eAL8TLyB79mePvMwnhBtzpQgGebiG jHfGAj6QgUamzd0X79FLHcVEX7Jh/4Kp4ZcWOWj7HTxWFaR+tR6q6EGgKjZfhRlbBkRO dFuQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20210112 header.b="szI/v2kS"; 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: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id kc7-20020a17090333c700b0019cd6d11f0fsi3451741plb.377.2023.03.08.15.25.46; Wed, 08 Mar 2023 15:26:01 -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=@google.com header.s=20210112 header.b="szI/v2kS"; 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 S229917AbjCHW7h (ORCPT + 99 others); Wed, 8 Mar 2023 17:59:37 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36636 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229966AbjCHW7c (ORCPT ); Wed, 8 Mar 2023 17:59:32 -0500 Received: from mail-yb1-xb4a.google.com (mail-yb1-xb4a.google.com [IPv6:2607:f8b0:4864:20::b4a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id E58DCD13DF for ; Wed, 8 Mar 2023 14:59:31 -0800 (PST) Received: by mail-yb1-xb4a.google.com with SMTP id n203-20020a25dad4000000b0091231592671so266386ybf.1 for ; Wed, 08 Mar 2023 14:59:31 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; t=1678316371; h=cc:to:from:subject:references:mime-version:message-id:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=ywTh5n03SqFTSvl6jepwvheFrqPaSHAy7v4KxsLV2lY=; b=szI/v2kSJ1UzVtvNqdIiPV2xdcpUV7T27NeWsV2CESv02Nv1QVxVRzRb1BiSs1xFxz KRteNhiXld4XZkmdW+A0ojwllhTIWO8yc4PUenXBk+QEkqbDUMchTAb51E6ZATiuekAW iW8wSIMLkJG+K2ZAhk2ap8XAg50gkJ22oLDrW3EpWwdf4HCvQdaOgF8bE3ScP7Cxar8J CjZyAKRXQa65gEb9FYBc8PJX1NbQGDNVLYcjwtaOibGEr84RLAUO+ESsEMKxF1s1f1IV p9/oujXwZOtsZLhdakEZ+QUcZ4K3xeza1sWd1j+Jfc7ruxLu13N+ZfamtXvQMCBreKpx 1pYw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1678316371; h=cc: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=ywTh5n03SqFTSvl6jepwvheFrqPaSHAy7v4KxsLV2lY=; b=XQCNEBBS6XL09QRvVMeMBcON/PiwyvE7Ix2CGEz3/c0VqvFeWvgkb7zCOrNHGBZ5k5 s0bHcw1APePUJoDupm0lTYW18LuEKdru2uZcY1GO7bLK5VvyUceGYDJKXbKJ2o36BDb0 y0f7Q1XXgspb85nVcfjCJPVNa9EVIe218MpbWSjZWoAibbVkVHL6NE3RNVxKQwyXb1vf KJZQVRE/VoqHM6cpWzWyIP9wMoF+4V2zvpx9nCQ4IWMvYGo8MolbAe4Mv5r+KyUKWTb+ sJHr9E/ssGWOrJuF2HGUGLCCsZasuuv7oXAw7r+kMdah+5jUV3QRzpn14GfNQf7+txsW Lg7w== X-Gm-Message-State: AO0yUKWbT3IzugH2wRgxELlYraWjoDI/bSbxWx39X+zn+ruCTVXG7G8S 8SJmwyS03dIZofPOalpWw4AehETfIcTo X-Received: from irogers.svl.corp.google.com ([2620:15c:2d4:203:5292:ba14:c261:246a]) (user=irogers job=sendgmr) by 2002:a05:6902:185:b0:acd:7374:f15b with SMTP id t5-20020a056902018500b00acd7374f15bmr12051059ybh.13.1678316371198; Wed, 08 Mar 2023 14:59:31 -0800 (PST) Date: Wed, 8 Mar 2023 14:59:02 -0800 In-Reply-To: <20230308225912.1960990-1-irogers@google.com> Message-Id: <20230308225912.1960990-2-irogers@google.com> Mime-Version: 1.0 References: <20230308225912.1960990-1-irogers@google.com> X-Mailer: git-send-email 2.40.0.rc0.216.gc4246ad0f0-goog Subject: [PATCH v4 01/11] libperf evlist: Avoid a use of evsel idx From: Ian Rogers To: Peter Zijlstra , Ingo Molnar , Mark Rutland , Adrian Hunter , Alexander Shishkin , Jiri Olsa , Namhyung Kim , Kan Liang , Zhengjun Xing , Ravi Bangoria , "Steinar H. Gunderson" , Kim Phillips , Florian Fischer , James Clark , Suzuki Poulouse , Sean Christopherson , Leo Yan , John Garry , Kajol Jain , linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org Cc: Stephane Eranian , Ian Rogers X-Spam-Status: No, score=-9.6 required=5.0 tests=BAYES_00,DKIMWL_WL_MED, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_NONE, SPF_HELO_NONE,SPF_PASS,USER_IN_DEF_DKIM_WL 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 X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1759843935433233311?= X-GMAIL-MSGID: =?utf-8?q?1759843935433233311?= Setting the leader iterates the list, so rather than use idx (which may be changed through list reordering) just count the elements and set afterwards. Signed-off-by: Ian Rogers --- tools/lib/perf/evlist.c | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/tools/lib/perf/evlist.c b/tools/lib/perf/evlist.c index 61b637f29b82..2d6121e89ccb 100644 --- a/tools/lib/perf/evlist.c +++ b/tools/lib/perf/evlist.c @@ -687,15 +687,14 @@ perf_evlist__next_mmap(struct perf_evlist *evlist, struct perf_mmap *map, void __perf_evlist__set_leader(struct list_head *list, struct perf_evsel *leader) { - struct perf_evsel *first, *last, *evsel; - - first = list_first_entry(list, struct perf_evsel, node); - last = list_last_entry(list, struct perf_evsel, node); - - leader->nr_members = last->idx - first->idx + 1; + struct perf_evsel *evsel; + int n = 0; - __perf_evlist__for_each_entry(list, evsel) + __perf_evlist__for_each_entry(list, evsel) { evsel->leader = leader; + n++; + } + leader->nr_members = n; } void perf_evlist__set_leader(struct perf_evlist *evlist) From patchwork Wed Mar 8 22:59:03 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ian Rogers X-Patchwork-Id: 66505 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a5d:5915:0:0:0:0:0 with SMTP id v21csp633913wrd; Wed, 8 Mar 2023 15:22:46 -0800 (PST) X-Google-Smtp-Source: AK7set84+jItuySLweiGuSh2Padd3mJqWQcLb7azuybsqAJHzzqAloB+ZD5kdzPEZ5ynXE1vSs6u X-Received: by 2002:a05:6a20:8c11:b0:cc:c2a0:995a with SMTP id j17-20020a056a208c1100b000ccc2a0995amr16072529pzh.2.1678317766069; Wed, 08 Mar 2023 15:22:46 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1678317766; cv=none; d=google.com; s=arc-20160816; b=o6QJDVzPta7DDsrNEd6HbnoWJeZMA15+xj8OKGDELJFiXi2vce/vXIEAm3XWrSpabl 8vz+4r2oM71e71bBoJ4YFPx5DFn8wx9QXxA5eb3PIPW7ittU7LnzHRFXbZZdTxM81OCr iPD6XqKeVEF2zOytKaF0XgGnM8+0A3vZ2Fl3H2ojcxKQ+K8bVeUpSLY6jnyRf+6yEeac g1tKNHyeqZatYo5GL6FxkozTLE8rnTHAzrscqiEFSqwNGMyLtpdbbMS1ZwIm/hoGTd60 OuLPtfUl1u6z+ppEYwk/D0LiuTVb8gDQtuzqH10zU5k/VWGFBaA+LK2OPdHs1RXt6jNB iwqg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:from:subject:references:mime-version :message-id:in-reply-to:date:dkim-signature; bh=dvqLbFbIa5Th4hLVJzIhGZ3VgrtC26zZgF3M8vwaoio=; b=IEGzmMKbqxW+Pu4xff85/0Lt7fBf+KL9bW8TZdta2az1x2Cg9DUJCZM6ta6Ik7kEcj 8IYIBsbeK6urXr1+AcqYMqQ9fANME69IDgP85gjEAL640FpyedmHukJT70Ct3JF/f5VT zjU6vjluBBytMbvSHFx1q+492WC57jB6s5Rels9nlucg25D+kIJWX8SoTW2/JS43R7fm 0iTY/eQG3nOY5OGY8aHF6a3ZJpNNZvizeLT6FzVgR7ti/GJqYIYlUfeDnmYoR95t3ehC Nhy20oL101LzeIG/h7voMxdq1xgU6jvZ5M6q7cr63s9sTCnTSK8ZN5T7sKpbSUwOXra+ EuLQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20210112 header.b=IcM3OQCp; 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: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id a3-20020a63e843000000b004fba4e2a315si15637630pgk.494.2023.03.08.15.22.28; Wed, 08 Mar 2023 15:22:46 -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=@google.com header.s=20210112 header.b=IcM3OQCp; 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 S229995AbjCHW7u (ORCPT + 99 others); Wed, 8 Mar 2023 17:59:50 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36960 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230031AbjCHW7n (ORCPT ); Wed, 8 Mar 2023 17:59:43 -0500 Received: from mail-yb1-xb49.google.com (mail-yb1-xb49.google.com [IPv6:2607:f8b0:4864:20::b49]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 131E7D13DC for ; Wed, 8 Mar 2023 14:59:39 -0800 (PST) Received: by mail-yb1-xb49.google.com with SMTP id r13-20020a25760d000000b0096c886848c9so260089ybc.3 for ; Wed, 08 Mar 2023 14:59:39 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; t=1678316378; h=cc:to:from:subject:references:mime-version:message-id:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=dvqLbFbIa5Th4hLVJzIhGZ3VgrtC26zZgF3M8vwaoio=; b=IcM3OQCpKiIWmH/4ciejPSiytvB5EUgDR6TDHRIlambnl5qaj0QdQJXuA4krtvi3j3 Wc4aaNR/MEjwvvhmjuEHOjQei0kdy0YFr155rAUySCZ+Z0bUDDY10yVjk3StEXQC9JPB EncVjsZog9ymDJdk2VOhwIHwl+bEjL6p1+4Mp5gnpw2MIvnd0+mjpkoAQ0CYfrBxHXGC XTw1yNU8e6u43k6SYSrEN448ZiXbef1Z9ehOgmVBrQos4k5ji8r26AyegUETSfNmFypN RkVn4rFCkdRCk0HiO0L8e0uKwYvWA62bG7ezijmtjzoPzXk/cDMvP87Rq95qqwtOKh7/ JAfw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1678316378; h=cc: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=dvqLbFbIa5Th4hLVJzIhGZ3VgrtC26zZgF3M8vwaoio=; b=OO4Bla4Ru3jwevTjhi60ieaS8uSetYNKdnizQx5PMwNfHc0s9kyqNfVTpijJpPOez/ AFQI8qZ2uLJSWkZzos1f3c2KDfscWEG7erl1GbYizMfbctxJq2CGbB09jkCqjJ9+yABZ GKaR6Fykz7QkWIGYiW7QFr02mP2C0E85STTUR2+QvLrjJjIM7MAMwJtRTT4yOltmzuug nU2eEyyoqK0hQbtwM+RaQKysA+sXOIhwBwdfhtTuZ6x18cqVbfOILGpCIz8uR4JejvpW CVnNVR74lttYN7lz7/8zVKvobYtjX27ny+E6sUWNVL8dGSbA+VTVhr7DwxpGXMnHaSjH 1BPQ== X-Gm-Message-State: AO0yUKVM+kz07MWRqrSUV2R7JQUPkGT4Y2Jx9UH6sTnG1/2GbaEF6Q0w dz+te3uFziqnv7waCfihj2mZw0AXJ+n+ X-Received: from irogers.svl.corp.google.com ([2620:15c:2d4:203:5292:ba14:c261:246a]) (user=irogers job=sendgmr) by 2002:a05:6902:312:b0:a58:af0b:5150 with SMTP id b18-20020a056902031200b00a58af0b5150mr9832053ybs.3.1678316378355; Wed, 08 Mar 2023 14:59:38 -0800 (PST) Date: Wed, 8 Mar 2023 14:59:03 -0800 In-Reply-To: <20230308225912.1960990-1-irogers@google.com> Message-Id: <20230308225912.1960990-3-irogers@google.com> Mime-Version: 1.0 References: <20230308225912.1960990-1-irogers@google.com> X-Mailer: git-send-email 2.40.0.rc0.216.gc4246ad0f0-goog Subject: [PATCH v4 02/11] perf stat: Don't remove all grouped events when CPU maps disagree From: Ian Rogers To: Peter Zijlstra , Ingo Molnar , Mark Rutland , Adrian Hunter , Alexander Shishkin , Jiri Olsa , Namhyung Kim , Kan Liang , Zhengjun Xing , Ravi Bangoria , "Steinar H. Gunderson" , Kim Phillips , Florian Fischer , James Clark , Suzuki Poulouse , Sean Christopherson , Leo Yan , John Garry , Kajol Jain , linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org Cc: Stephane Eranian , Ian Rogers X-Spam-Status: No, score=-9.6 required=5.0 tests=BAYES_00,DKIMWL_WL_MED, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_NONE, SPF_HELO_NONE,SPF_PASS,USER_IN_DEF_DKIM_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 X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1759843729582761186?= X-GMAIL-MSGID: =?utf-8?q?1759843729582761186?= If the events in an evlist's CPU map differ then the entire group is removed. For example: ``` $ perf stat -e '{imc_free_running/data_read/,imc_free_running/data_write/,cs}' -a sleep 1 WARNING: grouped events cpus do not match, disabling group: anon group { imc_free_running/data_read/, imc_free_running/data_write/, cs } ``` Change the behavior so that just the events not matching the leader are removed. So in the example above, just 'cs' will be removed. Modify the warning so that it is produced once for each group, rather than once for the entire evlist. Shrink the scope and size of the warning text buffer. Signed-off-by: Ian Rogers --- tools/perf/builtin-stat.c | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/tools/perf/builtin-stat.c b/tools/perf/builtin-stat.c index d70b1ec88594..5c12ae5efce5 100644 --- a/tools/perf/builtin-stat.c +++ b/tools/perf/builtin-stat.c @@ -181,14 +181,13 @@ static bool cpus_map_matched(struct evsel *a, struct evsel *b) static void evlist__check_cpu_maps(struct evlist *evlist) { - struct evsel *evsel, *pos, *leader; - char buf[1024]; + struct evsel *evsel, *warned_leader = NULL; if (evlist__has_hybrid(evlist)) evlist__warn_hybrid_group(evlist); evlist__for_each_entry(evlist, evsel) { - leader = evsel__leader(evsel); + struct evsel *leader = evsel__leader(evsel); /* Check that leader matches cpus with each member. */ if (leader == evsel) @@ -197,19 +196,26 @@ static void evlist__check_cpu_maps(struct evlist *evlist) continue; /* If there's mismatch disable the group and warn user. */ - WARN_ONCE(1, "WARNING: grouped events cpus do not match, disabling group:\n"); - evsel__group_desc(leader, buf, sizeof(buf)); - pr_warning(" %s\n", buf); - + if (warned_leader != leader) { + char buf[200]; + + pr_warning("WARNING: grouped events cpus do not match.\n" + "Events with CPUs not matching the leader will " + "be removed from the group.\n"); + evsel__group_desc(leader, buf, sizeof(buf)); + pr_warning(" %s\n", buf); + warned_leader = leader; + } if (verbose > 0) { + char buf[200]; + cpu_map__snprint(leader->core.cpus, buf, sizeof(buf)); pr_warning(" %s: %s\n", leader->name, buf); cpu_map__snprint(evsel->core.cpus, buf, sizeof(buf)); pr_warning(" %s: %s\n", evsel->name, buf); } - for_each_group_evsel(pos, leader) - evsel__remove_from_group(pos, leader); + evsel__remove_from_group(evsel, leader); } } From patchwork Wed Mar 8 22:59:04 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ian Rogers X-Patchwork-Id: 66503 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a5d:5915:0:0:0:0:0 with SMTP id v21csp630246wrd; Wed, 8 Mar 2023 15:15:13 -0800 (PST) X-Google-Smtp-Source: AK7set87g135IApnIOH6WjOkJ+H9u3LQ8yD7KmhJGXeo5NyFKgTq6h0KB2cN1pDJyYUlLWZsyVQt X-Received: by 2002:a17:902:a9c6:b0:19e:7c33:3722 with SMTP id b6-20020a170902a9c600b0019e7c333722mr16662996plr.40.1678317313208; Wed, 08 Mar 2023 15:15:13 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1678317313; cv=none; d=google.com; s=arc-20160816; b=xKjl+/xmzqsUhDv2GzFsFvSqMvW7liZ/RBg7MIpiOZZxNjYtDD9XNZfYa8D7qOpLnV HZQNir0uIHiSVbmtIM/oTMz/4S9xq3K+1t3shMNbSxVzXGBFzUxFlhBe9cjJUwwV9fOa uAGfob3mkml+jkX0z/G0K7tKMIMuanFboRJ4Mkn2sussHEBbzwKToPgvJR9KXYxto0hr OcCQlShSMc/A4bp9NJSXzSOTfkbZGD17gntad28jIb0oKRDlKcecQhLfvIBy5Yc74i+1 yxJVWEN7Xp1yLxEAcurKb6NC+TdRA6KAuB9BJUoagApHjmt7TP4Q73gz+N2WqD5HsVfm LQag== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:from:subject:references:mime-version :message-id:in-reply-to:date:dkim-signature; bh=6+qDX3jH1lOKTsdGbFp7R/2wFTjz3Q2IIuidM+9GQKA=; b=n5R3C5NJ3MVCz4IlbJUcqxRnVYh8qZCIRVRYxGCOmM38sr8wauawb15oHgPr34Nid3 8po7UzJaxfL/4w417cnANiEE3zP0YVYI0TBcb0XZ/ncBbE62H02hiLcDu8uhWC6Xbl+k Q7SmYNwWuqP1fKxhrswzo+CNlbv7PQigSR9U2c6fUQrkcfCV5Qex+LXSCqaeJsMjC2EY I+gqvIJ70ZqKFdZYhtfPC4L2DH2cBqysJyswtt1CH9MB6Yj0u/5/tRgz6zhxsptaAMS5 WA59mIDZTATbUnbfdg6zfMH8snE+NFSrgQsRQoVR/i98e0ZkzzdpcTBUWDC0oY0OB9Oc b1Pw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20210112 header.b=DFFk2xpN; 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: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id 29-20020a63125d000000b0050755810756si5624475pgs.380.2023.03.08.15.15.00; Wed, 08 Mar 2023 15:15:13 -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=@google.com header.s=20210112 header.b=DFFk2xpN; 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 S230030AbjCHXAK (ORCPT + 99 others); Wed, 8 Mar 2023 18:00:10 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36960 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229970AbjCHW7y (ORCPT ); Wed, 8 Mar 2023 17:59:54 -0500 Received: from mail-yw1-x1149.google.com (mail-yw1-x1149.google.com [IPv6:2607:f8b0:4864:20::1149]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id BA617D13E3 for ; Wed, 8 Mar 2023 14:59:45 -0800 (PST) Received: by mail-yw1-x1149.google.com with SMTP id 00721157ae682-536c02ed619so708517b3.8 for ; Wed, 08 Mar 2023 14:59:45 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; t=1678316385; h=cc:to:from:subject:references:mime-version:message-id:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=6+qDX3jH1lOKTsdGbFp7R/2wFTjz3Q2IIuidM+9GQKA=; b=DFFk2xpNm9WphrNvajgxOoqstDHJTuE9tDsxET5XisIInEgApHSWTWI2G8pfhOhkdu auwV0TE5vJMAgqS6U8DDgig52deviZ29JLQ9KSOE3iibC1QnV7KFE/lN0+OcfG0Qxd8i rF3fJchSi9XRDLMFUk7RGnkFVfTgY4YzIbiKmnTOPkunRiy/jy2MDGPCVdSHV3mebj3Q 0a6l1bZnJ1Y/qGf392eLQ4qwM39jdFKPPEtuwTWLWwayxOCWPTfGfEqDeqsv0g7Nm7rX KvZIJa7JdBmJAdimef0LByK6niiZIXUYoIkfOLDNv4ApsQUkviJNZnQJNFVfetgpX0LZ OAHw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1678316385; h=cc: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=6+qDX3jH1lOKTsdGbFp7R/2wFTjz3Q2IIuidM+9GQKA=; b=rMouz9v734CLmrwwJrbAJaxbukgYXn8st1pihGInZ5seP+EiQjQV1OAgxEG/LpBRzV LyJA3GuY+JwyfSW1DjudQpZWR1ePLed9uqcN0EEjxxlVGk1oisDApQ2LDDZQoNiXd3TF SnljRtLkaU4K82eUsrsgxHzwLcFpmPIQOmKFn0THoSbAl2hPfXXJCjKomlwRAYN5npV/ E4vukecOJNCClClMd8aj6RqppFx8zYkXEJ5hQ3Mt7Ydx3BkiQY4hDQq39shQxBOa3pSn qgaZEXMt790HECXmGkXeijKGNE7bTqPDdU1TKqKmboLZxjsFh8MympClFU8HYHv2/0uI V+qA== X-Gm-Message-State: AO0yUKVazoKQB8vloCPRGRMPYMeiHNFRHEEZ4L0TgTRqXDgFVCqVcuIw K1FsMtS7+7UF1Io2vo4h0Ba2KCnuuMTu X-Received: from irogers.svl.corp.google.com ([2620:15c:2d4:203:5292:ba14:c261:246a]) (user=irogers job=sendgmr) by 2002:a0d:de41:0:b0:533:7e62:80a with SMTP id h62-20020a0dde41000000b005337e62080amr3ywe.448.1678316384620; Wed, 08 Mar 2023 14:59:44 -0800 (PST) Date: Wed, 8 Mar 2023 14:59:04 -0800 In-Reply-To: <20230308225912.1960990-1-irogers@google.com> Message-Id: <20230308225912.1960990-4-irogers@google.com> Mime-Version: 1.0 References: <20230308225912.1960990-1-irogers@google.com> X-Mailer: git-send-email 2.40.0.rc0.216.gc4246ad0f0-goog Subject: [PATCH v4 03/11] perf pmu: Earlier PMU auxtrace initialization From: Ian Rogers To: Peter Zijlstra , Ingo Molnar , Mark Rutland , Adrian Hunter , Alexander Shishkin , Jiri Olsa , Namhyung Kim , Kan Liang , Zhengjun Xing , Ravi Bangoria , "Steinar H. Gunderson" , Kim Phillips , Florian Fischer , James Clark , Suzuki Poulouse , Sean Christopherson , Leo Yan , John Garry , Kajol Jain , linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org Cc: Stephane Eranian , Ian Rogers X-Spam-Status: No, score=-9.6 required=5.0 tests=BAYES_00,DKIMWL_WL_MED, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_NONE, SPF_HELO_NONE,SPF_PASS,USER_IN_DEF_DKIM_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 X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1759843255155940199?= X-GMAIL-MSGID: =?utf-8?q?1759843255155940199?= This allows event parsing to use the evsel__is_aux_event function, which is important when determining event grouping. Suggested-by: Adrian Hunter Signed-off-by: Ian Rogers Acked-by: Adrian Hunter --- tools/perf/arch/x86/util/auxtrace.c | 4 ---- tools/perf/arch/x86/util/pmu.c | 8 ++++++-- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/tools/perf/arch/x86/util/auxtrace.c b/tools/perf/arch/x86/util/auxtrace.c index 3da506e13f49..330d03216b0e 100644 --- a/tools/perf/arch/x86/util/auxtrace.c +++ b/tools/perf/arch/x86/util/auxtrace.c @@ -26,11 +26,7 @@ struct auxtrace_record *auxtrace_record__init_intel(struct evlist *evlist, bool found_bts = false; intel_pt_pmu = perf_pmu__find(INTEL_PT_PMU_NAME); - if (intel_pt_pmu) - intel_pt_pmu->auxtrace = true; intel_bts_pmu = perf_pmu__find(INTEL_BTS_PMU_NAME); - if (intel_bts_pmu) - intel_bts_pmu->auxtrace = true; evlist__for_each_entry(evlist, evsel) { if (intel_pt_pmu && evsel->core.attr.type == intel_pt_pmu->type) diff --git a/tools/perf/arch/x86/util/pmu.c b/tools/perf/arch/x86/util/pmu.c index 358340b34243..f73b80dcd8bd 100644 --- a/tools/perf/arch/x86/util/pmu.c +++ b/tools/perf/arch/x86/util/pmu.c @@ -27,10 +27,14 @@ static bool cached_list; struct perf_event_attr *perf_pmu__get_default_config(struct perf_pmu *pmu __maybe_unused) { #ifdef HAVE_AUXTRACE_SUPPORT - if (!strcmp(pmu->name, INTEL_PT_PMU_NAME)) + if (!strcmp(pmu->name, INTEL_PT_PMU_NAME)) { + pmu->auxtrace = true; return intel_pt_pmu_default_config(pmu); - if (!strcmp(pmu->name, INTEL_BTS_PMU_NAME)) + } + if (!strcmp(pmu->name, INTEL_BTS_PMU_NAME)) { + pmu->auxtrace = true; pmu->selectable = true; + } #endif return NULL; } From patchwork Wed Mar 8 22:59:05 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ian Rogers X-Patchwork-Id: 66496 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a5d:5915:0:0:0:0:0 with SMTP id v21csp624604wrd; Wed, 8 Mar 2023 15:05:09 -0800 (PST) X-Google-Smtp-Source: AK7set9FI8KJI3rb8L8QWKmkRhwXR1Pza8BmzPU2mJbgfQLuvYlnWWWLEePgpcL+aXOVlhoSALEQ X-Received: by 2002:a17:90b:3881:b0:234:b082:48a2 with SMTP id mu1-20020a17090b388100b00234b08248a2mr20522326pjb.28.1678316709345; Wed, 08 Mar 2023 15:05:09 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1678316709; cv=none; d=google.com; s=arc-20160816; b=jm4+/WeY49tXlv5U9q5oQuppgz3X5ndV6KQxW0BUI3vuoChCiNzZp1dta5gxNht6ef VK0mE0Hso4ovl0I90aEtjmz0nEzL61LOyF5YrVI7j1ihKbpflYNoAgG997oDxmwdpKlG IavhcYgKPct9MmLP7RxjDHFv2RNeYnsouCd+HNBjUvy//HlqK9g4EkvmhSCbhukSONxw q3o0T5g5jjbuWyzjrT92z5LmnxeS1dHzwcKvg1aeOAoNPbY7Ir+7Rd/4832Kq/n5bQur UeWU+WLG/03wwrNqVCYPf1MJHKV/lqWJulJInrQFgmJVWL7BzbEEG5jvV2lM0XyOHrrm X9Vw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:from:subject:references:mime-version :message-id:in-reply-to:date:dkim-signature; bh=pBjmM/9ZxcY4QPw1OT563S/xkYBM1O7yZVKEKyXWS5g=; b=ywWoR3KeKrtX+vavTygzqaNBJ+Hx9NLRWkd5dNiizwoy1JgRVxNJJVQOI08lFCT8S0 HQQFseYFHozk09gmOK84ZwjZlu+JvfG6PKes0MLD1lqLrDqBz02gqCIKnZ8iKYy9+a14 u90Taya/3696geO61JtIUPZkDl3AWru2RmWZaAwT0ai4Pq4SH67PuOckbNV+FnP/mL5A 1FoAGNGC3+3uSZ2AaaWztRoW/5XcsLnttXPR6I+jWhSqTSDmywu4y9e8oHKpINdmi+tK SMc9nVIAIflM++lCy4pJCPEb+MNFuy1bhMfsHyO3OxW1YNE8L3F9Oz9k7b69oCISGW+Q H2IQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20210112 header.b=GlrQtbld; 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: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id 198-20020a6303cf000000b00503224ebb35si15747933pgd.575.2023.03.08.15.04.19; Wed, 08 Mar 2023 15:05:09 -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=@google.com header.s=20210112 header.b=GlrQtbld; 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 S230095AbjCHXAT (ORCPT + 99 others); Wed, 8 Mar 2023 18:00:19 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:37074 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229910AbjCHXAH (ORCPT ); Wed, 8 Mar 2023 18:00:07 -0500 Received: from mail-yb1-xb4a.google.com (mail-yb1-xb4a.google.com [IPv6:2607:f8b0:4864:20::b4a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id BE742D239C for ; Wed, 8 Mar 2023 14:59:52 -0800 (PST) Received: by mail-yb1-xb4a.google.com with SMTP id l24-20020a25b318000000b007eba3f8e3baso257152ybj.4 for ; Wed, 08 Mar 2023 14:59:52 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; t=1678316391; h=cc:to:from:subject:references:mime-version:message-id:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=pBjmM/9ZxcY4QPw1OT563S/xkYBM1O7yZVKEKyXWS5g=; b=GlrQtbldYu3k0DDu2d6TktZ7Zisi4Ti65+jhiOj2ThVz42pumT6W4JOSR46rVrNgNu czv/K1YZ45ptiohVtKfHKQX4NCEpfM/hVrF/zKj5lI0iZWmDwj3uh1NlWwbMOB5OWQpU 35URPYb0xSx/Q5yeBRF9cHOHceFR8pS4putcy170tHUvJk2R++0yOtlczpOqHYFmw5PI jUtBdDRVdF3YsjQO9R3lboR2hIx4wfuNcEk8Izba6r40rz+Sny61nL/AQZPiOIr2g4ky rBucCcXwqRIKvU3MsPoddsWgy/MklLN9gucUxmxla3k43gjrTjunTLUEsDwDBhUTqKH0 srEQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1678316391; h=cc: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=pBjmM/9ZxcY4QPw1OT563S/xkYBM1O7yZVKEKyXWS5g=; b=nPzoQv4O6SmIEBWYdm7zmlhAR2ekArgo5zC5FH2h2/PeQGfqYNJhMWmA53RhycXt5J qXYjsPupFrBUem5YzW6hkJ3T/pjqPAqHgXD2rdjGXFdUsEdeFAYKiRQp+PNgeIkYo/HN 3+sWfEtkzEr8/wqCHgJ+D0ka48Pcp8B7hh0b7GnQDno9iQYjk02+f5A+gNYAyHJV2JDe UJ8iP10b7kgh4zxCdQGLdUzHRcHEmrC726bOvdNAZLQZ5jsnmtJjihVPyRAOzb8wpmRJ hfS9DbaKoVjqdt1XywnEF7rptmnhCsC++qQjbhVR4fNeXRxoJJeWEuETJae2XTz/mcmI tfqA== X-Gm-Message-State: AO0yUKXdovuEfuMjgRLHdl+OuOpbjuq4Nn/GM5o5JzKxvBcVm3hXcISD Dd/YX4zNHlXkO3PsOb2uHmCDoKqizBLn X-Received: from irogers.svl.corp.google.com ([2620:15c:2d4:203:5292:ba14:c261:246a]) (user=irogers job=sendgmr) by 2002:a5b:9c8:0:b0:a1a:ba40:9790 with SMTP id y8-20020a5b09c8000000b00a1aba409790mr3ybq.251.1678316391572; Wed, 08 Mar 2023 14:59:51 -0800 (PST) Date: Wed, 8 Mar 2023 14:59:05 -0800 In-Reply-To: <20230308225912.1960990-1-irogers@google.com> Message-Id: <20230308225912.1960990-5-irogers@google.com> Mime-Version: 1.0 References: <20230308225912.1960990-1-irogers@google.com> X-Mailer: git-send-email 2.40.0.rc0.216.gc4246ad0f0-goog Subject: [PATCH v4 04/11] perf stat: Modify the group test From: Ian Rogers To: Peter Zijlstra , Ingo Molnar , Mark Rutland , Adrian Hunter , Alexander Shishkin , Jiri Olsa , Namhyung Kim , Kan Liang , Zhengjun Xing , Ravi Bangoria , "Steinar H. Gunderson" , Kim Phillips , Florian Fischer , James Clark , Suzuki Poulouse , Sean Christopherson , Leo Yan , John Garry , Kajol Jain , linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org Cc: Stephane Eranian , Ian Rogers X-Spam-Status: No, score=-9.6 required=5.0 tests=BAYES_00,DKIMWL_WL_MED, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_NONE, SPF_HELO_NONE,SPF_PASS,USER_IN_DEF_DKIM_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 X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1759842621325563063?= X-GMAIL-MSGID: =?utf-8?q?1759842621325563063?= Currently nr_members is 0 for an event with no group, however, they are always a leader of their own group. A later change will make that count 1 because the event is its own leader. Make the find_stat logic consistent with this, an improvement suggested by Namhyung Kim. Suggested-by: Namhyung Kim Signed-off-by: Ian Rogers --- tools/perf/util/stat-shadow.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/perf/util/stat-shadow.c b/tools/perf/util/stat-shadow.c index ef85f1ae1ab2..eeccab6751d7 100644 --- a/tools/perf/util/stat-shadow.c +++ b/tools/perf/util/stat-shadow.c @@ -163,7 +163,7 @@ static double find_stat(const struct evsel *evsel, int aggr_idx, enum stat_type continue; /* Ignore evsels that are part of different groups. */ - if (evsel->core.leader->nr_members && + if (evsel->core.leader->nr_members > 1 && evsel->core.leader != cur->core.leader) continue; /* Ignore evsels with mismatched modifiers. */ From patchwork Wed Mar 8 22:59:06 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ian Rogers X-Patchwork-Id: 66495 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a5d:5915:0:0:0:0:0 with SMTP id v21csp623624wrd; Wed, 8 Mar 2023 15:03:34 -0800 (PST) X-Google-Smtp-Source: AK7set8odfU+wWTIOf71kcqNJ0yKLPkAUbMY2EumO2r/SaRQSzTJ2y3ZLfMr4o7NJlFVnHeySbDm X-Received: by 2002:a17:902:ce8a:b0:19c:f698:8564 with SMTP id f10-20020a170902ce8a00b0019cf6988564mr25347062plg.17.1678316614168; Wed, 08 Mar 2023 15:03:34 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1678316614; cv=none; d=google.com; s=arc-20160816; b=jlqGmCLMAqpDZnSYvGf2aFak5kApzx2g67HmZG2VPqLNKhKzbdhtdi9XARADttT6Mv Xs1cRNdYo40XDx5OVeS8lIBjx3FmH5+oxYXxGIBwQ0OflANMFAjsTUqV3QLK4Zyf/A+R sUKrICuCSi36xkStEXS1/QdrswULNUFUv+1ZMwit6YGhtY+6BzlQ3JqMxmJGTAKn92g7 WV30n4mqQdtVKxEIhEiukS5j9minDN20N1Ws85avNjFXRNijktgHKk1Q2VBH8TD8t93j pbbWHBpErrTD7wkD6vYewynNjL1S98UFzP/qX/O8iPZG7NSpEsqN5K9mIeBPuXpTh03e 3L9g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:from:subject:references:mime-version :message-id:in-reply-to:date:dkim-signature; bh=mSc6zWu+gp18coqfyQ+Fs9l1x/Sawfb5L2ZQMm92/Ks=; b=H41riuEesDTP2F58zlT4ztWUfLai2xv1UrUGUFP/KDg1C9i57JQJqN+ZG3CmOgcMuM 6D2+KhpBNgQlzW0qQOP9NXQyvn3aEMUYiO4MPShCbZ36fJk8ST/ThPGAD3B9zPC8jk7b mAAaQ4cuu4ns8Fqd+O8+Sf3wZo9+QBdEvKWchBHT0fzWuF9+bWYqCDxBk+2kXarpx8Bp Nck2k5STFJLE0pG/4jIe75lNSSQwi+0VOO8jFAbeleaac/26xkwdj2an5bcb2mGpFQPq 87eQ5faXai+lv5NzWfAzmqqHV1UhRQdk/KN9yOvsNsoTadG+i0oQCaFyyi17X1dwyv8Q jCcg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20210112 header.b=cZ1RkdbK; 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: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id w38-20020a634926000000b00502e3a1e8bdsi14640822pga.280.2023.03.08.15.03.11; Wed, 08 Mar 2023 15:03:34 -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=@google.com header.s=20210112 header.b=cZ1RkdbK; 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 S230147AbjCHXA2 (ORCPT + 99 others); Wed, 8 Mar 2023 18:00:28 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:37608 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229970AbjCHXAM (ORCPT ); Wed, 8 Mar 2023 18:00:12 -0500 Received: from mail-yb1-xb49.google.com (mail-yb1-xb49.google.com [IPv6:2607:f8b0:4864:20::b49]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id E4740D2925 for ; Wed, 8 Mar 2023 14:59:59 -0800 (PST) Received: by mail-yb1-xb49.google.com with SMTP id n139-20020a25d691000000b00b1f2dad8a21so241611ybg.10 for ; Wed, 08 Mar 2023 14:59:59 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; t=1678316399; h=cc:to:from:subject:references:mime-version:message-id:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=mSc6zWu+gp18coqfyQ+Fs9l1x/Sawfb5L2ZQMm92/Ks=; b=cZ1RkdbKHiQp8iMzmHZSmHN7kF686F5RFHncPOAulqbFLk/uhkfBFby2QgkyclXSPv 7ZBNaJvLwhpnIbBGUillqyhQJSqOlE8aCOP7AO234mDx3bTyNJRaJl0k5NiHWCHi8fPl vLiQbMCfJXVvSUMhVygJX7OATIF9KGdSMJ5sTvUtU/DWfjI6H4uCvnwMhwVIA9773yE5 b8JnshUYlXGTYvQEHBxe6ZUcKAa1VI3klTdxbJ5Vl11Im4MVFOmCbh/bPHnXRUNUYQ5M WIvGLcSJndZQBNrlny0Vwrz2h/qY8yJ8BMRoGG2ti/a0RBHBIKq2iV/9/W3m+xxxknE+ uqaA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1678316399; h=cc: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=mSc6zWu+gp18coqfyQ+Fs9l1x/Sawfb5L2ZQMm92/Ks=; b=4+5vR2cmQk+RXuhnuIZgcRtaljsnLrVBXRdD3HoPCGdiM4UqQUbNkONuCktHFT7Ekk 8Z1GCPkaOkI0oIJ62k8kVtTs08n68AwPiFjsC/1g490q5tpIyLGdUMV58ECv44dVCdvu kTOSn9Ikj+7JyObj+mw5zkTQptz+cp1qmKekkIW87UbP4Q7fg3XlhBS8KsEoFsWST9da Mo46TcK3g3Z+QQfU5EyDAG11Z5BEG/LNuSWVwezpsNDePlg4JZHP+DbzU9nDQYLC8s2+ jWODBMGU835U0jRDIwF3b7FAJXMewck6bGWfGYdXMhSWN4JsoyX/TUuN1FhN0fCBvLcD 9Z0w== X-Gm-Message-State: AO0yUKWHy8say5ZJXB2ffngsuNHkZwICuVXwVBhZgNjpBQPtiycL8xhn VRtugFyyjIAIAdH7cc0uZnI1u1tuTAQb X-Received: from irogers.svl.corp.google.com ([2620:15c:2d4:203:5292:ba14:c261:246a]) (user=irogers job=sendgmr) by 2002:a5b:38d:0:b0:8ea:3d09:b125 with SMTP id k13-20020a5b038d000000b008ea3d09b125mr9627359ybp.0.1678316399079; Wed, 08 Mar 2023 14:59:59 -0800 (PST) Date: Wed, 8 Mar 2023 14:59:06 -0800 In-Reply-To: <20230308225912.1960990-1-irogers@google.com> Message-Id: <20230308225912.1960990-6-irogers@google.com> Mime-Version: 1.0 References: <20230308225912.1960990-1-irogers@google.com> X-Mailer: git-send-email 2.40.0.rc0.216.gc4246ad0f0-goog Subject: [PATCH v4 05/11] perf evsel: Allow const evsel for certain accesses From: Ian Rogers To: Peter Zijlstra , Ingo Molnar , Mark Rutland , Adrian Hunter , Alexander Shishkin , Jiri Olsa , Namhyung Kim , Kan Liang , Zhengjun Xing , Ravi Bangoria , "Steinar H. Gunderson" , Kim Phillips , Florian Fischer , James Clark , Suzuki Poulouse , Sean Christopherson , Leo Yan , John Garry , Kajol Jain , linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org Cc: Stephane Eranian , Ian Rogers X-Spam-Status: No, score=-9.6 required=5.0 tests=BAYES_00,DKIMWL_WL_MED, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_NONE, SPF_HELO_NONE,SPF_PASS,USER_IN_DEF_DKIM_WL 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 X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1759842522407949144?= X-GMAIL-MSGID: =?utf-8?q?1759842522407949144?= List sorting, added later to evlist, passes const elements requiring helper functions to also be const. Make the argument to evsel__find_pmu, evsel__is_aux_event and evsel__leader const. Signed-off-by: Ian Rogers --- tools/perf/util/evsel.c | 2 +- tools/perf/util/evsel.h | 6 +++--- tools/perf/util/pmu.c | 6 +++--- tools/perf/util/python.c | 2 +- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/tools/perf/util/evsel.c b/tools/perf/util/evsel.c index 51e8ce6edddc..2dc2c24252bb 100644 --- a/tools/perf/util/evsel.c +++ b/tools/perf/util/evsel.c @@ -3139,7 +3139,7 @@ bool evsel__is_hybrid(const struct evsel *evsel) return evsel->pmu_name && perf_pmu__is_hybrid(evsel->pmu_name); } -struct evsel *evsel__leader(struct evsel *evsel) +struct evsel *evsel__leader(const struct evsel *evsel) { return container_of(evsel->core.leader, struct evsel, core); } diff --git a/tools/perf/util/evsel.h b/tools/perf/util/evsel.h index 814a49ebb7e3..676c499323e9 100644 --- a/tools/perf/util/evsel.h +++ b/tools/perf/util/evsel.h @@ -212,8 +212,8 @@ int evsel__object_config(size_t object_size, int (*init)(struct evsel *evsel), void (*fini)(struct evsel *evsel)); -struct perf_pmu *evsel__find_pmu(struct evsel *evsel); -bool evsel__is_aux_event(struct evsel *evsel); +struct perf_pmu *evsel__find_pmu(const struct evsel *evsel); +bool evsel__is_aux_event(const struct evsel *evsel); struct evsel *evsel__new_idx(struct perf_event_attr *attr, int idx); @@ -505,7 +505,7 @@ int evsel__store_ids(struct evsel *evsel, struct evlist *evlist); void evsel__zero_per_pkg(struct evsel *evsel); bool evsel__is_hybrid(const struct evsel *evsel); -struct evsel *evsel__leader(struct evsel *evsel); +struct evsel *evsel__leader(const struct evsel *evsel); bool evsel__has_leader(struct evsel *evsel, struct evsel *leader); bool evsel__is_leader(struct evsel *evsel); void evsel__set_leader(struct evsel *evsel, struct evsel *leader); diff --git a/tools/perf/util/pmu.c b/tools/perf/util/pmu.c index 43b6182d96b7..45d9b8e28e16 100644 --- a/tools/perf/util/pmu.c +++ b/tools/perf/util/pmu.c @@ -988,7 +988,7 @@ struct perf_pmu *perf_pmu__scan(struct perf_pmu *pmu) return NULL; } -struct perf_pmu *evsel__find_pmu(struct evsel *evsel) +struct perf_pmu *evsel__find_pmu(const struct evsel *evsel) { struct perf_pmu *pmu = NULL; @@ -1000,11 +1000,11 @@ struct perf_pmu *evsel__find_pmu(struct evsel *evsel) break; } - evsel->pmu = pmu; + ((struct evsel *)evsel)->pmu = pmu; return pmu; } -bool evsel__is_aux_event(struct evsel *evsel) +bool evsel__is_aux_event(const struct evsel *evsel) { struct perf_pmu *pmu = evsel__find_pmu(evsel); diff --git a/tools/perf/util/python.c b/tools/perf/util/python.c index 42e8b813d010..ab48ffbb6448 100644 --- a/tools/perf/util/python.c +++ b/tools/perf/util/python.c @@ -83,7 +83,7 @@ const char *perf_env__arch(struct perf_env *env __maybe_unused) * far, for the perf python binding known usecases, revisit if this become * necessary. */ -struct perf_pmu *evsel__find_pmu(struct evsel *evsel __maybe_unused) +struct perf_pmu *evsel__find_pmu(const struct evsel *evsel __maybe_unused) { return NULL; } From patchwork Wed Mar 8 22:59:07 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ian Rogers X-Patchwork-Id: 66497 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a5d:5915:0:0:0:0:0 with SMTP id v21csp624613wrd; Wed, 8 Mar 2023 15:05:10 -0800 (PST) X-Google-Smtp-Source: AK7set8sIN6aPPjkH+N4MHksy9eroV03o4umXk9yqpfIqaab+dsBu34txvPtFnxokFCWT5++D+xA X-Received: by 2002:a17:902:b488:b0:19d:19fb:55ec with SMTP id y8-20020a170902b48800b0019d19fb55ecmr15566157plr.6.1678316710145; Wed, 08 Mar 2023 15:05:10 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1678316710; cv=none; d=google.com; s=arc-20160816; b=bz3tnVSmX3+p9JoDBPpYXhh/in1S3GjoNck508ZCfJfRgw8KzwHGkci/rvPPj+4mO0 SCLU4zL4tyZLkflvuvLMsUWHusI1Ez7/TyBoZp14OlJQvNcFWanvt8gs+Y9bL5CNaidq O1KhzD8W0TjSCIELgoGaS1wKCljeEYxDYRAhSKkwp5e5tPEu1C1VH5rYmMpMKvfHxvoT ddT6xls4sqAzvrDQvcVSBJTwRmyqw2q5LZam7Gk80s9uw0YLZIIPlWmATVXLPv/nGX0w 6ote3VHzGjV5DMFQ6DT4AvmCl+PLprua6yz5OpFcO4VBhvsinRZU9ME1PLPfFY5kCTJ1 VADg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:from:subject:references:mime-version :message-id:in-reply-to:date:dkim-signature; bh=NBVnqvPJIWvW8Q6RkCDyc/WyuejWqbt8BpFQxOyzWTY=; b=xahn/u4XdMtYrXeuHmO2PuV87HuI9h78EiVylzEPYkxQmOlO+IB42o/tb7pwS/4pbY eNDx85CGwDbaEkyZ9XcahOlyv6UpWmeSmxztG1ODIp0H3NFEndoSO5OgfAQKNoo/MWQx sjd+iPbXBlcPAjC2tysfApfxxNCBSnI3e9VElKEcmOzd1Nu4i7YhFBdRm4vaKLnoMlXy GkudV8sYmzaHwwXhlkRT2kXf2PGVt5w78HRfIfRq4Vbiv70odMeygENbzOx7Kl+DUQSb xpG3uiFr+hVYTJFP6aSc87diYK0Srp7C3hBiKqV5eVisJsnCoJC7p0/jYYYsnCG7OkPT IdjA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20210112 header.b=sfF4NsXj; 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: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id a11-20020a170902b58b00b0019cafd4c385si14671149pls.408.2023.03.08.15.04.48; Wed, 08 Mar 2023 15:05:10 -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=@google.com header.s=20210112 header.b=sfF4NsXj; 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 S230190AbjCHXAn (ORCPT + 99 others); Wed, 8 Mar 2023 18:00:43 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:37452 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230009AbjCHXAU (ORCPT ); Wed, 8 Mar 2023 18:00:20 -0500 Received: from mail-yb1-xb4a.google.com (mail-yb1-xb4a.google.com [IPv6:2607:f8b0:4864:20::b4a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 5A1E9BA85A for ; Wed, 8 Mar 2023 15:00:07 -0800 (PST) Received: by mail-yb1-xb4a.google.com with SMTP id m6-20020a056902118600b00aeb1e3dbd1bso242847ybu.9 for ; Wed, 08 Mar 2023 15:00:07 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; t=1678316406; h=cc:to:from:subject:references:mime-version:message-id:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=NBVnqvPJIWvW8Q6RkCDyc/WyuejWqbt8BpFQxOyzWTY=; b=sfF4NsXjNPzOlaCQv7Sz5Ye6go5SiEOXfFBrNpoTa+tZ1mK7YvK2WHLYREzhcgMpI3 O4uIhQueBUkj5YvAUu+/Rz8+yEzlsmEXOxHL+JJM9DnIkWGiUxtyg6WcsWBBQukvJIvy QNQPuP71o2FUjndE4oEHU3jcJp0qGwAwpQdF4WNfZ+GyMC64nkYssNiJuPRoUcpxcb4/ LovTvcUlEcuq1N7DQOqpIAFLfpd2sFCVioxBF+UvjhGarTlbyPVkCQyGAxisoM9aC4mM lD0r/P5VNHQMfr2Ci+MJAuZD4LkrVPlKCJQW+Vk6YtlgcHJkDWziRihb7g8A+yR7UleA fJnA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1678316406; h=cc: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=NBVnqvPJIWvW8Q6RkCDyc/WyuejWqbt8BpFQxOyzWTY=; b=EJVJmNTvdNu0vm28ueg0xNxGHFTHt+u+Xq4z2f9r9LTQyr0Y+2VEF520ijj/+s78Y0 ys8FWAuULICdO2BI1K3E5pVH2UYj+Kr+wV/N9mAgVCchEJq0LOyzm6UKuPVXBLhlgRBq uuIazex0xJWNGPwSS6s0gCZvxi4emNMEOSahsp9UKFBK5iocujQA76GaQC+r8TTo2d+r /7wdSKQ71QlS17K6BguYhgkOuOE6fUfD8sk6sc8g63vqqMA8wApE36UaOGAWuKmAu8wZ Ty6LSXoqXyE/pINYe26Ul3uL/qJTJKhRkC+RIDReN8KWAZQuQa2+N6UFLWQbrNLEwrvA xXzw== X-Gm-Message-State: AO0yUKV0DTTgKetT+Glk0+iLpDWPZBsDsb78wqumuxk8VNzE9eIk7MiW m+QZdKQ7HDvoeAG2Zq64Cr5iOae7ZYKJ X-Received: from irogers.svl.corp.google.com ([2620:15c:2d4:203:5292:ba14:c261:246a]) (user=irogers job=sendgmr) by 2002:a05:6902:208:b0:a98:bd27:91de with SMTP id j8-20020a056902020800b00a98bd2791demr11990629ybs.7.1678316406588; Wed, 08 Mar 2023 15:00:06 -0800 (PST) Date: Wed, 8 Mar 2023 14:59:07 -0800 In-Reply-To: <20230308225912.1960990-1-irogers@google.com> Message-Id: <20230308225912.1960990-7-irogers@google.com> Mime-Version: 1.0 References: <20230308225912.1960990-1-irogers@google.com> X-Mailer: git-send-email 2.40.0.rc0.216.gc4246ad0f0-goog Subject: [PATCH v4 06/11] perf evsel: Add function to compute group PMU name From: Ian Rogers To: Peter Zijlstra , Ingo Molnar , Mark Rutland , Adrian Hunter , Alexander Shishkin , Jiri Olsa , Namhyung Kim , Kan Liang , Zhengjun Xing , Ravi Bangoria , "Steinar H. Gunderson" , Kim Phillips , Florian Fischer , James Clark , Suzuki Poulouse , Sean Christopherson , Leo Yan , John Garry , Kajol Jain , linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org Cc: Stephane Eranian , Ian Rogers X-Spam-Status: No, score=-9.6 required=5.0 tests=BAYES_00,DKIMWL_WL_MED, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_NONE, SPF_HELO_NONE,SPF_PASS,USER_IN_DEF_DKIM_WL 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 X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1759842622726839346?= X-GMAIL-MSGID: =?utf-8?q?1759842622726839346?= The computed name respects software events and aux event groups, such that the pmu_name is changed to be that of the aux event leader or group leader for software events. This is done as a later change will split events that are in different PMUs into different groups. Signed-off-by: Ian Rogers --- tools/perf/util/evsel.c | 24 ++++++++++++++++++++++++ tools/perf/util/evsel.h | 1 + 2 files changed, 25 insertions(+) diff --git a/tools/perf/util/evsel.c b/tools/perf/util/evsel.c index 2dc2c24252bb..51d9650267d0 100644 --- a/tools/perf/util/evsel.c +++ b/tools/perf/util/evsel.c @@ -821,6 +821,30 @@ const char *evsel__name(struct evsel *evsel) return "unknown"; } +const char *evsel__group_pmu_name(const struct evsel *evsel) +{ + const struct evsel *leader; + + /* If the pmu_name is set use it. pmu_name isn't set for CPU and software events. */ + if (evsel->pmu_name) + return evsel->pmu_name; + /* + * Software events may be in a group with other uncore PMU events. Use + * the pmu_name of the group leader to avoid breaking the software event + * out of the group. + * + * Aux event leaders, like intel_pt, expect a group with events from + * other PMUs, so substitute the AUX event's PMU in this case. + */ + leader = evsel__leader(evsel); + if ((evsel->core.attr.type == PERF_TYPE_SOFTWARE || evsel__is_aux_event(leader)) && + leader->pmu_name) { + return leader->pmu_name; + } + + return "cpu"; +} + const char *evsel__metric_id(const struct evsel *evsel) { if (evsel->metric_id) diff --git a/tools/perf/util/evsel.h b/tools/perf/util/evsel.h index 676c499323e9..d26745ca6147 100644 --- a/tools/perf/util/evsel.h +++ b/tools/perf/util/evsel.h @@ -280,6 +280,7 @@ int arch_evsel__hw_name(struct evsel *evsel, char *bf, size_t size); int __evsel__hw_cache_type_op_res_name(u8 type, u8 op, u8 result, char *bf, size_t size); const char *evsel__name(struct evsel *evsel); +const char *evsel__group_pmu_name(const struct evsel *evsel); const char *evsel__metric_id(const struct evsel *evsel); static inline bool evsel__is_tool(const struct evsel *evsel) From patchwork Wed Mar 8 22:59:08 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ian Rogers X-Patchwork-Id: 66510 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a5d:5915:0:0:0:0:0 with SMTP id v21csp638442wrd; Wed, 8 Mar 2023 15:33:03 -0800 (PST) X-Google-Smtp-Source: AK7set/SXtTtRz/wDzwO44im9WkGcMFzJNvydD/685qBDliMaMQ1XbvrMYy25tiKXZjXFIE9tOwg X-Received: by 2002:a05:6a20:548a:b0:cb:e735:65a5 with SMTP id i10-20020a056a20548a00b000cbe73565a5mr25463810pzk.40.1678318383350; Wed, 08 Mar 2023 15:33:03 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1678318383; cv=none; d=google.com; s=arc-20160816; b=eCDaHnZrGzh30UBwlTfQUOkOrQ9lvSjOTRVPF6ER8aJeN+vN14N5YXjb4zCB88Hiv1 uiHIqzUr6yYMbpSWIHj1yrfk7osvnuUAQ4sZCnRPeVMBSIBL/Yp2WN6IkVPXHtLSZ9WX VRh6NBPQYzdVPznCIqvNqIrYvqmCD7otIv50xNc8N1H5UbuMPr6AAnNsI3jtNCKZcHPL Ba3ZZj0gnaZ6WSFePWPgOG53UDX3r8ROAnu+Pzl837blUxvTqqKnOkf4bPt/ULokm7ow 27MWvC1KllbfmG3h8ZP6ees1h1qmAG9Tf8nTWQFSOL2ozu3I0siHlPZIdiRv3vVAzDsm XGvg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:from:subject:references:mime-version :message-id:in-reply-to:date:dkim-signature; bh=dcvWMdLTJ1iuXhAaTLlBF3OqMzr4/MuwhIZh3sQrcPM=; b=j/gQdJyyFgocp3PulfggEnWP/YdOy9qHJPeRcdoTl/zz5gRXiaZ/mfLPbRNhlrIQ3m XTxO0QtJOkgbwT6Nep6qwwbz10NCLKpkK/Ltk2fsu3zkw+BCVYqvKn5DDHY5hV+eustg kCnb0XdyBq3E9YmS+8DgCajM8onY/synm+emHSPd87CnM8VFR70UBJU+S2uIqXvvEeVT +hFis/RGGbBz4LSRSAgcGUs1ltLFJ1KJRwWteOs3AVyti/QtTEz3P1wd6Cq9ShNeTHi5 KVq8zKDHWDhw3SnCCDEysJQlXfBZ+P9aFUbjxeaNNIrK9fdncnw+OVzYFH+D2Call1is JyIw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20210112 header.b=PZRWXsWy; 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: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id y127-20020a633285000000b004fb7d5d316esi15546651pgy.404.2023.03.08.15.32.50; Wed, 08 Mar 2023 15:33:03 -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=@google.com header.s=20210112 header.b=PZRWXsWy; 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 S229940AbjCHXAy (ORCPT + 99 others); Wed, 8 Mar 2023 18:00:54 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:37662 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230058AbjCHXA2 (ORCPT ); Wed, 8 Mar 2023 18:00:28 -0500 Received: from mail-yb1-xb4a.google.com (mail-yb1-xb4a.google.com [IPv6:2607:f8b0:4864:20::b4a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id B36E6D330D for ; Wed, 8 Mar 2023 15:00:14 -0800 (PST) Received: by mail-yb1-xb4a.google.com with SMTP id o3-20020a257303000000b00a131264017aso206423ybc.20 for ; Wed, 08 Mar 2023 15:00:14 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; t=1678316414; h=cc:to:from:subject:references:mime-version:message-id:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=dcvWMdLTJ1iuXhAaTLlBF3OqMzr4/MuwhIZh3sQrcPM=; b=PZRWXsWyADHy4mHeUXfY7eIe/xrWmdkDJrMwb2jSMuPSbFIhhmJzZ1o0/wjrUqNstt cqtNrNIfM5xuzRRHpDGe9KgHWeCS1PN7gzn2xt4jLpq06QR2klOwgxB7GtHWAUsCwqPI eoEqtmRdgmFINGPcsI+w4704lHFMvDkZYFWvALIWLS+RVWM7dHzTFEMpNTjSkjgpeNqI 6HjGyK4aGU+gEF6gYHMayjhtdhdJHW44d2PA0zp2OGqdyXV/QRp78bXUC15kbkUb70n9 vwfjR2VH6Y+by5dQIfLTsh1tb49rv8CQbdFX3gw+M1+dzhmJhSI1wpR7BCmJsH/QHzdq HUjQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1678316414; h=cc: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=dcvWMdLTJ1iuXhAaTLlBF3OqMzr4/MuwhIZh3sQrcPM=; b=3NJNedIRAWfzrrgnEFcRUuAzN2hCmV6mz5RTb+UjZDTGEgTI5Ybaa3+dpyzK6jr3+V aOE4UsEuxCFAKlKkJyA+l1kY1jYWpE9g6WNIV40j8f5T3iO/4qcacSu23kxf4Xb3OSFn ZWwRuNPQiiQRmYdzdT+wBuA+D2mwvfmb+8FRXXlG2tcii4a7sJlyS4JdfjKBPhEF+pcE qKoCpMzxhYYmDEt9R2s+APmrapxjNMRPymjkRtIARhdeEnWjZF6rMdeNG/I4xSBxJS7r jzTdos8mYCunP8UStpMQuR2J4Hc30O7Jw8Kfl4tVCSlqEQxE6o22Yap5d03mk3Kke7n6 trKQ== X-Gm-Message-State: AO0yUKXpwIKidLlWi2+vStmiyKOEyZBF+EMS0ZN91LVOlcA+LaU6VeNC vypZm+GyeKt79n7mz2OgGT08NAoiCfsJ X-Received: from irogers.svl.corp.google.com ([2620:15c:2d4:203:5292:ba14:c261:246a]) (user=irogers job=sendgmr) by 2002:a5b:b03:0:b0:ad7:b81e:69bd with SMTP id z3-20020a5b0b03000000b00ad7b81e69bdmr9346841ybp.2.1678316413963; Wed, 08 Mar 2023 15:00:13 -0800 (PST) Date: Wed, 8 Mar 2023 14:59:08 -0800 In-Reply-To: <20230308225912.1960990-1-irogers@google.com> Message-Id: <20230308225912.1960990-8-irogers@google.com> Mime-Version: 1.0 References: <20230308225912.1960990-1-irogers@google.com> X-Mailer: git-send-email 2.40.0.rc0.216.gc4246ad0f0-goog Subject: [PATCH v4 07/11] perf parse-events: Pass ownership of the group name From: Ian Rogers To: Peter Zijlstra , Ingo Molnar , Mark Rutland , Adrian Hunter , Alexander Shishkin , Jiri Olsa , Namhyung Kim , Kan Liang , Zhengjun Xing , Ravi Bangoria , "Steinar H. Gunderson" , Kim Phillips , Florian Fischer , James Clark , Suzuki Poulouse , Sean Christopherson , Leo Yan , John Garry , Kajol Jain , linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org Cc: Stephane Eranian , Ian Rogers X-Spam-Status: No, score=-9.6 required=5.0 tests=BAYES_00,DKIMWL_WL_MED, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_NONE, SPF_HELO_NONE,SPF_PASS,USER_IN_DEF_DKIM_WL 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 X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1759844377138654278?= X-GMAIL-MSGID: =?utf-8?q?1759844377138654278?= Pass ownership of the group name rather than copying and freeing the original. This saves a memory allocation and copy. Signed-off-by: Ian Rogers --- tools/perf/util/parse-events.c | 3 ++- tools/perf/util/parse-events.y | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/tools/perf/util/parse-events.c b/tools/perf/util/parse-events.c index 0336ff27c15f..1be454697d57 100644 --- a/tools/perf/util/parse-events.c +++ b/tools/perf/util/parse-events.c @@ -1761,6 +1761,7 @@ parse_events__set_leader_for_uncore_aliase(char *name, struct list_head *list, handled: ret = 1; + free(name); out: free(leaders); return ret; @@ -1786,7 +1787,7 @@ void parse_events__set_leader(char *name, struct list_head *list, leader = arch_evlist__leader(list); __perf_evlist__set_leader(list, &leader->core); - leader->group_name = name ? strdup(name) : NULL; + leader->group_name = name; list_move(&leader->core.node, list); } diff --git a/tools/perf/util/parse-events.y b/tools/perf/util/parse-events.y index be8c51770051..541b8dde2063 100644 --- a/tools/perf/util/parse-events.y +++ b/tools/perf/util/parse-events.y @@ -202,8 +202,8 @@ PE_NAME '{' events '}' struct list_head *list = $3; inc_group_count(list, _parse_state); + /* Takes ownership of $1. */ parse_events__set_leader($1, list, _parse_state); - free($1); $$ = list; } | From patchwork Wed Mar 8 22:59:09 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ian Rogers X-Patchwork-Id: 66498 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a5d:5915:0:0:0:0:0 with SMTP id v21csp624670wrd; Wed, 8 Mar 2023 15:05:12 -0800 (PST) X-Google-Smtp-Source: AK7set+FzMU9iCot8By8/LP/MGlxTRJ+vvALq265tPUhPdDmWcZdcnWhawz+jgQddR6lIbz1oTpr X-Received: by 2002:a05:6a20:431a:b0:cb:aacb:312c with SMTP id h26-20020a056a20431a00b000cbaacb312cmr20761439pzk.27.1678316712366; Wed, 08 Mar 2023 15:05:12 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1678316712; cv=none; d=google.com; s=arc-20160816; b=VKthYc/1dK7tcPS3LrL2hz80ydc+UqoaCR59Owhy5xvJ3bt0ZOVnPY61CILbqhshe1 ZTqFl5q7irGUi1vR8HOe2IOkRv44K0OS+Ghx0hR4e6Ql+q8tGJpXrmBRDBUsBve7k8nX JjKeohepsjMvc+0BMaPvlFcnEoMuMQ4qLOD9xfpGnDB2KNhw4+JIb5W9uun7uBGbJYWa byhSkMWvLu8CNB59Oz+yFjjbH6gaEU7f2aDUBG6xV97Icin1u9c6ig9ltM9hFsHzsY2h MmsQZeZ9bXjMl118hTzSZA3hibX3AoI4EzB/frYxzFSeRaDeAoNMwqptWV0R0gSYG+/E t+nA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:from:subject:references:mime-version :message-id:in-reply-to:date:dkim-signature; bh=ctl/zbbcBTiCypGQ4gzGnhIydZa9Hxty23aBTbLFH5M=; b=DknAA4Fx7z4Ho5s5aYceAjiTERs4QCeA52HiMhW3VU9A2NIgOq0ix/ydchqjvHf9ns 5/gFweL6TZMwBi4SxGTLfd4HhVmUpRc4DgXxXF8xIW3w72JnBW6ZNsUADv27tqi0gZVq GbeYAcJwI7hnRIR2JSs5f8XKzK9awmKdDQnvWweDZQ9c51qeMICusjuuUV/szD9h7k1J VoM6KONb4bI7w9BBS665IDYU7Ce2jypSF6m4EF8t5tdHCtsYbZ/nb3vN+5vzFHQ41jHN iXaTOvwDQstGFa8JUovK6VeaPs8+y+lGI3S8TX9KH7WKnVlOl8sRvlPTc+6hv3rKQIuD tEtw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20210112 header.b=O6WM4QZj; 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: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id e18-20020a63ee12000000b004fabeb6f51asi15102816pgi.754.2023.03.08.15.04.51; Wed, 08 Mar 2023 15:05:12 -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=@google.com header.s=20210112 header.b=O6WM4QZj; 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 S230050AbjCHXBH (ORCPT + 99 others); Wed, 8 Mar 2023 18:01:07 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:38786 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230182AbjCHXAm (ORCPT ); Wed, 8 Mar 2023 18:00:42 -0500 Received: from mail-yw1-x1149.google.com (mail-yw1-x1149.google.com [IPv6:2607:f8b0:4864:20::1149]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id CA75DD38F5 for ; Wed, 8 Mar 2023 15:00:22 -0800 (PST) Received: by mail-yw1-x1149.google.com with SMTP id 00721157ae682-536c039f859so325537b3.21 for ; Wed, 08 Mar 2023 15:00:22 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; t=1678316421; h=cc:to:from:subject:references:mime-version:message-id:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=ctl/zbbcBTiCypGQ4gzGnhIydZa9Hxty23aBTbLFH5M=; b=O6WM4QZjU14/PQDxDXDQHdTM0w5fefJsHMBX01M/XNpYUO0MdKwGlrvXeZFzLadiA0 7jzWh/W6S7D/Lwx6vC2KKhMpgMtON/GbKww+AvyL7k/1a0ID0LdCK8c6GSJ8fVvhWxnc tkH65q/V6RrKFzh3QeImpsIchw+2rTMuqsL1tvzSh98JTID/yPWal/Msx/lqFp9B2uLl df7V1zkG3uh1lkhmUNk4tIW67GbCagouPrBy6BwUbj13luQhsqR0dI3PIa9o6jgiFTKF DuDn1uM4rPrbwOJPTUJ0ClYoUSQrd6Dw+6e7fr/ViUZQexK9tqKHPyzYGZ3LJIkGexkW g8tA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1678316421; h=cc: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=ctl/zbbcBTiCypGQ4gzGnhIydZa9Hxty23aBTbLFH5M=; b=0Hk2b41OfhNcGfzI/XfmCDxgjt5Q/t+Q/2c59Ms7M060RrrGKpchjUUURTafUGnoM3 xQUqBeWBZvdmt+/WOqx0oM7o875LvjG3gOJbIZh6yswMD4xm+3iKtSAXjKxCmq6xl1iX jaqrRhOjGN3jjnINXPiHqovsBNy0yvvR63mFN7j3QHVmejRINo88hs5PUjfVTSM0PznH 5mbCOFXnbj+3kTpBsY1fPwaRfwmXT03CbnRNeM2TyrmDioRoym21xnuq/GBpvxU81P3R DYsFuRJsPRl1acj7iBL2SszM5mzN78/PzH8cYMoZWrGLynVXEg13GujUqMmldDaBh51z 5D8A== X-Gm-Message-State: AO0yUKWxVbMvYxs9LGiNbxa8KM6uwOOXiOZPPHdiL0dlP+4RLUejg2sf UMu1MPNWQwNVdOqkBlVFFDEUNKMOvKu6 X-Received: from irogers.svl.corp.google.com ([2620:15c:2d4:203:5292:ba14:c261:246a]) (user=irogers job=sendgmr) by 2002:a81:ac21:0:b0:535:cdde:9a63 with SMTP id k33-20020a81ac21000000b00535cdde9a63mr12793108ywh.7.1678316421358; Wed, 08 Mar 2023 15:00:21 -0800 (PST) Date: Wed, 8 Mar 2023 14:59:09 -0800 In-Reply-To: <20230308225912.1960990-1-irogers@google.com> Message-Id: <20230308225912.1960990-9-irogers@google.com> Mime-Version: 1.0 References: <20230308225912.1960990-1-irogers@google.com> X-Mailer: git-send-email 2.40.0.rc0.216.gc4246ad0f0-goog Subject: [PATCH v4 08/11] perf parse-events: Sort and group parsed events From: Ian Rogers To: Peter Zijlstra , Ingo Molnar , Mark Rutland , Adrian Hunter , Alexander Shishkin , Jiri Olsa , Namhyung Kim , Kan Liang , Zhengjun Xing , Ravi Bangoria , "Steinar H. Gunderson" , Kim Phillips , Florian Fischer , James Clark , Suzuki Poulouse , Sean Christopherson , Leo Yan , John Garry , Kajol Jain , linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org Cc: Stephane Eranian , Ian Rogers X-Spam-Status: No, score=-9.6 required=5.0 tests=BAYES_00,DKIMWL_WL_MED, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_NONE, SPF_HELO_NONE,SPF_PASS,USER_IN_DEF_DKIM_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 X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1759842625066396096?= X-GMAIL-MSGID: =?utf-8?q?1759842625066396096?= This change is intended to be a no-op for most current cases, the default sort order is the order the events were parsed. Where it varies is in how groups are handled. Previously an uncore and core event that are grouped would most often cause the group to be removed: ``` $ perf stat -e '{instructions,uncore_imc_free_running_0/data_total/}' -a sleep 1 WARNING: grouped events cpus do not match, disabling group: anon group { instructions, uncore_imc_free_running_0/data_total/ } ... ``` However, when wildcards are used the events should be re-sorted and re-grouped in parse_events__set_leader, but this currently fails for simple examples: ``` $ perf stat -e '{uncore_imc_free_running/data_read/,uncore_imc_free_running/data_write/}' -a sleep 1 Performance counter stats for 'system wide': MiB uncore_imc_free_running/data_read/ MiB uncore_imc_free_running/data_write/ 1.000996992 seconds time elapsed ``` A futher failure mode, fixed in this patch, is to force topdown events into a group. This change moves sorting the evsels in the evlist after parsing. It requires parsing to set up groups. First the evsels are sorted respecting the existing groupings and parse order, but also reordering to ensure evsels of the same PMU and group appear together. So that software and aux events respect groups, their pmu_name is taken from the group leader. The sorting is done with list_sort removing a memory allocation. After sorting a pass is done to correct the group leaders and for topdown events ensuring they have a group leader. This fixes the problems seen before: ``` $ perf stat -e '{uncore_imc_free_running/data_read/,uncore_imc_free_running/data_write/}' -a sleep 1 Performance counter stats for 'system wide': 727.42 MiB uncore_imc_free_running/data_read/ 81.84 MiB uncore_imc_free_running/data_write/ 1.000948615 seconds time elapsed ``` As well as making groups not fail for cases like: ``` $ perf stat -e '{imc_free_running_0/data_total/,imc_free_running_1/data_total/}' -a sleep 1 Performance counter stats for 'system wide': 256.47 MiB imc_free_running_0/data_total/ 256.48 MiB imc_free_running_1/data_total/ 1.001165442 seconds time elapsed ``` Signed-off-by: Ian Rogers --- tools/perf/arch/x86/util/evlist.c | 39 ++--- tools/perf/util/evlist.h | 2 +- tools/perf/util/parse-events.c | 240 +++++++++++++++--------------- tools/perf/util/parse-events.h | 3 +- tools/perf/util/parse-events.y | 4 +- 5 files changed, 136 insertions(+), 152 deletions(-) diff --git a/tools/perf/arch/x86/util/evlist.c b/tools/perf/arch/x86/util/evlist.c index 8a7ae4162563..d4193479a364 100644 --- a/tools/perf/arch/x86/util/evlist.c +++ b/tools/perf/arch/x86/util/evlist.c @@ -65,29 +65,22 @@ int arch_evlist__add_default_attrs(struct evlist *evlist, return ___evlist__add_default_attrs(evlist, attrs, nr_attrs); } -struct evsel *arch_evlist__leader(struct list_head *list) +int arch_evlist__cmp(const struct evsel *lhs, const struct evsel *rhs) { - struct evsel *evsel, *first, *slots = NULL; - bool has_topdown = false; - - first = list_first_entry(list, struct evsel, core.node); - - if (!topdown_sys_has_perf_metrics()) - return first; - - /* If there is a slots event and a topdown event then the slots event comes first. */ - __evlist__for_each_entry(list, evsel) { - if (evsel->pmu_name && !strncmp(evsel->pmu_name, "cpu", 3) && evsel->name) { - if (strcasestr(evsel->name, "slots")) { - slots = evsel; - if (slots == first) - return first; - } - if (strcasestr(evsel->name, "topdown")) - has_topdown = true; - if (slots && has_topdown) - return slots; - } + if (topdown_sys_has_perf_metrics() && + (!lhs->pmu_name || !strncmp(lhs->pmu_name, "cpu", 3))) { + /* Ensure the topdown slots comes first. */ + if (strcasestr(lhs->name, "slots")) + return -1; + if (strcasestr(rhs->name, "slots")) + return 1; + /* Followed by topdown events. */ + if (strcasestr(lhs->name, "topdown") && !strcasestr(rhs->name, "topdown")) + return -1; + if (!strcasestr(lhs->name, "topdown") && strcasestr(rhs->name, "topdown")) + return 1; } - return first; + + /* Default ordering by insertion index. */ + return lhs->core.idx - rhs->core.idx; } diff --git a/tools/perf/util/evlist.h b/tools/perf/util/evlist.h index 01fa9d592c5a..d89d8f92802b 100644 --- a/tools/perf/util/evlist.h +++ b/tools/perf/util/evlist.h @@ -119,7 +119,7 @@ int arch_evlist__add_default_attrs(struct evlist *evlist, #define evlist__add_default_attrs(evlist, array) \ arch_evlist__add_default_attrs(evlist, array, ARRAY_SIZE(array)) -struct evsel *arch_evlist__leader(struct list_head *list); +int arch_evlist__cmp(const struct evsel *lhs, const struct evsel *rhs); int evlist__add_dummy(struct evlist *evlist); struct evsel *evlist__add_aux_dummy(struct evlist *evlist, bool system_wide); diff --git a/tools/perf/util/parse-events.c b/tools/perf/util/parse-events.c index 1be454697d57..394ab23089d0 100644 --- a/tools/perf/util/parse-events.c +++ b/tools/perf/util/parse-events.c @@ -1,6 +1,7 @@ // SPDX-License-Identifier: GPL-2.0 #include #include +#include #include #include #include @@ -1655,125 +1656,7 @@ int parse_events__modifier_group(struct list_head *list, return parse_events__modifier_event(list, event_mod, true); } -/* - * Check if the two uncore PMUs are from the same uncore block - * The format of the uncore PMU name is uncore_#blockname_#pmuidx - */ -static bool is_same_uncore_block(const char *pmu_name_a, const char *pmu_name_b) -{ - char *end_a, *end_b; - - end_a = strrchr(pmu_name_a, '_'); - end_b = strrchr(pmu_name_b, '_'); - - if (!end_a || !end_b) - return false; - - if ((end_a - pmu_name_a) != (end_b - pmu_name_b)) - return false; - - return (strncmp(pmu_name_a, pmu_name_b, end_a - pmu_name_a) == 0); -} - -static int -parse_events__set_leader_for_uncore_aliase(char *name, struct list_head *list, - struct parse_events_state *parse_state) -{ - struct evsel *evsel, *leader; - uintptr_t *leaders; - bool is_leader = true; - int i, nr_pmu = 0, total_members, ret = 0; - - leader = list_first_entry(list, struct evsel, core.node); - evsel = list_last_entry(list, struct evsel, core.node); - total_members = evsel->core.idx - leader->core.idx + 1; - - leaders = calloc(total_members, sizeof(uintptr_t)); - if (WARN_ON(!leaders)) - return 0; - - /* - * Going through the whole group and doing sanity check. - * All members must use alias, and be from the same uncore block. - * Also, storing the leader events in an array. - */ - __evlist__for_each_entry(list, evsel) { - - /* Only split the uncore group which members use alias */ - if (!evsel->use_uncore_alias) - goto out; - - /* The events must be from the same uncore block */ - if (!is_same_uncore_block(leader->pmu_name, evsel->pmu_name)) - goto out; - - if (!is_leader) - continue; - /* - * If the event's PMU name starts to repeat, it must be a new - * event. That can be used to distinguish the leader from - * other members, even they have the same event name. - */ - if ((leader != evsel) && - !strcmp(leader->pmu_name, evsel->pmu_name)) { - is_leader = false; - continue; - } - - /* Store the leader event for each PMU */ - leaders[nr_pmu++] = (uintptr_t) evsel; - } - - /* only one event alias */ - if (nr_pmu == total_members) { - parse_state->nr_groups--; - goto handled; - } - - /* - * An uncore event alias is a joint name which means the same event - * runs on all PMUs of a block. - * Perf doesn't support mixed events from different PMUs in the same - * group. The big group has to be split into multiple small groups - * which only include the events from the same PMU. - * - * Here the uncore event aliases must be from the same uncore block. - * The number of PMUs must be same for each alias. The number of new - * small groups equals to the number of PMUs. - * Setting the leader event for corresponding members in each group. - */ - i = 0; - __evlist__for_each_entry(list, evsel) { - if (i >= nr_pmu) - i = 0; - evsel__set_leader(evsel, (struct evsel *) leaders[i++]); - } - - /* The number of members and group name are same for each group */ - for (i = 0; i < nr_pmu; i++) { - evsel = (struct evsel *) leaders[i]; - evsel->core.nr_members = total_members / nr_pmu; - evsel->group_name = name ? strdup(name) : NULL; - } - - /* Take the new small groups into account */ - parse_state->nr_groups += nr_pmu - 1; - -handled: - ret = 1; - free(name); -out: - free(leaders); - return ret; -} - -__weak struct evsel *arch_evlist__leader(struct list_head *list) -{ - return list_first_entry(list, struct evsel, core.node); -} - -void parse_events__set_leader(char *name, struct list_head *list, - struct parse_events_state *parse_state) +void parse_events__set_leader(char *name, struct list_head *list) { struct evsel *leader; @@ -1782,13 +1665,9 @@ void parse_events__set_leader(char *name, struct list_head *list, return; } - if (parse_events__set_leader_for_uncore_aliase(name, list, parse_state)) - return; - - leader = arch_evlist__leader(list); + leader = list_first_entry(list, struct evsel, core.node); __perf_evlist__set_leader(list, &leader->core); leader->group_name = name; - list_move(&leader->core.node, list); } /* list_event is assumed to point to malloc'ed memory */ @@ -2245,6 +2124,117 @@ static int parse_events__with_hybrid_pmu(struct parse_events_state *parse_state, return ret; } +__weak int arch_evlist__cmp(const struct evsel *lhs, const struct evsel *rhs) +{ + /* Order by insertion index. */ + return lhs->core.idx - rhs->core.idx; +} + +static int evlist__cmp(void *state, const struct list_head *l, const struct list_head *r) +{ + const struct perf_evsel *lhs_core = container_of(l, struct perf_evsel, node); + const struct evsel *lhs = container_of(lhs_core, struct evsel, core); + const struct perf_evsel *rhs_core = container_of(r, struct perf_evsel, node); + const struct evsel *rhs = container_of(rhs_core, struct evsel, core); + int *leader_idx = state; + int lhs_leader_idx = *leader_idx, rhs_leader_idx = *leader_idx, ret; + const char *lhs_pmu_name, *rhs_pmu_name; + + /* + * First sort by grouping/leader. Read the leader idx only if the evsel + * is part of a group, as -1 indicates no group. + */ + if (lhs_core->leader != lhs_core || lhs_core->nr_members > 1) + lhs_leader_idx = lhs_core->leader->idx; + if (rhs_core->leader != rhs_core || rhs_core->nr_members > 1) + rhs_leader_idx = rhs_core->leader->idx; + + if (lhs_leader_idx != rhs_leader_idx) + return lhs_leader_idx - rhs_leader_idx; + + /* Group by PMU. Groups can't span PMUs. */ + lhs_pmu_name = evsel__group_pmu_name(lhs); + rhs_pmu_name = evsel__group_pmu_name(rhs); + ret = strcmp(lhs_pmu_name, rhs_pmu_name); + if (ret) + return ret; + + /* Architecture specific sorting. */ + return arch_evlist__cmp(lhs, rhs); +} + +static void parse_events__sort_events_and_fix_groups(struct list_head *list) +{ + int idx = -1; + struct evsel *pos, *cur_leader = NULL; + struct perf_evsel *cur_leaders_grp = NULL; + + /* + * Compute index to insert ungrouped events at. Place them where the + * first ungrouped event appears. + */ + list_for_each_entry(pos, list, core.node) { + const struct evsel *pos_leader = evsel__leader(pos); + + if (pos != pos_leader || pos->core.nr_members > 1) + continue; + + idx = pos->core.idx; + break; + } + + /* Sort events. */ + list_sort(&idx, list, evlist__cmp); + + /* + * Recompute groups, splitting for PMUs and adding groups for events + * that require them. + */ + idx = 0; + list_for_each_entry(pos, list, core.node) { + const struct evsel *pos_leader = evsel__leader(pos); + const char *pos_pmu_name = evsel__group_pmu_name(pos); + const char *cur_leader_pmu_name, *pos_leader_pmu_name; + bool force_grouped = arch_evsel__must_be_in_group(pos); + + /* Reset index and nr_members. */ + pos->core.idx = idx++; + pos->core.nr_members = 0; + + /* + * Set the group leader respecting the given groupings and that + * groups can't span PMUs. + */ + if (!cur_leader) + cur_leader = pos; + + cur_leader_pmu_name = evsel__group_pmu_name(cur_leader); + if ((cur_leaders_grp != pos->core.leader && !force_grouped) || + strcmp(cur_leader_pmu_name, pos_pmu_name)) { + /* Event is for a different group/PMU than last. */ + cur_leader = pos; + /* + * Remember the leader's group before it is overwritten, + * so that later events match as being in the same + * group. + */ + cur_leaders_grp = pos->core.leader; + } + pos_leader_pmu_name = evsel__group_pmu_name(pos_leader); + if (strcmp(pos_leader_pmu_name, pos_pmu_name) || force_grouped) { + /* + * Event's PMU differs from its leader's. Groups can't + * span PMUs, so update leader from the group/PMU + * tracker. + */ + evsel__set_leader(pos, cur_leader); + } + } + list_for_each_entry(pos, list, core.node) { + pos->core.leader->nr_members++; + } +} + int __parse_events(struct evlist *evlist, const char *str, struct parse_events_error *err, struct perf_pmu *fake_pmu) { @@ -2266,6 +2256,8 @@ int __parse_events(struct evlist *evlist, const char *str, return -1; } + parse_events__sort_events_and_fix_groups(&parse_state.list); + /* * Add list to the evlist even with errors to allow callers to clean up. */ diff --git a/tools/perf/util/parse-events.h b/tools/perf/util/parse-events.h index 428e72eaafcc..22fc11b0bd59 100644 --- a/tools/perf/util/parse-events.h +++ b/tools/perf/util/parse-events.h @@ -200,8 +200,7 @@ int parse_events_copy_term_list(struct list_head *old, enum perf_pmu_event_symbol_type perf_pmu__parse_check(const char *name); -void parse_events__set_leader(char *name, struct list_head *list, - struct parse_events_state *parse_state); +void parse_events__set_leader(char *name, struct list_head *list); void parse_events_update_lists(struct list_head *list_event, struct list_head *list_all); void parse_events_evlist_error(struct parse_events_state *parse_state, diff --git a/tools/perf/util/parse-events.y b/tools/perf/util/parse-events.y index 541b8dde2063..90d12f2bc8be 100644 --- a/tools/perf/util/parse-events.y +++ b/tools/perf/util/parse-events.y @@ -203,7 +203,7 @@ PE_NAME '{' events '}' inc_group_count(list, _parse_state); /* Takes ownership of $1. */ - parse_events__set_leader($1, list, _parse_state); + parse_events__set_leader($1, list); $$ = list; } | @@ -212,7 +212,7 @@ PE_NAME '{' events '}' struct list_head *list = $2; inc_group_count(list, _parse_state); - parse_events__set_leader(NULL, list, _parse_state); + parse_events__set_leader(NULL, list); $$ = list; } From patchwork Wed Mar 8 22:59:10 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ian Rogers X-Patchwork-Id: 66504 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a5d:5915:0:0:0:0:0 with SMTP id v21csp631523wrd; Wed, 8 Mar 2023 15:17:32 -0800 (PST) X-Google-Smtp-Source: AK7set9yqtwodz+0NOuqyYYzhy3D74LDIvXWLcKWZdO2uJhMwuhtW+WceDNwb3QGlXfOzg3QctJy X-Received: by 2002:a17:90b:3810:b0:237:62f7:3106 with SMTP id mq16-20020a17090b381000b0023762f73106mr20986029pjb.17.1678317452099; Wed, 08 Mar 2023 15:17:32 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1678317452; cv=none; d=google.com; s=arc-20160816; b=gPIf/GwVII5mkuP918a7hxPli37MsmYwLAgnYjDUZAGMcW0xrD6Xf0XKsIqDKKyTvq A0hlSHgw+gN81wYVr7tmWhShi9X4dOAv9AUFxZJ3GTjG9Qn4b3qiA4FLwEeTwLNrmMyh o19bCi/ch0tuMJOh6v+OBIa5Iy0yc1t2LI1L0p7nv2S+DuGwTHgjw8MKgV3NEqsFpfpF CPifHjIHCwuDFe/abKemILesJzMGquS6nkosbKKJlXe0HZKqvKUyYYKqafUC/cgw2FG9 5GOUJ2sO0BM/if/PWID6OvMRSiciBTvOkZ1AS0GFWQ90sQ6aVMqHrF60W/sf8BB62ya0 RfWw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:from:subject:references:mime-version :message-id:in-reply-to:date:dkim-signature; bh=2Zi5p4CfxjslDfFVesFPJB5iL1V/LCfUtX6duyKxd8c=; b=Aae5kHQzT09lSI/C8cuCYfhsO2APampnf3PgVCo7fjh778QXW3wCPkcpYXwnIVk/Rx 5xbO/UERevilmSF3tHymezBW4MI64q6SbGFdyr50T9eM30YEBcAxijrRVDoWib5FLvPq ysW9ggTqa9agx0w7c0QK1FKeov8iGrC78IE09UgUGXt9qX+wCDzCL3A2oU13McQEJmiY sFnl6X6ZxTu9W70tuQzkMGsyFEu6HprOmTe3hIpncPTQbdqDUdoZYbw+Kf8zDfW8xv+v 6JoHz8qAHpD5aHUYrk70PG/fhw/7fUQ6CuGPHpF1m2CYXC0zWSnDXLXjdjj1+Zf79dKr ObHA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20210112 header.b=LjXnz6DY; 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: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id q128-20020a632a86000000b004fb961e0592si2728910pgq.565.2023.03.08.15.17.18; Wed, 08 Mar 2023 15:17:32 -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=@google.com header.s=20210112 header.b=LjXnz6DY; 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 S230094AbjCHXBk (ORCPT + 99 others); Wed, 8 Mar 2023 18:01:40 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:37694 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229890AbjCHXAy (ORCPT ); Wed, 8 Mar 2023 18:00:54 -0500 Received: from mail-yb1-xb4a.google.com (mail-yb1-xb4a.google.com [IPv6:2607:f8b0:4864:20::b4a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 1186ED4629 for ; Wed, 8 Mar 2023 15:00:30 -0800 (PST) Received: by mail-yb1-xb4a.google.com with SMTP id 66-20020a250245000000b00a53c1100d72so323754ybc.0 for ; Wed, 08 Mar 2023 15:00:29 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; t=1678316429; h=cc:to:from:subject:references:mime-version:message-id:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=2Zi5p4CfxjslDfFVesFPJB5iL1V/LCfUtX6duyKxd8c=; b=LjXnz6DYYHiDu0X6k350blzWWPP29FXBN3YNRMvopF8r7Lc7RlcvqEpNQvK9vITACB 9x2gwhIxO26Emxvg3atH7tRzm1RW9pN+P6hFR6ql1IaCfQQIwtQkFDn3E0iL01sTpoAS g0CdUR15/KIPqui4Zo6azyn2S95kAWNJlejhOld9CRFHApmT1taz3jvmKx8Af4goarhl z5anuYxdnOZmri52Y2IYS3zn2hEU/0rDF4RzzfqLOsNpA9I6o22Wo23VmQ3BAgmCv8uP 91kguIs5EmjxYORgf7QlC1eBsLbfd7uzhaQCG4dzdvAhNZLpCLsAPPD4rJOeJnFYWD/V pKnQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1678316429; h=cc: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=2Zi5p4CfxjslDfFVesFPJB5iL1V/LCfUtX6duyKxd8c=; b=4Gs7iH8xLOEsalC5uL6eIifyDhCqh5sYqouNpOn33Vh9K2zSJx1QjD0BxH+MkF8IXp Mvq+5EoJHb6/iUX7QREuyYSZLpDZiki5wYlkGBs7loXZo3vY3oTgsSG95nq7jeluKdC/ DXUr+662+WrAqwrHpZ8fZoT6uo10zgqzJNCKT88hqOFdPVzC0VUWtpJBtnBED52Zyk/V 5xqttkMGdCfVYLQrtVtvoZUC+A6YhEshLmYrn7TQqKb0OBMwZKkW+4JTgg9YfUfF/USF Uaj353dgHhhJYvZQOp28yizgWrYaA9W8YG3e80mn4Pr0cs2Eao0xPGByhKhLP6X+Yzcg sWQQ== X-Gm-Message-State: AO0yUKW78L8Qhreu5bi9akHAr5ljiEW5/DOiOXb1qFpt4mFgVB5Qr3yZ 1qvr/WK25yPEkxrBuN8hsECPks+PKk+C X-Received: from irogers.svl.corp.google.com ([2620:15c:2d4:203:5292:ba14:c261:246a]) (user=irogers job=sendgmr) by 2002:a0d:c903:0:b0:514:dae0:21ef with SMTP id l3-20020a0dc903000000b00514dae021efmr1ywd.133.1678316428741; Wed, 08 Mar 2023 15:00:28 -0800 (PST) Date: Wed, 8 Mar 2023 14:59:10 -0800 In-Reply-To: <20230308225912.1960990-1-irogers@google.com> Message-Id: <20230308225912.1960990-10-irogers@google.com> Mime-Version: 1.0 References: <20230308225912.1960990-1-irogers@google.com> X-Mailer: git-send-email 2.40.0.rc0.216.gc4246ad0f0-goog Subject: [PATCH v4 09/11] perf evsel: Remove use_uncore_alias From: Ian Rogers To: Peter Zijlstra , Ingo Molnar , Mark Rutland , Adrian Hunter , Alexander Shishkin , Jiri Olsa , Namhyung Kim , Kan Liang , Zhengjun Xing , Ravi Bangoria , "Steinar H. Gunderson" , Kim Phillips , Florian Fischer , James Clark , Suzuki Poulouse , Sean Christopherson , Leo Yan , John Garry , Kajol Jain , linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org Cc: Stephane Eranian , Ian Rogers X-Spam-Status: No, score=-9.6 required=5.0 tests=BAYES_00,DKIMWL_WL_MED, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_NONE, SPF_HELO_NONE,SPF_PASS,USER_IN_DEF_DKIM_WL 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 X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1759843400408366746?= X-GMAIL-MSGID: =?utf-8?q?1759843400408366746?= This flag used to be used when regrouping uncore events in particular due to wildcard matches. This is now handled by sorting evlist and so the flag is redundant. Signed-off-by: Ian Rogers --- tools/perf/util/evsel.c | 1 - tools/perf/util/evsel.h | 1 - tools/perf/util/parse-events.c | 12 +++--------- tools/perf/util/parse-events.h | 3 +-- tools/perf/util/parse-events.y | 11 +++++++---- 5 files changed, 11 insertions(+), 17 deletions(-) diff --git a/tools/perf/util/evsel.c b/tools/perf/util/evsel.c index 51d9650267d0..b9b05091bc8f 100644 --- a/tools/perf/util/evsel.c +++ b/tools/perf/util/evsel.c @@ -458,7 +458,6 @@ struct evsel *evsel__clone(struct evsel *orig) evsel->per_pkg = orig->per_pkg; evsel->percore = orig->percore; evsel->precise_max = orig->precise_max; - evsel->use_uncore_alias = orig->use_uncore_alias; evsel->is_libpfm_event = orig->is_libpfm_event; evsel->exclude_GH = orig->exclude_GH; diff --git a/tools/perf/util/evsel.h b/tools/perf/util/evsel.h index d26745ca6147..c272c06565c0 100644 --- a/tools/perf/util/evsel.h +++ b/tools/perf/util/evsel.h @@ -89,7 +89,6 @@ struct evsel { bool per_pkg; bool percore; bool precise_max; - bool use_uncore_alias; bool is_libpfm_event; bool auto_merge_stats; bool collect_stat; diff --git a/tools/perf/util/parse-events.c b/tools/perf/util/parse-events.c index 394ab23089d0..93a90651266f 100644 --- a/tools/perf/util/parse-events.c +++ b/tools/perf/util/parse-events.c @@ -1445,15 +1445,13 @@ static int parse_events__inside_hybrid_pmu(struct parse_events_state *parse_stat int parse_events_add_pmu(struct parse_events_state *parse_state, struct list_head *list, char *name, struct list_head *head_config, - bool auto_merge_stats, - bool use_alias) + bool auto_merge_stats) { struct perf_event_attr attr; struct perf_pmu_info info; struct perf_pmu *pmu; struct evsel *evsel; struct parse_events_error *err = parse_state->error; - bool use_uncore_alias; LIST_HEAD(config_terms); pmu = parse_state->fake_pmu ?: perf_pmu__find(name); @@ -1488,8 +1486,6 @@ int parse_events_add_pmu(struct parse_events_state *parse_state, memset(&attr, 0, sizeof(attr)); } - use_uncore_alias = (pmu->is_uncore && use_alias); - if (!head_config) { attr.type = pmu->type; evsel = __add_event(list, &parse_state->idx, &attr, @@ -1499,7 +1495,6 @@ int parse_events_add_pmu(struct parse_events_state *parse_state, /*cpu_list=*/NULL); if (evsel) { evsel->pmu_name = name ? strdup(name) : NULL; - evsel->use_uncore_alias = use_uncore_alias; return 0; } else { return -ENOMEM; @@ -1560,7 +1555,6 @@ int parse_events_add_pmu(struct parse_events_state *parse_state, evsel->use_config_name = true; evsel->pmu_name = name ? strdup(name) : NULL; - evsel->use_uncore_alias = use_uncore_alias; evsel->percore = config_term_percore(&evsel->config_terms); if (parse_state->fake_pmu) @@ -1622,7 +1616,7 @@ int parse_events_multi_pmu_add(struct parse_events_state *parse_state, parse_events_copy_term_list(head, &orig_head); if (!parse_events_add_pmu(parse_state, list, pmu->name, orig_head, - true, true)) { + /*auto_merge_stats=*/true)) { pr_debug("%s -> %s/%s/\n", str, pmu->name, alias->str); ok++; @@ -1634,7 +1628,7 @@ int parse_events_multi_pmu_add(struct parse_events_state *parse_state, if (parse_state->fake_pmu) { if (!parse_events_add_pmu(parse_state, list, str, head, - true, true)) { + /*auto_merge_stats=*/true)) { pr_debug("%s -> %s/%s/\n", str, "fake_pmu", str); ok++; } diff --git a/tools/perf/util/parse-events.h b/tools/perf/util/parse-events.h index 22fc11b0bd59..fdac44dc696b 100644 --- a/tools/perf/util/parse-events.h +++ b/tools/perf/util/parse-events.h @@ -183,8 +183,7 @@ int parse_events_add_breakpoint(struct list_head *list, int *idx, int parse_events_add_pmu(struct parse_events_state *parse_state, struct list_head *list, char *name, struct list_head *head_config, - bool auto_merge_stats, - bool use_alias); + bool auto_merge_stats); struct evsel *parse_events__add_event(int idx, struct perf_event_attr *attr, const char *name, const char *metric_id, diff --git a/tools/perf/util/parse-events.y b/tools/perf/util/parse-events.y index 90d12f2bc8be..f1b153c72d67 100644 --- a/tools/perf/util/parse-events.y +++ b/tools/perf/util/parse-events.y @@ -313,7 +313,7 @@ event_pmu_name opt_pmu_config list = alloc_list(); if (!list) CLEANUP_YYABORT; - if (parse_events_add_pmu(_parse_state, list, $1, $2, false, false)) { + if (parse_events_add_pmu(_parse_state, list, $1, $2, /*auto_merge_stats=*/false)) { struct perf_pmu *pmu = NULL; int ok = 0; @@ -330,8 +330,10 @@ event_pmu_name opt_pmu_config !perf_pmu__match(pattern, pmu->alias_name, $1)) { if (parse_events_copy_term_list(orig_terms, &terms)) CLEANUP_YYABORT; - if (!parse_events_add_pmu(_parse_state, list, pmu->name, terms, true, false)) + if (!parse_events_add_pmu(_parse_state, list, pmu->name, terms, + /*auto_merge_stats=*/true)) { ok++; + } parse_events_terms__delete(terms); } } @@ -407,7 +409,8 @@ PE_PMU_EVENT_FAKE sep_dc if (!list) YYABORT; - err = parse_events_add_pmu(_parse_state, list, $1, NULL, false, false); + err = parse_events_add_pmu(_parse_state, list, $1, /*head_config=*/NULL, + /*auto_merge_stats=*/false); free($1); if (err < 0) { free(list); @@ -425,7 +428,7 @@ PE_PMU_EVENT_FAKE opt_pmu_config if (!list) YYABORT; - err = parse_events_add_pmu(_parse_state, list, $1, $2, false, false); + err = parse_events_add_pmu(_parse_state, list, $1, $2, /*auto_merge_stats=*/false); free($1); parse_events_terms__delete($2); if (err < 0) { From patchwork Wed Mar 8 22:59:11 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ian Rogers X-Patchwork-Id: 66511 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a5d:5915:0:0:0:0:0 with SMTP id v21csp640059wrd; Wed, 8 Mar 2023 15:37:01 -0800 (PST) X-Google-Smtp-Source: AK7set8OaM+O8oUemRUzYUXqrkFWMgoVY3ZZBFAitI5zs0/FpPK8VCtH5CTFLRq+kdFtJ3/bKy1L X-Received: by 2002:a17:902:d501:b0:19d:1a8e:836f with SMTP id b1-20020a170902d50100b0019d1a8e836fmr22266093plg.27.1678318620865; Wed, 08 Mar 2023 15:37:00 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1678318620; cv=none; d=google.com; s=arc-20160816; b=o/LSv3b4zmKg8BxRVwZDCO83SwUJdLzLMyyDpXBxMyOPg5BMaXpTgGYd7BC9Dd3yqX Qen6nn2HALH4zHrIxfEW9bTpYqxQBTbJP3cgHzmyjt4/9YqSSXMSItpF5uB1X7qiaCDt d4HFH6UrxxxXW+Z8rAMM7oVimRg9u5WkE+8hbIiccBxXlNCfSx+CKPp1bHFQujzj+1ab Zl4AcPkDEKJLygvXmKSI8axq00vgHF5g2rOGZruLzGuVqM7ja5EikBZmMf9DZitK7UkB G/lW3BTAy2EalS0tX9Gd9udG8EhGl6EtBsCbmR30fwTUJ5cgfuDsc/Bq8fn2TJE5Jjvy hr2Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:from:subject:references:mime-version :message-id:in-reply-to:date:dkim-signature; bh=Gr9o+R/CRsbK0cOsCTFu2nFgylu16NaEKJci5BNiDf8=; b=k1Keb3K2XhkCCjW/iovFQHUaf2iLSiB9D1gH0T7FnAgwiv6mSAGGa3tBEBk3k2s2/N 6+E7vQodNiYckUvnJTHoEgu69xhJiZQGIzf7igN5xEZ4745kBOgr/MdlwQyEvYoTNVqC LVktxC7jgwwA2At8MYCPLRMyK+t4eld5H3MVLhlZrNTIZPecEyje4hVlCdpLnRrsvY49 Ocqs/daWpHdwNUgTmC6kQAcppQOGHHAtnwwl109+ZEP7PP6F7dBLQZHCCin1GZqGN8mL LWqGPwZRY9ogewqQR19eSQjpkc49Wh3Q4DkSxM06Y46ZnpWJ7kGRrfHPJpv2MZwAq2TI N3Lg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20210112 header.b=kI9qeMve; 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: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id kz5-20020a170902f9c500b0019ca54bebc3si14506501plb.426.2023.03.08.15.36.46; Wed, 08 Mar 2023 15:37:00 -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=@google.com header.s=20210112 header.b=kI9qeMve; 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 S230217AbjCHXBt (ORCPT + 99 others); Wed, 8 Mar 2023 18:01:49 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:38786 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230171AbjCHXBF (ORCPT ); Wed, 8 Mar 2023 18:01:05 -0500 Received: from mail-yw1-x1149.google.com (mail-yw1-x1149.google.com [IPv6:2607:f8b0:4864:20::1149]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id E4E46D49E3 for ; Wed, 8 Mar 2023 15:00:37 -0800 (PST) Received: by mail-yw1-x1149.google.com with SMTP id 00721157ae682-536bbaeceeaso636987b3.11 for ; Wed, 08 Mar 2023 15:00:37 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; t=1678316436; h=cc:to:from:subject:references:mime-version:message-id:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=Gr9o+R/CRsbK0cOsCTFu2nFgylu16NaEKJci5BNiDf8=; b=kI9qeMveB7yUpWizpzIt/xrc0u0AZA+fVu5wZYDLdZnSuPD2LbulzukjiccC9OkcCk lxlxld3QIGoPa97Wyx7qjKklRoaPjBFKeUV35r30z3l1F/XO1AKagLgH96Mis8fKZyOE 4eUCmydYWYylxa3pqN53BRcf4oTRVJYFTxFW4kO1VfnyLTWZ3A4EvbAlJQyBpkZMHuJi WSWJqKzXEW9yZYVDFywY1r+AjP+WmIQNXYwe24tCJQKloP24MY/4rnkKAPxte1qReXxc l1TjiPvouoC94NH3BL0DXgUT25HjiSvBSfOXg3i5YZ0vwJ/UofntANqq0sykyC0U66O3 na7A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1678316436; h=cc: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=Gr9o+R/CRsbK0cOsCTFu2nFgylu16NaEKJci5BNiDf8=; b=XfMJ81eUp3l7HQPrmQS7+SfcUwzGIlea4EVt8zWu/AbLyk02bWlFFV1lEhZZFLItoe cKj96zG/O6u4Lw9JIvGW0hkjlIsXOdMiLgHfT/Fm0IwKmljZz7WzM6D+YA5OYRdsthVH 8EAgQ3xwXrlJ7VT/3Fo04kXNsa5khiGW8Z1xN2bp1F0AyIQTHQtt4NCzb6CNPPhf8HTa NMUTfsh+LPMbLGo/EqO93nrYD7YOIA+FrdvwgwQVKCT3TCvG6jnTkSZyFLwtmal9jGE7 y8L81z2vHvvq45LTHF14uvO5jh2PzTXbbUuoQuTCrxwJbjSzjyMl5ozOEyG7KxoomGm5 NDWw== X-Gm-Message-State: AO0yUKWIShFqoJyxWHuNBeuIKNzwnM/ty3bCFnmJcW3rHymGmwa1uf3R ybJg0hNbCGZYv82o86dRYw8Mj2JtYTRF X-Received: from irogers.svl.corp.google.com ([2620:15c:2d4:203:5292:ba14:c261:246a]) (user=irogers job=sendgmr) by 2002:a5b:cd1:0:b0:a48:4a16:d85e with SMTP id e17-20020a5b0cd1000000b00a484a16d85emr11815061ybr.7.1678316436365; Wed, 08 Mar 2023 15:00:36 -0800 (PST) Date: Wed, 8 Mar 2023 14:59:11 -0800 In-Reply-To: <20230308225912.1960990-1-irogers@google.com> Message-Id: <20230308225912.1960990-11-irogers@google.com> Mime-Version: 1.0 References: <20230308225912.1960990-1-irogers@google.com> X-Mailer: git-send-email 2.40.0.rc0.216.gc4246ad0f0-goog Subject: [PATCH v4 10/11] perf evlist: Remove nr_groups From: Ian Rogers To: Peter Zijlstra , Ingo Molnar , Mark Rutland , Adrian Hunter , Alexander Shishkin , Jiri Olsa , Namhyung Kim , Kan Liang , Zhengjun Xing , Ravi Bangoria , "Steinar H. Gunderson" , Kim Phillips , Florian Fischer , James Clark , Suzuki Poulouse , Sean Christopherson , Leo Yan , John Garry , Kajol Jain , linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org Cc: Stephane Eranian , Ian Rogers X-Spam-Status: No, score=-9.6 required=5.0 tests=BAYES_00,DKIMWL_WL_MED, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_NONE, SPF_HELO_NONE,SPF_PASS,USER_IN_DEF_DKIM_WL 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 X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1759844626030977610?= X-GMAIL-MSGID: =?utf-8?q?1759844626030977610?= Maintaining the number of groups during event parsing is problematic and since changing to sort/regroup events can only be computed by a linear pass over the evlist. As the value is generally only used in tests, rather than hold it in a variable compute it by passing over the evlist when necessary. This change highlights that libpfm's counting of groups with a single entry disagreed with regular event parsing. The libpfm tests are updated accordingly. Signed-off-by: Ian Rogers --- tools/lib/perf/evlist.c | 18 +++++++++++++++++- tools/lib/perf/include/internal/evlist.h | 1 - tools/lib/perf/include/perf/evlist.h | 1 + tools/perf/builtin-record.c | 2 +- tools/perf/builtin-report.c | 2 +- tools/perf/tests/bpf.c | 1 - tools/perf/tests/parse-events.c | 22 +++++++++++----------- tools/perf/tests/pfm.c | 12 ++++++------ tools/perf/util/evlist.c | 2 +- tools/perf/util/evlist.h | 6 ++++++ tools/perf/util/header.c | 3 +-- tools/perf/util/parse-events.c | 1 - tools/perf/util/parse-events.h | 1 - tools/perf/util/parse-events.y | 10 ---------- tools/perf/util/pfm.c | 1 - 15 files changed, 45 insertions(+), 38 deletions(-) diff --git a/tools/lib/perf/evlist.c b/tools/lib/perf/evlist.c index 2d6121e89ccb..81e8b5fcd8ba 100644 --- a/tools/lib/perf/evlist.c +++ b/tools/lib/perf/evlist.c @@ -703,7 +703,23 @@ void perf_evlist__set_leader(struct perf_evlist *evlist) struct perf_evsel *first = list_entry(evlist->entries.next, struct perf_evsel, node); - evlist->nr_groups = evlist->nr_entries > 1 ? 1 : 0; __perf_evlist__set_leader(&evlist->entries, first); } } + +int perf_evlist__nr_groups(struct perf_evlist *evlist) +{ + struct perf_evsel *evsel; + int nr_groups = 0; + + perf_evlist__for_each_evsel(evlist, evsel) { + /* + * evsels by default have a nr_members of 1, and they are their + * own leader. If the nr_members is >1 then this is an + * indication of a group. + */ + if (evsel->leader == evsel && evsel->nr_members > 1) + nr_groups++; + } + return nr_groups; +} diff --git a/tools/lib/perf/include/internal/evlist.h b/tools/lib/perf/include/internal/evlist.h index 850f07070036..3339bc2f1765 100644 --- a/tools/lib/perf/include/internal/evlist.h +++ b/tools/lib/perf/include/internal/evlist.h @@ -17,7 +17,6 @@ struct perf_mmap_param; struct perf_evlist { struct list_head entries; int nr_entries; - int nr_groups; bool has_user_cpus; bool needs_map_propagation; /** diff --git a/tools/lib/perf/include/perf/evlist.h b/tools/lib/perf/include/perf/evlist.h index 9ca399d49bb4..e894b770779e 100644 --- a/tools/lib/perf/include/perf/evlist.h +++ b/tools/lib/perf/include/perf/evlist.h @@ -47,4 +47,5 @@ LIBPERF_API struct perf_mmap *perf_evlist__next_mmap(struct perf_evlist *evlist, (pos) = perf_evlist__next_mmap((evlist), (pos), overwrite)) LIBPERF_API void perf_evlist__set_leader(struct perf_evlist *evlist); +LIBPERF_API int perf_evlist__nr_groups(struct perf_evlist *evlist); #endif /* __LIBPERF_EVLIST_H */ diff --git a/tools/perf/builtin-record.c b/tools/perf/builtin-record.c index 8374117e66f6..e71c110a0cd4 100644 --- a/tools/perf/builtin-record.c +++ b/tools/perf/builtin-record.c @@ -2474,7 +2474,7 @@ static int __cmd_record(struct record *rec, int argc, const char **argv) rec->tool.ordered_events = false; } - if (!rec->evlist->core.nr_groups) + if (evlist__nr_groups(rec->evlist) == 0) perf_header__clear_feat(&session->header, HEADER_GROUP_DESC); if (data->is_pipe) { diff --git a/tools/perf/builtin-report.c b/tools/perf/builtin-report.c index 2ee2ecca208e..6400615b5e98 100644 --- a/tools/perf/builtin-report.c +++ b/tools/perf/builtin-report.c @@ -1481,7 +1481,7 @@ int cmd_report(int argc, const char **argv) setup_forced_leader(&report, session->evlist); - if (symbol_conf.group_sort_idx && !session->evlist->core.nr_groups) { + if (symbol_conf.group_sort_idx && evlist__nr_groups(session->evlist) == 0) { parse_options_usage(NULL, options, "group-sort-idx", 0); ret = -EINVAL; goto error; diff --git a/tools/perf/tests/bpf.c b/tools/perf/tests/bpf.c index ae9223f27cfb..8beb46066034 100644 --- a/tools/perf/tests/bpf.c +++ b/tools/perf/tests/bpf.c @@ -153,7 +153,6 @@ static int do_test(struct bpf_object *obj, int (*func)(void), } evlist__splice_list_tail(evlist, &parse_state.list); - evlist->core.nr_groups = parse_state.nr_groups; evlist__config(evlist, &opts, NULL); diff --git a/tools/perf/tests/parse-events.c b/tools/perf/tests/parse-events.c index 71a5cb343311..ffa6f0a90741 100644 --- a/tools/perf/tests/parse-events.c +++ b/tools/perf/tests/parse-events.c @@ -53,7 +53,7 @@ static int test__checkevent_tracepoint(struct evlist *evlist) struct evsel *evsel = evlist__first(evlist); TEST_ASSERT_VAL("wrong number of entries", 1 == evlist->core.nr_entries); - TEST_ASSERT_VAL("wrong number of groups", 0 == evlist->core.nr_groups); + TEST_ASSERT_VAL("wrong number of groups", 0 == evlist__nr_groups(evlist)); TEST_ASSERT_VAL("wrong type", PERF_TYPE_TRACEPOINT == evsel->core.attr.type); TEST_ASSERT_VAL("wrong sample_type", PERF_TP_SAMPLE_TYPE == evsel->core.attr.sample_type); @@ -66,7 +66,7 @@ static int test__checkevent_tracepoint_multi(struct evlist *evlist) struct evsel *evsel; TEST_ASSERT_VAL("wrong number of entries", evlist->core.nr_entries > 1); - TEST_ASSERT_VAL("wrong number of groups", 0 == evlist->core.nr_groups); + TEST_ASSERT_VAL("wrong number of groups", 0 == evlist__nr_groups(evlist)); evlist__for_each_entry(evlist, evsel) { TEST_ASSERT_VAL("wrong type", @@ -677,7 +677,7 @@ static int test__group1(struct evlist *evlist) struct evsel *evsel, *leader; TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries); - TEST_ASSERT_VAL("wrong number of groups", 1 == evlist->core.nr_groups); + TEST_ASSERT_VAL("wrong number of groups", 1 == evlist__nr_groups(evlist)); /* instructions:k */ evsel = leader = evlist__first(evlist); @@ -719,7 +719,7 @@ static int test__group2(struct evlist *evlist) struct evsel *evsel, *leader; TEST_ASSERT_VAL("wrong number of entries", 3 == evlist->core.nr_entries); - TEST_ASSERT_VAL("wrong number of groups", 1 == evlist->core.nr_groups); + TEST_ASSERT_VAL("wrong number of groups", 1 == evlist__nr_groups(evlist)); /* faults + :ku modifier */ evsel = leader = evlist__first(evlist); @@ -775,7 +775,7 @@ static int test__group3(struct evlist *evlist __maybe_unused) struct evsel *evsel, *leader; TEST_ASSERT_VAL("wrong number of entries", 5 == evlist->core.nr_entries); - TEST_ASSERT_VAL("wrong number of groups", 2 == evlist->core.nr_groups); + TEST_ASSERT_VAL("wrong number of groups", 2 == evlist__nr_groups(evlist)); /* group1 syscalls:sys_enter_openat:H */ evsel = leader = evlist__first(evlist); @@ -868,7 +868,7 @@ static int test__group4(struct evlist *evlist __maybe_unused) struct evsel *evsel, *leader; TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries); - TEST_ASSERT_VAL("wrong number of groups", 1 == evlist->core.nr_groups); + TEST_ASSERT_VAL("wrong number of groups", 1 == evlist__nr_groups(evlist)); /* cycles:u + p */ evsel = leader = evlist__first(evlist); @@ -912,7 +912,7 @@ static int test__group5(struct evlist *evlist __maybe_unused) struct evsel *evsel, *leader; TEST_ASSERT_VAL("wrong number of entries", 5 == evlist->core.nr_entries); - TEST_ASSERT_VAL("wrong number of groups", 2 == evlist->core.nr_groups); + TEST_ASSERT_VAL("wrong number of groups", 2 == evlist__nr_groups(evlist)); /* cycles + G */ evsel = leader = evlist__first(evlist); @@ -998,7 +998,7 @@ static int test__group_gh1(struct evlist *evlist) struct evsel *evsel, *leader; TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries); - TEST_ASSERT_VAL("wrong number of groups", 1 == evlist->core.nr_groups); + TEST_ASSERT_VAL("wrong number of groups", 1 == evlist__nr_groups(evlist)); /* cycles + :H group modifier */ evsel = leader = evlist__first(evlist); @@ -1038,7 +1038,7 @@ static int test__group_gh2(struct evlist *evlist) struct evsel *evsel, *leader; TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries); - TEST_ASSERT_VAL("wrong number of groups", 1 == evlist->core.nr_groups); + TEST_ASSERT_VAL("wrong number of groups", 1 == evlist__nr_groups(evlist)); /* cycles + :G group modifier */ evsel = leader = evlist__first(evlist); @@ -1078,7 +1078,7 @@ static int test__group_gh3(struct evlist *evlist) struct evsel *evsel, *leader; TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries); - TEST_ASSERT_VAL("wrong number of groups", 1 == evlist->core.nr_groups); + TEST_ASSERT_VAL("wrong number of groups", 1 == evlist__nr_groups(evlist)); /* cycles:G + :u group modifier */ evsel = leader = evlist__first(evlist); @@ -1118,7 +1118,7 @@ static int test__group_gh4(struct evlist *evlist) struct evsel *evsel, *leader; TEST_ASSERT_VAL("wrong number of entries", 2 == evlist->core.nr_entries); - TEST_ASSERT_VAL("wrong number of groups", 1 == evlist->core.nr_groups); + TEST_ASSERT_VAL("wrong number of groups", 1 == evlist__nr_groups(evlist)); /* cycles:G + :uG group modifier */ evsel = leader = evlist__first(evlist); diff --git a/tools/perf/tests/pfm.c b/tools/perf/tests/pfm.c index 71b76deb1f92..2e38dfa34b6c 100644 --- a/tools/perf/tests/pfm.c +++ b/tools/perf/tests/pfm.c @@ -76,7 +76,7 @@ static int test__pfm_events(struct test_suite *test __maybe_unused, count_pfm_events(&evlist->core), table[i].nr_events); TEST_ASSERT_EQUAL(table[i].events, - evlist->core.nr_groups, + evlist__nr_groups(evlist), 0); evlist__delete(evlist); @@ -103,22 +103,22 @@ static int test__pfm_group(struct test_suite *test __maybe_unused, { .events = "{instructions}", .nr_events = 1, - .nr_groups = 1, + .nr_groups = 0, }, { .events = "{instructions},{}", .nr_events = 1, - .nr_groups = 1, + .nr_groups = 0, }, { .events = "{},{instructions}", .nr_events = 1, - .nr_groups = 1, + .nr_groups = 0, }, { .events = "{instructions},{instructions}", .nr_events = 2, - .nr_groups = 2, + .nr_groups = 0, }, { .events = "{instructions,cycles},{instructions,cycles}", @@ -161,7 +161,7 @@ static int test__pfm_group(struct test_suite *test __maybe_unused, count_pfm_events(&evlist->core), table[i].nr_events); TEST_ASSERT_EQUAL(table[i].events, - evlist->core.nr_groups, + evlist__nr_groups(evlist), table[i].nr_groups); evlist__delete(evlist); diff --git a/tools/perf/util/evlist.c b/tools/perf/util/evlist.c index 817df2504a1e..a5f406c468f8 100644 --- a/tools/perf/util/evlist.c +++ b/tools/perf/util/evlist.c @@ -1777,7 +1777,7 @@ bool evlist__exclude_kernel(struct evlist *evlist) */ void evlist__force_leader(struct evlist *evlist) { - if (!evlist->core.nr_groups) { + if (evlist__nr_groups(evlist) == 0) { struct evsel *leader = evlist__first(evlist); evlist__set_leader(evlist); diff --git a/tools/perf/util/evlist.h b/tools/perf/util/evlist.h index d89d8f92802b..46cf402add93 100644 --- a/tools/perf/util/evlist.h +++ b/tools/perf/util/evlist.h @@ -9,6 +9,7 @@ #include #include #include +#include #include "events_stats.h" #include "evsel.h" #include @@ -255,6 +256,11 @@ static inline struct evsel *evlist__last(struct evlist *evlist) return container_of(evsel, struct evsel, core); } +static inline int evlist__nr_groups(struct evlist *evlist) +{ + return perf_evlist__nr_groups(&evlist->core); +} + int evlist__strerror_open(struct evlist *evlist, int err, char *buf, size_t size); int evlist__strerror_mmap(struct evlist *evlist, int err, char *buf, size_t size); diff --git a/tools/perf/util/header.c b/tools/perf/util/header.c index 404d816ca124..276870221ce0 100644 --- a/tools/perf/util/header.c +++ b/tools/perf/util/header.c @@ -786,7 +786,7 @@ static int write_pmu_mappings(struct feat_fd *ff, static int write_group_desc(struct feat_fd *ff, struct evlist *evlist) { - u32 nr_groups = evlist->core.nr_groups; + u32 nr_groups = evlist__nr_groups(evlist); struct evsel *evsel; int ret; @@ -2807,7 +2807,6 @@ static int process_group_desc(struct feat_fd *ff, void *data __maybe_unused) * Rebuild group relationship based on the group_desc */ session = container_of(ff->ph, struct perf_session, header); - session->evlist->core.nr_groups = nr_groups; i = nr = 0; evlist__for_each_entry(session->evlist, evsel) { diff --git a/tools/perf/util/parse-events.c b/tools/perf/util/parse-events.c index 93a90651266f..9ec3c1dc81e0 100644 --- a/tools/perf/util/parse-events.c +++ b/tools/perf/util/parse-events.c @@ -2260,7 +2260,6 @@ int __parse_events(struct evlist *evlist, const char *str, if (!ret) { struct evsel *last; - evlist->core.nr_groups += parse_state.nr_groups; last = evlist__last(evlist); last->cmdline_group_boundary = true; diff --git a/tools/perf/util/parse-events.h b/tools/perf/util/parse-events.h index fdac44dc696b..767ad1729228 100644 --- a/tools/perf/util/parse-events.h +++ b/tools/perf/util/parse-events.h @@ -122,7 +122,6 @@ struct parse_events_error { struct parse_events_state { struct list_head list; int idx; - int nr_groups; struct parse_events_error *error; struct evlist *evlist; struct list_head *terms; diff --git a/tools/perf/util/parse-events.y b/tools/perf/util/parse-events.y index f1b153c72d67..3a04602d2982 100644 --- a/tools/perf/util/parse-events.y +++ b/tools/perf/util/parse-events.y @@ -49,14 +49,6 @@ static void free_list_evsel(struct list_head* list_evsel) free(list_evsel); } -static void inc_group_count(struct list_head *list, - struct parse_events_state *parse_state) -{ - /* Count groups only have more than 1 members */ - if (!list_is_last(list->next, list)) - parse_state->nr_groups++; -} - %} %token PE_START_EVENTS PE_START_TERMS @@ -201,7 +193,6 @@ PE_NAME '{' events '}' { struct list_head *list = $3; - inc_group_count(list, _parse_state); /* Takes ownership of $1. */ parse_events__set_leader($1, list); $$ = list; @@ -211,7 +202,6 @@ PE_NAME '{' events '}' { struct list_head *list = $2; - inc_group_count(list, _parse_state); parse_events__set_leader(NULL, list); $$ = list; } diff --git a/tools/perf/util/pfm.c b/tools/perf/util/pfm.c index b59ba825ddc9..6c11914c179f 100644 --- a/tools/perf/util/pfm.c +++ b/tools/perf/util/pfm.c @@ -112,7 +112,6 @@ int parse_libpfm_events_option(const struct option *opt, const char *str, "cannot close a non-existing event group\n"); goto error; } - evlist->core.nr_groups++; grp_leader = NULL; grp_evt = -1; } From patchwork Wed Mar 8 22:59:12 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ian Rogers X-Patchwork-Id: 66499 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a5d:5915:0:0:0:0:0 with SMTP id v21csp626248wrd; Wed, 8 Mar 2023 15:07:53 -0800 (PST) X-Google-Smtp-Source: AK7set/kgUEzg/2IKjMDDjXH+/DVjhOneECvsfSWGHVWYIyTJM3w59bTh9ojEUxkzDd0cwFGYiTG X-Received: by 2002:a17:902:d2c3:b0:19a:f02c:a05b with SMTP id n3-20020a170902d2c300b0019af02ca05bmr25384913plc.3.1678316872952; Wed, 08 Mar 2023 15:07:52 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1678316872; cv=none; d=google.com; s=arc-20160816; b=EY5PzIt8vRad+js93nHpYv0Ckmf2ngMaOAmzzyfTyea11os4M78nkd5Hb3IeLBT5mr w6iaVDJuyQO89mIuiq5Cx/7M//BrbNI0tnmmYWt5g9evUJ4oDPSPhoOotJD0DUuGmben OUNQdAQZHzwU3Q5b/JIpgIGXzserHax6Ba6ujoCF8UN3tSVQTHeieUT89KiTvcLkC0K4 SYelx3AT4Y4NN4+W6bDS6pLpMLV6PxU79l94xueBVPlQCXUAvdJncL+e0ehmrG+3JTlP JXIeU6RMC8OI1zffahVlN9+eH29UWrw9pV5wUAkM3AuLoT6OT1JqTvjMGKCtM/kIeseX x17A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:from:subject:references:mime-version :message-id:in-reply-to:date:dkim-signature; bh=x5MPo35xGT8I5no97e54JFoAV8IlgxfgBAbMEiQkE8U=; b=zMoccQOozThB3RAM13M7G0OwJdy2DA2l7XAKg9xEugx29mw7sLqPlIwsBjB4ePfpEs csaUQgcUdDk4z2nNxN1DehqdcI6lL66Y8RXyKI7rPIBAOLKd/hUEDjQtCSVvyJgbP5dQ RETA7KRkJXjIFeE1qwzbRqAi0Opd5l7PWMnD+Nn+rUlK9OUHh5cln/11MKV88+VzDqHP BShFltdV9vTQzvMIyoA3fO9Y0A2BnciaNEnC2MuW95f0huzPTc81iEEqyPY/4TevpbDx EsCMjoQN5TqaDhjNHrv02CI8d4CrowqDdjXlbJFG1OvNk/TG0PqC42oT1VVIl7bpTgfM h+ZA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20210112 header.b=tGLBbmk6; 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: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id a11-20020a170902b58b00b0019cafd4c385si14671149pls.408.2023.03.08.15.07.12; Wed, 08 Mar 2023 15:07:52 -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=@google.com header.s=20210112 header.b=tGLBbmk6; 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 S230057AbjCHXBz (ORCPT + 99 others); Wed, 8 Mar 2023 18:01:55 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:39608 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230226AbjCHXBO (ORCPT ); Wed, 8 Mar 2023 18:01:14 -0500 Received: from mail-yw1-x114a.google.com (mail-yw1-x114a.google.com [IPv6:2607:f8b0:4864:20::114a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 8D1F6D49FD for ; Wed, 8 Mar 2023 15:00:45 -0800 (PST) Received: by mail-yw1-x114a.google.com with SMTP id 00721157ae682-536c6ce8d74so700167b3.9 for ; Wed, 08 Mar 2023 15:00:45 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; t=1678316443; h=cc:to:from:subject:references:mime-version:message-id:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=x5MPo35xGT8I5no97e54JFoAV8IlgxfgBAbMEiQkE8U=; b=tGLBbmk6mEkyaPVhJkZRCYWA6iEy5ckHJhLPb7F8UqErknxUOA5qOz8VB2+BvRY4bN LDlVBlhI3wLjbVj3S+97kTVLarHFG7Lrd22PX3efIySxkJhUBeTHuy8uevzWBho3PT0g eGNFgG1G6cmd1vYXW2/tD2t/sXAnNbDrkNLVJtt2uCBDB9OnrkEiPxvGq3Hb/QRaIa6Q K9KToen8jFhaLhboI8Xddizefkh6aAtWbiw2O2763qDEgl95SYASXcSYvZqEfQNkDTbq ZwhhKNaoxsVZFPjJBaBUuCvBWdkt3EV5KLrFrfpOyhojPs9DO3VIJbqp5OSiObZ375yN bFbA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1678316443; h=cc: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=x5MPo35xGT8I5no97e54JFoAV8IlgxfgBAbMEiQkE8U=; b=klMTcq5fq7lkc6tvgXmbmRZzuLyjyoClWc1s0ruXIIjICXKmHfFUgXmhyn1fKMo29p 9HQDrwDBLyrblVKhytnXAH6US/lVUgjgHs/TM1ltfHn8wmSVk22UjJ69SiuJDRLGk/Px AcBtmz5MDeohRUugHjaAVKDxy8mgeYcO5KKyMKhEunRHi3Xu71i/GFEarHIWL0w8qhCe hvjDwxOz4jrlfXRSOgOEuwAq87j6a1Fo1xHe4XUjHtF+7Bzp0ubWWOa95TyaAOpa0hJD J0b8CoU8TZEhjc2PR6QU8Lv5N1G7phY11rf6tgCtzpuNUhozQYY9sJO3Hja7pAdQGpJm agNw== X-Gm-Message-State: AO0yUKVIdPYAYl8mWTrinB8tDpIpuGpqpxbYLitCElQSfFlorjLgaFPL bEtp93NEWeZKm7Out5DVqclo50Kh86vX X-Received: from irogers.svl.corp.google.com ([2620:15c:2d4:203:5292:ba14:c261:246a]) (user=irogers job=sendgmr) by 2002:a5b:e92:0:b0:ab8:1ed9:cfc9 with SMTP id z18-20020a5b0e92000000b00ab81ed9cfc9mr11861623ybr.6.1678316443692; Wed, 08 Mar 2023 15:00:43 -0800 (PST) Date: Wed, 8 Mar 2023 14:59:12 -0800 In-Reply-To: <20230308225912.1960990-1-irogers@google.com> Message-Id: <20230308225912.1960990-12-irogers@google.com> Mime-Version: 1.0 References: <20230308225912.1960990-1-irogers@google.com> X-Mailer: git-send-email 2.40.0.rc0.216.gc4246ad0f0-goog Subject: [PATCH v4 11/11] perf parse-events: Warn when events are regrouped From: Ian Rogers To: Peter Zijlstra , Ingo Molnar , Mark Rutland , Adrian Hunter , Alexander Shishkin , Jiri Olsa , Namhyung Kim , Kan Liang , Zhengjun Xing , Ravi Bangoria , "Steinar H. Gunderson" , Kim Phillips , Florian Fischer , James Clark , Suzuki Poulouse , Sean Christopherson , Leo Yan , John Garry , Kajol Jain , linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org Cc: Stephane Eranian , Ian Rogers X-Spam-Status: No, score=-9.6 required=5.0 tests=BAYES_00,DKIMWL_WL_MED, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_NONE, SPF_HELO_NONE,SPF_PASS,USER_IN_DEF_DKIM_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 X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1759842793590801782?= X-GMAIL-MSGID: =?utf-8?q?1759842793590801782?= Use if an event is reordered or the number of groups increases to signal that regrouping has happened and warn about it. Disable the warning in the case wild card PMU names are used and for metrics. Signed-off-by: Ian Rogers --- tools/perf/tests/parse-events.c | 2 +- tools/perf/tests/pmu-events.c | 2 +- tools/perf/util/metricgroup.c | 3 ++- tools/perf/util/parse-events.c | 28 ++++++++++++++++++++-------- tools/perf/util/parse-events.h | 7 ++++--- tools/perf/util/parse-events.y | 1 + 6 files changed, 29 insertions(+), 14 deletions(-) diff --git a/tools/perf/tests/parse-events.c b/tools/perf/tests/parse-events.c index ffa6f0a90741..b1c2f0a20306 100644 --- a/tools/perf/tests/parse-events.c +++ b/tools/perf/tests/parse-events.c @@ -2103,7 +2103,7 @@ static int test_event_fake_pmu(const char *str) parse_events_error__init(&err); perf_pmu__test_parse_init(); - ret = __parse_events(evlist, str, &err, &perf_pmu__fake); + ret = __parse_events(evlist, str, &err, &perf_pmu__fake, /*warn_if_reordered=*/true); if (ret) { pr_debug("failed to parse event '%s', err %d, str '%s'\n", str, ret, err.str); diff --git a/tools/perf/tests/pmu-events.c b/tools/perf/tests/pmu-events.c index 6ccd413b5983..7f8e86452527 100644 --- a/tools/perf/tests/pmu-events.c +++ b/tools/perf/tests/pmu-events.c @@ -785,7 +785,7 @@ static int check_parse_id(const char *id, struct parse_events_error *error, */ perf_pmu__test_parse_init(); } - ret = __parse_events(evlist, dup, error, fake_pmu); + ret = __parse_events(evlist, dup, error, fake_pmu, /*warn_if_reordered=*/true); free(dup); evlist__delete(evlist); diff --git a/tools/perf/util/metricgroup.c b/tools/perf/util/metricgroup.c index de6dd527a2ba..5783f4c2d1ef 100644 --- a/tools/perf/util/metricgroup.c +++ b/tools/perf/util/metricgroup.c @@ -1441,7 +1441,8 @@ static int parse_ids(bool metric_no_merge, struct perf_pmu *fake_pmu, } pr_debug("Parsing metric events '%s'\n", events.buf); parse_events_error__init(&parse_error); - ret = __parse_events(parsed_evlist, events.buf, &parse_error, fake_pmu); + ret = __parse_events(parsed_evlist, events.buf, &parse_error, fake_pmu, + /*warn_if_reordered=*/false); if (ret) { parse_events_error__print(&parse_error, events.buf); goto err_out; diff --git a/tools/perf/util/parse-events.c b/tools/perf/util/parse-events.c index 9ec3c1dc81e0..4bb28c32b511 100644 --- a/tools/perf/util/parse-events.c +++ b/tools/perf/util/parse-events.c @@ -2157,11 +2157,13 @@ static int evlist__cmp(void *state, const struct list_head *l, const struct list return arch_evlist__cmp(lhs, rhs); } -static void parse_events__sort_events_and_fix_groups(struct list_head *list) +static bool parse_events__sort_events_and_fix_groups(struct list_head *list) { int idx = -1; struct evsel *pos, *cur_leader = NULL; struct perf_evsel *cur_leaders_grp = NULL; + bool idx_changed = false; + int orig_num_leaders = 0, num_leaders = 0; /* * Compute index to insert ungrouped events at. Place them where the @@ -2170,11 +2172,11 @@ static void parse_events__sort_events_and_fix_groups(struct list_head *list) list_for_each_entry(pos, list, core.node) { const struct evsel *pos_leader = evsel__leader(pos); - if (pos != pos_leader || pos->core.nr_members > 1) - continue; + if (pos == pos_leader) + orig_num_leaders++; - idx = pos->core.idx; - break; + if (idx == -1 && pos == pos_leader && pos->core.nr_members < 2) + idx = pos->core.idx; } /* Sort events. */ @@ -2192,6 +2194,8 @@ static void parse_events__sort_events_and_fix_groups(struct list_head *list) bool force_grouped = arch_evsel__must_be_in_group(pos); /* Reset index and nr_members. */ + if (pos->core.idx != idx) + idx_changed = true; pos->core.idx = idx++; pos->core.nr_members = 0; @@ -2225,12 +2229,18 @@ static void parse_events__sort_events_and_fix_groups(struct list_head *list) } } list_for_each_entry(pos, list, core.node) { - pos->core.leader->nr_members++; + struct evsel *pos_leader = evsel__leader(pos); + + if (pos == pos_leader) + num_leaders++; + pos_leader->core.nr_members++; } + return idx_changed || num_leaders != orig_num_leaders; } int __parse_events(struct evlist *evlist, const char *str, - struct parse_events_error *err, struct perf_pmu *fake_pmu) + struct parse_events_error *err, struct perf_pmu *fake_pmu, + bool warn_if_reordered) { struct parse_events_state parse_state = { .list = LIST_HEAD_INIT(parse_state.list), @@ -2250,7 +2260,9 @@ int __parse_events(struct evlist *evlist, const char *str, return -1; } - parse_events__sort_events_and_fix_groups(&parse_state.list); + if (parse_events__sort_events_and_fix_groups(&parse_state.list) && + warn_if_reordered && !parse_state.wild_card_pmus) + pr_warning("WARNING: events were regrouped to match PMUs\n"); /* * Add list to the evlist even with errors to allow callers to clean up. diff --git a/tools/perf/util/parse-events.h b/tools/perf/util/parse-events.h index 767ad1729228..46204c1a7916 100644 --- a/tools/perf/util/parse-events.h +++ b/tools/perf/util/parse-events.h @@ -26,13 +26,13 @@ int parse_events_option(const struct option *opt, const char *str, int unset); int parse_events_option_new_evlist(const struct option *opt, const char *str, int unset); __attribute__((nonnull(1, 2, 3))) int __parse_events(struct evlist *evlist, const char *str, struct parse_events_error *error, - struct perf_pmu *fake_pmu); + struct perf_pmu *fake_pmu, bool warn_if_reordered); -__attribute__((nonnull)) +__attribute__((nonnull(1, 2, 3))) static inline int parse_events(struct evlist *evlist, const char *str, struct parse_events_error *err) { - return __parse_events(evlist, str, err, NULL); + return __parse_events(evlist, str, err, /*fake_pmu=*/NULL, /*warn_if_reordered=*/true); } int parse_event(struct evlist *evlist, const char *str); @@ -128,6 +128,7 @@ struct parse_events_state { int stoken; struct perf_pmu *fake_pmu; char *hybrid_pmu_name; + bool wild_card_pmus; }; void parse_events__shrink_config_terms(void); diff --git a/tools/perf/util/parse-events.y b/tools/perf/util/parse-events.y index 3a04602d2982..4488443e506e 100644 --- a/tools/perf/util/parse-events.y +++ b/tools/perf/util/parse-events.y @@ -323,6 +323,7 @@ event_pmu_name opt_pmu_config if (!parse_events_add_pmu(_parse_state, list, pmu->name, terms, /*auto_merge_stats=*/true)) { ok++; + parse_state->wild_card_pmus = true; } parse_events_terms__delete(terms); }