From nobody Sun Feb 8 15:25:52 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id DB58DEB64D9 for ; Tue, 4 Jul 2023 07:44:36 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231511AbjGDHoe (ORCPT ); Tue, 4 Jul 2023 03:44:34 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:55228 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230512AbjGDHoa (ORCPT ); Tue, 4 Jul 2023 03:44:30 -0400 Received: from szxga03-in.huawei.com (szxga03-in.huawei.com [45.249.212.189]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 6EFDDE70; Tue, 4 Jul 2023 00:44:23 -0700 (PDT) Received: from kwepemm600003.china.huawei.com (unknown [172.30.72.55]) by szxga03-in.huawei.com (SkyGuard) with ESMTP id 4QwF9s2S8YzLngn; Tue, 4 Jul 2023 15:42:09 +0800 (CST) Received: from localhost.localdomain (10.67.174.95) by kwepemm600003.china.huawei.com (7.193.23.202) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.27; Tue, 4 Jul 2023 15:44:20 +0800 From: Yang Jihong To: , , , , , , , , , , , CC: Subject: [PATCH 1/5] perf evlist: Export perf_evlist__propagate_maps() Date: Tue, 4 Jul 2023 07:42:13 +0000 Message-ID: <20230704074217.240939-2-yangjihong1@huawei.com> X-Mailer: git-send-email 2.30.GIT In-Reply-To: <20230704074217.240939-1-yangjihong1@huawei.com> References: <20230704074217.240939-1-yangjihong1@huawei.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Originating-IP: [10.67.174.95] X-ClientProxiedBy: dggems704-chm.china.huawei.com (10.3.19.181) To kwepemm600003.china.huawei.com (7.193.23.202) X-CFilter-Loop: Reflected Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" For dummy events that keep tracking, we may need to modify its cpu_maps. For example, change the cpu_maps to track side-band events for all CPUS. Export perf_evlist__propagate_maps () to support this scenario. No functional change. Signed-off-by: Yang Jihong --- tools/lib/perf/evlist.c | 23 +++++++++-------------- tools/lib/perf/include/perf/evlist.h | 2 ++ 2 files changed, 11 insertions(+), 14 deletions(-) diff --git a/tools/lib/perf/evlist.c b/tools/lib/perf/evlist.c index b8b066d0dc5e..a3057b692530 100644 --- a/tools/lib/perf/evlist.c +++ b/tools/lib/perf/evlist.c @@ -33,8 +33,8 @@ void perf_evlist__init(struct perf_evlist *evlist) perf_evlist__reset_id_hash(evlist); } =20 -static void __perf_evlist__propagate_maps(struct perf_evlist *evlist, - struct perf_evsel *evsel) +void perf_evlist__propagate_maps(struct perf_evlist *evlist, + struct perf_evsel *evsel) { if (evsel->system_wide) { /* System wide: set the cpu map of the evsel to all online CPUs. */ @@ -78,16 +78,6 @@ static void __perf_evlist__propagate_maps(struct perf_ev= list *evlist, evlist->all_cpus =3D perf_cpu_map__merge(evlist->all_cpus, evsel->cpus); } =20 -static void perf_evlist__propagate_maps(struct perf_evlist *evlist) -{ - struct perf_evsel *evsel; - - evlist->needs_map_propagation =3D true; - - perf_evlist__for_each_evsel(evlist, evsel) - __perf_evlist__propagate_maps(evlist, evsel); -} - void perf_evlist__add(struct perf_evlist *evlist, struct perf_evsel *evsel) { @@ -96,7 +86,7 @@ void perf_evlist__add(struct perf_evlist *evlist, evlist->nr_entries +=3D 1; =20 if (evlist->needs_map_propagation) - __perf_evlist__propagate_maps(evlist, evsel); + perf_evlist__propagate_maps(evlist, evsel); } =20 void perf_evlist__remove(struct perf_evlist *evlist, @@ -175,6 +165,8 @@ void perf_evlist__set_maps(struct perf_evlist *evlist, struct perf_cpu_map *cpus, struct perf_thread_map *threads) { + struct perf_evsel *evsel; + /* * Allow for the possibility that one or another of the maps isn't being * changed i.e. don't put it. Note we are assuming the maps that are @@ -192,7 +184,10 @@ void perf_evlist__set_maps(struct perf_evlist *evlist, evlist->threads =3D perf_thread_map__get(threads); } =20 - perf_evlist__propagate_maps(evlist); + evlist->needs_map_propagation =3D true; + + perf_evlist__for_each_evsel(evlist, evsel) + perf_evlist__propagate_maps(evlist, evsel); } =20 int perf_evlist__open(struct perf_evlist *evlist) diff --git a/tools/lib/perf/include/perf/evlist.h b/tools/lib/perf/include/= perf/evlist.h index e894b770779e..d5a2569b2177 100644 --- a/tools/lib/perf/include/perf/evlist.h +++ b/tools/lib/perf/include/perf/evlist.h @@ -48,4 +48,6 @@ LIBPERF_API struct perf_mmap *perf_evlist__next_mmap(stru= ct perf_evlist *evlist, =20 LIBPERF_API void perf_evlist__set_leader(struct perf_evlist *evlist); LIBPERF_API int perf_evlist__nr_groups(struct perf_evlist *evlist); +LIBPERF_API void perf_evlist__propagate_maps(struct perf_evlist *evlist, + struct perf_evsel *evsel); #endif /* __LIBPERF_EVLIST_H */ --=20 2.30.GIT From nobody Sun Feb 8 15:25:52 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id DC365EB64D9 for ; Tue, 4 Jul 2023 07:44:42 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231443AbjGDHok (ORCPT ); Tue, 4 Jul 2023 03:44:40 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:55234 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231345AbjGDHoa (ORCPT ); Tue, 4 Jul 2023 03:44:30 -0400 Received: from szxga02-in.huawei.com (szxga02-in.huawei.com [45.249.212.188]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 8A3DAE71; Tue, 4 Jul 2023 00:44:23 -0700 (PDT) Received: from kwepemm600003.china.huawei.com (unknown [172.30.72.56]) by szxga02-in.huawei.com (SkyGuard) with ESMTP id 4QwF8g56ttzMqK1; Tue, 4 Jul 2023 15:41:07 +0800 (CST) Received: from localhost.localdomain (10.67.174.95) by kwepemm600003.china.huawei.com (7.193.23.202) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.27; Tue, 4 Jul 2023 15:44:20 +0800 From: Yang Jihong To: , , , , , , , , , , , CC: Subject: [PATCH 2/5] perf evlist: Add evlist__findnew_tracking_event() helper Date: Tue, 4 Jul 2023 07:42:14 +0000 Message-ID: <20230704074217.240939-3-yangjihong1@huawei.com> X-Mailer: git-send-email 2.30.GIT In-Reply-To: <20230704074217.240939-1-yangjihong1@huawei.com> References: <20230704074217.240939-1-yangjihong1@huawei.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Originating-IP: [10.67.174.95] X-ClientProxiedBy: dggems704-chm.china.huawei.com (10.3.19.181) To kwepemm600003.china.huawei.com (7.193.23.202) X-CFilter-Loop: Reflected Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" Currently, intel-bts, intel-pt, and arm-spe may add a dummy event for tracking to the evlist. We may need to search for the dummy event for some settings. Therefore, add evlist__findnew_tracking_event() helper. Signed-off-by: Yang Jihong --- tools/perf/builtin-record.c | 11 +++-------- tools/perf/util/evlist.c | 17 +++++++++++++++++ tools/perf/util/evlist.h | 1 + 3 files changed, 21 insertions(+), 8 deletions(-) diff --git a/tools/perf/builtin-record.c b/tools/perf/builtin-record.c index aec18db7ff23..8872cd037f2c 100644 --- a/tools/perf/builtin-record.c +++ b/tools/perf/builtin-record.c @@ -1295,14 +1295,9 @@ static int record__open(struct record *rec) */ if (opts->target.initial_delay || target__has_cpu(&opts->target) || perf_pmus__num_core_pmus() > 1) { - pos =3D evlist__get_tracking_event(evlist); - if (!evsel__is_dummy_event(pos)) { - /* Set up dummy event. */ - if (evlist__add_dummy(evlist)) - return -ENOMEM; - pos =3D evlist__last(evlist); - evlist__set_tracking_event(evlist, pos); - } + pos =3D evlist__findnew_tracking_event(evlist); + if (!pos) + return -ENOMEM; =20 /* * Enable the dummy event when the process is forked for diff --git a/tools/perf/util/evlist.c b/tools/perf/util/evlist.c index 7ef43f72098e..4621ddaeb8f3 100644 --- a/tools/perf/util/evlist.c +++ b/tools/perf/util/evlist.c @@ -1694,6 +1694,23 @@ void evlist__set_tracking_event(struct evlist *evlis= t, struct evsel *tracking_ev tracking_evsel->tracking =3D true; } =20 +struct evsel *evlist__findnew_tracking_event(struct evlist *evlist) +{ + struct evsel *evsel; + + evsel =3D evlist__get_tracking_event(evlist); + if (!evsel__is_dummy_event(evsel)) { + /* Set up dummy event. */ + if (evlist__add_dummy(evlist)) + return NULL; + + evsel =3D evlist__last(evlist); + evlist__set_tracking_event(evlist, evsel); + } + + return evsel; +} + struct evsel *evlist__find_evsel_by_str(struct evlist *evlist, const char = *str) { struct evsel *evsel; diff --git a/tools/perf/util/evlist.h b/tools/perf/util/evlist.h index 664c6bf7b3e0..4d28c50ba842 100644 --- a/tools/perf/util/evlist.h +++ b/tools/perf/util/evlist.h @@ -387,6 +387,7 @@ bool evlist_cpu_iterator__end(const struct evlist_cpu_i= terator *evlist_cpu_itr); =20 struct evsel *evlist__get_tracking_event(struct evlist *evlist); void evlist__set_tracking_event(struct evlist *evlist, struct evsel *track= ing_evsel); +struct evsel *evlist__findnew_tracking_event(struct evlist *evlist); =20 struct evsel *evlist__find_evsel_by_str(struct evlist *evlist, const char = *str); =20 --=20 2.30.GIT From nobody Sun Feb 8 15:25:52 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 16EBEEB64DA for ; Tue, 4 Jul 2023 07:44:53 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231532AbjGDHov (ORCPT ); Tue, 4 Jul 2023 03:44:51 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:55244 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231459AbjGDHoa (ORCPT ); Tue, 4 Jul 2023 03:44:30 -0400 Received: from szxga02-in.huawei.com (szxga02-in.huawei.com [45.249.212.188]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id E766CE6D; Tue, 4 Jul 2023 00:44:23 -0700 (PDT) Received: from kwepemm600003.china.huawei.com (unknown [172.30.72.54]) by szxga02-in.huawei.com (SkyGuard) with ESMTP id 4QwFCD5pDkzTm8c; Tue, 4 Jul 2023 15:43:20 +0800 (CST) Received: from localhost.localdomain (10.67.174.95) by kwepemm600003.china.huawei.com (7.193.23.202) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.27; Tue, 4 Jul 2023 15:44:21 +0800 From: Yang Jihong To: , , , , , , , , , , , CC: Subject: [PATCH 3/5] perf record: Tracking side-band events for all CPUs when tracing selected CPUs Date: Tue, 4 Jul 2023 07:42:15 +0000 Message-ID: <20230704074217.240939-4-yangjihong1@huawei.com> X-Mailer: git-send-email 2.30.GIT In-Reply-To: <20230704074217.240939-1-yangjihong1@huawei.com> References: <20230704074217.240939-1-yangjihong1@huawei.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Originating-IP: [10.67.174.95] X-ClientProxiedBy: dggems704-chm.china.huawei.com (10.3.19.181) To kwepemm600003.china.huawei.com (7.193.23.202) X-CFilter-Loop: Reflected Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" User space tasks can migrate between CPUs, we need to track side-band events for all CPUs. The specific scenarios are as follows: CPU0 CPU1 perf record -C 0 start taskA starts to be created and executed -> PERF_RECORD_COMM and PERF_RECORD_MMAP events only deliver to CPU1 ...... | migrate to CPU0 | Running on CPU0 <----------/ ... perf record -C 0 stop Now perf samples the PC of taskA. However, perf does not record the PERF_RECORD_COMM and PERF_RECORD_COMM events of taskA. Therefore, the comm and symbols of taskA cannot be parsed. The sys_perf_event_open invoked is as follows: # perf --debug verbose=3D3 record -e cpu-clock -C 1 true Opening: cpu-clock ------------------------------------------------------------ perf_event_attr: type 1 size 136 { sample_period, sample_freq } 4000 sample_type IP|TID|TIME|ID|CPU|PERIOD read_format ID|LOST disabled 1 inherit 1 freq 1 sample_id_all 1 exclude_guest 1 ------------------------------------------------------------ sys_perf_event_open: pid -1 cpu 1 group_fd -1 flags 0x8 =3D 5 Opening: dummy:HG ------------------------------------------------------------ perf_event_attr: type 1 size 136 config 0x9 { sample_period, sample_freq } 4000 sample_type IP|TID|TIME|ID|CPU|PERIOD read_format ID|LOST inherit 1 mmap 1 comm 1 freq 1 task 1 sample_id_all 1 mmap2 1 comm_exec 1 ksymbol 1 bpf_event 1 ------------------------------------------------------------ sys_perf_event_open: pid -1 cpu 0 group_fd -1 flags 0x8 =3D 6 sys_perf_event_open: pid -1 cpu 1 group_fd -1 flags 0x8 =3D 7 sys_perf_event_open: pid -1 cpu 2 group_fd -1 flags 0x8 =3D 9 sys_perf_event_open: pid -1 cpu 3 group_fd -1 flags 0x8 =3D 10 sys_perf_event_open: pid -1 cpu 4 group_fd -1 flags 0x8 =3D 11 sys_perf_event_open: pid -1 cpu 5 group_fd -1 flags 0x8 =3D 12 sys_perf_event_open: pid -1 cpu 6 group_fd -1 flags 0x8 =3D 13 sys_perf_event_open: pid -1 cpu 7 group_fd -1 flags 0x8 =3D 14 Signed-off-by: Yang Jihong --- tools/perf/builtin-record.c | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/tools/perf/builtin-record.c b/tools/perf/builtin-record.c index 8872cd037f2c..69e0d8c75aab 100644 --- a/tools/perf/builtin-record.c +++ b/tools/perf/builtin-record.c @@ -908,6 +908,31 @@ static int record__config_off_cpu(struct record *rec) return off_cpu_prepare(rec->evlist, &rec->opts.target, &rec->opts); } =20 +static int record__config_tracking_events(struct record *rec) +{ + struct evsel *evsel; + struct evlist *evlist =3D rec->evlist; + struct record_opts *opts =3D &rec->opts; + + /* + * User space tasks can migrate between CPUs, so when tracing + * selected CPUs, sideband for all CPUs is still needed. + */ + if (opts->target.cpu_list) { + evsel =3D evlist__findnew_tracking_event(evlist); + if (!evsel) + return -ENOMEM; + + if (!evsel->core.system_wide) { + evsel->core.system_wide =3D true; + evsel__set_sample_bit(evsel, TIME); + perf_evlist__propagate_maps(&evlist->core, &evsel->core); + } + } + + return 0; +} + static bool record__kcore_readable(struct machine *machine) { char kcore[PATH_MAX]; @@ -4235,6 +4260,12 @@ int cmd_record(int argc, const char **argv) goto out; } =20 + err =3D record__config_tracking_events(rec); + if (err) { + pr_err("record__config_tracking_events failed, error %d\n", err); + goto out; + } + err =3D record__init_thread_masks(rec); if (err) { pr_err("Failed to initialize parallel data streaming masks\n"); --=20 2.30.GIT From nobody Sun Feb 8 15:25:52 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id D780EEB64D9 for ; Tue, 4 Jul 2023 07:44:46 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231159AbjGDHop (ORCPT ); Tue, 4 Jul 2023 03:44:45 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:55236 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231450AbjGDHoa (ORCPT ); Tue, 4 Jul 2023 03:44:30 -0400 Received: from szxga03-in.huawei.com (szxga03-in.huawei.com [45.249.212.189]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 26FFFE7A; Tue, 4 Jul 2023 00:44:24 -0700 (PDT) Received: from kwepemm600003.china.huawei.com (unknown [172.30.72.55]) by szxga03-in.huawei.com (SkyGuard) with ESMTP id 4QwF9t4yctzLnh6; Tue, 4 Jul 2023 15:42:10 +0800 (CST) Received: from localhost.localdomain (10.67.174.95) by kwepemm600003.china.huawei.com (7.193.23.202) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.27; Tue, 4 Jul 2023 15:44:21 +0800 From: Yang Jihong To: , , , , , , , , , , , CC: Subject: [PATCH 4/5] perf test: Add test case for record tracking Date: Tue, 4 Jul 2023 07:42:16 +0000 Message-ID: <20230704074217.240939-5-yangjihong1@huawei.com> X-Mailer: git-send-email 2.30.GIT In-Reply-To: <20230704074217.240939-1-yangjihong1@huawei.com> References: <20230704074217.240939-1-yangjihong1@huawei.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Originating-IP: [10.67.174.95] X-ClientProxiedBy: dggems704-chm.china.huawei.com (10.3.19.181) To kwepemm600003.china.huawei.com (7.193.23.202) X-CFilter-Loop: Reflected Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" Add a new test case to record tracking side-band events for all CPUs when tracing selected CPUs Test result: # ./perf test list 2>&1 | grep 'perf record tracking tests' 95: perf record tracking tests f# ./perf test 95 95: perf record tracking tests : Ok Signed-off-by: Yang Jihong --- tools/perf/tests/shell/record_tracking.sh | 44 +++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100755 tools/perf/tests/shell/record_tracking.sh diff --git a/tools/perf/tests/shell/record_tracking.sh b/tools/perf/tests/s= hell/record_tracking.sh new file mode 100755 index 000000000000..fe05f4772999 --- /dev/null +++ b/tools/perf/tests/shell/record_tracking.sh @@ -0,0 +1,44 @@ +#!/bin/sh +# perf record tracking tests +# SPDX-License-Identifier: GPL-2.0 + +set -e + +err=3D0 +perfdata=3D$(mktemp /tmp/__perf_test.perf.data.XXXXX) + +can_cpu_wide() +{ + if ! perf record -o ${perfdata} -BN --no-bpf-event -e dummy:u -C $1 tr= ue 2>&1 >/dev/null + then + echo "record tracking test [Skipped cannot record cpu$1]" + err=3D2 + fi + + rm -f ${perfdata} + return $err +} + +test_system_wide_tracking() +{ + # Need CPU 0 and CPU 1 + can_cpu_wide 0 || return 0 + can_cpu_wide 1 || return 0 + + # Record on CPU 0 a task running on CPU 1 + perf record -BN --no-bpf-event -o ${perfdata} -e dummy:u -C 0 -- tasks= et --cpu-list 1 true + + # Should get MMAP events from CPU 1 + mmap_cnt=3D`perf script -i ${perfdata} --show-mmap-events -C 1 2>/dev/= null | grep MMAP | wc -l` + + rm -f ${perfdata} + + if [ ${mmap_cnt} -gt 0 ] ; then + return 0 + fi + + echo "Failed to record MMAP events on CPU 1 when tracing CPU 0" + return 1 +} + +test_system_wide_tracking --=20 2.30.GIT From nobody Sun Feb 8 15:25:52 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id E88C2EB64D9 for ; Tue, 4 Jul 2023 07:44:55 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230232AbjGDHoz (ORCPT ); Tue, 4 Jul 2023 03:44:55 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:55260 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231481AbjGDHob (ORCPT ); Tue, 4 Jul 2023 03:44:31 -0400 Received: from szxga02-in.huawei.com (szxga02-in.huawei.com [45.249.212.188]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 0C088E76; Tue, 4 Jul 2023 00:44:24 -0700 (PDT) Received: from kwepemm600003.china.huawei.com (unknown [172.30.72.54]) by szxga02-in.huawei.com (SkyGuard) with ESMTP id 4QwF8j0WSGzMqK8; Tue, 4 Jul 2023 15:41:09 +0800 (CST) Received: from localhost.localdomain (10.67.174.95) by kwepemm600003.china.huawei.com (7.193.23.202) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.27; Tue, 4 Jul 2023 15:44:22 +0800 From: Yang Jihong To: , , , , , , , , , , , CC: Subject: [PATCH 5/5] perf record: All config tracking are integrated into record__config_tracking_events() Date: Tue, 4 Jul 2023 07:42:17 +0000 Message-ID: <20230704074217.240939-6-yangjihong1@huawei.com> X-Mailer: git-send-email 2.30.GIT In-Reply-To: <20230704074217.240939-1-yangjihong1@huawei.com> References: <20230704074217.240939-1-yangjihong1@huawei.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Originating-IP: [10.67.174.95] X-ClientProxiedBy: dggems704-chm.china.huawei.com (10.3.19.181) To kwepemm600003.china.huawei.com (7.193.23.202) X-CFilter-Loop: Reflected Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" The current perf-record also config tracking events in record__open(), move it to the record__config_tracking_events(). The sys_perf_event_open invoked is as follows: # perf --debug verbose=3D3 record -e cpu-clock -D 100 true Opening: cpu-clock ------------------------------------------------------------ perf_event_attr: type 1 size 136 { sample_period, sample_freq } 4000 sample_type IP|TID|TIME|ID|PERIOD read_format ID|LOST disabled 1 inherit 1 freq 1 sample_id_all 1 exclude_guest 1 ------------------------------------------------------------ sys_perf_event_open: pid 3569 cpu 0 group_fd -1 flags 0x8 =3D 5 sys_perf_event_open: pid 3569 cpu 1 group_fd -1 flags 0x8 =3D 6 sys_perf_event_open: pid 3569 cpu 2 group_fd -1 flags 0x8 =3D 7 sys_perf_event_open: pid 3569 cpu 3 group_fd -1 flags 0x8 =3D 9 sys_perf_event_open: pid 3569 cpu 4 group_fd -1 flags 0x8 =3D 10 sys_perf_event_open: pid 3569 cpu 5 group_fd -1 flags 0x8 =3D 11 sys_perf_event_open: pid 3569 cpu 6 group_fd -1 flags 0x8 =3D 12 sys_perf_event_open: pid 3569 cpu 7 group_fd -1 flags 0x8 =3D 13 Opening: dummy:HG ------------------------------------------------------------ perf_event_attr: type 1 size 136 config 0x9 { sample_period, sample_freq } 4000 sample_type IP|TID|TIME|ID|PERIOD read_format ID|LOST disabled 1 inherit 1 mmap 1 comm 1 freq 1 enable_on_exec 1 task 1 sample_id_all 1 mmap2 1 comm_exec 1 ksymbol 1 bpf_event 1 ------------------------------------------------------------ sys_perf_event_open: pid 3569 cpu 0 group_fd -1 flags 0x8 =3D 14 sys_perf_event_open: pid 3569 cpu 1 group_fd -1 flags 0x8 =3D 15 sys_perf_event_open: pid 3569 cpu 2 group_fd -1 flags 0x8 =3D 16 sys_perf_event_open: pid 3569 cpu 3 group_fd -1 flags 0x8 =3D 17 sys_perf_event_open: pid 3569 cpu 4 group_fd -1 flags 0x8 =3D 18 sys_perf_event_open: pid 3569 cpu 5 group_fd -1 flags 0x8 =3D 19 sys_perf_event_open: pid 3569 cpu 6 group_fd -1 flags 0x8 =3D 20 sys_perf_event_open: pid 3569 cpu 7 group_fd -1 flags 0x8 =3D 21 Signed-off-by: Yang Jihong --- tools/perf/builtin-record.c | 46 ++++++++++++++++--------------------- 1 file changed, 20 insertions(+), 26 deletions(-) diff --git a/tools/perf/builtin-record.c b/tools/perf/builtin-record.c index 69e0d8c75aab..1e21f64e4cfa 100644 --- a/tools/perf/builtin-record.c +++ b/tools/perf/builtin-record.c @@ -915,15 +915,31 @@ static int record__config_tracking_events(struct reco= rd *rec) struct record_opts *opts =3D &rec->opts; =20 /* - * User space tasks can migrate between CPUs, so when tracing - * selected CPUs, sideband for all CPUs is still needed. + * For initial_delay, system wide or a hybrid system, we need to add a + * dummy event so that we can track PERF_RECORD_MMAP to cover the delay + * of waiting or event synthesis. */ - if (opts->target.cpu_list) { + if (opts->target.initial_delay || target__has_cpu(&opts->target) || + perf_pmus__num_core_pmus() > 1) { evsel =3D evlist__findnew_tracking_event(evlist); if (!evsel) return -ENOMEM; =20 - if (!evsel->core.system_wide) { + /* + * Enable the dummy event when the process is forked for + * initial_delay, immediately for system wide. + */ + if (opts->target.initial_delay && !evsel->immediate && + !target__has_cpu(&opts->target)) + evsel->core.attr.enable_on_exec =3D 1; + else + evsel->immediate =3D 1; + + /* + * User space tasks can migrate between CPUs, so when tracing + * selected CPUs, sideband for all CPUs is still needed. + */ + if (opts->target.cpu_list && !evsel->core.system_wide) { evsel->core.system_wide =3D true; evsel__set_sample_bit(evsel, TIME); perf_evlist__propagate_maps(&evlist->core, &evsel->core); @@ -1313,28 +1329,6 @@ static int record__open(struct record *rec) struct record_opts *opts =3D &rec->opts; int rc =3D 0; =20 - /* - * For initial_delay, system wide or a hybrid system, we need to add a - * dummy event so that we can track PERF_RECORD_MMAP to cover the delay - * of waiting or event synthesis. - */ - if (opts->target.initial_delay || target__has_cpu(&opts->target) || - perf_pmus__num_core_pmus() > 1) { - pos =3D evlist__findnew_tracking_event(evlist); - if (!pos) - return -ENOMEM; - - /* - * Enable the dummy event when the process is forked for - * initial_delay, immediately for system wide. - */ - if (opts->target.initial_delay && !pos->immediate && - !target__has_cpu(&opts->target)) - pos->core.attr.enable_on_exec =3D 1; - else - pos->immediate =3D 1; - } - evlist__config(evlist, opts, &callchain_param); =20 evlist__for_each_entry(evlist, pos) { --=20 2.30.GIT