I have some virtual machines running Ubuntu cloud-based image 14.04-1 LTS version. I wanted to see the IO performance of different IO schedulers on the VM so I went to /sys/block/<drive>/queue/scheduler on the guest OS to change the IO scheduler. Usually, there should be cfq, deadline, or noop to choose. But what I saw is none. Does it mean that Canonical has removed the I/O scheduler in the cloud-based image or the scheduler none here is the renamed noop scheduler? and what happens if we don't have an I/O scheduler in the system? All the io requests were directly sent the host in FIFO order?

Thanks for shed some light!

share|improve this question
1  
Is your server running under KVM hypervisor? – mvillar May 20 '15 at 15:50
    
In most cases, none or noop as a scheduler is best in VMs, as scheduling is already accomplished at least one layer below, at the hypervisor's kernel level. – SmallLoanOf1M Sep 27 '16 at 16:07
up vote 3 down vote accepted

From this Debian Wiki:

Low-Latency IO-Scheduler

(This step is not necessary for SSDs using the NVMe protocol instead of SATA, which bypass the traditional I/O scheduler and use the blk-mq module instead.)

The default I/O scheduler queues data to minimize seeks on HDDs, which is not necessary for SSDs. Thus, use the "deadline" scheduler that just ensures bulk transactions won't slow down small transactions: Install sysfsutils and

echo "block/sdX/queue/scheduler = deadline" >> /etc/sysfs.conf

(adjust sdX to match your SSD) reboot or

echo deadline > /sys/block/sdX/queue/scheduler

So, the answer is: none is NOT an alias for noop. none means "the scheduler is not used".

share|improve this answer
    
I'm not sure how the quote brings you to your conclusion that noop is not none. Could you elaborate? – hot2use Nov 21 '16 at 8:08
1  
As I know, noop still makes a few scheduling decisions (like requests merging), while None means none at all. – Ha Son Hai Mar 20 '17 at 13:22

It seems that on kernels >= 3.13 none is not an alias of noop anymore. It is shown when the blk-mq I/O framework is in use; this means a complete bypass of the old schedulers, as blk-mq has (right now) no schedulers at all to select.

On earlier kernels, none really is a poorly-documented alias for noop. See here for more details.

share|improve this answer
    
1  
It seems that on kernels > 3.13 none is shown when the blk-mq I/O framework is in use. So yes, with such kernels, none means a complete bypass of the old schedulers, as blk-mq has no schedulers at all to select. I've updated my answer. – shodanshok Nov 20 '16 at 22:04

The accepted answer is incorrect. None is not an alias for noop.

None simply because no scheduler is in use. SSDs using the NVMe protocol instead of SATA bypass the traditional I/O scheduler.

share|improve this answer
    
@MichaelHampton : Please see my answer here, and sheridp's answer here. – Siu Ching Pong -Asuka Kenji- Nov 20 '16 at 16:33

Guest VMs have virtual I/O devices provided by the hypervisor. Therefore the actual I/O device scheduling is performed by the hypervisor kernel, and guests pass all device I/O directly to hypervisor without any scheduling.

share|improve this answer

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.