perf-ftrace(1)
==============

NAME
----
perf-ftrace - simple wrapper for kernel's ftrace functionality


SYNOPSIS
--------
[verse]
'perf ftrace' {trace|latency} <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.

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:

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


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.

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


SEE ALSO
--------
linkperf:perf-record[1], linkperf:perf-trace[1]
