LWN.net Logo

An IOPS-based I/O scheduler

By Jonathan Corbet
January 4, 2012
I/O schedulers are charged with ordering block I/O operations in a way that maximizes throughput to the device and, perhaps, implementing the system's policy with regard to how the available bandwidth should be divided. The schedulers currently in use in Linux were designed with rotating storage in mind, with the result that they are concerned with avoiding disk seeks and tracking the number of bytes transferred. With solid-state devices, though, I/O locality is (nearly) irrelevant and the number of I/O operations performed is considered to be a better measurement of the amount of device capacity used. The kernel's CFQ scheduler has been evolving to deal better with solid-state devices, but everybody agrees there is more to be done.

Shaohua Li has taken a new approach with the posting of a new I/O scheduler that is optimized for solid-state devices. The patch set factors out and generalizes the CFQ code that tracks device usage, but then uses that code to implement a different scheduling algorithm. Avoiding seeks is no longer a concern; neither is the number of bytes transferred. Instead, this scheduler simply tracks the number of I/O operations submitted by each user, trying to equalize the number from each.

The result should be a simpler scheduler that is better suited to solid-state devices. At this point, though, it is hard to say for sure. One of the key rules of kernel patch submission is that performance-oriented changes should be accompanied by benchmark results showing that they achieve the intended goal. This patch had no such results, so nobody knows if it is worth their while to look at the code further or not. Presumably the next submission will provide that information, at which point the real discussion of the new scheduler's merits can begin.


(Log in to post comments)

An IOPS-based I/O scheduler

Posted Jan 6, 2012 11:04 UTC (Fri) by ibukanov (subscriber, #3942) [Link]

With Fedora-16 on a Thinkpad with Intel X25-M 160 GB SSDSA2M160G2GC SSD I could not detect a difference between noop and the default scheduler CFQ in relevant for me benchmarks (Compilebench and doing real compilations). On the other hand the file system choice did influence the results and I ended up with btrfs with lzo compression.

So indeed it would be interesting to see a benchmark that shows how relevant the scheduler can be.

An IOPS-based I/O scheduler

Posted Jan 9, 2012 5:46 UTC (Mon) by kernel.developer1 (subscriber, #74895) [Link]

Hi,

is there some benchmark result available?

An IOPS-based I/O scheduler

Posted Jan 12, 2012 17:13 UTC (Thu) by kraftcheck (guest, #35072) [Link]

Is only counting IO ops the right thing to do for all solid state devices? Most solid state storage devices that I use (e.g. USB thumb drives, SD cards) seem to have some serious IO bandwidth bottlenecks. Are all IO ops of a fixed size for these devices, such that IO ops are proportional to bytes transferred? Or perhaps balancing IO between users is not an issue for "low performance" devices.

An IOPS-based I/O scheduler

Posted Jan 12, 2012 20:23 UTC (Thu) by cbf123 (guest, #74020) [Link]

I suspect that in most cases thumb drives and SD cards are not used by multiple processes at once, and so are less interesting.

The interesting case is large SSD drives that replace spinning media.

Copyright © 2012, Eklektix, Inc.
Comments and public postings are copyrighted by their creators.
Linux is a registered trademark of Linus Torvalds