SystemTap
Developer(s) | Various |
---|---|
Initial release | 2005 |
Stable release | 3.0
/ March 27, 2016 |
Repository | |
Written in | C, C++, custom scripting |
Operating system | Linux kernel |
Type | Tracing programming language |
License | GNU General Public License |
Website | sourceware |
In computing, SystemTap (stap
) is a scripting language and tool for dynamically instrumenting running production Linux kernel-based operating systems. System administrators can use SystemTap to extract, filter and summarize data in order to enable diagnosis of complex performance or functional problems.
SystemTap consists of free and open-source software and includes contributions from Red Hat, IBM, Intel, Hitachi, Oracle, and other community members.[1]
History
SystemTap debuted in 2005 in Red Hat Enterprise Linux 4 Update 2 as a technology preview.[2]
After four years in development, SystemTap 1.0 was released in 2009.[3]
As of 2011[update] SystemTap runs fully supported in all Linux distributions including RHEL / CentOS 5[4] since update 2, SLES 10,[5] Fedora, Debian and Ubuntu.
Tracepoints in the CPython VM and JVM were added in SystemTap 1.2.[6]
Usage
SystemTap files written in the SystemTap language (based on the language reference.[7]) run with the stap
command-line[8]
and are saved as .stp
files.
The system carries out a number of passes on the script before allowing it to run, at which point the script is compiled into a loadable kernel module and loaded into the kernel. Listing modules shows each SystemTap script as stap_<UUID>
. The module is unloaded when the tap has finished running.
Scripts generally focus on events (such as starting or finishing a script), compiled-in probe points such as Linux "tracepoints", or the execution of functions or statements in the kernel or user-space.
Some "guru mode" scripts may also have embedded C, which may run with the -g
command-line option. However, use of guru mode is discouraged, and each SystemTap release includes more probe points designed to remove the need for guru-mode taps.
As of systemtap release 1.7 the software implements the new stapsys group and privilege level.[9]
Simple examples
The following script shows all applications setting TCP socket options on the system, what options are being set, and whether the option is set successfully or not:
# Show sockets setting options
# Return enabled or disabled based on value of optval
function getstatus(optval)
{
if ( optval == 1 )
return "enabling"
else
return "disabling"
}
probe begin
{
print ("\nChecking for apps setting socket options\n")
}
# Set a socket option
probe tcp.setsockopt
{
status = getstatus(user_int($optval))
printf (" App '%s' (PID %d) is %s socket option %s... ", execname(), pid(), status, optstr)
}
# Check setting the socket option worked
probe tcp.setsockopt.return
{
if ( ret == 0 )
printf ("success")
else
printf ("failed")
printf ("\n")
}
probe end
{
print ("\nClosing down\n")
}
Many other examples are shipped with SystemTap.[10] There are also real-world examples of SystemTap use at the War Stories page.[11]
Importing scripts from other tracing technologies
SystemTap can attach to DTrace markers when they are compiled into an application using macros from the sys/sdt.h
header file.
See also
References
- ^ "A SystemTap update". lwn.net.
- ^ "Product Documentation for Red Hat Enterprise Linux". Red Hat.
- ^ "Josh Stone - SystemTap release 1.0".
- ^ "Product Documentation". Red Hat.
- ^ 60951 (10 October 2006). "Optional update for SystemTap". Novell.
{{cite web}}
:|author=
has numeric name (help) - ^ "Features/SystemtapStaticProbes - FedoraProject". Fedoraproject.
- ^ http://www.redhat.com/docs/en-US/Red_Hat_Enterprise_Linux/html/SystemTap_Tapset_Reference/index.html
- ^
Compare Romans, Robb (2009). "SystemTap Language Reference: A guide to the constructs and syntax used in SystemTap scripts" (PDF). Red Hat. p. 4. Retrieved 2010-12-19.
SystemTap [...] requires root privileges to actually run the kernel objects it builds using the sudo command, applied to the staprun program.[...] staprun is a part of the SystemTap package, dedicated to module loading and unloading and kernel-touser data transfer.
- ^
Eigler, Frank Ch. (2012-02-01). "systemtap 1.7 release". Retrieved 2013-03-26.
The systemtap team announces release 1.7 [...] The new group and privilege level "stapsys" has been added [...]
- ^ "SystemTap Examples".
- ^ "WarStories - Systemtap Wiki".
External links
- SystemTap Homepage
- SystemTap Wiki
- SystemTap Language Reference (PDF)
- SystemTap project analysis by Ohloh
- Dynamic Tracing with DTrace & SystemTap
- Systemtap tutorial Frank Ch. Eigler
- SystemTap Beginner's Guide Don Domingo, William Cohen
- Problem Solving With Systemtap, Ottawa Linux Symposium 2006
- Problem Solving with SystemTap, Eugene Teo, presented at the Red Hat Summit 2007 (scripts)
- Dynamic Tracing and Performance Analysis Using SystemTap, Joshua Stone, presented at the LinuxWorld Conference 2008
- SystemTap Tutorial, Jim Keniston, presented at the Linux Plumbers Conference 2008