/sys/block
当您拥有 LVM 时,您会为物理卷、每个单独的逻辑卷和原始设备创建一个调度程序条目。
我们有一个 Debian 6 LTS x64,内核 2.6.32 系统,运行 Xen 虚拟机管理程序 4.0(3Ware 9650 SE 硬件 RAID1)。在每个逻辑卷上运行虚拟机时,如果您想影响操作系统如何调度它们,您需要在哪一个逻辑卷上设置调度程序?如果您将逻辑卷设置为deadline
,当物理卷设置为时,这是否会起作用cfq
?如果您在逻辑卷上设置了截止日期,即使磁盘由于其他设置为的 LV 上的 IO 而变慢,这些截止日期也会被遵守吗cfq
?
问题与虚拟机上的 IO 过多拖慢其他虚拟机有关。所有客户机都在内部使用 noop 作为调度程序。
编辑:根据这,在多路径环境中,只有 DM 的调度程序才会生效。因此,如果我想以某种方式处理虚拟机之间的 IO deadline
,我必须将物理卷(在我的情况下为 dm-1)的 DM 路径设置为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
问题还在于,我是否有多路径设置?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,我可以告诉你,将其设置为 deadline 对我的虚拟机的性能没有任何影响。查看“请求合并”列(前两个)中的差异,我会说是 dm-1 控制着调度。
答案1
因此,答案很简单:底层设备。较新的内核只有在/sys/block/*/queue/scheduler
没有要配置的调度程序时才会出现“无”的情况。
但是,由于某种我不知道的原因,此服务器上的设备被创建为多路径设备,因此我/dev/sd[bc]
过去对调度程序的摆弄从未产生任何效果。现在我使用dm-1
and将anddm-0
设置为截止日期(比正常情况严格得多),结果似乎非常好。read_expire=100
write_expire=1500
这张图显示了另一个虚拟机执行每小时任务对虚拟机磁盘延迟的影响:
您可以清楚地看到我更改调度程序参数的时刻。
答案2
嗯,Debian……
好吧,我可以分享一下 Redhat 如何处理这个问题调整框架。有“虚拟主机”和“虚拟客户”的配置文件。此处详细说明了个人资料描述,以下摘录显示了受影响的设备。“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"
答案3
根据 vmware 的建议,最好使用 noop 调度程序,如果您的客户端使用文件作为虚拟磁盘,这样您的客户端就会直接将 IO 传递给您的主机,而无需在您的客户端和物理主机中重新组织 IO 两次