forked from luck/tmp_suning_uos_patched
perf record: Add dummy event during system wide synthesis
During the processing of /proc during event synthesis new processes may start. Add a dummy event if /proc is to be processed, to capture mmaps for starting processes. This reuses the existing logic for initial-delay. v3 fixes the attr test of test-record-C0 v2 fixes the dummy event configuration and a branch stack issue. Suggested-by: Stephane Eranian <eranian@google.com> Signed-off-by: Ian Rogers <irogers@google.com> Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com> Cc: Jiri Olsa <jolsa@redhat.com> 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: Stephane Eranian <eranian@google.com> Link: http://lore.kernel.org/lkml/20200422173615.59436-1-irogers@google.com [ split from a larger patch ] Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
This commit is contained in:
parent
5885a202d0
commit
0a892c1c94
|
@ -825,19 +825,28 @@ static int record__open(struct record *rec)
|
||||||
int rc = 0;
|
int rc = 0;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* For initial_delay we need to add a dummy event so that we can track
|
* For initial_delay or system wide, we need to add a dummy event so
|
||||||
* PERF_RECORD_MMAP while we wait for the initial delay to enable the
|
* that we can track PERF_RECORD_MMAP to cover the delay of waiting or
|
||||||
* real events, the ones asked by the user.
|
* event synthesis.
|
||||||
*/
|
*/
|
||||||
if (opts->initial_delay) {
|
if (opts->initial_delay || target__has_cpu(&opts->target)) {
|
||||||
if (perf_evlist__add_dummy(evlist))
|
if (perf_evlist__add_dummy(evlist))
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
|
|
||||||
|
/* Disable tracking of mmaps on lead event. */
|
||||||
pos = evlist__first(evlist);
|
pos = evlist__first(evlist);
|
||||||
pos->tracking = 0;
|
pos->tracking = 0;
|
||||||
|
/* Set up dummy event. */
|
||||||
pos = evlist__last(evlist);
|
pos = evlist__last(evlist);
|
||||||
pos->tracking = 1;
|
pos->tracking = 1;
|
||||||
pos->core.attr.enable_on_exec = 1;
|
/*
|
||||||
|
* Enable the dummy event when the process is forked for
|
||||||
|
* initial_delay, immediately for system wide.
|
||||||
|
*/
|
||||||
|
if (opts->initial_delay)
|
||||||
|
pos->core.attr.enable_on_exec = 1;
|
||||||
|
else
|
||||||
|
pos->immediate = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
perf_evlist__config(evlist, opts, &callchain_param);
|
perf_evlist__config(evlist, opts, &callchain_param);
|
||||||
|
|
50
tools/perf/tests/attr/system-wide-dummy
Normal file
50
tools/perf/tests/attr/system-wide-dummy
Normal file
|
@ -0,0 +1,50 @@
|
||||||
|
# Event added by system-wide or CPU perf-record to handle the race of
|
||||||
|
# processes starting while /proc is processed.
|
||||||
|
[event]
|
||||||
|
fd=1
|
||||||
|
group_fd=-1
|
||||||
|
cpu=*
|
||||||
|
pid=-1
|
||||||
|
flags=8
|
||||||
|
type=1
|
||||||
|
size=120
|
||||||
|
config=9
|
||||||
|
sample_period=4000
|
||||||
|
sample_type=455
|
||||||
|
read_format=4
|
||||||
|
# Event will be enabled right away.
|
||||||
|
disabled=0
|
||||||
|
inherit=1
|
||||||
|
pinned=0
|
||||||
|
exclusive=0
|
||||||
|
exclude_user=0
|
||||||
|
exclude_kernel=0
|
||||||
|
exclude_hv=0
|
||||||
|
exclude_idle=0
|
||||||
|
mmap=1
|
||||||
|
comm=1
|
||||||
|
freq=1
|
||||||
|
inherit_stat=0
|
||||||
|
enable_on_exec=0
|
||||||
|
task=1
|
||||||
|
watermark=0
|
||||||
|
precise_ip=0
|
||||||
|
mmap_data=0
|
||||||
|
sample_id_all=1
|
||||||
|
exclude_host=0
|
||||||
|
exclude_guest=0
|
||||||
|
exclude_callchain_kernel=0
|
||||||
|
exclude_callchain_user=0
|
||||||
|
mmap2=1
|
||||||
|
comm_exec=1
|
||||||
|
context_switch=0
|
||||||
|
write_backward=0
|
||||||
|
namespaces=0
|
||||||
|
use_clockid=0
|
||||||
|
wakeup_events=0
|
||||||
|
bp_type=0
|
||||||
|
config1=0
|
||||||
|
config2=0
|
||||||
|
branch_sample_type=0
|
||||||
|
sample_regs_user=0
|
||||||
|
sample_stack_user=0
|
|
@ -9,6 +9,14 @@ cpu=0
|
||||||
# no enable on exec for CPU attached
|
# no enable on exec for CPU attached
|
||||||
enable_on_exec=0
|
enable_on_exec=0
|
||||||
|
|
||||||
# PERF_SAMPLE_IP | PERF_SAMPLE_TID PERF_SAMPLE_TIME | # PERF_SAMPLE_PERIOD
|
# PERF_SAMPLE_IP | PERF_SAMPLE_TID | PERF_SAMPLE_TIME |
|
||||||
|
# PERF_SAMPLE_ID | PERF_SAMPLE_PERIOD
|
||||||
# + PERF_SAMPLE_CPU added by -C 0
|
# + PERF_SAMPLE_CPU added by -C 0
|
||||||
sample_type=391
|
sample_type=455
|
||||||
|
|
||||||
|
# Dummy event handles mmaps, comm and task.
|
||||||
|
mmap=0
|
||||||
|
comm=0
|
||||||
|
task=0
|
||||||
|
|
||||||
|
[event:system-wide-dummy]
|
||||||
|
|
Loading…
Reference in New Issue
Block a user