降低 Ceph scrub I/O 优先级
默认情况下,Ceph OSD 线程的磁盘 I/O 与所有其他线程相同。可以使用 ioprio 选项为所有 OSD 降低优先级,方法如下:
ceph tell osd.* injectargs '--osd_disk_thread_ioprio_priority 7' ceph tell osd.* injectargs '--osd_disk_thread_ioprio_class idle'
OSD 中的所有其他线程将为 be(尽力而为)优先级 4,这是守护进程的默认值。磁盘线程将显示为 idle
$ sudo iotop --batch --iter 1 | grep 'ceph-osd -i 0' | grep -v be/4 4156 idle loic 0.00 B/s 0.00 B/s 0.00 % 0.00 % ./ceph-osd -i 0 ..
只有当调度程序为 cfq 时,更改才会生效(可以在运行时安全地修改)
# cat /sys/block/sda/queue/scheduler noop [deadline] cfq
echo cfq > /sys/block/sda/queue/scheduler
要显示给定 OSD 的当前值,可以从运行该 OSD 的主机上运行以下命令(因为它使用在 /var/run/ceph 中找到的 asok 文件):
$ ceph daemon osd.0 config get osd_disk_thread_ioprio_class { "osd_disk_thread_ioprio_class": "idle"} $ ceph daemon osd.0 config get osd_disk_thread_ioprio_priority { "osd_disk_thread_ioprio_priority": "7"}