Re: [PATCH v8 0/6] perf record: Track sideband events for all CPUs when tracing selected CPUs

From: Namhyung Kim
Date: Sun Sep 17 2023 - 01:35:19 EST


On Sat, Sep 16, 2023 at 2:24 AM Yang Jihong <yangjihong1@xxxxxxxxxx> wrote:
>
> Hello,
>
> On 2023/9/16 8:14, Namhyung Kim wrote:
> > Hello,
> >
> > On Tue, Sep 12, 2023 at 1:32 PM Arnaldo Carvalho de Melo
> > <acme@xxxxxxxxxx> wrote:
> >>
> >> Em Tue, Sep 12, 2023 at 02:41:56PM +0530, Ravi Bangoria escreveu:
> >>> On 04-Sep-23 8:03 AM, Yang Jihong wrote:
> >>>> User space tasks can migrate between CPUs, track sideband 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=3 record -e cpu-clock -C 1 true
> >>>> <SNIP>
> >>>> Opening: cpu-clock
> >>>> ------------------------------------------------------------
> >>>> perf_event_attr:
> >>>> type 1 (PERF_TYPE_SOFTWARE)
> >>>> size 136
> >>>> config 0 (PERF_COUNT_SW_CPU_CLOCK)
> >>>> { sample_period, sample_freq } 4000
> >>>> sample_type IP|TID|TIME|CPU|PERIOD|IDENTIFIER
> >>>> 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 = 5
> >>>> Opening: dummy:u
> >>>> ------------------------------------------------------------
> >>>> perf_event_attr:
> >>>> type 1 (PERF_TYPE_SOFTWARE)
> >>>> size 136
> >>>> config 0x9 (PERF_COUNT_SW_DUMMY)
> >>>> { sample_period, sample_freq } 1
> >>>> sample_type IP|TID|TIME|CPU|IDENTIFIER
> >>>> read_format ID|LOST
> >>>> inherit 1
> >>>> exclude_kernel 1
> >>>> exclude_hv 1
> >>>> mmap 1
> >>>> comm 1
> >>>> task 1
> >>>> sample_id_all 1
> >>>> exclude_guest 1
> >>>> mmap2 1
> >>>> comm_exec 1
> >>>> ksymbol 1
> >>>> bpf_event 1
> >>>> ------------------------------------------------------------
> >>>> sys_perf_event_open: pid -1 cpu 0 group_fd -1 flags 0x8 = 6
> >>>> sys_perf_event_open: pid -1 cpu 1 group_fd -1 flags 0x8 = 7
> >>>> sys_perf_event_open: pid -1 cpu 2 group_fd -1 flags 0x8 = 9
> >>>> sys_perf_event_open: pid -1 cpu 3 group_fd -1 flags 0x8 = 10
> >>>> sys_perf_event_open: pid -1 cpu 4 group_fd -1 flags 0x8 = 11
> >>>> sys_perf_event_open: pid -1 cpu 5 group_fd -1 flags 0x8 = 12
> >>>> sys_perf_event_open: pid -1 cpu 6 group_fd -1 flags 0x8 = 13
> >>>> sys_perf_event_open: pid -1 cpu 7 group_fd -1 flags 0x8 = 14
> >>>> <SNIP>
> >>>>
> >>>> Changes since_v7:
> >>>> - The condition for requiring system_wide sideband is changed to
> >>>> "as long as a non-dummy event exists" (patch4).
> >>>> - Modify the corresponding test case to record only dummy event (patch6).
> >>>> - Thanks to tested-by tag from Ravi, but because the solution is modified,
> >>>> the tested-by tag of Ravi is not added to this version.
> >>>
> >>> I've re-tested v8 with my simple test.
> >>>
> >>> Tested-by: Ravi Bangoria <ravi.bangoria@xxxxxxx>
> >>
> >>
> >> Thanks, applied to the csets that were still sitting in an umpublished
> >> perf-tools-next local branch, soon public.
> >
> > Now I'm seeing a perf test failure on perf-tools-next.
>
> Uh.. the kernel I was using before didn't support PERF_FORMAT_LOST, so
> forget about supporting PERF_FORMAT_LOST. I've updated the kernel and
> retested it.
>
> The link to the fixed patch is as follows:
> https://lore.kernel.org/all/20230916091641.776031-1-yangjihong1@xxxxxxxxxx/

Thank you for the quick fix!
Namhyung