Training courses

Kernel and Embedded Linux

Bootlin training courses

Embedded Linux, kernel,
Yocto Project, Buildroot, real-time,
graphics, boot time, debugging...

Bootlin logo

Elixir Cross Referencer

The following are demonstrations of the iotop program,


Here we run iotop with the -C option to not clear the screen, but instead
provide a scrolling output,

   # iotop -C
   Tracing... Please wait.
   2005 Jul 16 00:34:40,  load: 1.21,  disk_r:  12891 KB,  disk_w:   1087 KB
   
     UID    PID   PPID CMD              DEVICE  MAJ MIN D            BYTES
       0      3      0 fsflush          cmdk0   102   4 W              512
       0      3      0 fsflush          cmdk0   102   0 W            11776
       0  27751  20320 tar              cmdk0   102  16 W            23040
       0      3      0 fsflush          cmdk0   102   0 R            73728
       0      0      0 sched            cmdk0   102   0 R           548864
       0      0      0 sched            cmdk0   102   0 W          1078272
       0  27751  20320 tar              cmdk0   102  16 R          1514496
       0  27751  20320 tar              cmdk0   102   3 R         11767808
   
   2005 Jul 16 00:34:45,  load: 1.23,  disk_r:  83849 KB,  disk_w:    488 KB
   
     UID    PID   PPID CMD              DEVICE  MAJ MIN D            BYTES
       0      0      0 sched            cmdk0   102   4 W             1536
       0      0      0 sched            cmdk0   102   0 R           131072
       0  27752  20320 find             cmdk0   102   0 R           262144
       0      0      0 sched            cmdk0   102   0 W           498176
       0  27751  20320 tar              cmdk0   102   3 R         11780096
       0  27751  20320 tar              cmdk0   102   5 R         29745152
       0  27751  20320 tar              cmdk0   102   4 R         47203328
   
   2005 Jul 16 00:34:50,  load: 1.25,  disk_r:  22394 KB,  disk_w:      2 KB
   
     UID    PID   PPID CMD              DEVICE  MAJ MIN D            BYTES
       0  27752  20320 find             cmdk0   102   0 W             2048
       0      0      0 sched            cmdk0   102   0 R            16384
       0    321      1 automountd       cmdk0   102   0 R            22528
       0  27752  20320 find             cmdk0   102   0 R          1462272
       0  27751  20320 tar              cmdk0   102   5 R         17465344

In the above output, we can see a tar command is reading from the cmdk0 
disk, from several different slices (different minor numbers), on the last
report focusing on 102,5 (an "ls -lL" in /dev/dsk can explain the number to
slice mappings).

The disk_r and disk_w values give a summary of the overall activity in 
bytes.



Bytes can be used as a yardstick to determine which process is keeping the
disks busy, however either of the delta times available from iotop would 
be more accurate (as they take into account whether the activity is random 
or sequential).  

   # iotop -Co
   Tracing... Please wait.
   2005 Jul 16 00:39:03,  load: 1.10,  disk_r:   5302 KB,  disk_w:     20 KB
   
     UID    PID   PPID CMD              DEVICE  MAJ MIN D         DISKTIME
       0      0      0 sched            cmdk0   102   0 W              532
       0      0      0 sched            cmdk0   102   0 R           245398
       0  27758  20320 find             cmdk0   102   0 R          3094794
   
   2005 Jul 16 00:39:08,  load: 1.14,  disk_r:   5268 KB,  disk_w:    273 KB
   
     UID    PID   PPID CMD              DEVICE  MAJ MIN D         DISKTIME
       0      3      0 fsflush          cmdk0   102   0 W             2834
       0      0      0 sched            cmdk0   102   0 W           263527
       0      0      0 sched            cmdk0   102   0 R           285015
       0      3      0 fsflush          cmdk0   102   0 R           519187
       0  27758  20320 find             cmdk0   102   0 R          2429232
   
   2005 Jul 16 00:39:13,  load: 1.16,  disk_r:    602 KB,  disk_w:   1238 KB
   
     UID    PID   PPID CMD              DEVICE  MAJ MIN D         DISKTIME
       0      3      0 fsflush          cmdk0   102   4 W              200
       0      3      0 fsflush          cmdk0   102   6 W              260
       0      3      0 fsflush          cmdk0   102   0 W              883
       0  27758  20320 find             cmdk0   102   0 R            55686
       0      3      0 fsflush          cmdk0   102   0 R           317508
       0      0      0 sched            cmdk0   102   0 R           320195
       0      0      0 sched            cmdk0   102   0 W           571084
   [...]

The disk time is in microseconds. In the first sample, we can see the find
command caused a total of 3.094 seconds of disk time - the duration of the
samples here is 5 seconds (the default), so it would be fair to say that
the find command is keeping the disk 60% busy.



A new option for iotop is to print percents "-P" which are based on disk
I/O times, and hense are a fair measurementt of what is keeping the disks
busy.

   # iotop -PC 1
   Tracing... Please wait.
   2005 Nov 18 15:26:14,  load: 0.24,  disk_r:  13176 KB,  disk_w:      0 KB
   
     UID    PID   PPID CMD              DEVICE  MAJ MIN D   %I/O
       0   2215   1663 bart             cmdk0   102   0 R     85
   
   2005 Nov 18 15:26:15,  load: 0.25,  disk_r:   5263 KB,  disk_w:      0 KB
   
     UID    PID   PPID CMD              DEVICE  MAJ MIN D   %I/O
       0   2214   1663 find             cmdk0   102   0 R     15
       0   2215   1663 bart             cmdk0   102   0 R     67
   
   2005 Nov 18 15:26:16,  load: 0.25,  disk_r:   8724 KB,  disk_w:      0 KB
   
     UID    PID   PPID CMD              DEVICE  MAJ MIN D   %I/O
       0   2214   1663 find             cmdk0   102   0 R     10
       0   2215   1663 bart             cmdk0   102   0 R     71
   
   2005 Nov 18 15:26:17,  load: 0.25,  disk_r:   7528 KB,  disk_w:      0 KB
   
     UID    PID   PPID CMD              DEVICE  MAJ MIN D   %I/O
       0   2214   1663 find             cmdk0   102   0 R      0
       0   2215   1663 bart             cmdk0   102   0 R     85
   
   2005 Nov 18 15:26:18,  load: 0.26,  disk_r:  11389 KB,  disk_w:      0 KB
   
     UID    PID   PPID CMD              DEVICE  MAJ MIN D   %I/O
       0   2214   1663 find             cmdk0   102   0 R      2
       0   2215   1663 bart             cmdk0   102   0 R     80
   
   2005 Nov 18 15:26:19,  load: 0.26,  disk_r:  22109 KB,  disk_w:      0 KB
   
     UID    PID   PPID CMD              DEVICE  MAJ MIN D   %I/O
       0   2215   1663 bart             cmdk0   102   0 R     76
   
   ^C

In the above output, bart and find jostle for disk access as they create
a database of file checksums. The command was,

	find / | bart create -I > /dev/null

Note that the %I/O is in terms of 1 disk. A %I/O of say 200 is allowed - it
would mean that effectively 2 disks were at 100%, or 4 disks at 50%, etc.