Tweaking the Android I/O scheduler

Last Updated on November 29, 2015 by Dave Farquhar

On my Nook Color running Cyanogenmod, inside Settings, Performance, there’s a mysterious setting called I/O Scheduler. Storage performance (I guess I can’t call it disk performance anymore) is critical to overall system performance, but it’s also easy to get wrong. I assumed the default setting, something called cfq, was optimal.

I was wrong. Let’s explain why.

The options under I/O Scheduler are noop, deadline, cfq, and bfq. The default is cfq. Cfq attempts to be fair, and works well–on a multi-core CPU. The Nook Color has a single core. It’s probably the best choice if you multitask a lot, but, again, on a Nook Color you probably won’t be doing heavy multitasking.

Bfq is the best to use if you’re recording video. But if you’re doing that, you’re not running a Nook Color, because it doesn’t have a camera. So that’s an easy one to eliminate. It’s also better for streaming video, so if you do a lot of Youtube on your tablet, it might be a candidate, but I don’t think it’s the best one.

Deadline gives good performance, except under heavy load. Under heavy load, it can be unpredictable. On a single-core, 1 GHz system, heavy loads are inevitable, so this isn’t an optimal choice either.

Noop is the simplest of them all, just processing the requests in the order they’re created. This works fine if you have solid state storage–the Nook Color does–and it requires less CPU load than any of the others. So it seems this would be the ideal choice for a Nook Color.

That’s what I switched to, and, indeed, the difference was immediately noticeable. Anything that requires use of storage, like a web browser cache, worked faster. So was switching between apps.

If you found this post informative or helpful, please share it!