计算机组成原理 - 理解 IO_WAIT
因为 CPU 的频率通常在 2GHz 以上,即每秒可执行 20 亿次操作,所以瓶颈通常在 I/O 上。那么具体如何定位呢?
IO_WAIT
- top
1 | Tasks: 9 total, 1 running, 8 sleeping, 0 stopped, 0 zombie |
有一行是以 %CPU 开头的。这一行里,有一个叫作 wa 的指标,这个指标就代表着 iowait,也就是 CPU 等待 IO 完成操作花费的时间占 CPU 的百分比。
如果 wa 值比较大,我们就可以通过 iostat 命令,看实际的硬盘读写情况。
- iostat
1 | avg-cpu: %user %nice %system %iowait %steal %idle |
这里的tps,就是的硬盘的IOPS(每秒读写的次数)性能。而kB_read/s和kB_wrtn/s,就是我们的数据传输率的指标。
知道实际硬盘读写的tps、kB_read/s和kb_wrtn/s的指标,我们基本上可以判断出,机器的性能是不是卡在I/O上了。
接下来,我们需要确定,哪一个进程占用了大量 I/O。
- iotop
1 | Total DISK READ : 0.00 B/s | Total DISK WRITE : 15.75 K/s |
接下来,借助 stress 命令,模拟一个高I/O负载的情况。
1 | stress -i 2 // 让stress这个程序模拟两个进程不停地从内存里往硬盘上写数据。 |
top
1 | top - 09:17:02 up 20:04, 0 users, load average: 1.41, 0.43, 0.15 |
你会看到,在top的输出里面,CPU就有大量的sy和wa,也就是系统调用和iowait。
iostat 2 5
1 | avg-cpu: %user %nice %system %iowait %steal %idle |
查看硬盘的I/O,里面的tps 也很高。
这个时候我们去看一看iotop,你就会发现,我们的I/O占用,都来自于stress产生的两个进程了。
iotop
1 | Total DISK READ : 0.00 B/s | Total DISK WRITE : 0.00 B/s |
stress 除了模拟 io, 还可以模拟多核cpu竞争,内存分配等场景。
Title: 计算机组成原理 - 理解 IO_WAIT
Author: mjd507
Date: 2020-12-06
Last Update: 2024-01-27
Blog Link: https://mjd507.github.io/2020/12/06/Computer-Organization-10/
Copyright Declaration: This station is mainly used to sort out incomprehensible knowledge. I have not fully mastered most of the content. Please refer carefully.