|
$ uname-r
2.6.18-164.el5
$ sudo rpm-i kernel-debuginfo-common-2.6.18-164.el5.x86_64.rpm
$ sudo rpm-i kernel-debuginfo-2.6.18-164.el5.x86_64.rpm
$ cat >PCMR.STP
Global Io_stat, Blk_stat
Global rd_cnt=2, wr_cnt=3
Probe Vfs.read.return {
if ($return >0 && devname!= "N/a") {
Io_stat[devname, 0] + + $return
Io_stat[devname, rd_cnt] + +;
}
}
Probe Ioblock.request {
Blk_stat[devname, rw] = = Size
Blk_stat[devname, rw+rd_cnt] + +;
}
Probe Vfs.write.return {
if ($return >0 && devname!= "N/a") {
Io_stat[devname, 1] + + $return
Io_stat[devname, wr_cnt] + +;
}
}
Global _IO,_BLK
Probe timer.ms (5000) {
foreach ([Devname, Action] in Io_stat)
{
_io[action] + = io_stat[devname, action];
_blk[action] + = blk_stat[devname, action]
}
if (_io[0] + _io[1]) {
printf ("n%-25s,%s%db/%d,%s%db/%d,%s%db/%d,%s%db/%d,%s%d%%nn",
CTime (gettimeofday_s ()),
"IO Read:", _io[0], _io[rd_cnt],
"IO Write:", _io[1],_io[wr_cnt],
"Blk Read:", _blk[0], _blk[rd_cnt],
"Blk Write:", _blk[1],_blk[wr_cnt],
"PCMR:", (_blk[0]+_blk[1]) */(_io[0] + _io[1))
Delete _io
Delete _blk
/* Print header */
printf ("%8s%2s%19s%19s%5sn",
"DEVICE", "T", "IO", "BLK", "PCMR")
}
/* Print Top ten I/O
foreach ([Devname, Action] in Io_stat-limit 10)
if (Action < rd_cnt)
printf ("%8s%2s%11db/%6d%11db/%6d%4d%%n",
Devname, action? " W ":" R ",
Io_stat[devname, Action],io_stat[devname, action+rd_cnt],
Blk_stat[devname, Action],blk_stat[devname, action+rd_cnt],
(Blk_stat[devname, Action] *)/io_stat[devname, action]
)
/* Clear Data */
Delete Io_stat
Delete Blk_stat
}
Probe begin
{
println ("::");
}
|