- Prev
- SystemTap Beginners Guide
- Next

### ⁠5.2.3. Track Cumulative IO

This section describes how to track the cumulative amount of I/O to the system.
traceio.stp

    #! /usr/bin/env stap
    # traceio.stp
    # Copyright (C) 2007-2018 Red Hat, Inc., Eugene Teo <eteo@redhat.com>
    # Copyright (C) 2009 Kai Meyer <kai@unixlords.com>
    #   Fixed a bug that allows this to run longer
    #   And added the humanreadable function
    #
    # This program is free software; you can redistribute it and/or modify
    # it under the terms of the GNU General Public License version 2 as
    # published by the Free Software Foundation.
    #

    global reads, writes, total_io

    probe vfs.read.return {
      if (returnval() > 0) {
        reads[pid(),execname()] += returnval()
        total_io[pid(),execname()] += returnval()
      }
    }

    probe vfs.write.return {
      if (returnval() > 0) {
        writes[pid(),execname()] += returnval()
        total_io[pid(),execname()] += returnval()
      }
    }

    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,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.
    }

traceio.stp prints the top ten executables generating I/O traffic over time. In addition, it also tracks the cumulative amount of I/O reads and writes done by those ten executables. This information is tracked and printed out in 1-second intervals, and in descending order.
Note that traceio.stp also uses the local variable `$return`, which is also used by disktop.stp from Section 5.2.1, “Summarizing Disk Read/Write Traffic”.
⁠

Example 5.8. traceio.stp Sample Output

    [...]
               Xorg r:   583401 KiB w:        0 KiB
           floaters r:       96 KiB w:     7130 KiB
    multiload-apple r:      538 KiB w:      537 KiB
               sshd r:       71 KiB w:       72 KiB
    pam_timestamp_c r:      138 KiB w:        0 KiB
            staprun r:       51 KiB w:       51 KiB
              snmpd r:       46 KiB w:        0 KiB
              pcscd r:       28 KiB w:        0 KiB
         irqbalance r:       27 KiB w:        4 KiB
              cupsd r:        4 KiB w:       18 KiB

               Xorg r:   588140 KiB w:        0 KiB
           floaters r:       97 KiB w:     7143 KiB
    multiload-apple r:      543 KiB w:      542 KiB
               sshd r:       72 KiB w:       72 KiB
    pam_timestamp_c r:      138 KiB w:        0 KiB
            staprun r:       51 KiB w:       51 KiB
              snmpd r:       46 KiB w:        0 KiB
              pcscd r:       28 KiB w:        0 KiB
         irqbalance r:       27 KiB w:        4 KiB
              cupsd r:        4 KiB w:       18 KiB

- Prev5.2.2. Tracking I/O Time For Each File Read or Wr...
- Up
- Home
- Next5.2.4. I/O Monitoring (By Device)