Chapter 38. Analyzing system performance with BPF Compiler Collection
The BPF Compiler Collection (BCC) analyzes system performance by combining the capabilities of Berkeley Packet Filter (BPF). With BPF, you can safely run the custom programs within the kernel to access system events and data for performance monitoring, tracing, and debugging. BCC simplifies the development and deployment of BPF programs with tools and libraries for users to extract important insights from their systems.
38.1. Installing the bcc-tools package Copy linkLink copied to clipboard!
Install the bcc-tools
package, which also installs the BPF Compiler Collection (BCC) library as a dependency.
Procedure
Install
bcc-tools
.dnf install bcc-tools
# dnf install bcc-tools
Copy to Clipboard Copied! Toggle word wrap Toggle overflow The BCC tools are installed in the
/usr/share/bcc/tools/
directory.
Verification
Inspect the installed tools:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow The
doc
directory in the listing provides documentation for each tool.
38.2. Using selected bcc-tools for performance analyses Copy linkLink copied to clipboard!
Use certain pre-created programs from the BPF Compiler Collection (BCC) library to efficiently and securely analyze the system performance on the per-event basis. The set of pre-created programs in the BCC library can serve as examples for creation of additional programs.
Prerequisites
- Installed bcc-tools package
- Root permissions
Procedure
- Using
execsnoop
to examine the system processes -
Run the
execsnoop
program in one terminal:
/usr/share/bcc/tools/execsnoop
# /usr/share/bcc/tools/execsnoop
Copy to Clipboard Copied! Toggle word wrap Toggle overflow To create a short-lived process of the
ls
command, in another terminal, enter:ls /usr/share/bcc/tools/doc/
$ ls /usr/share/bcc/tools/doc/
Copy to Clipboard Copied! Toggle word wrap Toggle overflow The terminal running
execsnoop
shows the output similar to the following:PCOMM PID PPID RET ARGS ls 8382 8287 0 /usr/bin/ls --color=auto /usr/share/bcc/tools/doc/ ...
PCOMM PID PPID RET ARGS ls 8382 8287 0 /usr/bin/ls --color=auto /usr/share/bcc/tools/doc/ ...
Copy to Clipboard Copied! Toggle word wrap Toggle overflow The
execsnoop
program prints a line of output for each new process that consume system resources. It even detects processes of programs that run very shortly, such asls
, and most monitoring tools would not register them.The
execsnoop
output displays the following fields:
-
Run the
- PCOMM
-
The parent process name. (
ls
) - PID
-
The process ID. (
8382
) - PPID
-
The parent process ID. (
8287
) - RET
-
The return value of the
exec()
system call (0
), which loads program code into new processes. - ARGS
- The location of the started program with arguments.
To see more details, examples, and options for execsnoop
, see /usr/share/bcc/tools/doc/execsnoop_example.txt
file.
For more information about exec()
, see exec(3)
manual pages.
- Using
opensnoop
to track what files a command opens -
In one terminal, run the
opensnoop
program to print the output for files opened only by the process of theuname
command:
/usr/share/bcc/tools/opensnoop -n uname
# /usr/share/bcc/tools/opensnoop -n uname
Copy to Clipboard Copied! Toggle word wrap Toggle overflow In another terminal, enter the command to open certain files:
uname
$ uname
Copy to Clipboard Copied! Toggle word wrap Toggle overflow The terminal running
opensnoop
shows the output similar to the following:PID COMM FD ERR PATH 8596 uname 3 0 /etc/ld.so.cache 8596 uname 3 0 /lib64/libc.so.6 8596 uname 3 0 /usr/lib/locale/locale-archive ...
PID COMM FD ERR PATH 8596 uname 3 0 /etc/ld.so.cache 8596 uname 3 0 /lib64/libc.so.6 8596 uname 3 0 /usr/lib/locale/locale-archive ...
Copy to Clipboard Copied! Toggle word wrap Toggle overflow The
opensnoop
program watches theopen()
system call across the whole system, and prints a line of output for each file thatuname
tried to open along the way.The
opensnoop
output displays the following fields:- PID
-
The process ID. (
8596
) - COMM
-
The process name. (
uname
) - FD
-
The file descriptor - a value that
open()
returns to refer to the open file. (3
) - ERR
- Any errors.
- PATH
-
The location of files that
open()
tried to open.
If a command tries to read a non-existent file, then the
FD
column returns-1
and theERR
column prints a value corresponding to the relevant error. As a result,opensnoop
can help you identify an application that does not behave properly.
-
In one terminal, run the
To see more details, examples, and options for opensnoop
, see /usr/share/bcc/tools/doc/opensnoop_example.txt
file.
For more information about open()
, see open(2)
manual pages.
- Use the
biotop
to monitor the top processes performing I/O operations on the disk -
Run the
biotop
program in one terminal with argument30
to produce 30 second summary:
/usr/share/bcc/tools/biotop 30
# /usr/share/bcc/tools/biotop 30
Copy to Clipboard Copied! Toggle word wrap Toggle overflow NoteWhen no argument provided, the output screen by default refreshes every 1 second.
In another terminal, enter command to read the content from the local hard disk device and write the output to the
/dev/zero
file:dd if=/dev/vda of=/dev/zero
# dd if=/dev/vda of=/dev/zero
Copy to Clipboard Copied! Toggle word wrap Toggle overflow This step generates certain I/O traffic to illustrate
biotop
.The terminal running
biotop
shows the output similar to the following:Copy to Clipboard Copied! Toggle word wrap Toggle overflow The
biotop
output displays the following fields:
-
Run the
- PID
-
The process ID. (
9568
) - COMM
-
The process name. (
dd
) - DISK
-
The disk performing the read operations. (
vda
) - I/O
- The number of read operations performed. (16294)
- Kbytes
- The amount of Kbytes reached by the read operations. (14,440,636)
- AVGms
- The average I/O time of read operations. (3.69)
For more details, examples, and options for biotop
, see the /usr/share/bcc/tools/doc/biotop_example.txt
file.
For more information about dd
, see dd(1)
manual pages.
Using xfsslower
to expose unexpectedly slow file system operations
The xfsslower
measures the time spent by XFS file system in performing read, write, open or sync (fsync
) operations. The 1
argument ensures that the program shows only the operations that are slower than 1 ms.
Run the
xfsslower
program in one terminal:/usr/share/bcc/tools/xfsslower 1
# /usr/share/bcc/tools/xfsslower 1
Copy to Clipboard Copied! Toggle word wrap Toggle overflow NoteWhen no arguments provided,
xfsslower
by default displays operations slower than 10 ms.In another terminal, enter the command to create a text file in the
vim
editor to start interaction with the XFS file system:vim text
$ vim text
Copy to Clipboard Copied! Toggle word wrap Toggle overflow The terminal running
xfsslower
shows something similar upon saving the file from the previous step:Copy to Clipboard Copied! Toggle word wrap Toggle overflow Each line represents an operation in the file system, which took more time than a certain threshold.
xfsslower
detects possible file system problems, which can take form of unexpectedly slow operations.The
xfsslower
output displays the following fields:- COMM
-
The process name. (
b’bash'
) - T
The operation type. (
R
)- Read
- Write
- Sync
- OFF_KB
- The file offset in KB. (0)
- FILENAME
- The file that is read, written, or synced.
To see more details, examples, and options for xfsslower
, see /usr/share/bcc/tools/doc/xfsslower_example.txt
file.
For more information about fsync
, see fsync(2)
manual pages.