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!

  • 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. – Spooler Sep 27 '16 at 16:07
up vote 4 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".

  • 1
    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.

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.

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.

Your Answer

 

By clicking "Post Your Answer", you acknowledge that you have read our updated terms of service, privacy policy and cookie policy, and that your continued use of the website is subject to these policies.

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