From 0801a5e1814d8b73413ac47b2de4e2c00ff7a3a5 Mon Sep 17 00:00:00 2001 From: Sagar Patel Date: Thu, 29 Aug 2019 11:40:21 -0400 Subject: [PATCH] PR23285 (2): enable prometheus-exporter type scripts on stapbpf The eBPF backend now supports prometheus-exporter scripts. This implementation introduces character escaping macros enabling the array dump macros on stapbpf. However, there are some issues with foreach loops which are used in the macros (PR24953). 1) Developed character escaping macros helper functions. 2) Added prometheus probe tapset for stapbpf. 3) Added stapbpf procfs file path to stap-exporter. 4) Introduced a sample stapbpf prometheus-exporter script in EXAMPLES. 5) Updated NEWS. --- NEWS | 2 + bpf-internal.h | 6 +- stap-exporter/default/EXAMPLE-BPF | 4 + stap-exporter/default/syscallsrw.stp | 1 + stap-exporter/stap-exporter.in | 24 ++- stapbpf/bpfinterp.cxx | 50 +++++- stapbpf/stapbpf.cxx | 3 +- tapset/prometheus.stp | 8 +- tapset/string.stp | 40 +++-- testsuite/systemtap.examples/index.html | 26 +-- testsuite/systemtap.examples/index.txt | 37 +++-- .../systemtap.examples/keyword-index.html | 73 ++++++--- .../systemtap.examples/keyword-index.txt | 150 +++++++++++++++--- testsuite/systemtap.examples/metadatabase.db | Bin 194560 -> 194560 bytes .../profiling/syscallsrw.meta | 13 ++ .../profiling/syscallsrw.stp | 18 +++ 16 files changed, 358 insertions(+), 97 deletions(-) create mode 100755 stap-exporter/default/EXAMPLE-BPF create mode 120000 stap-exporter/default/syscallsrw.stp create mode 100644 testsuite/systemtap.examples/profiling/syscallsrw.meta create mode 100755 testsuite/systemtap.examples/profiling/syscallsrw.stp diff --git a/NEWS b/NEWS index d2115bc39..1177c8362 100644 --- a/NEWS +++ b/NEWS @@ -1,5 +1,7 @@ * What's new in version 4.2, PRERELEASE +- The stapbpf backend now supports stap-exporter extensions. + - The stapbpf backend now supports procfs probes. The implementation uses FIFO special files in /var/tmp/systemtap-$EFFUSER/MODNAME instead of the proc filesystem files. diff --git a/bpf-internal.h b/bpf-internal.h index a3d0c381f..db8ede7f1 100644 --- a/bpf-internal.h +++ b/bpf-internal.h @@ -180,7 +180,9 @@ const opcode BPF_LD_MAP = BPF_LD | BPF_IMM | BPF_DW | (BPF_PSEUDO_MAP_FD << 8); FN(set_procfs_value), \ FN(append_procfs_value), \ FN(get_procfs_value), \ - FN(str_concat), + FN(str_concat), \ + FN(text_str), \ + FN(string_quoted), const bpf_func_id BPF_FUNC_map_get_next_key = (bpf_func_id) -1; const bpf_func_id BPF_FUNC_sprintf = (bpf_func_id) -2; @@ -191,6 +193,8 @@ const bpf_func_id BPF_FUNC_set_procfs_value = (bpf_func_id) -6; const bpf_func_id BPF_FUNC_append_procfs_value = (bpf_func_id) -7; const bpf_func_id BPF_FUNC_get_procfs_value = (bpf_func_id) -8; const bpf_func_id BPF_FUNC_str_concat = (bpf_func_id) -9; +const bpf_func_id BPF_FUNC_text_str = (bpf_func_id) -10; +const bpf_func_id BPF_FUNC_string_quoted = (bpf_func_id) -11; struct insn { diff --git a/stap-exporter/default/EXAMPLE-BPF b/stap-exporter/default/EXAMPLE-BPF new file mode 100755 index 000000000..c8f1798ec --- /dev/null +++ b/stap-exporter/default/EXAMPLE-BPF @@ -0,0 +1,4 @@ +#! /bin/sh + +# link to this generic shell script to invoke a non-guru stap example +exec stap --bpf -v --example $@ `basename $0 | sed -e s,autostart-,,` diff --git a/stap-exporter/default/syscallsrw.stp b/stap-exporter/default/syscallsrw.stp new file mode 120000 index 000000000..3a166173a --- /dev/null +++ b/stap-exporter/default/syscallsrw.stp @@ -0,0 +1 @@ +EXAMPLE-BPF \ No newline at end of file diff --git a/stap-exporter/stap-exporter.in b/stap-exporter/stap-exporter.in index 8d07a80bf..e35d18acb 100644 --- a/stap-exporter/stap-exporter.in +++ b/stap-exporter/stap-exporter.in @@ -31,9 +31,9 @@ from time import time script_dir = "%sysconfdir%/stap-exporter" proc_basename = "__stap_exporter_" + str(os.getpid()) # permit concurrent exporters -proc_path = "/proc/systemtap" sessmgr = None - +proc_path_lkm = "/proc/systemtap" +proc_path_bpf = "/var/tmp/systemtap-root" class Session: """Represent a single systemtap script found $script_dir, whether or not @@ -91,9 +91,21 @@ class Session: if self.keepalive is not None: self.killafter = time() + self.keepalive - path = proc_path + "/" + self.proc_subdirname + "/__prometheus" - with open(path) as metrics: - return bytes(metrics.read(), 'utf-8') + path_lkm = proc_path_lkm + "/" + self.proc_subdirname + "/__prometheus" + path_bpf = proc_path_bpf + "/" + self.proc_subdirname + "/__prometheus" + + try: + with open(path_lkm) as metrics: + return bytes(metrics.read(), 'utf-8') + except FileNotFoundError: + pass + + try: + with open(path_bpf) as metrics: + return bytes(metrics.read(), 'utf-8') + except FileNotFoundError: + raise Exception("[Error] Unable to find procfs files under search paths. " + "Try again once the script has created the procfs files.") class SessionMgr: """Represent the set of possible systemtap scripts that can be exported. Searches the $script_dir @@ -179,6 +191,8 @@ if __name__ == "__main__": httpd.timeout = 5 # parametrize? print("listening on port %d" % port) + print("procfs files will be searched under: %s and %s" % (proc_path_lkm, proc_path_bpf)) + try: while True: sessmgr.poll() diff --git a/stapbpf/bpfinterp.cxx b/stapbpf/bpfinterp.cxx index 9298b1a2f..ffdbdd108 100644 --- a/stapbpf/bpfinterp.cxx +++ b/stapbpf/bpfinterp.cxx @@ -397,6 +397,48 @@ bpf_sprintf(std::vector &strings, char *fstr, return reinterpret_cast(strings.back().c_str()); } +uint64_t +bpf_text_str(std::vector &strings, char* input, bool quoted) +{ + std::string str(input); + std::stringstream stream; + + for (std::string::iterator it = str.begin(); it != str.end(); ++it) + { + unsigned char c = *it; + unsigned int i = c; + + if (std::isprint(c) && i < 128 && c != '\\' && c != '"') + stream << c; + else + { + stream << '\\'; + switch (c) { + case '\0': stream << '0'; break; // Not handled by translate_escapes + case '\a': stream << 'a'; break; // Not handled by translate_escapes + case '\b': stream << 'b'; break; // Not handled by translate_escapes + case '\f': stream << 'f'; break; + case '\n': stream << 'n'; break; + case '\r': stream << 'r'; break; + case '\t': stream << 't'; break; + case '\v': stream << 'v'; break; + case '"': stream << '"'; break; + case '\\': stream << '\\'; break; + default: + stream << "x" << std::setfill('0') << std::setw(2) << std::hex << i; + break; + } + } + } + + if (quoted) + strings.push_back("\"" + stream.str() + "\""); + else + strings.push_back(stream.str()); + + return reinterpret_cast(strings.back().c_str()); +} + uint64_t bpf_str_concat(std::vector &strings, char* left, char* right) { @@ -937,6 +979,12 @@ bpf_interpret(size_t ninsns, const struct bpf_insn insns[], dr = bpf_sprintf(strings, as_str(regs[1]), regs[3], regs[4], regs[5]); break; + case bpf::BPF_FUNC_text_str: + dr = bpf_text_str(strings, as_str(regs[1]), false); + break; + case bpf::BPF_FUNC_string_quoted: + dr = bpf_text_str(strings, as_str(regs[1]), true); + break; case bpf::BPF_FUNC_str_concat: dr = bpf_str_concat(strings, as_str(regs[1]), as_str(regs[2])); @@ -953,7 +1001,7 @@ bpf_interpret(size_t ninsns, const struct bpf_insn insns[], case bpf::BPF_FUNC_gettimeofday_ns: dr = bpf_gettimeofday_ns(); break; - case bpf::BPF_FUNC_get_target: + case bpf::BPF_FUNC_get_target: dr = bpf_get_target(); break; case bpf::BPF_FUNC_set_procfs_value: diff --git a/stapbpf/stapbpf.cxx b/stapbpf/stapbpf.cxx index 74f9f61cf..9b8037ec2 100644 --- a/stapbpf/stapbpf.cxx +++ b/stapbpf/stapbpf.cxx @@ -1861,8 +1861,9 @@ procfs_read_event_loop (procfsprobe_data* data, bpf_transport_context* uctx) // Run the probe and collect the message. bpf_interpret(prog->d_size / sizeof(bpf_insn), static_cast(prog->d_buf), uctx); - // Make a copy of the message. + // Make a copy of the message and reset it. std::string msg = uctx->procfs_msg; + uctx->procfs_msg.clear(); procfs_lock.unlock(); diff --git a/tapset/prometheus.stp b/tapset/prometheus.stp index cb12ceec0..170ca3687 100644 --- a/tapset/prometheus.stp +++ b/tapset/prometheus.stp @@ -1 +1,7 @@ -probe prometheus = procfs("__prometheus").read.maxsize(0x10000) { } +probe prometheus = +%( runtime != "bpf" %? + procfs("__prometheus").read.maxsize(0x10000) +%: + procfs("__prometheus").read +%) +{ } diff --git a/tapset/string.stp b/tapset/string.stp index f9792ea73..df2c7a708 100644 --- a/tapset/string.stp +++ b/tapset/string.stp @@ -100,12 +100,20 @@ function strpos:long(s1:string,s2:string) * printable are replaced by the corresponding escape sequence in the * returned string. */ -function text_str:string(input:string) -%{ /* pure */ /* unprivileged */ /* unmodified-fnargs */ - if (_stp_text_str(STAP_RETVALUE, STAP_ARG_input, 0, 0, 0, 0, 0) < 0) { - STAP_RETVALUE[0] = '\0'; - } -%} +function text_str:string(input:string) +%( runtime != "bpf" %? + %{ /* pure */ /* unprivileged */ /* unmodified-fnargs */ + if (_stp_text_str(STAP_RETVALUE, STAP_ARG_input, 0, 0, 0, 0, 0) < 0) { + STAP_RETVALUE[0] = '\0'; + } + %} +%: + %{ /* bpf */ + 0xbf, 1, $input, -, -; /* mov r1, $input */ + 0x85, 0, 0, 0, -10; /* call BPF_FUNC_TEXT_STR */ + 0xbf, $$, 0, -, -; /* return r0 */ + %} +%) /** * sfunction text_strn - Escape any non-printable chars in a string @@ -203,9 +211,17 @@ function isdigit:long(str:string) * string. Note that the string will be surrounded by double quotes. */ function string_quoted:string (str:string) -%{ /* pure */ /* unmodified-fnargs */ - /* This can't fail, since the input string is already in stap context space. */ - (void) _stp_text_str(STAP_RETVALUE, - (char *)(uintptr_t)STAP_ARG_str, - MAXSTRINGLEN, MAXSTRINGLEN, 1, 0, 0); -%} +%( runtime != "bpf" %? + %{ /* pure */ /* unmodified-fnargs */ + /* This can't fail, since the input string is already in stap context space. */ + (void) _stp_text_str(STAP_RETVALUE, + (char *)(uintptr_t)STAP_ARG_str, + MAXSTRINGLEN, MAXSTRINGLEN, 1, 0, 0); + %} +%: + %{ /* bpf */ + 0xbf, 1, $str, -, -; /* mov r1, $input */ + 0x85, 0, 0, 0, -11; /* call BPF_FUNC_STRING_QUOTED */ + 0xbf, $$, 0, -, -; /* return r0 */ + %} +%) diff --git a/testsuite/systemtap.examples/index.html b/testsuite/systemtap.examples/index.html index 77223cff3..519ecad5b 100644 --- a/testsuite/systemtap.examples/index.html +++ b/testsuite/systemtap.examples/index.html @@ -38,7 +38,7 @@
  • By Keyword
  • -

    For systemtap version 4.1.

    Best Examples

    +

    For systemtap version 4.2.

    Best Examples

    -

    For systemtap version 4.1.

    Examples by Keyword

    -

    _BEST(17) APPLICATION(2) BACKTRACE(8) BPF(1) CALLGRAPH(4) CONTAINER(1) DIAGRAM(1) DISK(5) FILE(2) FILESYSTEM(4) FORMAT(2) FUNCTION(4) FUTEX(2) GURU(19) INTERACTIVE(2) INTERRUPT(3) IO(30) JSON(2) KVM(3) LIMITS(3) LOCKING(6) MEMORY(21) MONITORING(9) NANOSLEEP(1) NETWORK(21) NFS(5) NUMA(1) PACKETS(1) PROCESS(27) PROFILING(24) PROMETHEUS(5) QEMU(2) REGEX(1) RETRANSMISSION(1) SCHEDULER(9) SCSI(1) SECURITY(13) SIGNALS(5) SIMPLE(10) SOCKET(8) SPECULATION(1) STAPGAMES(5) STATISTICS(10) SYSCALL(18) TCP(4) THREAD(2) TIME(4) TRACE(11) TRACEPOINT(8) TRAFFIC(8) TTY(1) VIRTUALIZATION(3) WATCHDOG(1) WATCHPOINT(2)

    +

    For systemtap version 4.2.

    Examples by Keyword

    +

    _BEST(17) APPLICATION(2) BACKTRACE(8) BPF(9) CALLGRAPH(4) CONTAINER(1) DIAGRAM(1) DISK(5) DYNINST(1) FILE(2) FILESYSTEM(4) FORMAT(2) FUNCTION(4) FUTEX(2) GURU(19) INTERACTIVE(2) INTERRUPT(3) IO(30) JSON(2) KVM(3) LIMITS(3) LOCKING(6) MEMORY(20) MONITORING(9) NANOSLEEP(1) NETWORK(21) NFS(5) NUMA(1) PACKETS(1) PROCESS(27) PROFILING(24) PROMETHEUS(6) QEMU(2) REGEX(1) RETRANSMISSION(1) SCHEDULER(9) SCSI(1) SECURITY(13) SIGNALS(5) SIMPLE(10) SOCKET(8) SPECULATION(1) STAPGAMES(5) STATISTICS(10) SYSCALL(19) TCP(4) THREAD(2) TIME(4) TRACE(11) TRACEPOINT(8) TRAFFIC(8) TTY(1) VIRTUALIZATION(3) WATCHDOG(1) WATCHPOINT(2)

    _BEST

    • general/helloworld.stp - SystemTap "Hello World" Program
      -keywords: _BEST SIMPLE
      +keywords: _BEST SIMPLE BPF

      A basic "Hello World" program implemented in SystemTap script. It prints out "hello world" message and then immediately exits.

      # stap helloworld.stp

    • general/para-callgraph.stp - Callgraph Tracing with Arguments
      keywords: _BEST TRACE CALLGRAPH
      @@ -97,7 +97,7 @@ keywords: _BEST APPLICATION
      • apps/libguestfs_log.stp - Trace libguestfs startup
        -keywords: APPLICATION TRACE
        +keywords: APPLICATION TRACE BPF

        The libguestfs_log.stp script prints a log of when various libgueststartup steps are encountered. The first column is microseconds since the script started. The second column is the time elapsed in microseconds between the previous and current events and the third column is the event name.

        # stap libguestfs_log.stp -T 1

      • apps/stap_time.stp - Provide elapsed times for Passes of SystemTap script compilation
        keywords: APPLICATION TRACE
        @@ -133,9 +133,33 @@ keywords: _BEST BPF
          -
        • memory/cachestat.stp - Count Page Cache Hits and Misses
          +
        • apps/libguestfs_log.stp - Trace libguestfs startup
          +keywords: APPLICATION TRACE BPF
          +

          The libguestfs_log.stp script prints a log of when various libgueststartup steps are encountered. The first column is microseconds since the script started. The second column is the time elapsed in microseconds between the previous and current events and the third column is the event name.

          # stap libguestfs_log.stp -T 1

          +
        • general/ansi_colors.stp - Color Table for ansi_set_color()
          +keywords: FORMAT BPF
          +

          The script prints a table showing the available color combinations for the ansi_set_color() function in the ansi.stp tapset.

          # stap ansi_colors.stp

          +
        • general/ansi_colors2.stp - Show Attribues in Table for ansi_set_color()
          +keywords: FORMAT BPF
          +

          The script prints a table showing the available attributes (bold, underline, and inverse) with color combinations for the ans_set_color() function in the ansi.stp tapset.

          # stap ansi_colors2.stp

          +
        • general/helloworld.stp - SystemTap "Hello World" Program
          +keywords: _BEST SIMPLE BPF
          +

          A basic "Hello World" program implemented in SystemTap script. It prints out "hello world" message and then immediately exits.

          # stap helloworld.stp

          +
        • memory/cachestat.stp - Count Page Cache Hits and Misses
          +keywords: MEMORY BPF
          +

          Monitors hits and misses to the page cache and reports a count every 5 seconds. Based on a bpftrace tool by David Valin.

          # stap cachestat.stp -T 1

          +
        • memory/mmfilepage.stp - Track Virtual Memory System Actions on File Backed Pages
          keywords: MEMORY BPF
          -

          Monitors hits and misses to the page cache and reports a count every 5 seconds. Based on a bpftrace tool by David Valin.

          # stap --bpf cachestat.stp -T 1

          +

          The mmfilepage.stp script uses the virtual memory tracepoints available in some kernels to track the number of faults, copy on writes mapping, and unmapping operations for file backed pages. When the script is terminated the counts are printed for each process that allocated pages while the script was running. The mmfilepage.stp script is useful in debugging leaks in the mapped file regions of a process.

          # stap mmfilepage.stp -T 1

          +
        • memory/mmwriteback.stp - Track Virtual Memory System Writing to Disk
          +keywords: MEMORY BPF
          +

          The mmwriteback.stp script uses the virtual memory tracepoints available in some kernels to report all of the file writebacks that occur form kupdate, pdflush and kjournald while the script is running. It's useful in determining where writes are coming from on a supposedly idle system that is experiencing unexpected IO.

          # stap mmwriteback.stp -T 1

          +
        • network/sk_stream_wait_memory.stp - Track Start and Stop of Processes Due to Network Buffer Space
          +keywords: NETWORK TCP PROCESS BPF
          +

          The sk_stream-wait_memory.stp prints a time stamp, executable, and pid each time a process blocks due to the send buffer being full. A similar entry is printed each time a process continues because there is room in the buffer.

          # stap sk_stream_wait_memory.stp -T 1

          +
        • profiling/syscallsrw.stp - Provide a tally of read and write syscalls run on the system
          +keywords: PROMETHEUS SYSCALL BPF
          +

          The syscall_read_write.stp script tallies the read and write syscalls. This is a demo script for stapbpf prometheus-exporter scripts.

        CALLGRAPH

          @@ -183,6 +207,12 @@ keywords: IO NFS DISK

          The nfsd_unlink.stp script lists the ip address and file name each time time a file is being removed or unlinked by the nfsd. This script is run on the nfs server.

          # stap nfsd_unlink.stp -T 1

        +

        DYNINST

        +
          +
        • apps/php-trace.stp - Tracing of PHP code execution
          +keywords: TRACE DYNINST
          +

          Trace of executing PHP code using the enabled markers.

          # stap php-trace.stp -c 'php -f hello.php'

          +

        FILE

        • io/iotime.stp - Trace Time Spent in Read and Write for Files
          @@ -210,10 +240,10 @@ keywords: IO FORMAT
          • general/ansi_colors.stp - Color Table for ansi_set_color()
            -keywords: FORMAT
            +keywords: FORMAT BPF

            The script prints a table showing the available color combinations for the ansi_set_color() function in the ansi.stp tapset.

            # stap ansi_colors.stp

          • general/ansi_colors2.stp - Show Attribues in Table for ansi_set_color()
            -keywords: FORMAT
            +keywords: FORMAT BPF

            The script prints a table showing the available attributes (bold, underline, and inverse) with color combinations for the ans_set_color() function in the ansi.stp tapset.

            # stap ansi_colors2.stp

          FUNCTION

          @@ -477,11 +507,8 @@ keywords: STATISTICS STATISTICS MEMORY INTERACTIVE

          This script prints the size of a type, based on dwarf debuginfo for any kernel or userspace module, or trial-compilation of a given header file name. Types and corresponding locations are provided to the script at runtime via keyboard input. The format of the input is identical to that of sizeof.stp (see script source for more information). Types and locations can be repeatedly given until the process is terminated.

          sample usage in general/sizeof_interactive.txt

        • memory/cachestat.stp - Count Page Cache Hits and Misses
          -keywords: MEMORY
          -

          Monitors hits and misses to the page cache and reports a count every 5 seconds. Based on a bpftrace tool by David Valin.

          # stap cachestat.stp -T 1

          -
        • memory/cachestat.stp - Count Page Cache Hits and Misses
          keywords: MEMORY BPF
          -

          Monitors hits and misses to the page cache and reports a count every 5 seconds. Based on a bpftrace tool by David Valin.

          # stap --bpf cachestat.stp -T 1

          +

          Monitors hits and misses to the page cache and reports a count every 5 seconds. Based on a bpftrace tool by David Valin.

          # stap cachestat.stp -T 1

        • memory/glibc-malloc.stp - Overview glibc malloc internal operations
          keywords: MEMORY PROCESS

          This script reports on internal statistics of the glibc malloc implementation, as used by a process restricted by stap -x/-c

          # stap glibc-malloc.stp -c 'stap --dump-functions'

          @@ -514,13 +541,13 @@ keywords: MEMORY MEMORY

          The mmanonpage.stp script uses the virtual memory tracepoints available in some kernels to track the number of faults, user space frees, page ins, copy on writes and unmaps for anonymous pages. When the script is terminated the counts are printed for each process that allocated pages while the script was running. This script displays the anonymous page statistics for each process that ran while the script is active. It's useful in debugging leaks in the anonymous regions of a process.

          # stap mmanonpage.stp -T 1

        • memory/mmfilepage.stp - Track Virtual Memory System Actions on File Backed Pages
          -keywords: MEMORY
          +keywords: MEMORY BPF

          The mmfilepage.stp script uses the virtual memory tracepoints available in some kernels to track the number of faults, copy on writes mapping, and unmapping operations for file backed pages. When the script is terminated the counts are printed for each process that allocated pages while the script was running. The mmfilepage.stp script is useful in debugging leaks in the mapped file regions of a process.

          # stap mmfilepage.stp -T 1

        • memory/mmreclaim.stp - Track Virtual Memory System Page Reclamation
          keywords: MEMORY

          The mmreclaim.stp script uses the virtual memory tracepoints available in some kernels to track page reclaim activity that occurred while the script was running. It's useful in debugging performance problems that occur due to page reclamation.

          # stap mmreclaim.stp -T 1

        • memory/mmwriteback.stp - Track Virtual Memory System Writing to Disk
          -keywords: MEMORY
          +keywords: MEMORY BPF

          The mmwriteback.stp script uses the virtual memory tracepoints available in some kernels to report all of the file writebacks that occur form kupdate, pdflush and kjournald while the script is running. It's useful in determining where writes are coming from on a supposedly idle system that is experiencing unexpected IO.

          # stap mmwriteback.stp -T 1

        • memory/numa_faults.stp - Summarize Process Misses across NUMA Nodes
          keywords: MEMORY NUMA
          @@ -608,7 +635,7 @@ keywords: NETWORK NETWORK TRAFFIC

          The packet_contents.stp script displays the length of each network packet and its contents in both hexadecimal and ASCII. Systemtap strings are MAXSTRINGLEN in length by default which may not be enough for larger packets. In order to print larger packets, this limit can be increased by passing in the "-DMAXSTRINGLEN=65536" command line option.

          sample usage in network/packet_contents.txt

        • network/sk_stream_wait_memory.stp - Track Start and Stop of Processes Due to Network Buffer Space
          -keywords: NETWORK TCP PROCESS
          +keywords: NETWORK TCP PROCESS BPF

          The sk_stream-wait_memory.stp prints a time stamp, executable, and pid each time a process blocks due to the send buffer being full. A similar entry is printed each time a process continues because there is room in the buffer.

          # stap sk_stream_wait_memory.stp -T 1

        • network/socket-trace.stp - Trace Functions Called in Network Socket Code
          keywords: NETWORK SOCKET
          @@ -683,7 +710,7 @@ keywords: MEMORY NETWORK SOCKET PROCESS

          The connect_stat.stp script prints a task's entire ancestry (parent process name/uid/gid) whenever it attempts an outgoing socket connection to a given IP address.

          # stap connect_stat.stp 127.0.0.1 -T 1

        • network/sk_stream_wait_memory.stp - Track Start and Stop of Processes Due to Network Buffer Space
          -keywords: NETWORK TCP PROCESS
          +keywords: NETWORK TCP PROCESS BPF

          The sk_stream-wait_memory.stp prints a time stamp, executable, and pid each time a process blocks due to the send buffer being full. A similar entry is printed each time a process continues because there is room in the buffer.

          # stap sk_stream_wait_memory.stp -T 1

        • process/cycle_thief.stp - Track IRQ's and Other Processes Stealing Cycles from a Task
          keywords: _BEST PROCESS SCHEDULER TIME TRACEPOINT INTERRUPT
          @@ -846,6 +873,9 @@ keywords: PROMETHEUS profiling/syscallsbypid.stp - Provide a per-process syscall tally on the system
          keywords: PROMETHEUS PROCESS SYSCALL TRACEPOINT

          The syscallsbypid.stp script tallies each syscall for each running process. This information can be useful to determine the activity of various processes on the system. The script makes the information available via procfs in Prometheus readable format. When a process exits its data will be eliminated from the prometheus output. To avoid exceeding the storage limitations of SystemTap older entries maybe overwritten by newer entries. This can lead to some active process syscall counts disappearing and/or later reappearing with a lower value. Also note that the script does not properly name syscalls for 32-bit applications running on 64-bit machines.

          # stap syscallsbypid.stp -T 1

          +
        • profiling/syscallsrw.stp - Provide a tally of read and write syscalls run on the system
          +keywords: PROMETHEUS SYSCALL BPF
          +

          The syscall_read_write.stp script tallies the read and write syscalls. This is a demo script for stapbpf prometheus-exporter scripts.

        QEMU

          @@ -970,7 +1000,7 @@ keywords: SIGNALS
          keywords: SIMPLE TRACE CALLGRAPH

          Print a timed per-thread microsecond-timed nested callgraph. The first parameter names the function probe points to trace.

          sample usage in general/callgraph.txt

        • general/helloworld.stp - SystemTap "Hello World" Program
          -keywords: _BEST SIMPLE
          +keywords: _BEST SIMPLE BPF

          A basic "Hello World" program implemented in SystemTap script. It prints out "hello world" message and then immediately exits.

          # stap helloworld.stp

        • general/key.stp - make keyboard noises
          keywords: SIMPLE
          @@ -1135,6 +1165,9 @@ keywords: PROMETHEUS profiling/syscallsbypid.stp - Provide a per-process syscall tally on the system
          keywords: PROMETHEUS PROCESS SYSCALL TRACEPOINT

          The syscallsbypid.stp script tallies each syscall for each running process. This information can be useful to determine the activity of various processes on the system. The script makes the information available via procfs in Prometheus readable format. When a process exits its data will be eliminated from the prometheus output. To avoid exceeding the storage limitations of SystemTap older entries maybe overwritten by newer entries. This can lead to some active process syscall counts disappearing and/or later reappearing with a lower value. Also note that the script does not properly name syscalls for 32-bit applications running on 64-bit machines.

          # stap syscallsbypid.stp -T 1

          +
        • profiling/syscallsrw.stp - Provide a tally of read and write syscalls run on the system
          +keywords: PROMETHEUS SYSCALL BPF
          +

          The syscall_read_write.stp script tallies the read and write syscalls. This is a demo script for stapbpf prometheus-exporter scripts.

        • profiling/ucalls.stp - Profile method invocations in Java, Perl, Php, Python, Ruby, and Tcl scripts
          keywords: PROFILING SYSCALL

          The ucalls.stp script is modeled after the BCC ucalls script (https://github.com/iovisor/bcc/blob/master/tools/lib/ucalls.py) by Sasha Goldshtein. The ucalls.stp script monitors the process indicated by the -x or -c option. When the scripts exits it prints out information about the number of times that each method is invoked for code written in Java, Perl, Php, Python, Ruby, and Tcl. Include the word "syscalls" on the command line to count syscalls invoked by the process. If you want latency information, include "latency" on the command line. Note that the latency option does not work for recursive functions

          # stap ucalls.stp syscalls latency -c "python -c 'print(\"hello world\")' \
          @@ -1143,7 +1176,7 @@ keywords: PROFILING  TCP
           
          • network/sk_stream_wait_memory.stp - Track Start and Stop of Processes Due to Network Buffer Space
            -keywords: NETWORK TCP PROCESS
            +keywords: NETWORK TCP PROCESS BPF

            The sk_stream-wait_memory.stp prints a time stamp, executable, and pid each time a process blocks due to the send buffer being full. A similar entry is printed each time a process continues because there is room in the buffer.

            # stap sk_stream_wait_memory.stp -T 1

          • network/tcp_connections.stp - Track Creation of Incoming TCP Connections
            keywords: NETWORK TCP SOCKET
            @@ -1185,10 +1218,10 @@ keywords: PROCESS TRACE

            The gmalloc_watch.stp script from Colin Walters' blog (https://blog.verbum.org/2011/03/19/analyzing-memory-use-with-systemtap/) traces the allocation of glib2 memory using the markers in glib2.

            # stap gmalloc_watch.stp -T 1

          • apps/libguestfs_log.stp - Trace libguestfs startup
            -keywords: APPLICATION TRACE
            +keywords: APPLICATION TRACE BPF

            The libguestfs_log.stp script prints a log of when various libgueststartup steps are encountered. The first column is microseconds since the script started. The second column is the time elapsed in microseconds between the previous and current events and the third column is the event name.

            # stap libguestfs_log.stp -T 1

          • apps/php-trace.stp - Tracing of PHP code execution
            -keywords: TRACE
            +keywords: TRACE DYNINST

            Trace of executing PHP code using the enabled markers.

            # stap php-trace.stp -c 'php -f hello.php'

          • apps/stap_time.stp - Provide elapsed times for Passes of SystemTap script compilation
            keywords: APPLICATION TRACE
            diff --git a/testsuite/systemtap.examples/keyword-index.txt b/testsuite/systemtap.examples/keyword-index.txt index f07fbf3cc..0ffbfe781 100644 --- a/testsuite/systemtap.examples/keyword-index.txt +++ b/testsuite/systemtap.examples/keyword-index.txt @@ -2,12 +2,12 @@ SYSTEMTAP EXAMPLES INDEX BY KEYWORD (see also index.txt) -For systemtap version 4.1. +For systemtap version 4.2. = _BEST = general/helloworld.stp - SystemTap "Hello World" Program -keywords: _best simple +keywords: _best simple bpf A basic "Hello World" program implemented in SystemTap script. It prints out "hello world" message and then immediately exits. @@ -214,7 +214,7 @@ keywords: _best virtualization kvm = APPLICATION = apps/libguestfs_log.stp - Trace libguestfs startup -keywords: application trace +keywords: application trace bpf The libguestfs_log.stp script prints a log of when various libgueststartup steps are encountered. The first column is @@ -337,13 +337,98 @@ keywords: _best profiling backtrace = BPF = +apps/libguestfs_log.stp - Trace libguestfs startup +keywords: application trace bpf + + The libguestfs_log.stp script prints a log of when various + libgueststartup steps are encountered. The first column is + microseconds since the script started. The second column is the time + elapsed in microseconds between the previous and current events and + the third column is the event name. + + # stap libguestfs_log.stp -T 1 + + +general/ansi_colors.stp - Color Table for ansi_set_color() +keywords: format bpf + + The script prints a table showing the available color combinations + for the ansi_set_color() function in the ansi.stp tapset. + + # stap ansi_colors.stp + + +general/ansi_colors2.stp - Show Attribues in Table for ansi_set_color() +keywords: format bpf + + The script prints a table showing the available attributes (bold, + underline, and inverse) with color combinations for the + ans_set_color() function in the ansi.stp tapset. + + # stap ansi_colors2.stp + + +general/helloworld.stp - SystemTap "Hello World" Program +keywords: _best simple bpf + + A basic "Hello World" program implemented in SystemTap script. It + prints out "hello world" message and then immediately exits. + + # stap helloworld.stp + + memory/cachestat.stp - Count Page Cache Hits and Misses keywords: memory bpf Monitors hits and misses to the page cache and reports a count every 5 seconds. Based on a bpftrace tool by David Valin. - # stap --bpf cachestat.stp -T 1 + # stap cachestat.stp -T 1 + + +memory/mmfilepage.stp - Track Virtual Memory System Actions on File Backed Pages +keywords: memory bpf + + The mmfilepage.stp script uses the virtual memory tracepoints + available in some kernels to track the number of faults, copy on + writes mapping, and unmapping operations for file backed pages. When + the script is terminated the counts are printed for each process that + allocated pages while the script was running. The mmfilepage.stp + script is useful in debugging leaks in the mapped file regions of a + process. + + # stap mmfilepage.stp -T 1 + + +memory/mmwriteback.stp - Track Virtual Memory System Writing to Disk +keywords: memory bpf + + The mmwriteback.stp script uses the virtual memory tracepoints + available in some kernels to report all of the file writebacks that + occur form kupdate, pdflush and kjournald while the script is + running. It's useful in determining where writes are coming from on + a supposedly idle system that is experiencing unexpected IO. + + # stap mmwriteback.stp -T 1 + + +network/sk_stream_wait_memory.stp - Track Start and Stop of Processes Due to Network Buffer Space +keywords: network tcp process bpf + + The sk_stream-wait_memory.stp prints a time stamp, executable, and + pid each time a process blocks due to the send buffer being full. A + similar entry is printed each time a process continues because there + is room in the buffer. + + # stap sk_stream_wait_memory.stp -T 1 + + +profiling/syscallsrw.stp - Provide a tally of read and write syscalls run on the system +keywords: prometheus syscall bpf + + The syscall_read_write.stp script tallies the read and write + syscalls. This is a demo script for stapbpf prometheus-exporter + scripts. = CALLGRAPH = @@ -478,6 +563,16 @@ keywords: nfs disk # stap nfsd_unlink.stp -T 1 += DYNINST = + +apps/php-trace.stp - Tracing of PHP code execution +keywords: trace dyninst + + Trace of executing PHP code using the enabled markers. + + # stap php-trace.stp -c 'php -f hello.php' + + = FILE = io/iotime.stp - Trace Time Spent in Read and Write for Files @@ -557,7 +652,7 @@ keywords: io filesystem = FORMAT = general/ansi_colors.stp - Color Table for ansi_set_color() -keywords: format +keywords: format bpf The script prints a table showing the available color combinations for the ansi_set_color() function in the ansi.stp tapset. @@ -566,7 +661,7 @@ keywords: format general/ansi_colors2.stp - Show Attribues in Table for ansi_set_color() -keywords: format +keywords: format bpf The script prints a table showing the available attributes (bold, underline, and inverse) with color combinations for the @@ -1402,22 +1497,13 @@ keywords: statistics memory interactive # echo "FILE ''" | stap sizeof_interactive.stp -T 1 -memory/cachestat.stp - Count Page Cache Hits and Misses -keywords: memory - - Monitors hits and misses to the page cache and reports a count every - 5 seconds. Based on a bpftrace tool by David Valin. - - # stap cachestat.stp -T 1 - - memory/cachestat.stp - Count Page Cache Hits and Misses keywords: memory bpf Monitors hits and misses to the page cache and reports a count every 5 seconds. Based on a bpftrace tool by David Valin. - # stap --bpf cachestat.stp -T 1 + # stap cachestat.stp -T 1 memory/glibc-malloc.stp - Overview glibc malloc internal operations @@ -1550,7 +1636,7 @@ keywords: memory memory/mmfilepage.stp - Track Virtual Memory System Actions on File Backed Pages -keywords: memory +keywords: memory bpf The mmfilepage.stp script uses the virtual memory tracepoints available in some kernels to track the number of faults, copy on @@ -1575,7 +1661,7 @@ keywords: memory memory/mmwriteback.stp - Track Virtual Memory System Writing to Disk -keywords: memory +keywords: memory bpf The mmwriteback.stp script uses the virtual memory tracepoints available in some kernels to report all of the file writebacks that @@ -1879,7 +1965,7 @@ keywords: network traffic network/sk_stream_wait_memory.stp - Track Start and Stop of Processes Due to Network Buffer Space -keywords: network tcp process +keywords: network tcp process bpf The sk_stream-wait_memory.stp prints a time stamp, executable, and pid each time a process blocks due to the send buffer being full. A @@ -2111,7 +2197,7 @@ keywords: network socket process network/sk_stream_wait_memory.stp - Track Start and Stop of Processes Due to Network Buffer Space -keywords: network tcp process +keywords: network tcp process bpf The sk_stream-wait_memory.stp prints a time stamp, executable, and pid each time a process blocks due to the send buffer being full. A @@ -2772,6 +2858,14 @@ keywords: prometheus process syscall tracepoint # stap syscallsbypid.stp -T 1 +profiling/syscallsrw.stp - Provide a tally of read and write syscalls run on the system +keywords: prometheus syscall bpf + + The syscall_read_write.stp script tallies the read and write + syscalls. This is a demo script for stapbpf prometheus-exporter + scripts. + + = QEMU = virtualization/qemu_count.stp - Tally the Number of User-Space QEMU Events @@ -3099,7 +3193,7 @@ keywords: simple trace callgraph general/helloworld.stp - SystemTap "Hello World" Program -keywords: _best simple +keywords: _best simple bpf A basic "Hello World" program implemented in SystemTap script. It prints out "hello world" message and then immediately exits. @@ -3669,6 +3763,14 @@ keywords: prometheus process syscall tracepoint # stap syscallsbypid.stp -T 1 +profiling/syscallsrw.stp - Provide a tally of read and write syscalls run on the system +keywords: prometheus syscall bpf + + The syscall_read_write.stp script tallies the read and write + syscalls. This is a demo script for stapbpf prometheus-exporter + scripts. + + profiling/ucalls.stp - Profile method invocations in Java, Perl, Php, Python, Ruby, and Tcl scripts keywords: profiling syscall @@ -3690,7 +3792,7 @@ keywords: profiling syscall = TCP = network/sk_stream_wait_memory.stp - Track Start and Stop of Processes Due to Network Buffer Space -keywords: network tcp process +keywords: network tcp process bpf The sk_stream-wait_memory.stp prints a time stamp, executable, and pid each time a process blocks due to the send buffer being full. A @@ -3824,7 +3926,7 @@ keywords: trace apps/libguestfs_log.stp - Trace libguestfs startup -keywords: application trace +keywords: application trace bpf The libguestfs_log.stp script prints a log of when various libgueststartup steps are encountered. The first column is @@ -3836,7 +3938,7 @@ keywords: application trace apps/php-trace.stp - Tracing of PHP code execution -keywords: trace +keywords: trace dyninst Trace of executing PHP code using the enabled markers. diff --git a/testsuite/systemtap.examples/metadatabase.db b/testsuite/systemtap.examples/metadatabase.db index a02b06e93a8a1855c10ec658889f9a2c3d6f8879..d3cccaa4f55f93385a2c590843ce494086c002ef 100644 GIT binary patch literal 194560 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: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�~B2yT8uu>l0B5{27 zaSAx4uO=Js)LrldnrS7OY8640@4Sf8xBEMej7yeJCs_|o+O8%w%9#s#r;v-DvRnkj6M9^4Ef!mqnznMm4?(s!|csXDu%C}(JS5bG6Q z>;UeG;!1>wiZFyj!(pyLh3K}`MlK7}>L3)a0bp<_b}En+;lFAI>r0A$1^R$G4Eqrt zJS1gXQ-RPP7Xb&LX=evj*;w|9!iMQ_TY)T?3YI+a(#p0!lH0M?62n!Qm5M-q3CDD|@HY`m;v@!X=3?mUB delta 70628 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 diff --git a/testsuite/systemtap.examples/profiling/syscallsrw.meta b/testsuite/systemtap.examples/profiling/syscallsrw.meta new file mode 100644 index 000000000..64fd74a99 --- /dev/null +++ b/testsuite/systemtap.examples/profiling/syscallsrw.meta @@ -0,0 +1,13 @@ +title: Provide a tally of read and write syscalls run on the system +name: syscallsrw.stp +version: 1.0 +author: Sagar Patel +keywords: prometheus syscall bpf +subsystem: process +status: experimental +exit: user-controlled +output: proc +scope: system-wide +description: The syscall_read_write.stp script tallies the read and write syscalls. This is a demo script for stapbpf prometheus-exporter scripts. +test_check_bpf: stap --bpf -p4 syscallsrw.stp +test_installcheck_bpf: stap --bpf syscallsrw.stp -T 1 diff --git a/testsuite/systemtap.examples/profiling/syscallsrw.stp b/testsuite/systemtap.examples/profiling/syscallsrw.stp new file mode 100755 index 000000000..159c053ba --- /dev/null +++ b/testsuite/systemtap.examples/profiling/syscallsrw.stp @@ -0,0 +1,18 @@ +#! /usr/bin/stap --bpf + +global arr + +probe kernel.function("ksys_read") !, kernel.function("vfs_read") { + arr[0]++; +} + +probe kernel.function("ksys_write") !, kernel.function("vfs_write") { + arr[1]++; +} + +probe prometheus { + + $value .= ("count{syscall=\"ksys_read\"} " . sprint(arr[0]) . "\n") + $value .= ("count{syscall=\"ksys_write\"} " . sprint(arr[1]) . "\n") + +} -- 2.43.5