Ce contenu n'est pas disponible dans la langue sélectionnée.
Chapter 37. Getting started with SystemTap
As a system administrator, you can use SystemTap to identify underlying causes of a bug or performance problem on a running Linux system.
As an application developer, you can use SystemTap to monitor in fine detail how your application behaves within the Linux system.
37.1. The purpose of SystemTap Copier lienLien copié sur presse-papiers!
SystemTap is a tracing and probing tool that you can use to study and monitor the activities of your operating system (particularly, the kernel) in fine detail. SystemTap provides information similar to the output of tools such as netstat, ps, top, and iostat. However, SystemTap provides more filtering and analysis options for collected information. In SystemTap scripts, you specify the information that SystemTap gathers.
SystemTap aims to supplement the existing suite of Linux monitoring tools by providing users with the infrastructure to track kernel activity and combining this capability with two attributes:
- Flexibility
- the SystemTap framework enables you to develop simple scripts for investigating and monitoring a wide variety of kernel functions, system calls, and other events that occur in kernel space. With this, SystemTap is not so much a tool as it is a system that allows you to develop your own kernel-specific forensic and monitoring tools.
- Ease-of-Use
- SystemTap enables you to monitor kernel activity without having to recompile the kernel or reboot the system.
37.2. Installing SystemTap Copier lienLien copié sur presse-papiers!
To begin using SystemTap, install the required packages. To use SystemTap on more than one kernel where a system has multiple kernels installed, install the corresponding required kernel packages for each kernel version.
Prerequisites
- You have enabled debug repositories as described in Enabling debug and source repositories.
Procedure
Install the required SystemTap packages:
yum install systemtap
# yum install systemtapCopy to Clipboard Copied! Toggle word wrap Toggle overflow Install the required kernel packages:
Using
stap-prep:stap-prep
# stap-prepCopy to Clipboard Copied! Toggle word wrap Toggle overflow If
stap-prepdoes not work, install the required kernel packages manually:yum install kernel-debuginfo-$(uname -r) kernel-debuginfo-common-$(uname -m)-$(uname -r) kernel-devel-$(uname -r)
# yum install kernel-debuginfo-$(uname -r) kernel-debuginfo-common-$(uname -m)-$(uname -r) kernel-devel-$(uname -r)Copy to Clipboard Copied! Toggle word wrap Toggle overflow $(uname -m)is automatically replaced with the hardware platform of your system and$(uname -r)is automatically replaced with the version of your running kernel.
Verification
If the kernel to be probed with SystemTap is currently in use, test if your installation was successful:
stap -v -e 'probe kernel.function("vfs_read") {printf("read performed\n"); exit()}'# stap -v -e 'probe kernel.function("vfs_read") {printf("read performed\n"); exit()}'Copy to Clipboard Copied! Toggle word wrap Toggle overflow A successful SystemTap deployment results in an output similar to the following:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow where
-
Pass 5: starting runindicates that SystemTap successfully created the instrumentation to probe the kernel and runs the instrumentation. -
read performedindicates that SystemTap detected the specified event, in this example, a VFS read. -
Pass 5: run completed in <time> msindicates that SystemTap executed a valid handler. It displayed text and closed with no errors.
37.3. Privileges to run SystemTap Copier lienLien copié sur presse-papiers!
Running SystemTap scripts requires elevated system privileges but, in some instances, non-privileged users might need to run SystemTap instrumentation on their machine.
To allow users to run SystemTap without root access, add users to both of these user groups:
stapdevMembers of this group can use
stapto run SystemTap scripts, orstaprunto run SystemTap instrumentation modules.Running
stapinvolves compiling SystemTap scripts into kernel modules and loading them into the kernel. This requires elevated privileges to the system, which are granted tostapdevmembers. Unfortunately, such privileges also grant effective root access tostapdevmembers. As such, only grantstapdevgroup membership to users who can be trusted with root access.stapusr-
Members of this group can only use
staprunto run SystemTap instrumentation modules. In addition, they can only run those modules from the/lib/modules/kernel_version/systemtap/directory. This directory must be owned only by the root user, and must only be writable by the root user.
37.4. Running SystemTap scripts Copier lienLien copié sur presse-papiers!
You can run SystemTap scripts from standard input or from a file.
Sample scripts that are distributed with the installation of SystemTap can be found in the /usr/share/systemtap/examples directory.
Prerequisites
- SystemTap and the associated required kernel packages are installed as described in Installing Systemtap.
To run SystemTap scripts as a normal user, add the user to the SystemTap groups:
usermod --append --groups
# usermod --append --groups stapdev,stapusr user-nameCopy to Clipboard Copied! Toggle word wrap Toggle overflow
Procedure
Run the SystemTap script:
From standard input:
echo "probe timer.s(1) {exit()}" | stap -# echo "probe timer.s(1) {exit()}" | stap -Copy to Clipboard Copied! Toggle word wrap Toggle overflow This command instructs
stapto run the script passed byechoto standard input. To addstapoptions, insert them before the-character. For example, to make the results from this command more verbose, the command is:echo "probe timer.s(1) {exit()}" | stap -v -# echo "probe timer.s(1) {exit()}" | stap -v -Copy to Clipboard Copied! Toggle word wrap Toggle overflow From a file:
stap file_name
# stap file_nameCopy to Clipboard Copied! Toggle word wrap Toggle overflow