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

Reply via email to