2.6.33 is Out! Say Good Bye to the Anticipatory Scheduler
It's been a few days but the latest kernel, 2.6.33 is out. There are some changes that affect the storage world that you probably need to check out.
2.6.33 Anticipatory Scheduler
As mentioned in a previous article a great place to start learning about new features of the latest kernels is Kernel Newbie site. Kernel newbies has a nice review of the latest kernel, 2.6.33. There are a few things around storage that I want to point out.
The biggest thing is that the anticipatory IO scheduler. In a fairly recent article I did a quick glance at the IO schedulers in the kernel. One of them is called the Anticipartory Scheduler that anticipates subsequent block requests and caches them for use. Putting on your storage expert hat one can see that the anticipatory scheduler works really well for certain workloads. For example it has been observed that the Apache web server may achieve up to 71% more throughput using the anticipatory IO scheduler. On the other hand, it has been observed that the anticipatory scheduler has caused up to a 15% slowdown on a database run.
So the anticipatory IO schduler was a mixed bag overall, helping some workloads and hurting others. In the 2.6.33 kernel, Linus decided that the CFQ (Completely Fair Queue) Scheduler had a broad range of capabilities beyond the desktop to include servers, so the anticipatory scheduler was removed from the 2.6.33 kernel.
If you were using the anticipatory controller be sure to do some testing with the CFQ scheduler on the 2.6.33 kernel before rolling it out in production.
Block IO Controller
Many people may be aware of the ability to “throttle” network bandwidth or assign priorities to network traffic. This can be used to allocate resources to various applications to ensure that they have some sort of Quality of Service (QoS). But there isn’t really anything similar for IO.
In the new 2.6.33 kernel, there was a new IO controller added. The Block IO Controller allows the creation of proportional-weight time division of disk policy using the CFQ IO scheduler. A short but reasonable introduction to it is here and the commit for the controller is listed here.
What the Block IO Controller allows you to do is have better control over how much IO bandwidth (performance) various applications within the CFQ Scheduler can have. However, I think it will be a while until people have a feel for how the Block IO Controller interacts with the CFQ IO Scheduler. In the meantime keep an eye out for people experimenting with controller.