mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/chenhuacai/linux-loongson
synced 2025-09-01 23:46:45 +00:00

This change adds support for new funcgraph tracer options funcgraph-args, funcgraph-retval, funcgraph-retval-hex and funcgraph-retaddr. The new added options are: - args : Show function arguments. - retval : Show function return value. - retval-hex : Show function return value in hexadecimal format. - retaddr : Show function return address. # ./perf ftrace -G vfs_write --graph-opts retval,retaddr # tracer: function_graph # # CPU DURATION FUNCTION CALLS # | | | | | | | 5) | mutex_unlock() { /* <-rb_simple_write+0xda/0x150 */ 5) 0.188 us | local_clock(); /* <-lock_release+0x2ad/0x440 ret=0x3bf2a3cf90e */ 5) | rt_mutex_slowunlock() { /* <-rb_simple_write+0xda/0x150 */ 5) | _raw_spin_lock_irqsave() { /* <-rt_mutex_slowunlock+0x4f/0x200 */ 5) 0.123 us | preempt_count_add(); /* <-_raw_spin_lock_irqsave+0x23/0x90 ret=0x0 */ 5) 0.128 us | local_clock(); /* <-__lock_acquire.isra.0+0x17a/0x740 ret=0x3bf2a3cfc8b */ 5) 0.086 us | do_raw_spin_trylock(); /* <-_raw_spin_lock_irqsave+0x4a/0x90 ret=0x1 */ 5) 0.845 us | } /* _raw_spin_lock_irqsave ret=0x292 */ 5) | _raw_spin_unlock_irqrestore() { /* <-rt_mutex_slowunlock+0x191/0x200 */ 5) 0.097 us | local_clock(); /* <-lock_release+0x2ad/0x440 ret=0x3bf2a3cff1f */ 5) 0.086 us | do_raw_spin_unlock(); /* <-_raw_spin_unlock_irqrestore+0x23/0x60 ret=0x1 */ 5) 0.104 us | preempt_count_sub(); /* <-_raw_spin_unlock_irqrestore+0x35/0x60 ret=0x0 */ 5) 0.726 us | } /* _raw_spin_unlock_irqrestore ret=0x80000000 */ 5) 1.881 us | } /* rt_mutex_slowunlock ret=0x0 */ 5) 2.931 us | } /* mutex_unlock ret=0x0 */ Signed-off-by: Changbin Du <changbin.du@huawei.com> Reviewed-by: Ian Rogers <irogers@google.com> Link: https://lore.kernel.org/r/20250613114048.132336-1-changbin.du@huawei.com Signed-off-by: Namhyung Kim <namhyung@kernel.org>
226 lines
6.8 KiB
Plaintext
226 lines
6.8 KiB
Plaintext
perf-ftrace(1)
|
|
==============
|
|
|
|
NAME
|
|
----
|
|
perf-ftrace - simple wrapper for kernel's ftrace functionality
|
|
|
|
|
|
SYNOPSIS
|
|
--------
|
|
[verse]
|
|
'perf ftrace' {trace|latency|profile} <command>
|
|
|
|
DESCRIPTION
|
|
-----------
|
|
The 'perf ftrace' command provides a collection of subcommands which use
|
|
kernel's ftrace infrastructure.
|
|
|
|
'perf ftrace trace' is a simple wrapper of the ftrace. It only supports
|
|
single thread tracing currently and just reads trace_pipe in text and then
|
|
write it to stdout.
|
|
|
|
'perf ftrace latency' calculates execution latency of a given function
|
|
(optionally with BPF) and display it as a histogram.
|
|
|
|
'perf ftrace profile' show a execution profile for each function including
|
|
total, average, max time and the number of calls.
|
|
|
|
The following options apply to perf ftrace.
|
|
|
|
COMMON OPTIONS
|
|
--------------
|
|
|
|
-p::
|
|
--pid=::
|
|
Trace on existing process id (comma separated list).
|
|
|
|
--tid=::
|
|
Trace on existing thread id (comma separated list).
|
|
|
|
-a::
|
|
--all-cpus::
|
|
Force system-wide collection. Scripts run without a <command>
|
|
normally use -a by default, while scripts run with a <command>
|
|
normally don't - this option allows the latter to be run in
|
|
system-wide mode.
|
|
|
|
-C::
|
|
--cpu=::
|
|
Only trace for the list of CPUs provided. Multiple CPUs can
|
|
be provided as a comma separated list with no space like: 0,1.
|
|
Ranges of CPUs are specified with -: 0-2.
|
|
Default is to trace on all online CPUs.
|
|
|
|
-v::
|
|
--verbose::
|
|
Increase the verbosity level.
|
|
|
|
|
|
OPTIONS for 'perf ftrace trace'
|
|
-------------------------------
|
|
|
|
-t::
|
|
--tracer=::
|
|
Tracer to use when neither -G nor -F option is not
|
|
specified: function_graph or function.
|
|
|
|
-F::
|
|
--funcs::
|
|
List available functions to trace. It accepts a pattern to
|
|
only list interested functions.
|
|
|
|
-D::
|
|
--delay::
|
|
Time (ms) to wait before starting tracing after program start.
|
|
|
|
-m::
|
|
--buffer-size::
|
|
Set the size of per-cpu tracing buffer, <size> is expected to
|
|
be a number with appended unit character - B/K/M/G.
|
|
|
|
--inherit::
|
|
Trace children processes spawned by our target.
|
|
|
|
-T::
|
|
--trace-funcs=::
|
|
Select function tracer and set function filter on the given
|
|
function (or a glob pattern). Multiple functions can be given
|
|
by using this option more than once. The function argument also
|
|
can be a glob pattern. It will be passed to 'set_ftrace_filter'
|
|
in tracefs.
|
|
|
|
-N::
|
|
--notrace-funcs=::
|
|
Select function tracer and do not trace functions given by the
|
|
argument. Like -T option, this can be used more than once to
|
|
specify multiple functions (or glob patterns). It will be
|
|
passed to 'set_ftrace_notrace' in tracefs.
|
|
|
|
--func-opts::
|
|
List of options allowed to set:
|
|
|
|
- call-graph - Display kernel stack trace for function tracer.
|
|
- irq-info - Display irq context info for function tracer.
|
|
|
|
-G::
|
|
--graph-funcs=::
|
|
Select function_graph tracer and set graph filter on the given
|
|
function (or a glob pattern). This is useful to trace for
|
|
functions executed from the given function. This can be used more
|
|
than once to specify multiple functions. It will be passed to
|
|
'set_graph_function' in tracefs.
|
|
|
|
-g::
|
|
--nograph-funcs=::
|
|
Select function_graph tracer and set graph notrace filter on the
|
|
given function (or a glob pattern). Like -G option, this is useful
|
|
for the function_graph tracer only and disables tracing for function
|
|
executed from the given function. This can be used more than once to
|
|
specify multiple functions. It will be passed to 'set_graph_notrace'
|
|
in tracefs.
|
|
|
|
--graph-opts::
|
|
List of options allowed to set:
|
|
|
|
- args - Show function arguments.
|
|
- retval - Show function return value.
|
|
- retval-hex - Show function return value in hexadecimal format.
|
|
- retaddr - Show function return address.
|
|
- nosleep-time - Measure on-CPU time only for function_graph tracer.
|
|
- noirqs - Ignore functions that happen inside interrupt.
|
|
- verbose - Show process names, PIDs, timestamps, etc.
|
|
- thresh=<n> - Setup trace duration threshold in microseconds.
|
|
- depth=<n> - Set max depth for function graph tracer to follow.
|
|
- tail - Print function name at the end.
|
|
|
|
|
|
OPTIONS for 'perf ftrace latency'
|
|
---------------------------------
|
|
|
|
-T::
|
|
--trace-funcs=::
|
|
Set the function name to get the histogram. Unlike perf ftrace trace,
|
|
it only allows single function to calculate the histogram.
|
|
|
|
-e::
|
|
--events=::
|
|
Set the pair of events to get the histogram. The histogram is calculated
|
|
by the time difference between the two events from the same thread. This
|
|
requires -b/--use-bpf option.
|
|
|
|
-b::
|
|
--use-bpf::
|
|
Use BPF to measure function latency instead of using the ftrace (it
|
|
uses function_graph tracer internally).
|
|
|
|
-n::
|
|
--use-nsec::
|
|
Use nano-second instead of micro-second as a base unit of the histogram.
|
|
|
|
--bucket-range=::
|
|
Bucket range in ms or ns (according to -n/--use-nsec), default is log2() mode.
|
|
|
|
--min-latency=::
|
|
Minimum latency for the start of the first bucket, in ms or ns (according to
|
|
-n/--use-nsec).
|
|
|
|
--max-latency=::
|
|
Maximum latency for the start of the last bucket, in ms or ns (according to
|
|
-n/--use-nsec). The setting is ignored if the value results in more than
|
|
22 buckets.
|
|
|
|
OPTIONS for 'perf ftrace profile'
|
|
---------------------------------
|
|
|
|
-T::
|
|
--trace-funcs=::
|
|
Set function filter on the given function (or a glob pattern).
|
|
Multiple functions can be given by using this option more than once.
|
|
The function argument also can be a glob pattern. It will be passed
|
|
to 'set_ftrace_filter' in tracefs.
|
|
|
|
-N::
|
|
--notrace-funcs=::
|
|
Do not trace functions given by the argument. Like -T option, this
|
|
can be used more than once to specify multiple functions (or glob
|
|
patterns). It will be passed to 'set_ftrace_notrace' in tracefs.
|
|
|
|
-G::
|
|
--graph-funcs=::
|
|
Set graph filter on the given function (or a glob pattern). This is
|
|
useful to trace for functions executed from the given function. This
|
|
can be used more than once to specify multiple functions. It will be
|
|
passed to 'set_graph_function' in tracefs.
|
|
|
|
-g::
|
|
--nograph-funcs=::
|
|
Set graph notrace filter on the given function (or a glob pattern).
|
|
Like -G option, this is useful for the function_graph tracer only and
|
|
disables tracing for function executed from the given function. This
|
|
can be used more than once to specify multiple functions. It will be
|
|
passed to 'set_graph_notrace' in tracefs.
|
|
|
|
-m::
|
|
--buffer-size::
|
|
Set the size of per-cpu tracing buffer, <size> is expected to
|
|
be a number with appended unit character - B/K/M/G.
|
|
|
|
-s::
|
|
--sort=::
|
|
Sort the result by the given field. Available values are:
|
|
total, avg, max, count, name. Default is 'total'.
|
|
|
|
--graph-opts::
|
|
List of options allowed to set:
|
|
|
|
- nosleep-time - Measure on-CPU time only for function_graph tracer.
|
|
- noirqs - Ignore functions that happen inside interrupt.
|
|
- thresh=<n> - Setup trace duration threshold in microseconds.
|
|
- depth=<n> - Set max depth for function graph tracer to follow.
|
|
|
|
|
|
SEE ALSO
|
|
--------
|
|
linkperf:perf-record[1], linkperf:perf-trace[1]
|