这样啊,iowait 的时候,CPU本身是不是空闲呢,就是说它是不是在睡觉呢,有CPU intensive的应用,是不是可以在wait的时间里用CPU干活呢?
vmstat说2.5.41之前的linux,iowait 是算到 idle 里面的,而且这个时间也不算到任何进程里,所以看起来 cpu 是可用的啊
我这个都是猜测啊,业内的大牛们,神马 coly 啊,bergwolf 啊的,快快跳出来啊
--
Wang Xu
--
To post to this group, send email to linu...@googlegroups.com
website: http://linuxfb.net
twitter: http://twitter.com/linuxfb
IRC: #linux...@irc.freenode.net
2011/2/18 Wang Xu <gna...@gmail.com>这样啊,iowait 的时候,CPU本身是不是空闲呢,就是说它是不是在睡觉呢,有CPU intensive的应用,是不是可以在wait的时间里用CPU干活呢?It depends on the multi-thread degree. The CPU may switch to another job to process. Linux is not a batch system, man.
--
Wang Xu
--
To post to this group, send email to linu...@googlegroups.com
website: http://linuxfb.net
twitter: http://twitter.com/linuxfb
IRC: #linux...@irc.freenode.net
> vmstat说2.5.41之前的linux,iowait 是算到 idle 里面的,而且这个时间也不算到任何进程里,所以看起来 cpu 是可用的啊
> 我这个都是猜测啊,业内的大牛们,神马 coly 啊,bergwolf 啊的,快快跳出来啊
>
> --
> Wang Xu
>
> --
> To post to this group, send email to linu...@googlegroups.com
> website: http://linuxfb.net
> twitter: http://twitter.com/linuxfb
> IRC: #linux...@irc.freenode.net
>
--
Thanks,
-Bergwolf
今天看了下代码,确认是这样的。iowait的时候task是在sleep中,不占用CPU的,所以可以用来运行其他进程。
kernel会先把task state改成uninterruptible,就是ps看到的D状态。然后调用io_schedule()或者io_schedule_timeout(),实际是调用到schedule()让进程sleep,并最终在enqueue_sleeper()中把sleep的这段时间计算到进程的iowait时间里。进程sleep是通过把进程从runqueue中摘下来实现的,这样scheduler就不会调度sleep的进程。可见进程iowait的时候是不占用CPU的。
--
Thanks,
-Bergwolf