Making the kernel aware of device colocation
I have a server with a big hardware RAID6 array that's been configured with two volumes, presented by Linux as sda
and sdb
(yeah, I know, but it's a rented colo that came configured this way, and sadly I have to live with it).
I have an I/O-intensive process that uses sdb
. I've run with ionice -c3
, as I want it to take lower priority than anything else. Unfortunately, ionice
doesn't know that the two devices are actually sharing the same array's bandwidth. When that process is busy, the kernel sees that sdb
is quiet and gives it all the bandwidth it needs. However, this can make sda
very slow, because (as I understand it) ionice
works on a per-device basis.
Is there any way of getting the kernel to balance disk I/O across all devices?
What IO scheduler are you using?
cat /sys/block/<disk>/queue/scheduler
It will show you which one you're running. I'd try noop (which is pretty much first come, first serve), deadline and CFQ and see which is appropriate for you.
CFQ is the default for RHEL/SUSE, deadline for Ubuntu and noop for no one (but should let the backend device handle your scheduling instead of Linux trying to balance it.