124 lines
3.2 KiB
Groff
Executable File
124 lines
3.2 KiB
Groff
Executable File
.TH funcinterval 8 "2020-05-27" "USER COMMANDS"
|
|
.SH NAME
|
|
funcinterval \- Time interval between the same function, tracepoint as a histogram.
|
|
.SH SYNOPSIS
|
|
.B funcinterval [\-h] [\-p PID] [\-i INTERVAL] [\-d DURATION] [\-T] [\-u] [\-m] [\-v] pattern
|
|
.SH DESCRIPTION
|
|
This tool times interval between the same function as a histogram.
|
|
|
|
eBPF/bcc is very suitable for platform performance tuning.
|
|
By funclatency, we can profile specific functions to know how latency
|
|
this function costs. However, sometimes performance drop is not about the
|
|
latency of function but the interval between function calls.
|
|
funcinterval is born for this purpose.
|
|
|
|
This tool uses in-kernel eBPF maps for storing timestamps and the histogram,
|
|
for efficiency.
|
|
|
|
WARNING: This uses dynamic tracing of (what can be many) functions, an
|
|
activity that has had issues on some kernel versions (risk of panics or
|
|
freezes). Test, and know what you are doing, before use.
|
|
|
|
Since this uses BPF, only the root user can use this tool.
|
|
.SH REQUIREMENTS
|
|
CONFIG_BPF and bcc.
|
|
.SH OPTIONS
|
|
pattern
|
|
Function name.
|
|
\-h
|
|
Print usage message.
|
|
.TP
|
|
\-p PID
|
|
Trace this process ID only.
|
|
.TP
|
|
\-i INTERVAL
|
|
Print output every interval seconds.
|
|
.TP
|
|
\-d DURATION
|
|
Total duration of trace, in seconds.
|
|
.TP
|
|
\-T
|
|
Include timestamps on output.
|
|
.TP
|
|
\-u
|
|
Output histogram in microseconds.
|
|
.TP
|
|
\-m
|
|
Output histogram in milliseconds.
|
|
.TP
|
|
\-v
|
|
Print the BPF program (for debugging purposes).
|
|
.SH EXAMPLES
|
|
.TP
|
|
Time the interval of do_sys_open() kernel function as a histogram:
|
|
#
|
|
.B funcinterval do_sys_open
|
|
.TP
|
|
Time the interval of xhci_ring_ep_doorbell(), in microseconds:
|
|
#
|
|
.B funcinterval -u xhci_ring_ep_doorbell
|
|
.TP
|
|
Time the interval of do_nanosleep(), in milliseconds
|
|
#
|
|
.B funcinterval -m do_nanosleep
|
|
.TP
|
|
Output every 5 seconds, with timestamps:
|
|
#
|
|
.B funcinterval -mTi 5 vfs_read
|
|
.TP
|
|
Time process 181 only:
|
|
#
|
|
.B funcinterval -p 181 vfs_read
|
|
.TP
|
|
Time the interval of mm_vmscan_direct_reclaim_begin tracepoint:
|
|
#
|
|
.B funcinterval t:vmscan:mm_vmscan_direct_reclaim_begin
|
|
.TP
|
|
Time the interval of c:malloc used by top every 3 seconds:
|
|
#
|
|
.B funcinterval -p `pidof -s top` -i 3 c:malloc
|
|
.TP
|
|
Time /usr/local/bin/python main function:
|
|
#
|
|
.B funcinterval /usr/local/bin/python:main
|
|
.SH FIELDS
|
|
.TP
|
|
necs
|
|
Nanosecond range
|
|
.TP
|
|
usecs
|
|
Microsecond range
|
|
.TP
|
|
msecs
|
|
Millisecond range
|
|
.TP
|
|
count
|
|
How many calls fell into this range
|
|
.TP
|
|
distribution
|
|
An ASCII bar chart to visualize the distribution (count column)
|
|
.SH OVERHEAD
|
|
This traces kernel functions and maintains in-kernel timestamps and a histogram,
|
|
which are asynchronously copied to user-space. While this method is very
|
|
efficient, the rate of kernel functions can also be very high (>1M/sec), at
|
|
which point the overhead is expected to be measurable. Measure in a test
|
|
environment and understand overheads before use. You can also use funccount
|
|
to measure the rate of kernel functions over a short duration, to set some
|
|
expectations before use.
|
|
.SH SOURCE
|
|
This is from bcc.
|
|
.IP
|
|
https://github.com/iovisor/bcc
|
|
.PP
|
|
Also look in the bcc distribution for a companion _examples.txt file containing
|
|
example usage, output, and commentary for this tool.
|
|
.SH OS
|
|
Linux
|
|
.SH STABILITY
|
|
Unstable - in development.
|
|
.SH AUTHOR
|
|
Edward Wu
|
|
.SH SEE ALSO
|
|
funclatency(8)
|
|
funccount(8)
|