<!--
global reads, writes, total_io
-probe kernel.function("vfs_read").return {
-reads[execname()] += $return
+probe vfs.read.return {
+ if ($return > 0) {
+ reads[pid(),execname()] += $return
+ total_io[pid(),execname()] += $return
+ }
}
-probe kernel.function("vfs_write").return {
-writes[execname()] += $return
+probe vfs.write.return {
+ if ($return > 0) {
+ writes[pid(),execname()] += $return
+ total_io[pid(),execname()] += $return
+ }
+}
+
+function humanreadable(bytes) {
+ if (bytes > 1024*1024*1024) {
+ return sprintf("%d GiB", bytes/1024/1024/1024)
+ } else if (bytes > 1024*1024) {
+ return sprintf("%d MiB", bytes/1024/1024)
+ } else if (bytes > 1024) {
+ return sprintf("%d KiB", bytes/1024)
+ } else {
+ return sprintf("%d B", bytes)
+ }
}
probe timer.s(1) {
-foreach (p in reads)
-total_io[p] += reads[p]
-foreach (p in writes)
-total_io[p] += writes[p]
-foreach(p in total_io- limit 10)
-printf("%15s r: %8d KiB w: %8d KiB\n",
-p, reads[p]/1024,
-writes[p]/1024)
-printf("\n")
-# Note we don't zero out reads, writes and total_io,
-# so the values are cumulative since the script started.
-}-->
+ foreach([p,e] in total_io- limit 10)
+ printf("%8d %15s r: %12s w: %12s\n",
+ p, e, humanreadable(reads[p,e]),
+ humanreadable(writes[p,e]))
+ printf("\n")
+ # Note we don't zero out reads, writes and total_io,
+ # so the values are cumulative since the script started.
+}
+-->
</section>
global reads, writes, total_io
probe vfs.read.return {
- reads[pid(),execname()] += $return
- total_io[pid(),execname()] += $return
+ if ($return > 0) {
+ reads[pid(),execname()] += $return
+ total_io[pid(),execname()] += $return
+ }
}
probe vfs.write.return {
- writes[pid(),execname()] += $return
- total_io[pid(),execname()] += $return
+ if ($return > 0) {
+ writes[pid(),execname()] += $return
+ total_io[pid(),execname()] += $return
+ }
}
function humanreadable(bytes) {