perf: Support the deferred unwinding infrastructure
Status from this message: The following commit has been merged into the perf/core branch of tip:
Get series with b4
b4 am [email protected]Versions newest first · linked by author and title
- v16 Latest posting 2/24 patches 17 repliesApplied
- v16 posting 1/24 patches 8 repliesSuperseded
- v15 posting 2/24 patches 20 repliesSuperseded
Earlier versions · 3
| Version | Posted | Patches | Replies | Status |
|---|---|---|---|---|
| v15 posting 1/2 | 8 patches | 2 replies | Superseded | |
| v14 | 11 patches | 0 replies | Superseded | |
| v13 | 11 patches | 2 replies | Superseded |
Patches in v16 posting 2/2 Applied
| # | Subject and files | Size | Replies | Applied |
|---|---|---|---|---|
| 1/4 | unwind: Add interface to allow tracing a single taskinclude/ kernel/ | +255 | 0 replies | |
| 2/4 | perf: Support deferred user callchainsinclude/ include/ kernel/ +3 more | +162 | 0 replies | |
| 3/4 | perf: Have the deferred request record the user context cookieinclude/ include/ kernel/ +3 more | +25 | 0 replies | |
| 4/4 | perf: Support deferred user callchains for per CPU eventsinclude/ kernel/ | +260 | 0 replies |
Reviews trailers per patch
No Reviewed-by, Acked-by or Tested-by trailers for v16 yet.
Cover letter [PATCH v16 0/4] perf: Support the deferred unwinding infrastructure
This is based on top of tip/perf/core commit: 6d48436560e91be85
Then I added the patches from Peter Zijlstra:
https://lore.kernel.org/all/[email protected]/
This series implements the perf interface to use deferred user space stack tracing.
The patches for the user space side should still work with this series:
https://lore.kernel.org/linux-trace-kernel/[email protected]
Patch 1 updates the deferred unwinding infrastructure. It adds a new function called: unwind_deferred_task_init(). This is used when a tracer (perf) only needs to follow a single task. The descriptor returned can be used the same way as the descriptor returned by unwind_deferred_init(), but the tracer must only use it on one task at a time.
Patch 2 adds the per task deferred stack traces to perf. It adds a new event type called PERF_RECORD_CALLCHAIN_DEFERRED that is recorded when a task is about to go back to user space and happens in a location that pages may be faulted in. It also adds a new callchain context called PERF_CONTEXT_USER_DEFERRED that is used as a place holder in a kernel callchain to append the deferred user space stack trace to.
Patch 3 adds the user stack trace context cookie in the kernel callchain right after the PERF_CONTEXT_USER_DEFERRED context so that the user space side can map the request to the deferred user space stack trace.
Patch 4 adds support for the per CPU perf events that will allow the kernel to associate each of the per CPU perf event buffers to a single application. This is needed so that when a request for a deferred stack trace happens on a task that then migrates to another CPU, it will know which CPU buffer to use to record the stack trace on. It is possible to have more than one perf user tool running and a request made by one perf tool should have the deferred trace go to the same perf tool's perf CPU event buffer. A global list of all the descriptors representing each perf tool that is using deferred stack tracing is created to manage this.
Changes since v15: https://lore.kernel.org/linux-trace-kernel/[email protected]/
- The main update was that I moved the code to do single task deferred stack tracing into the unwind code. That allowed to reuse the code for tracing all tasks, and simplified the perf code in doing so.
The first patch updates the unwind deferred code to have this infrastructure. It only added a new function:
unwind_deferred_task_init()
This is the same as unwind_deferred_init() but it is used when the tracer will only trace a single task. The descriptor returned will have its own task_work callback it will use and it allows for any number of callers, not a limited set like the "all task" deferred unwinding has.
- The new code also removed the need to expose the generation of the cookie.
Josh Poimboeuf (1):
perf: Support deferred user callchains
Steven Rostedt (3):
unwind: Add interface to allow tracing a single task
perf: Have the deferred request record the user context cookie
perf: Support deferred user callchains for per CPU events
----
include/linux/perf_event.h | 9 +- include/linux/unwind_deferred.h | 15 ++ include/uapi/linux/perf_event.h | 25 ++- kernel/bpf/stackmap.c | 4 +- kernel/events/callchain.c | 14 +- kernel/events/core.c | 362 +++++++++++++++++++++++++++++++++- kernel/unwind/deferred.c | 283 ++++++++++++++++++++++---- tools/include/uapi/linux/perf_event.h | 25 ++- 8 files changed, 686 insertions(+), 51 deletions(-)