summaryrefslogtreecommitdiffstats
path: root/examples/iostat-scsi.stp
diff options
context:
space:
mode:
Diffstat (limited to 'examples/iostat-scsi.stp')
-rw-r--r--examples/iostat-scsi.stp51
1 files changed, 51 insertions, 0 deletions
diff --git a/examples/iostat-scsi.stp b/examples/iostat-scsi.stp
new file mode 100644
index 00000000..2fb4acf1
--- /dev/null
+++ b/examples/iostat-scsi.stp
@@ -0,0 +1,51 @@
+global devices, reads, writes
+
+/* data collection: SCSI disk */
+probe module("sd_mod").function("sd_init_command") {
+ device=kernel_string($SCpnt->request->rq_disk->disk_name)
+ sector_size=$SCpnt->device->sector_size
+ nr_sectors=$SCpnt->request->nr_sectors
+ devices[device] = 1
+ if ($SCpnt->request->flags /* cmd_flags on some kernels */ & 1)
+ writes[device] <<< nr_sectors * sector_size
+ else
+ reads[device] <<< nr_sectors * sector_size
+}
+/* data collection: SCSI tape */
+probe module("st").function("st_do_scsi") {
+ device=kernel_string($STp->disk->disk_name)
+ devices[device] = 1
+ if ($direction)
+ writes[device] <<< $bytes
+ else
+ reads[device] <<< $bytes
+}
+
+
+/* reporting */
+global blksize=512
+global hdrcount
+probe timer.s($1) {
+ if ((hdrcount++ % 10) == 0)
+ printf("%9s %9s %9s %9s %9s %9s\n",
+ "Device:","tps","blk_read/s","blk_wrtn/s","blk_read","blk_wrtn")
+
+ foreach (dev in devices) {
+ rdcount=@count(reads[dev])
+ wrcount=@count(writes[dev])
+ tps=(rdcount+wrcount)*100/$1
+ rdblkcount=rdcount ? @sum(reads[dev])/blksize : 0
+ wrblkcount=wrcount ? @sum(writes[dev])/blksize : 0
+ rdblkrate=rdblkcount*100/$1
+ wrblkrate=wrblkcount*100/$1
+ printf("%9s %6d.%02d %6d.%02d %6d.%02d %9d %9d\n",
+ dev, tps/100,tps%100,
+ rdblkrate/100,rdblkrate%100,
+ wrblkrate/100,wrblkrate%100,
+ rdblkcount, wrblkcount)
+ }
+ printf ("\n")
+ delete devices
+ delete reads
+ delete writes
+}