/sys/block
当您拥有 LVM 时,您的物理卷、每个单独的逻辑卷和原始设备都有一个调度程序条目。
我们有一个运行 Xen 管理程序 4.0(3Ware 9650 SE 硬件 RAID1)的 Debian 6 LTS x64、内核 2.6.32 系统。在每个逻辑卷上运行虚拟机时,如果您想影响操作系统如何调度虚拟机,您需要在哪个逻辑卷上设置调度程序?如果将逻辑卷设置为deadline
,那么当物理卷设置为 时,它还会做任何事情cfq
吗?如果您确实在逻辑卷上设置了截止日期,即使磁盘由于其他 LV 上的 IO 设置为而变慢,这些截止日期也会得到遵守cfq
吗?
问题与虚拟机上的 IO 相关,导致其他虚拟机的速度过慢。所有客人都在内部使用 noop 作为调度程序。
编辑:据此,在多路径环境中,只有 DM 的调度器才会生效。因此,如果我想以某种deadline
方式处理虚拟机之间的 IO,我必须将物理卷(在我的情况下为 dm-1)的 DM 路径设置为deadline
. 那正确吗?还有一个sdc的调度器,就是我的dm-1原来的块设备。为什么不应该这样做呢?
edit2:但是后来有人在评论中说 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
还有一个问题,我有多路径设置吗?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] 创建的。这是否意味着我有多路径,即使它是标准的 LVM 设置?
我想,主要问题是我必须在 sdc 或 dm-1 上设置调度程序吗?如果我执行 iostat,我会看到两者都有很多访问权限:
Device: rrqm/s wrqm/s r/s w/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。
因此,答案很简单:底层设备。
/sys/block/*/queue/scheduler
当没有调度程序要配置时,较新的内核只有“无” 。但是,由于我不知道的原因,该服务器上的设备被创建为多路径设备,因此我在过去对调度程序的摆弄
/dev/sd[bc]
从未做过任何事情。现在我用and (比正常严格得多)设置dm-1
and到最后期限,结果看起来非常好。dm-0
read_expire=100
write_expire=1500
此图显示了对虚拟机中磁盘延迟的影响,这是由另一个具有每小时任务的虚拟机引起的:
您可以清楚地看到我更改调度程序参数的那一刻。
嗯,德比...
好吧,我可以分享 Redhat 如何使用他们的调整框架来解决这个问题。有“virtual-host”和“virtual-guest”的配置文件。配置文件描述在此处进行了详细说明,以下摘录显示了哪些设备受到影响。“dm-*”和“sdX”设备的调度程序已更改。
另请参阅:
CentOS Tuned Equivalent For Debian和了解 RedHat 推荐的调整配置文件
正如 vmware 建议的那样,最好使用 noop 调度程序,如果您的客户使用文件作为虚拟磁盘,这样您的客户直接将 IO 传递给您的主机,而无需在您的客户和物理主机中重新组织两次 IO