作者热门文章
- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
今天我有一个 linux 系统,在 vmstat 等待列中有 100% 等待。
我的问题是:处理器在等待 I/O 时究竟做了什么?
据我了解,CPU 不能真正等待 - 它必须运行一些代码!那么它是否运行了一些严格的“等待磁盘中断到来”代码?为什么当来自磁盘的中断到达时它不运行其他代码并返回?
据我所知,磁盘太慢了,以至于 CPU 可以执行很多很多周期,直到磁盘准备就绪。
为什么 linux 让 cpu 等到 I/O 完成而不是给它一些工作去做?
托马斯
最佳答案
我在这里找到了答案:http://veithen.github.io/2013/11/18/iowait-linux.html
因此,处理器级别的“等待 I/O”意味着:处理器除了等待 I/O 什么都不做。在等待 I/O 时,处理器可以运行用户代码,在这种情况下,等待 I/O 消失并且 CPU% 上升。
这里是链接页面中的测试用例。
只需运行一个在第一个 CPU 上执行大量 I/O 的任务:
taskset 1 dd if=/dev/sda of=/dev/null bs=1MB
您可以看到第一个 CPU 现在正在运行内核代码 (sy) 或等待 I/O (wa):
%Cpu0 : 0.0 us, 2.9 sy, 0.0 ni, 0.0 id, 97.1 wa, 0.0 hi, 0.0 si, 0.0 st
现在我们在同一个 cpu 上开始一个紧密的 cpu 循环:
taskset 1 sh -c "while true; do true; done"
然后 - 看看 - I/O 等待消失了,因为 CPU 现在除了等待 I/O 之外还有其他事情要做 - 它运行用户态代码!
%Cpu0 : 91.3 us, 1.3 sy, 0.0 ni, 0.0 id, 0.0 wa, 0.0 hi, 7.3 si, 0.0 st
希望对其他人有所帮助!
问候,
托马斯
关于linux - vmstat : What exactly does cpu wait mean?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36796635/
我是一名优秀的程序员,十分优秀!