• Yang Jihong's avatar
    perf record: Track sideband events for all CPUs when tracing selected CPUs · 74b4f3ec
    Yang Jihong authored
    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_MMAP events of taskA.
    Therefore, the comm and symbols of taskA cannot be parsed.
    
    The solution is to record sideband events for all CPUs when tracing
    selected CPUs. Because this modifies the default behavior, add related
    comments to the perf record man page.
    
    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>
    Signed-off-by: default avatarYang Jihong <yangjihong1@huawei.com>
    Tested-by: default avatarRavi Bangoria <ravi.bangoria@amd.com>
    Cc: Adrian Hunter <adrian.hunter@intel.com>
    Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
    Cc: Andi Kleen <ak@linux.intel.com>
    Cc: Anshuman Khandual <anshuman.khandual@arm.com>
    Cc: Ian Rogers <irogers@google.com>
    Cc: Ingo Molnar <mingo@redhat.com>
    Cc: James Clark <james.clark@arm.com>
    Cc: Jiri Olsa <jolsa@kernel.org>
    Cc: Kan Liang <kan.liang@linux.intel.com>
    Cc: Mark Rutland <mark.rutland@arm.com>
    Cc: Namhyung Kim <namhyung@kernel.org>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Thomas Richter <tmricht@linux.ibm.com>
    Link: https://lore.kernel.org/r/20230904023340.12707-5-yangjihong1@huawei.comSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
    74b4f3ec
builtin-record.c 112 KB