Chapter 4. Useful SystemTap Scripts
/usr/share/systemtap/testsuite/systemtap.examples/
directory once you install the systemtap-testsuite package.
4.1. Network Copy linkLink copied to clipboard!
4.1.1. Network Profiling Copy linkLink copied to clipboard!
Example 4.1. nettop.stp
print_activity()
function uses the following expressions:
n_xmit ? @sum(ifxmit[pid, dev, exec, uid])/1024 : 0 n_recv ? @sum(ifrecv[pid, dev, exec, uid])/1024 : 0
n_xmit ? @sum(ifxmit[pid, dev, exec, uid])/1024 : 0
n_recv ? @sum(ifrecv[pid, dev, exec, uid])/1024 : 0
if
or else
conditionals. The second statement is simply a more concise way of writing the following pseudo code:
if n_recv != 0 then @sum(ifrecv[pid, dev, exec, uid])/1024 else 0
if n_recv != 0 then
@sum(ifrecv[pid, dev, exec, uid])/1024
else
0
PID
— the ID of the listed process.UID
— user ID. A user ID of0
refers to the root user.DEV
— which ethernet device the process used to send or receive data (for example, eth0, eth1)XMIT_PK
— number of packets transmitted by the processRECV_PK
— number of packets received by the processXMIT_KB
— amount of data sent by the process, in kilobytesRECV_KB
— amount of data received by the service, in kilobytes
probe timer.ms(5000)
accordingly. Example 4.2, “Example 4.1, “nettop.stp” Sample Output” contains an excerpt of the output from Example 4.1, “nettop.stp” over a 20-second period:
Example 4.2. Example 4.1, “nettop.stp” Sample Output
4.1.2. Tracing Functions Called in Network Socket Code Copy linkLink copied to clipboard!
net/socket.c
file. This task helps you identify, in finer detail, how each process interacts with the network at the kernel level.
Example 4.3. socket-trace.stp
thread_indent()
works.
Example 4.4. Example 4.3, “socket-trace.stp” Sample Output
thread_indent()
, see SystemTap Functions Example 3.6, “thread_indent.stp”.
4.1.3. Monitoring Incoming TCP Connections Copy linkLink copied to clipboard!
Example 4.5. tcp_connections.stp
- Current
UID
CMD
- the command accepting the connectionPID
of the command- Port used by the connection
- IP address from which the TCP connection originated
Example 4.6. Example 4.5, “tcp_connections.stp” Sample Output
UID CMD PID PORT IP_SOURCE 0 sshd 3165 22 10.64.0.227 0 sshd 3165 22 10.64.0.227
UID CMD PID PORT IP_SOURCE
0 sshd 3165 22 10.64.0.227
0 sshd 3165 22 10.64.0.227
4.1.4. Monitoring Network Packets Drops in Kernel Copy linkLink copied to clipboard!
kernel.trace("kfree_skb")
, which easily tracks where packets are discarded. Example 4.7, “dropwatch.stp” uses kernel.trace("kfree_skb")
to trace packet discards; the script summarizes which locations discard packets every five-second interval.
Example 4.7. dropwatch.stp
kernel.trace("kfree_skb")
traces which places in the kernel drop network packets. The kernel.trace("kfree_skb")
has two arguments: a pointer to the buffer being freed ($skb
) and the location in kernel code the buffer is being freed ($location
).
Example 4.8. Example 4.7, “dropwatch.stp” Sample Output
/boot/System.map-$(uname -r)
file. This file lists the starting addresses for each function, allowing you to map the addresses in the output of Example 4.8, “Example 4.7, “dropwatch.stp” Sample Output” to a specific function name. Given the following snippet of the /boot/System.map-$(uname -r)
file, the address 0xffffffff8024cd0f maps to the function unix_stream_recvmsg
and the address 0xffffffff8044b472 maps to the function arp_rcv
: