Hi Steve,
On Mon, Jul 07, 2025 at 10:00:03PM -0400, Steven Rostedt wrote:
This is based on top of the deferred unwind core patch series:
https://lore.kernel.org/linux-trace-kernel/20250708012239.268642741@kernel.org/ (local)
git://git.kernel.org/pub/scm/linux/kernel/git/trace/linux-trace.git
unwind/core
This series implements the perf interface to use deferred user space stack
tracing.
The code for this series is located here:
git://git.kernel.org/pub/scm/linux/kernel/git/trace/linux-trace.git
unwind/perf
Changes since v12: https://lore.kernel.org/linux-trace-kernel/20250701180410.755491417@goodmis.org/ (local)
- Also check against PF_USER_WORKER as io workers do not have PF_KTHREAD
set.
- Removed deferred_request_nmi() and have NMIs just use the normal
deferred_request() function. As Peter Zijlstra has stated, in_nmi() can
nest because some exceptions set in_nmi() and another NMI could come in.
- Removed use of timestamp. The deferred unwind has gone back to using
cookies, and perf doesn't use the cookie. This means the
struct perf_callchain_deferred_event is not modified.
What about adding the cookies in the records to handle lost data? Even
if it's not necessary to match callchains to samples, it still needs to
reject invalid callchains across the losts. Maybe it can just flush
pending samples when it sees LOST records and not try to match them but
having the cookies will handle it more accurately as some callchains may
be valid after the LOST.
Thanks,
Namhyung
Head SHA1: 3d88d03d533ede8d2d513942e768607aa9279c4b
Josh Poimboeuf (5):
perf: Remove get_perf_callchain() init_nr argument
perf: Have get_perf_callchain() return NULL if crosstask and user are set
perf: Simplify get_perf_callchain() user logic
perf: Skip user unwind if the task is a kernel thread
perf: Support deferred user callchains
Namhyung Kim (4):
perf tools: Minimal CALLCHAIN_DEFERRED support
perf record: Enable defer_callchain for user callchains
perf script: Display PERF_RECORD_CALLCHAIN_DEFERRED
perf tools: Merge deferred user callchains
Steven Rostedt (2):
perf: Use current->flags & PF_KTHREAD|PF_USER_WORKER instead of current->mm == NULL
perf: Support deferred user callchains for per CPU events
----
include/linux/perf_event.h | 13 +-
include/uapi/linux/perf_event.h | 19 +-
kernel/bpf/stackmap.c | 8 +-
kernel/events/callchain.c | 49 ++--
kernel/events/core.c | 407 +++++++++++++++++++++++++++++-
tools/include/uapi/linux/perf_event.h | 19 +-
tools/lib/perf/include/perf/event.h | 7 +
tools/perf/Documentation/perf-script.txt | 5 +
tools/perf/builtin-script.c | 92 +++++++
tools/perf/util/callchain.c | 24 ++
tools/perf/util/callchain.h | 3 +
tools/perf/util/event.c | 1 +
tools/perf/util/evlist.c | 1 +
tools/perf/util/evlist.h | 1 +
tools/perf/util/evsel.c | 39 +++
tools/perf/util/evsel.h | 1 +
tools/perf/util/machine.c | 1 +
tools/perf/util/perf_event_attr_fprintf.c | 1 +
tools/perf/util/sample.h | 3 +-
tools/perf/util/session.c | 78 ++++++
tools/perf/util/tool.c | 2 +
tools/perf/util/tool.h | 4 +-
22 files changed, 742 insertions(+), 36 deletions(-)