哪个调度程序在LVM上进行更改以使虚拟机受益

当您拥有LVM时,您的物理卷的/sys/block的计划程序条目,以及每个逻辑卷和原始设备都有条目。

我们有一个运行Xen hypervisor 4.0(3Ware 9650 SE硬件RAID1)的Debian 6 LTS x64,内核2.6.32系统。 在每个逻辑卷上运行虚拟机时,如果要影响操作系统如何调度,您需要在哪个虚拟机上设置调度程序? 如果将逻辑卷设置为deadline ,那么在物理卷设置为cfq时甚至可以执行任何操作吗? 如果你确实在逻辑卷上设置了最后期限,那么即使磁盘由于其他LV上的IO被设置为cfq而减速,这些截止date是否也会被遵守?

问题与虚拟机上的IO相关太多,导致其他虚拟机变慢。 所有客人在内部使用noop作为调度程序。

编辑:据此,在多path环境下,只有DM的调度器才会生效。 所以,如果我想以deadline方式在虚拟机之间处理IO,那么我必须将物理卷的DMpath(在本例中为dm-1)设置为deadline 。 是对的吗? 还有一个sdc的调度程序,它是我的dm-1的原始块设备。 为什么不这样做呢?

编辑2:但是然后有人在评论中说,在新的内核中,dm-0/1没有调度器:

 famzah@VBox:~$ cat /sys/block/dm-0/queue/scheduler none 

在我的系统(Debian 6,内核2.6.32)上,我有:

 cat /sys/block/dm-1/queue/scheduler noop anticipatory [deadline] cfq 

问题也是,我有多path设置? pvs显示:

 # pvs PV VG Fmt Attr PSize PFree /dev/dm-0 universe lvm2 a- 5,41t 3,98t /dev/dm-1 alternate-universe lvm2 a- 1,82t 1,18t 

但是它们是用/ dev / sd [bc]创build的。 这是否意味着我有多path,即使它是一个标准的LVM设置?

我想,主要问题是我必须在sdc或dm-1上设置调度程序吗? 如果我做了iostat,我在两个方面看到了很多访问:

 Device: rrqm/s wrqm/sr/sw/s rsec/s wsec/s avgrq-sz avgqu-sz await svctm %util sdc 0,00 0,00 13,02 25,36 902,71 735,56 42,68 0,08 2,17 0,73 2,79 dm-1 82,25 57,26 12,97 25,36 902,31 735,56 42,72 0,18 4,73 0,84 3,23 

那么,什么是老板? 如果是sdc,我可以告诉你,把它设置为最后期限对我的虚拟机的性能没有影响。 看看'请求合并'列(前两个)的差异,我会说这是控制调度的dm-1。

嗯,Debian …

那么,我可以分享一下Redhat如何通过调整框架来实现这个目标。 有“虚拟主机”和“虚拟客户”的configuration文件。 这里详细介绍configuration文件的描述 ,下面的摘录显示哪些设备受到影响。 “dm- *”和“sdX”设备的调度程序已更改。

 # This is the I/O scheduler ktune will use. This will *not* override anything # explicitly set on the kernel command line, nor will it change the scheduler # for any block device that is using a non-default scheduler when ktune starts. # You should probably leave this on "deadline", but "as", "cfq", and "noop" are # also legal values. Comment this out to prevent ktune from changing I/O # scheduler settings. ELEVATOR="deadline" # These are the devices, that should be tuned with the ELEVATOR ELEVATOR_TUNE_DEVS="/sys/block/{sd,cciss,dm-,vd,zd}*/queue/scheduler" 

另请参阅:
CentOS调谐等效于Debian并了解RedHat推荐的调优configuration文件

正如vmware所build议的那样,如果您的guest虚拟机使用文件作为虚拟磁盘,那么最好使用noop调度程序,这样,guest虚拟机就可以直接将IO传递到主机,而无需在guest虚拟机和物理主机中重新组织IO

所以,答案很简单:底层设备。 当没有调度程序configuration时,较新的内核在/sys/block/*/queue/scheduler只有'none'。

但是,由于我未知的原因,这台服务器上的设备被创build为多path设备,因此我在/dev/sd[bc]上调度程序的过程从未做过任何事情。 现在我把dm-1dm-0为最后期限, read_expire=100write_expire=1500 (比正常要严格得多),结果看起来非常好。

此图显示了虚拟机中由另一个具有每小时任务的虚拟机所造成的磁盘延迟的影响:

磁盘延迟时间超过24小时,

您可以清楚地看到我更改调度程序参数的时刻。