diff options
author | Philip Knirsch <pknirsch@hamburg.stuttgart.redhat.com> | 2009-02-02 12:59:41 +0100 |
---|---|---|
committer | Philip Knirsch <pknirsch@hamburg.stuttgart.redhat.com> | 2009-02-02 12:59:41 +0100 |
commit | 5f27cb0c4fdb3442f5dc5e95dd6a1996df1da3de (patch) | |
tree | 0446b6fa4ad8a5f246983f1b1d36c03d6fc8e9b9 /contrib/netdevstat.stp | |
parent | 208a596438910fac0bd9064c80eef5a6b8329347 (diff) | |
download | tuned-5f27cb0c4fdb3442f5dc5e95dd6a1996df1da3de.tar.gz tuned-5f27cb0c4fdb3442f5dc5e95dd6a1996df1da3de.tar.xz tuned-5f27cb0c4fdb3442f5dc5e95dd6a1996df1da3de.zip |
- Added disk and net monitoring systemtap scripts
Diffstat (limited to 'contrib/netdevstat.stp')
-rwxr-xr-x | contrib/netdevstat.stp | 92 |
1 files changed, 92 insertions, 0 deletions
diff --git a/contrib/netdevstat.stp b/contrib/netdevstat.stp new file mode 100755 index 0000000..cfe6e9a --- /dev/null +++ b/contrib/netdevstat.stp @@ -0,0 +1,92 @@ +#!/usr/bin/stap +# +# netdevstat: A simple systemtap script to record network activity of processes and +# display statistics for transmit/receive operations +# Copyright (C) 2008, 2009 Red Hat, Inc. +# Authors: Phil Knirsch +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# + +global ifavg, iflast, ifmin, ifmax; + +probe netdev.transmit +{ + if(pid() == 0) { + next; + } + ns = gettimeofday_ms(); + if(iflast[0, pid(), dev_name, execname(), uid()] == 0) { + iflast[0, pid(), dev_name, execname(), uid()] = ns; + } else { + diff = ns - iflast[0, pid(), dev_name, execname(), uid()]; + iflast[0, pid(), dev_name, execname(), uid()] = ns; + if(ifmin[0, pid(), dev_name, execname(), uid()] == 0 || diff < ifmin[0, pid(), dev_name, execname(), uid()]) + ifmin[0, pid(), dev_name, execname(), uid()] = diff; + if(diff > ifmax[0, pid(), dev_name, execname(), uid()]) + ifmax[0, pid(), dev_name, execname(), uid()] = diff; + ifavg[0, pid(), dev_name, execname(), uid()] <<< diff; + } +} + +probe netdev.receive +{ + if(pid() == 0) { + next; + } + ns = gettimeofday_ms(); + if(iflast[1, pid(), dev_name, execname(), uid()] == 0) { + iflast[1, pid(), dev_name, execname(), uid()] = ns; + } else { + diff = ns - iflast[1, pid(), dev_name, execname(), uid()]; + iflast[1, pid(), dev_name, execname(), uid()] = ns; + if(ifmin[1, pid(), dev_name, execname(), uid()] == 0 || diff < ifmin[1, pid(), dev_name, execname(), uid()]) + ifmin[1, pid(), dev_name, execname(), uid()] = diff; + if(diff > ifmax[1, pid(), dev_name, execname(), uid()]) + ifmax[1, pid(), dev_name, execname(), uid()] = diff; + ifavg[1, pid(), dev_name, execname(), uid()] <<< diff; + } +} + + +function print_activity() +{ + printf("%5s %5s %-7s %9s %9s %9s %9s %9s %9s %9s %9s %-15s\n", + "PID", "UID", "DEV", "XMIT_CNT", "XMIT_MIN", "XMIT_MAX", "XMIT_AVG", "RECV_CNT", "RECV_MIN", "RECV_MAX", "RECV_AVG", "COMMAND") + + foreach ([type, pid, dev, exec, uid] in ifavg-) { + nxmit = @count(ifavg[0, pid, dev, exec, uid]) + nrecv = @count(ifavg[1, pid, dev, exec, uid]) + if(type == 0 || nxmit == 0) { + printf("%5d %5d %-7s %9d %5d.%03d %5d.%03d %5d.%03d %9d %5d.%03d %5d.%03d %5d.%03d %-15s\n", + pid, uid, dev, + nxmit, ifmin[0, pid, dev, exec, uid]/1000, ifmin[0, pid, dev, exec, uid]%1000, + ifmax[0, pid, dev, exec, uid]/1000, ifmax[0, pid, dev, exec, uid]%1000, + nxmit ? @avg(ifavg[0, pid, dev, exec, uid])/1000 : 0, nxmit ? @avg(ifavg[0, pid, dev, exec, uid])%1000 : 0, + nrecv, ifmin[1, pid, dev, exec, uid]/1000, ifmin[1, pid, dev, exec, uid]%1000, + ifmax[1, pid, dev, exec, uid]/1000, ifmax[1, pid, dev, exec, uid]%1000, + nrecv ? @avg(ifavg[1, pid, dev, exec, uid])/1000 : 0, nrecv ? @avg(ifavg[1, pid, dev, exec, uid])%1000 : 0, + exec) + } + } + + print("\n") +} + +probe timer.ms(5000), end, error +{ + print_activity() +} + |