2.1. Installation and Setup
2.1.2. Installing Required Kernel Information RPMs
SystemTap needs information about the kernel in order to place instrumentation in it (i.e. probe it). This information, which allows SystemTap to generate the code for the instrumentation, is contained in the matching -devel
, -debuginfo
, and -debuginfo-common-arch
packages for the kernel. The necessary -devel
and -debuginfo
packages for the ordinary "vanilla" kernel are as follows:
Likewise, the necessary packages for the PAE kernel would be kernel-PAE-debuginfo
, kernel-PAE-debuginfo-common-arch
,and kernel-PAE-devel
.
To determine what kernel your system is currently using, use:
uname -r
For example, if you wish to use SystemTap on kernel version 2.6.32-53.el6
on an i686 machine, then you would need to download and install the following RPMs:
kernel-debuginfo-2.6.32-53.el6.i686.rpm
kernel-debuginfo-common-i686-2.6.32-53.el6.i686.rpm
kernel-devel-2.6.32-53.el6.i686.rpm
The version, variant, and architecture of the -devel
, -debuginfo
and -debuginfo-common-arch
packages must match the kernel to be probed with SystemTap exactly.
The easiest way to install the required kernel information packages is through yum install
and debuginfo-install
. Included with later versions of the yum-utils
package is the debuginfo-install
(for example, version 1.1.10). Also, debuginfo-install
requires an appropriate yum repository from which to download and install -debuginfo
/-debuginfo-common-arch
packages.
Most required kernel packages can be found at
ftp://ftp.redhat.com/pub/redhat/linux/enterprise/; navigate there until the the appropriate
Debuginfo
directory for the system is found.. Configure
yum
accordingly by adding a new "debug"
yum
repository file under
/etc/yum.repos.d
containing the following lines:
[rhel-debuginfo]
name=Red Hat Enterprise Linux $releasever - $basearch - Debug
baseurl=ftp://ftp.redhat.com/pub/redhat/linux/enterprise/$releasever/en/os/$basearch/Debuginfo/
enabled=1
After configuring yum
with the appropriate repository, install the required -devel
, -debuginfo
, and -debuginfo-common-arch
packages for the kernel by running the following commands:
Replace kernelname
with the appropriate kernel variant name (for example, kernel-PAE
), and version
with the target kernel's version. For example, to install the required kernel information packages for the kernel-PAE-2.6.32-53.el6
kernel, run:
If yum
and yum-utils
are not installed (and unable to be installed), manually download and install the required kernel information packages. To generate the URL from which to download the required packages, use the following script:
Once the required packages to the machine have been manually downloaded, install the RPMs by running rpm --force -ivh package_names
.
If the kernel to be probed with SystemTap is currently being used, it is possible to immediately test whether the deployment was successful. If a different kernel is to be probed, reboot and load the appropriate kernel.
To start the test, run the command stap -v -e 'probe vfs.read {printf("read performed\n"); exit()}'
. This command simply instructs SystemTap to print read performed
then exit properly once a virtual file system read is detected. If the SystemTap deployment was successful, you should get output similar to the following:
Pass 1: parsed user script and 45 library script(s) in 340usr/0sys/358real ms.
Pass 2: analyzed script: 1 probe(s), 1 function(s), 0 embed(s), 0 global(s) in 290usr/260sys/568real ms.
Pass 3: translated to C into "/tmp/stapiArgLX/stap_e5886fa50499994e6a87aacdc43cd392_399.c" in 490usr/430sys/938real ms.
Pass 4: compiled C into "stap_e5886fa50499994e6a87aacdc43cd392_399.ko" in 3310usr/430sys/3714real ms.
Pass 5: starting run.
read performed
Pass 5: run completed in 10usr/40sys/73real ms.
The last three lines of the output (i.e. beginning with Pass 5
) indicate that SystemTap was able to successfully create the instrumentation to probe the kernel, run the instrumentation, detect the event being probed (in this case, a virtual file system read), and execute a valid handler (print text then close it with no errors).