[PATCH 0/4] ftrace: add userspace stacktrace support and semaphore-latency tracer

Török Edwin
2008-10-12T13:13:21Z

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #1: Type: text/plain, Size: 2308 bytes --]

Hi,

This patch series is a draft implementation of a semaphore-latency tracer.
I would appreciate feedback on these patches so that they can be merged into
mainline.

The patches apply on top of tip/master (commit aaf9631d60b82182c7e9890b5ffec70f38131a50).

The first two patches add userspace stacktrace support.
Unfortunately if the userspace application (actually libc) is compiled without framepointers
on x86-64, the userspace trace will contain only 1 entry: the return address.
You can either request raw IP addresses in the trace, or ask for them to be
resolved to object file + relative address, then a tool such as addr2line can be
used to get file:line information.
This is currently x86-only, but other architectures could implement it.

TODO: It would be worth investigating if we could avoid code duplication vs. oprofile,
and use a common function for userspace traces, and convert oprofile to it.

The last 2 patches add a new tracer (and is independent of the first 2 patches).
This tracer attempts to help in tracking rwsem latency issues.
Each latency instance gets an ID, and a userspace program can be used to group
the stacktraces by latency ID, thus obtaining a list of all tasks involved
in a latency: the task(s) that was (were) holding the semaphore, and the tasks
that had to wait due to this.

See the patches themselves for more detail on how to use them.

Shortlog below:

Török Edwin (4):
Add support for userspace stacktraces in tracing/iter_ctrl
Identify which executable object the userspace address belongs to.
add tracepoints in rwsem
Implement semaphore latency tracer

Documentation/ftrace.txt | 5 +-
arch/x86/kernel/stacktrace.c | 57 +++++++++++++
include/linux/stacktrace.h | 8 ++
include/trace/rwsem.h | 35 ++++++++
kernel/trace/Kconfig | 12 +++
kernel/trace/Makefile | 1 +
kernel/trace/trace.c | 188 ++++++++++++++++++++++++++++++++++++++++++
kernel/trace/trace.h | 35 ++++++++
kernel/trace/trace_semlat.c | 186 +++++++++++++++++++++++++++++++++++++++++
lib/rwsem-spinlock.c | 16 ++--
lib/rwsem.c | 13 +--
11 files changed, 539 insertions(+), 17 deletions(-)
create mode 100644 include/trace/rwsem.h
create mode 100644 kernel/trace/trace_semlat.c