'\" t
.\"     Title: perf-ftrace
.\"    Author: [FIXME: author] [see http://www.docbook.org/tdg5/en/html/author]
.\" Generator: DocBook XSL Stylesheets vsnapshot <http://docbook.sf.net/>
.\"      Date: 07/17/2026
.\"    Manual: perf Manual
.\"    Source: perf
.\"  Language: English
.\"
.TH "PERF\-FTRACE" "1" "07/17/2026" "perf" "perf Manual"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
.\" http://bugs.debian.org/507673
.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
.ie \n(.g .ds Aq \(aq
.el       .ds Aq '
.\" -----------------------------------------------------------------
.\" * set default formatting
.\" -----------------------------------------------------------------
.\" disable hyphenation
.nh
.\" disable justification (adjust text to left margin only)
.ad l
.\" -----------------------------------------------------------------
.\" * MAIN CONTENT STARTS HERE *
.\" -----------------------------------------------------------------
.SH "NAME"
perf-ftrace \- simple wrapper for kernel\*(Aqs ftrace functionality
.SH "SYNOPSIS"
.sp
.nf
\fIperf ftrace\fR {trace|latency} <command>
.fi
.SH "DESCRIPTION"
.sp
The \fIperf ftrace\fR command provides a collection of subcommands which use kernel\(cqs ftrace infrastructure\&.
.sp
.if n \{\
.RS 4
.\}
.nf
\*(Aqperf ftrace trace\*(Aq 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\&.
.fi
.if n \{\
.RE
.\}
.sp
.if n \{\
.RS 4
.\}
.nf
\*(Aqperf ftrace latency\*(Aq calculates execution latency of a given function
(optionally with BPF) and display it as a histogram\&.
.fi
.if n \{\
.RE
.\}
.sp
The following options apply to perf ftrace\&.
.SH "COMMON OPTIONS"
.PP
\-p, \-\-pid=
.RS 4
Trace on existing process id (comma separated list)\&.
.RE
.PP
\-\-tid=
.RS 4
Trace on existing thread id (comma separated list)\&.
.RE
.PP
\-a, \-\-all\-cpus
.RS 4
Force system\-wide collection\&. Scripts run without a <command> normally use \-a by default, while scripts run with a <command> normally don\(cqt \- this option allows the latter to be run in system\-wide mode\&.
.RE
.PP
\-C, \-\-cpu=
.RS 4
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\&.
.RE
.PP
\-v, \-\-verbose
.RS 4
Increase the verbosity level\&.
.RE
.SH "OPTIONS FOR \FIPERF FTRACE TRACE\FR"
.PP
\-t, \-\-tracer=
.RS 4
Tracer to use when neither \-G nor \-F option is not specified: function_graph or function\&.
.RE
.PP
\-F, \-\-funcs
.RS 4
List available functions to trace\&. It accepts a pattern to only list interested functions\&.
.RE
.PP
\-D, \-\-delay
.RS 4
Time (ms) to wait before starting tracing after program start\&.
.RE
.PP
\-m, \-\-buffer\-size
.RS 4
Set the size of per\-cpu tracing buffer, <size> is expected to be a number with appended unit character \- B/K/M/G\&.
.RE
.PP
\-\-inherit
.RS 4
Trace children processes spawned by our target\&.
.RE
.PP
\-T, \-\-trace\-funcs=
.RS 4
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
\fIset_ftrace_filter\fR
in tracefs\&.
.RE
.PP
\-N, \-\-notrace\-funcs=
.RS 4
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
\fIset_ftrace_notrace\fR
in tracefs\&.
.RE
.PP
\-\-func\-opts
.RS 4
List of options allowed to set:
.sp
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
.sp -1
.IP \(bu 2.3
.\}
call\-graph \- Display kernel stack trace for function tracer\&.
.RE
.sp
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
.sp -1
.IP \(bu 2.3
.\}
irq\-info \- Display irq context info for function tracer\&.
.RE
.RE
.PP
\-G, \-\-graph\-funcs=
.RS 4
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
\fIset_graph_function\fR
in tracefs\&.
.RE
.PP
\-g, \-\-nograph\-funcs=
.RS 4
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
\fIset_graph_notrace\fR
in tracefs\&.
.RE
.PP
\-\-graph\-opts
.RS 4
List of options allowed to set:
.sp
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
.sp -1
.IP \(bu 2.3
.\}
nosleep\-time \- Measure on\-CPU time only for function_graph tracer\&.
.RE
.sp
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
.sp -1
.IP \(bu 2.3
.\}
noirqs \- Ignore functions that happen inside interrupt\&.
.RE
.sp
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
.sp -1
.IP \(bu 2.3
.\}
verbose \- Show process names, PIDs, timestamps, etc\&.
.RE
.sp
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
.sp -1
.IP \(bu 2.3
.\}
thresh=<n> \- Setup trace duration threshold in microseconds\&.
.RE
.sp
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
.sp -1
.IP \(bu 2.3
.\}
depth=<n> \- Set max depth for function graph tracer to follow\&.
.RE
.RE
.SH "OPTIONS FOR \FIPERF FTRACE LATENCY\FR"
.PP
\-T, \-\-trace\-funcs=
.RS 4
Set the function name to get the histogram\&. Unlike perf ftrace trace, it only allows single function to calculate the histogram\&.
.RE
.PP
\-b, \-\-use\-bpf
.RS 4
Use BPF to measure function latency instead of using the ftrace (it uses function_graph tracer internally)\&.
.RE
.PP
\-n, \-\-use\-nsec
.RS 4
Use nano\-second instead of micro\-second as a base unit of the histogram\&.
.RE
.SH "SEE ALSO"
.sp
\fBperf-record\fR(1), \fBperf-trace\fR(1)
