[PATCH v13 00/11] perf: Support the deferred unwinding infrastructure

Steven Rostedt posted 11 patches 3 months ago
There is a newer version of this series
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(-)
[PATCH v13 00/11] perf: Support the deferred unwinding infrastructure
Posted by Steven Rostedt 3 months ago
This is based on top of the deferred unwind core patch series:

 https://lore.kernel.org/linux-trace-kernel/20250708012239.268642741@kernel.org/
   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/

- 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.

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(-)
Re: [PATCH v13 00/11] perf: Support the deferred unwinding infrastructure
Posted by Namhyung Kim 2 months, 3 weeks ago
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/
>    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/
> 
> - 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(-)
Re: [PATCH v13 00/11] perf: Support the deferred unwinding infrastructure
Posted by Steven Rostedt 2 months, 3 weeks ago
On Fri, 11 Jul 2025 13:26:28 -0700
Namhyung Kim <namhyung@kernel.org> wrote:

> > - 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.

Sure, I can add that back, with the added comments needed that Jens
suggested.

Thanks,

-- Steve