mirror of
https://github.com/edk2-porting/linux-next.git
synced 2024-12-29 15:43:59 +08:00
perf record: No need to process the synthesized MMAP events twice
At the end of a 'perf record' session, by default, we'll process all samples and populate the threads, maps, etc so as to find out which of the DSOs got samples, to reduce the size of the build-id table we'll add to the perf.data headers. But we don't need to process the PERF_RECORD_MMAP events synthesized for the kernel modules, as we have those already via perf_session__create_kernel_maps(), so add mmap/mmap2 handlers that first look at event->header.misc to see if the event is for a user map, bailing out if not. Cc: Adrian Hunter <adrian.hunter@intel.com> Cc: Andi Kleen <ak@linux.intel.com> Cc: Jiri Olsa <jolsa@kernel.org> Cc: Namhyung Kim <namhyung@kernel.org> Link: https://lkml.kernel.org/n/tip-mofoxvcx2dryppcw3o689jdd@git.kernel.org Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
This commit is contained in:
parent
f068435d9b
commit
6e0a9b3dfa
@ -2148,6 +2148,31 @@ static const char * const __record_usage[] = {
|
||||
};
|
||||
const char * const *record_usage = __record_usage;
|
||||
|
||||
static int build_id__process_mmap(struct perf_tool *tool, union perf_event *event,
|
||||
struct perf_sample *sample, struct machine *machine)
|
||||
{
|
||||
/*
|
||||
* We already have the kernel maps, put in place via perf_session__create_kernel_maps()
|
||||
* no need to add them twice.
|
||||
*/
|
||||
if (!(event->header.misc & PERF_RECORD_MISC_USER))
|
||||
return 0;
|
||||
return perf_event__process_mmap(tool, event, sample, machine);
|
||||
}
|
||||
|
||||
static int build_id__process_mmap2(struct perf_tool *tool, union perf_event *event,
|
||||
struct perf_sample *sample, struct machine *machine)
|
||||
{
|
||||
/*
|
||||
* We already have the kernel maps, put in place via perf_session__create_kernel_maps()
|
||||
* no need to add them twice.
|
||||
*/
|
||||
if (!(event->header.misc & PERF_RECORD_MISC_USER))
|
||||
return 0;
|
||||
|
||||
return perf_event__process_mmap2(tool, event, sample, machine);
|
||||
}
|
||||
|
||||
/*
|
||||
* XXX Ideally would be local to cmd_record() and passed to a record__new
|
||||
* because we need to have access to it in record__exit, that is called
|
||||
@ -2177,8 +2202,8 @@ static struct record record = {
|
||||
.exit = perf_event__process_exit,
|
||||
.comm = perf_event__process_comm,
|
||||
.namespaces = perf_event__process_namespaces,
|
||||
.mmap = perf_event__process_mmap,
|
||||
.mmap2 = perf_event__process_mmap2,
|
||||
.mmap = build_id__process_mmap,
|
||||
.mmap2 = build_id__process_mmap2,
|
||||
.ordered_events = true,
|
||||
},
|
||||
};
|
||||
|
Loading…
Reference in New Issue
Block a user