Chinaunix

标题: kswapd 忙导致系统变慢 [打印本页]

作者: xiegang112    时间: 2009-07-28 18:43
标题: kswapd 忙导致系统变慢
我的rhel5上运行了几个i/o进程,这些进程在往阵列的盘上(非本地)发i/o。开始时很正常,当memory被逐渐用完后,pdflush和kswapd被调用来释放cache。pdflush执行完毕后,通过top看到free的memory已经比较多了,但是这个时候,kswapd仍然在继续执行,其占用了大部分cpu时间。这个时候系统变得非常慢。此时观察到其实cpu占用率并不高。但是本地盘的i/o
wait 比较高。这个时候,阵列上的盘io wait 正常,并且free的memory不会像开始那样减少。也就是page
cache没有增加。我把那几个i/o进程kill了,系统过一会儿又恢复正常。
各人认为系统变慢的直接原因是kswap的nice比较高,导致占用大部分cpu时间。但是不明白,为什么通过top看到大部分memory已经free了,kswapd还在保持运行。看了下kswapd的代码,对于一个memory
zone,如果空闲的page超过了page_high,就应该停止shrink_zone了。
另外,阵列上的i/o仍然在走,但为什么没有page cache 在增加?

综合以上现象,个人分析原因可能是:
在memory耗尽时,pdflush启动刷新dirty的page cache。kswapd启动,调用shrink_zone等函数回收page
cache。之后,free的memory变大。但是这个时候,kswapd并没有停止。i/o进程在继续写,这导致page
cache变为dirty。但这个时候,由于kswapd还在工作。同步dirty
page的事情就由kswapd调用page_out来做了(这就是为什么i/o仍然在继续,但是page
cache没有增加的原因吧?)。因此,kswapd会一直占用cpu。但这个解释有个矛盾就是,按照代码,free的memory大于page_high时,kswapd就应该停下来才对。

不知道大家遇到过这个情况没有?
谢谢
作者: xiegang112    时间: 2009-07-28 23:14
标题: 回复 #1 xiegang112 的帖子
查了下ulk,看起来有点像交换失效(swap thrashing)。但是上面说在2.6.9中已经加入了swap token来防止交换失效。而且,用top观察,free的memory还很多。
作者: windaoo    时间: 2009-07-29 03:45
我觉得系统变慢的原因不是 cpu 高,而是因为之前 cache 的程序/数据被挤出缓冲导致
其它的我就不完全知道是怎么回事了


关注,呵呵
作者: xiegang112    时间: 2009-07-29 09:15
标题: 回复 #3 windaoo 的帖子
实际上观察到得cpu并不高。我在正常机器上做了同样实验,但是设置swappness为100.会出现类似现象,系统变慢。但是一个很大不同点就是,不像前面,这次free的memory会保持增加和减少的交替进行。而之前只要一被回收回来,就不会再减少了。不过感觉还是和交换失效有关。

[ 本帖最后由 xiegang112 于 2009-7-29 09:21 编辑 ]




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2