- Updated diskdevstat and netdevstat to have command line arguments
- Added the possibility to output a histogram at the end of the run for detailed information about the collected data
This commit is contained in:
parent
ccd7b1e260
commit
019e5d08cc
3 changed files with 126 additions and 10 deletions
|
|
@ -2,6 +2,12 @@
|
|||
#
|
||||
# diskdevstat: A simple systemtap script to record harddisk activity
|
||||
# of processes and display statistics for read/write operations
|
||||
#
|
||||
# Usage: diskdevstat [Update interval] [Total duration] [Display histogram at the end]
|
||||
#
|
||||
# Update interval and total duration are in seconds. Display histogram only requires a
|
||||
# 3rd option to exist to be enabled.
|
||||
#
|
||||
# Copyright (C) 2008, 2009 Red Hat, Inc.
|
||||
# Authors: Phil Knirsch
|
||||
#
|
||||
|
|
@ -9,12 +15,12 @@
|
|||
# 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
|
||||
#
|
||||
|
|
@ -23,7 +29,19 @@
|
|||
# Boston, MA 02110-1301, USA.
|
||||
#
|
||||
|
||||
global ifavg, iflast
|
||||
global ifavg, iflast, rtime, interval, duration, histogram
|
||||
|
||||
probe begin
|
||||
{
|
||||
rtime = 0;
|
||||
interval = 5;
|
||||
duration = 86400;
|
||||
histogram = 0;
|
||||
|
||||
%( $# > 0 %? interval = $1; %)
|
||||
%( $# > 1 %? duration = $2; %)
|
||||
%( $# > 2 %? histogram = 1; %)
|
||||
}
|
||||
|
||||
probe vfs.write
|
||||
{
|
||||
|
|
@ -91,8 +109,40 @@ function print_activity()
|
|||
print("\n")
|
||||
}
|
||||
|
||||
probe timer.s(5), end, error
|
||||
function print_histogram()
|
||||
{
|
||||
print_activity()
|
||||
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 %-15s\n", pid, uid, dev, exec)
|
||||
if (nxmit > 0) {
|
||||
printf(" WRITE histogram\n")
|
||||
print(@hist_log(ifavg[0, pid, dev, exec, uid]))
|
||||
}
|
||||
if (nrecv > 0) {
|
||||
printf(" READ histogram\n")
|
||||
print(@hist_log(ifavg[1, pid, dev, exec, uid]))
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
probe timer.s(1)
|
||||
{
|
||||
rtime = rtime + 1;
|
||||
if (rtime % interval == 0) {
|
||||
print_activity()
|
||||
}
|
||||
if (rtime >= duration) {
|
||||
exit();
|
||||
}
|
||||
}
|
||||
|
||||
probe end, error
|
||||
{
|
||||
if (histogram == 1) {
|
||||
print_histogram();
|
||||
}
|
||||
exit();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2,6 +2,12 @@
|
|||
#
|
||||
# netdevstat: A simple systemtap script to record network activity of
|
||||
# processes and display statistics for transmit/receive operations
|
||||
#
|
||||
# Usage: netdevstat [Update interval] [Total duration] [Display histogram at the end]
|
||||
#
|
||||
# Update interval and total duration are in seconds. Display histogram only requires a
|
||||
# 3rd option to exist to be enabled.
|
||||
#
|
||||
# Copyright (C) 2008, 2009 Red Hat, Inc.
|
||||
# Authors: Phil Knirsch
|
||||
#
|
||||
|
|
@ -23,7 +29,19 @@
|
|||
# Boston, MA 02110-1301, USA.
|
||||
#
|
||||
|
||||
global ifavg, iflast;
|
||||
global ifavg, iflast, rtime, interval, duration, histogram
|
||||
|
||||
probe begin
|
||||
{
|
||||
rtime = 0;
|
||||
interval = 5;
|
||||
duration = 86400;
|
||||
histogram = 0;
|
||||
|
||||
%( $# > 0 %? interval = $1; %)
|
||||
%( $# > 1 %? duration = $2; %)
|
||||
%( $# > 2 %? histogram = 1; %)
|
||||
}
|
||||
|
||||
probe netdev.transmit
|
||||
{
|
||||
|
|
@ -91,8 +109,42 @@ function print_activity()
|
|||
print("\n")
|
||||
}
|
||||
|
||||
probe timer.s(5), end, error
|
||||
function print_histogram()
|
||||
{
|
||||
print_activity()
|
||||
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 %-15s\n", pid, uid, dev, exec)
|
||||
|
||||
if (nxmit > 0) {
|
||||
printf(" WRITE histogram\n")
|
||||
print(@hist_log(ifavg[0, pid, dev, exec, uid]))
|
||||
}
|
||||
|
||||
if (nrecv > 0) {
|
||||
printf(" READ histogram\n")
|
||||
print(@hist_log(ifavg[1, pid, dev, exec, uid]))
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
probe timer.s(1)
|
||||
{
|
||||
rtime = rtime + 1;
|
||||
if (rtime % interval == 0) {
|
||||
print_activity()
|
||||
}
|
||||
if (rtime >= duration) {
|
||||
exit();
|
||||
}
|
||||
}
|
||||
|
||||
probe end, error
|
||||
{
|
||||
if (histogram == 1) {
|
||||
print_histogram();
|
||||
}
|
||||
exit();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -21,8 +21,22 @@ or
|
|||
|
||||
diskdevstat
|
||||
|
||||
will start the scripts. There are no parameters or options for them. The
|
||||
output will look similar to top and/or powertop. Here a sample output of
|
||||
will start the scripts. Both can take up to 3 parameters:
|
||||
|
||||
diskdevstat [Update interval] [Total duration] [Display histogram at the end]
|
||||
netdevstat [Update interval] [Total duration] [Display histogram at the end]
|
||||
|
||||
Update interval:
|
||||
Time in seconds between updates for the display. Default: 5
|
||||
|
||||
Total duration:
|
||||
Time in seconds for the whole run. Default: 86400 (1 day)
|
||||
|
||||
Display histogram at the end:
|
||||
Flag if at the end of the execution a histogram for the whole collected
|
||||
data.
|
||||
|
||||
The output will look similar to top and/or powertop. Here a sample output of
|
||||
a longer diskdevstat run on a Fedora 10 system running KDE 4.2:
|
||||
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue