mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2025-01-22 10:13:16 +07:00
236a3bbd5c
Occassionally events (e.g., context-switch, sched tracepoints) are losing the conversion of sample data associated with a thread. For example: $ perf record -e sched:sched_switch -c 1 -a -- sleep 5 $ perf script <selected events shown> ls 30482 [000] 1379727.583037: sched:sched_switch: prev_comm=ls prev_pid=30482 ... ls 30482 [000] 1379727.586339: sched:sched_switch: prev_comm=ls prev_pid=30482 ... :30482 30482 [000] 1379727.589462: sched:sched_switch: prev_comm=ls prev_pid=30482 ... The last line lost the conversion from tid to comm. If you look at the events (perf script -D) you see why - a SAMPLE event is generated after the EXIT: 0 1379727589449774 0x1540b0 [0x38]: PERF_RECORD_EXIT(30482:30482):(30482:30482) 0 1379727589462497 0x1540e8 [0x80]: PERF_RECORD_SAMPLE(IP, 1): 30482/30482: 0xffffffff816416f1 period: 1 addr: 0 ... thread: :30482:30482 When perf processes the EXIT event the thread is moved to the dead_threads list. When the SAMPLE event is processed no thread exists for the pid so a new one is created by machine__findnew_thread. This patch address the problem by delaying the move to the dead_threads list until the tid is re-used (per Adrian's suggestion). With this patch we get the previous example shows: ls 30482 [000] 1379727.583037: sched:sched_switch: prev_comm=ls prev_pid=30482 ... ls 30482 [000] 1379727.586339: sched:sched_switch: prev_comm=ls prev_pid=30482 ... ls 30482 [000] 1379727.589462: sched:sched_switch: prev_comm=ls prev_pid=30482 ... and 0 1379727589449774 0x1540b0 [0x38]: PERF_RECORD_EXIT(30482:30482):(30482:30482) 0 1379727589462497 0x1540e8 [0x80]: PERF_RECORD_SAMPLE(IP, 1): 30482/30482: 0xffffffff816416f1 period: 1 addr: 0 ... thread: ls:30482 v4: per Arnaldo's request add dead flag to thread struct and set when task exits v3: re-do from a time based check to a delayed move to dead_threads list v2: Rebased to latest perf/core branch. Changed time comparison to use a macro which explicitly shows the time basis Signed-off-by: David Ahern <dsahern@gmail.com> Acked-by: Adrian Hunter <adrian.hunter@intel.com> Cc: Adrian Hunter <adrian.hunter@intel.com> Cc: Frederic Weisbecker <fweisbec@gmail.com> Cc: Ingo Molnar <mingo@kernel.org> Cc: Jiri Olsa <jolsa@redhat.com> Cc: Mike Galbraith <efault@gmx.de> Cc: Namhyung Kim <namhyung@kernel.org> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Stephane Eranian <eranian@google.com> Link: http://lkml.kernel.org/r/1376491767-84171-1-git-send-email-dsahern@gmail.com Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com> |
||
---|---|---|
.. | ||
include | ||
scripting-engines | ||
abspath.c | ||
alias.c | ||
annotate.c | ||
annotate.h | ||
bitmap.c | ||
build-id.c | ||
build-id.h | ||
cache.h | ||
callchain.c | ||
callchain.h | ||
cgroup.c | ||
cgroup.h | ||
color.c | ||
color.h | ||
config.c | ||
cpumap.c | ||
cpumap.h | ||
ctype.c | ||
debug.c | ||
debug.h | ||
dso.c | ||
dso.h | ||
dwarf-aux.c | ||
dwarf-aux.h | ||
environment.c | ||
event.c | ||
event.h | ||
evlist.c | ||
evlist.h | ||
evsel.c | ||
evsel.h | ||
exec_cmd.c | ||
exec_cmd.h | ||
generate-cmdlist.sh | ||
header.c | ||
header.h | ||
help.c | ||
help.h | ||
hist.c | ||
hist.h | ||
hweight.c | ||
intlist.c | ||
intlist.h | ||
levenshtein.c | ||
levenshtein.h | ||
machine.c | ||
machine.h | ||
map.c | ||
map.h | ||
pager.c | ||
parse-events.c | ||
parse-events.h | ||
parse-events.l | ||
parse-events.y | ||
parse-options.c | ||
parse-options.h | ||
path.c | ||
perf_regs.h | ||
PERF-VERSION-GEN | ||
pmu.c | ||
pmu.h | ||
pmu.l | ||
pmu.y | ||
probe-event.c | ||
probe-event.h | ||
probe-finder.c | ||
probe-finder.h | ||
pstack.c | ||
pstack.h | ||
python-ext-sources | ||
python.c | ||
quote.c | ||
quote.h | ||
rblist.c | ||
rblist.h | ||
run-command.c | ||
run-command.h | ||
session.c | ||
session.h | ||
setup.py | ||
sigchain.c | ||
sigchain.h | ||
sort.c | ||
sort.h | ||
stat.c | ||
stat.h | ||
strbuf.c | ||
strbuf.h | ||
strfilter.c | ||
strfilter.h | ||
string.c | ||
strlist.c | ||
strlist.h | ||
svghelper.c | ||
svghelper.h | ||
symbol-elf.c | ||
symbol-minimal.c | ||
symbol.c | ||
symbol.h | ||
sysfs.c | ||
sysfs.h | ||
target.c | ||
target.h | ||
thread_map.c | ||
thread_map.h | ||
thread.c | ||
thread.h | ||
tool.h | ||
top.c | ||
top.h | ||
trace-event-info.c | ||
trace-event-parse.c | ||
trace-event-read.c | ||
trace-event-scripting.c | ||
trace-event.h | ||
types.h | ||
unwind.c | ||
unwind.h | ||
usage.c | ||
util.c | ||
util.h | ||
values.c | ||
values.h | ||
vdso.c | ||
vdso.h | ||
wrapper.c | ||
xyarray.c | ||
xyarray.h |