$ 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]) * 100 / (_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] * 100) / io_stat[devname, action] ) /* clear data */ delete io_stat delete blk_stat } probe begin { println("::"); } |