2.2. Generating Instrumentation for Other Computers
Normally, SystemTap scripts can only be run on systems where SystemTap is deployed (as in
Section 2.1, “Installation and Setup”). This could mean that to run SystemTap on ten systems, SystemTap needs to be deployed on
all those systems. In some cases, this may be neither feasible nor desired. For instance, corporate policy may prohibit an administrator from installing RPMs that provide compilers or debug information on specific machines, which will prevent the deployment of SystemTap.
To work around this, use cross-instrumentation. Cross-instrumentation is the process of generating SystemTap instrumentation modules from a SystemTap script on one computer to be used on another computer. This process offers the following benefits:
The kernel information packages for various machines can be installed on a single host machine.
Each target machine only needs one RPM to be installed to use the generated SystemTap instrumentation module: systemtap-runtime
.
For the sake of simplicity, the following terms will be used throughout this section:
instrumentation module — the kernel module built from a SystemTap script; i.e. the
SystemTap module is built on the
host system, and will be loaded on the
target kernel of
target system.
host system — the system on which the instrumentation modules (from SystemTap scripts) are compiled, to be loaded on
target systems.
target system — the system in which the
instrumentation module is being built (from SystemTap scripts).
target kernel — the kernel of the
target system. This is the kernel which loads/runs the
instrumentation module.
Procedure 2.1. Configuring a Host System and Target Systems
Install the systemtap-runtime
RPM on each target system.
Determine the kernel running on each target system by running uname -r
on each target system.
Install SystemTap on the
host system. The
instrumentation module will be built for the
target systems on the
host system. For instructions on how to install SystemTap, refer to
Section 2.1.1, “Installing SystemTap”.
Using the
target kernel version determined earlier, install the
target kernel and related RPMs on the
host system by the method described in
Section 2.1.2, “Installing Required Kernel Information RPMs”. If multiple
target systems use different
target kernels, repeat this step for each different kernel used on the
target systems.
To build the instrumentation module, run the following command on the host system (be sure to specify the appropriate values):
stap -r kernel_version
script
-m module_name
-p4
Here, kernel_version
refers to the version of the target kernel (the output of uname -r
on the target machine), script
refers to the script to be converted into an instrumentation module, and module_name
is the desired name of the instrumentation module.
To determine the architecture notation of a running kernel, run uname -m
.
Once the instrumentation module is compiled, copy it to the target system and then load it using:
staprun module_name
.ko
For example, to create the instrumentation module simple.ko
from a SystemTap script named simple.stp
for the target kernel 2.6.32-53.el6, use the following command:
stap -r 2.6.32-53.el6 -e 'probe vfs.read {exit()}' -m simple -p4
This will create a module named simple.ko
. To use the instrumentation module simple.ko
, copy it to the target system and run the following command (on the target system):
staprun simple.ko
The host system must be the same architecture and running the same distribution of Linux as the target system in order for the built instrumentation module to work.