I/O wait time is the percentage of time that a CPU was idle, during which the system had pending disk I/O requests. What makes this difficult to comprehend is that it is possible to have a healthy system with a high I/O wait percentage, and it is also possible to have a slow-performing system without a low I/O wait percentage. A high I/O wait means that the CPU is idle while waiting for disk requests to be completed.
Then, there’s the opposite case. Let’s say that process A is extremely CPU-intensive and constantly keeps the CPU busy. Another process running on the system, process B is I/O-intensive and occupies the disk. Even if the disk is slow to respond to requests of process B and becomes a source of a bottleneck for the system, the I/O wait value will be very low in this case. Why? Because the CPU is not idle, as it is wrapped up while serving process A. Therefore, although the I/O wait is on the low side, there could be a potential bottleneck with the storage.
High I/O wait values can be caused by anyone or a combination of the following factors:
vm.dirty_background_ratio = 10
vm.dirty_background_bytes = 0
vm.dirty_ratio = 20
vm.dirty_bytes = 0
vm.dirty_writeback_centisecs = 500
vm.dirty_expire_centisecs = 3000