SystemTap

From Wikipedia, the free encyclopedia
Jump to navigation Jump to search
SystemTap
Initial release2005 (2005)
Stable release
5.3 / May 2, 2025; 11 months ago (2025-05-02)
Repository
  • {{URL|example.com|optional display text}}Lua error in Module:EditAtWikidata at line 29: attempt to index field 'wikibase' (a nil value).
Written inC, C++
Engine
    Lua error in Module:EditAtWikidata at line 29: attempt to index field 'wikibase' (a nil value).
    Operating systemLinux
    TypeTracing programming language
    LicenseGNU General Public License
    Websitesourceware.org/systemtap/

    In computing, SystemTap (stap) is a scripting language and tool for dynamically instrumenting running production Linux-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, the University of Wisconsin-Madison and other community members.[1]

    History

    [edit | edit source]

    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, 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 in 2009.[6]

    In November 2019, SystemTap 4.2 included prometheus exporter.

    Usage

    [edit | edit source]

    SystemTap files are written in the SystemTap language[7] (saved as .stp files) and run with the stap command-line.[8]

    The system carries out a number of analysis passes on the script before allowing it to run. Scripts may be executed with one of three backends selected by the --runtime= option. The default is a loadable kernel module, which has the fullest capability to inspect and manipulate any part of the system, and therefore requires most privilege. Another backend is based on the dynamic program analysis library DynInst to instrument the user's own user-space programs only, and requires least privilege. The newest backend[9] is based on eBPF byte-code, is limited to the Linux kernel interpreter's capabilities, and requires an intermediate level of privilege. In each case, the module is unloaded when the script 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 scripts. Guru mode is required in order to permit scripts to modify state in the instrumented software, such as to apply some types of emergency security fixes.

    As of SystemTap version 1.7, the software implements the new stapsys group and privilege level.[10]

    Simple examples

    [edit | edit source]

    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.[11] There are also real-world examples of SystemTap use at the War Stories page.[12]

    Importing scripts from other tracing technologies

    [edit | edit source]

    SystemTap can attach to DTrace markers when they are compiled into an application using macros from the sys/sdt.h header file.

    See also

    [edit | edit source]

    Lua error in mw.title.lua at line 392: bad argument #2 to 'title.new' (unrecognized namespace name 'Portal').

    References

    [edit | edit source]
    1. ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
    2. ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
    3. ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
    4. ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
    5. ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
    6. ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
    7. ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
    8. ^ Compare Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
    9. ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).[permanent dead link]
    10. ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
    11. ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
    12. ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
    [edit | edit source]