IO任务很容易在3Ware 9650SE上挨饿

我有一个3Ware 9650 SE RAID控制器的服务器(Debian 6 LTS)。 有两个arrays,一个RAID1,一个RAID6。 它运行Xen 4.0,大约有18个DomU。 问题是我经历过IO任务很容易饿死对方。 当一个DomU产生大量的IO,一次只能阻止其他的IO,但是也发生在dd'ing之后。

要将DomU从繁忙的RAIDarrays中移出,我使用了dd。 在这样做的时候,我的Nagios不仅报告其他虚拟机没有响应,我在Dom0上得到了这个通知:

 [2015-01-14 00:38:07] INFO: task kdmflush:1683 blocked for more than 120 seconds. [2015-01-14 00:38:07] "echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message. [2015-01-14 00:38:07] kdmflush D 0000000000000002 0 1683 2 0x00000000 [2015-01-14 00:38:07] ffff88001fd37810 0000000000000246 ffff88001f742a00 ffff8800126c4680 [2015-01-14 00:38:07] ffff88000217e400 00000000aae72d72 000000000000f9e0 ffff88000e65bfd8 [2015-01-14 00:38:07] 00000000000157c0 00000000000157c0 ffff880002291530 ffff880002291828 [2015-01-14 00:38:07] Call Trace: [2015-01-14 00:38:07] [<ffffffff8106ce4e>] ? timekeeping_get_ns+0xe/0x2e [2015-01-14 00:38:07] [<ffffffff8130deb2>] ? io_schedule+0x73/0xb7 [2015-01-14 00:38:07] [<ffffffffa0175bd6>] ? dm_wait_for_completion+0xf5/0x12a [dm_mod] [2015-01-14 00:38:07] [<ffffffff8104b52e>] ? default_wake_function+0x0/0x9 [2015-01-14 00:38:07] [<ffffffffa01768c3>] ? dm_flush+0x1b/0x59 [dm_mod] [2015-01-14 00:38:07] [<ffffffffa01769b9>] ? dm_wq_work+0xb8/0x167 [dm_mod] [2015-01-14 00:38:07] [<ffffffff81062cfb>] ? worker_thread+0x188/0x21d [2015-01-14 00:38:07] [<ffffffffa0176901>] ? dm_wq_work+0x0/0x167 [dm_mod] [2015-01-14 00:38:07] [<ffffffff81066336>] ? autoremove_wake_function+0x0/0x2e [2015-01-14 00:38:07] [<ffffffff81062b73>] ? worker_thread+0x0/0x21d [2015-01-14 00:38:07] [<ffffffff81066069>] ? kthread+0x79/0x81 [2015-01-14 00:38:07] [<ffffffff81012baa>] ? child_rip+0xa/0x20 [2015-01-14 00:38:07] [<ffffffff81011d61>] ? int_ret_from_sys_call+0x7/0x1b [2015-01-14 00:38:07] [<ffffffff8101251d>] ? retint_restore_args+0x5/0x6 [2015-01-14 00:38:07] [<ffffffff81012ba0>] ? child_rip+0x0/0x20 

我尝试了截止date和cfq调度程序。 使用CFQ,如果我将blkback后端进程设置为实时IO优先级,则不会使DomU更具响应性。

我给了Dom0一个10000的分数,因为它需要更高的权重来服务于DomU的所有IO(在我的情况下,其他方面并没有太多的function)。 但是无论我设置了什么,它都不应该影响dd命令和它被阻塞的kdmflush ,因为那全是Dom0。

这是tw_cli输出(刚刚有一个破损的磁盘,因此初始化,这是不相关的,因为问题已经存在了很长时间):

 Unit UnitType Status %RCmpl %V/I/M Stripe Size(GB) Cache AVrfy ------------------------------------------------------------------------------ u0 RAID-6 INITIALIZING - 89%(A) 256K 5587.9 RiW ON u2 RAID-1 OK - - - 1862.63 RiW ON VPort Status Unit Size Type Phy Encl-Slot Model ------------------------------------------------------------------------------ p1 OK u0 1.82 TB SATA 1 - WDC WD2000FYYZ-01UL p2 OK u0 1.82 TB SATA 2 - ST32000542AS p3 OK u0 1.82 TB SATA 3 - WDC WD2002FYPS-02W3 p4 OK u0 1.82 TB SATA 4 - ST32000542AS p5 OK u0 1.82 TB SATA 5 - WDC WD2003FYYS-02W0 p6 OK u2 1.82 TB SATA 6 - WDC WD2002FYPS-02W3 p7 OK u2 1.82 TB SATA 7 - WDC WD2002FYPS-02W3 Name OnlineState BBUReady Status Volt Temp Hours LastCapTest --------------------------------------------------------------------------- bbu On Yes OK OK OK 0 xx-xxx-xxxx 

我真的觉得这个奇怪而烦人。 我有一种感觉,这是一个RAID控制器的怪癖。 其他具有软件RAID的机器性能要好得多。

我希望任何人都可以启发我。

答案结果是我问到有关哪个设备更改计划设置的相关问题的答案。 长话短说,这台服务器由于某种原因将其设备configuration为多path,这意味着您不要更改/dev/sdc上的调度程序,而是更改/dev/dm-1 (在我的情况下)。 结果不言而喻,机器不再彼此打扰:

在这里输入图像说明

的确,截止date调度程序比共享存储上的虚拟机的CFQ工作得更好。