为什么Ubuntu在大规模networking,磁盘I / O上运行缓慢?

不知道从哪里开始,但我经常在Ubuntu Hardy上看到这个奇怪的问题。

系统是带有RAID10磁盘和3Gb内存的酷睿i7-920,不过也许除此之外。 它有多个Samba共享。 每当有人向共享上传大量(多个演出)时,系统响应能力显着下降(明显)。

文件系统:ReiserFS(v3)

vmstat和top都没有显示I / O的等待时间,很less的阻塞进程(如4核心系统的2),偶尔也有13000个块写入磁盘。 平均。 负载一直在0.5以下(再次系统是四核,启用了HT,所以它有8个逻辑核心)。

但是,即使当我移动鼠标光标,它滞后…

这里是大量inputnetworkingI / O期间典型的vmstat输出:

vmstat -n 1 procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu---- rb swpd free buff cache si so bi bo in cs us sy id wa 1 0 419268 93724 48052 2071148 0 0 9 3 11 4 1 1 95 2 1 0 419268 91560 48052 2073292 0 0 0 0 2396 5716 5 1 94 0 0 0 419268 89636 48056 2075164 0 0 0 0 2173 5537 2 1 97 0 2 0 419268 87836 48056 2077136 0 0 0 0 2057 5216 1 1 98 0 1 0 419268 85716 48060 2078812 0 0 0 10104 2108 5261 2 1 97 0 0 0 419268 91940 48060 2071748 0 0 0 0 2221 6153 2 1 97 0 2 0 419268 90368 48064 2073640 0 0 0 0 2104 5384 1 1 98 0 0 0 419268 89000 48064 2075092 0 0 0 0 1781 4700 1 1 98 0 1 0 419268 87140 48064 2076640 0 0 0 0 2045 5104 1 1 98 0 1 1 419268 85584 48068 2078240 0 0 0 10112 1945 4343 2 1 91 7 0 0 419268 92668 48068 2071764 0 0 0 16 2064 5197 2 1 96 1 

你可以试用IO调度器。 默认的IO调度程序是CFQ,对桌面系统来说工作得很好,但是对于文件服务器截止date来说,我的经验是更好的。 您可以即时更改IO Scheduler,以便您可以轻松进行试验,以查看在您的情况下哪种方式最好。

要列出可用的io调度程序,请使用此命令。

 cat /sys/block/sdb/queue/scheduler 

这应该返回noop anticipatory deadline [cfq]

要将您的调度程序更改为截止date,请在相应的设备上使用以下命令。

 sudo echo "deadline" > /sys/block/sdb/queue/scheduler 

在正常操作过程中,您是否看到很多中断(System-in)和上下文切换(System-cs)? 我想知道,因为你的描述,即使鼠标光标变得缓慢。 如果有问题导致您的系统在负载下中断,这将导致一切放缓。

只是在黑暗中进行全面拍摄,在/ var / log / dmesg中是否有关于磁盘或RAID设备的错误或超时的内容?

编辑1:

今天早上我碰到一篇文章,真的听起来像你在盒子上看到的问题。 格雷格·史密斯(Greg Smith)通过分析一个服务器的分析,似乎要长时间地冻结磁盘写入。 他特别的调查方法涉及运行命令:

 while [ 1 ]; do cat /proc/meminfo; sleep 1; done 

并在系统似乎挂起的时期之前和期间查看“Writeback:”caching大小。 如果写回caching确实被填满了(大概大于40%),并且导致系统在刷新时挂起写入,那么Gregbuild议进行一些操作系统调优,以缓解这个问题。 格雷格的博客条目可以在http://notemagnet.blogspot.com/2008/08/linux-write-cache-mystery.htmlfind。

我不确定这是否发生在Linux上,但是在Windows上,高速networking上的Samba传输速度可能会超出磁盘I / O速度,而且由于一些早期的Windows版本具有非智能的networking传输caching,因此最终可能会在等待写入磁盘的缓冲区的内存中有非常大量的数据。 这往往会导致XP和早期系统的响应能力(也许Vista也是IDK,我从来没有使用过它)。

尝试运行iotop – 它应该显示你的东西。

我想说的是,ReiserFS有一个单一的锁,并不是真的适合大型(多磁盘)突袭的原因。 但是已经很久了,所以我可能是错的。

我怀疑改变调度程序会有所帮助。