I/O Monitoring
I/O Monitoring and Disk Bottlenecks
Section titled “I/O Monitoring and Disk Bottlenecks”- Disk Performance Problems:
- Coupled with other factors like insufficient memory or inadequate network hardware/tuning.
- System considered I/O-bound when CPU idles waiting for I/O or network buffers to clear.
- Misleading situations: Slow I/O can appear as insufficient memory; memory buffers filling up or emptying too slowly.
- Network transfers may wait for I/O, affecting network throughput.
- Real-time monitoring and tracing essential for locating and mitigating disk bottlenecks.
- Rare or non-repeating problems can complicate the troubleshooting process.
iostat
Section titled “iostat”iostat is the basic workhorse utility for monitoring I/O device activity on the system.
It can generate reports with a lot of information, with the precise content controlled by options. The general form of the command is:
iostat [OPTIONS] [devices] [interval] [count]-
-koption, which shows results in KB instead of blocks. -
-mto get results in MB. -
-xdetailed report (-x for extended)iostatLinux 6.4.4-200.fc38.x86_64 (fedora) 27/07/23 _x86_64_ (8 CPU)avg-cpu: %user %nice %system %iowait %steal %idle4.44 0.00 2.10 0.06 0.00 93.40Device tps kB_read/s kB_wrtn/s kB_dscd/s kB_read kB_wrtn kB_dscddm-0 29.41 469.53 331.00 148.89 30633024 21594968 9713760nvme0n1 0.05 0.55 1.01 0.00 35624 65600 0sda 23.09 469.75 331.00 148.89 30647163 21595269 9713760zram0 61.34 82.42 162.96 0.00 5377404 10631948 0
After a brief summary of CPU utilization, I/O statistics are given:
- tps (I/O transactions per second; logical requests can be merged into one actual request),
- blocks read and written per unit time, where the blocks are generally sectors of 512 bytes; and the total blocks read and written.
- Information is broken out by disk partition (and if LVM is being used also by dm, or device mapper, logical partitions).
-
Another very useful utility is
iotop, which must be run as root. It displays a table of current I/O usage and updates periodically, liketop. -
In the
PRIOcolumn,bestands for best effort andrtstands for real time.Total DISK READ: 0.00 B/s | Total DISK WRITE: 0.00 B/sCurrent DISK READ: 0.00 B/s | Current DISK WRITE: 0.00 B/sTID PRIO USER DISK READ DISK WRITE> COMMAND1 be/4 root 0.00 B/s 0.00 B/s systemd --switched-root --system --deserialize=35 rhgb2 be/4 root 0.00 B/s 0.00 B/s [kthreadd]3 be/0 root 0.00 B/s 0.00 B/s [rcu_gp]4 be/0 root 0.00 B/s 0.00 B/s [rcu_par_gp]5 be/0 root 0.00 B/s 0.00 B/s [slub_flushwq]6 be/0 root 0.00 B/s 0.00 B/s [netns]8 be/0 root 0.00 B/s 0.00 B/s [kworker/0:0H-events_highpri]11 be/0 root 0.00 B/s 0.00 B/s [mm_percpu_wq]13 be/4 root 0.00 B/s 0.00 B/s [rcu_tasks_kthread]14 be/4 root 0.00 B/s 0.00 B/s [rcu_task]