I hate to reopen an old bug, but I haven't seen this discussed anywhere else, and I think there is some validity in this.
Without the use of the cfq scheduler on block devices (virtual or not), the blkio cgroup controller doesn't perform any IO accounting (see below). Without that, tools like systemd-cgtop don't show any I/O stats. Determining which (group of) processes is using the most IO can be very valuable even in a virtual environment. It also prevents the use of ionice (which depends on cfq) on certain tasks within the VM, which again still have merit inside a VM, and the hypervisor can't affect once it reaches that level in the I/O path. Now, for accounting at least, whether that's a fix that should be done in the choice of block device queue scheduler or the blkio cgroup controller, is perhaps up for debate. But as it stands, users/operators are prevented from making the choice of elevator for themselves which seems wrong to me. If I want to pay the CPU cost for performing IO accounting if not scheduling inside a VM, even if the underlying storage may turn around and reorder things with its own more global optimization view, I should still be allowed to. </cent></cent> Thanks, Brian This was done on a VMware VM since obviously I can't demonstrate it in a KVM VM, but the idea applies to physical machines as well. Tested running both 3.16 and 4.5 kernels. (get the current process' blkio cgroup) # grep blkio /proc/self/cgroup 7:blkio:/system.slice/ssh.service (yeah, I know, I was missing pam_systemd in the stack, but whatever) (check the current scheduler being used) # cat /sys/block/sda/queue/scheduler [noop] deadline cfq (check the current stats) # cat /sys/fs/cgroup/blkio/system.slice/ssh.service/blkio.io_serviced Total 0 (induce some IO) # time find /var/log -type f -print0 2>/dev/null | xargs -0 cat > /dev/null 2>/dev/null real 0m4.539s user 0m0.000s sys 0m0.048s (check the new blk io stats) # cat /sys/fs/cgroup/blkio/system.slice/ssh.service/blkio.io_serviced Total 0 (no change) (switch to the cfq scheduler) # echo cfq | sudo tee /sys/block/sda/queue/scheduler cfq (verify that the change happened) # cat /sys/block/sda/queue/scheduler noop deadline [cfq] (check the current blkio stats) # cat /sys/fs/cgroup/blkio/system.slice/ssh.service/blkio.io_serviced 8:0 Read 0 8:0 Write 0 8:0 Sync 0 8:0 Async 0 8:0 Total 0 Total 0 (look new fields) (clear the page cache to make sure our next test actually causes io) # echo 1 | sudo tee /proc/sys/vm/drop_caches 1 (induce io again) # time find /var/log -type f -print0 2>/dev/null | xargs -0 cat > /dev/null 2>/dev/null real 0m2.386s user 0m0.000s sys 0m0.040s (check the blkio stats again) # cat /sys/fs/cgroup/blkio/system.slice/ssh.service/blkio.io_serviced 8:0 Read 1827 8:0 Write 0 8:0 Sync 0 8:0 Async 1827 8:0 Total 1827 Total 1827 (look, data!) -- You received this bug notification because you are a member of Ubuntu Bugs, which is subscribed to Ubuntu. https://bugs.launchpad.net/bugs/1346687 Title: Ubuntu 14 KVM Guest I/O Elevator Non-configurable To manage notifications about this bug go to: https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1346687/+subscriptions -- ubuntu-bugs mailing list ubuntu-bugs@lists.ubuntu.com https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs