My home server has a LSI megaraid_sas (Dell PERC 5/i) card to manage its stable of hard drives. It should be given more credit for its smarts.
The Linux kernel has a variety of I/O schedulers ("elevators") available. Most of them are tuned to work well if the underlying storage subsystem resembles a plain disk. A plain disk prefers to handle nicely sorted requests so it doesn't have to seek all over the place. But a high-end hardware RAID card is not like that. It can take unsorted I/O and talk efficiently to its private hard drives. In fact, it does a better job. Here's a quick bonnie++ run with the default (cfq) and the trivial (noop) schedulers:
Version 1.03 ------Sequential Output------ --Sequential Input- --Random- -Per Chr- --Block-- -Rewrite- -Per Chr- --Block-- --Seeks-- Machine Size K/sec %CP K/sec %CP K/sec %CP K/sec %CP K/sec %CP /sec %CP super.elastic.or 8G 50565 84 95278 33 38812 12 31639 45 78279 9 70.8 0 ------Sequential Create------ --------Random Create-------- -Create-- --Read--- -Delete-- -Create-- --Read--- -Delete-- files /sec %CP /sec %CP /sec %CP /sec %CP /sec %CP /sec %CP 16 1781 34 +++++ +++ 22777 99 4966 93 +++++ +++ 22423 97 super.elastic.org,8G,50565,84,95278,33,38812,12,31639,45,78279,9,70.8,0,16,1781,34,+++++,+++,22777,99,4966,93,+++++,+++,22423,97 Version 1.03 ------Sequential Output------ --Sequential Input- --Random- -Per Chr- --Block-- -Rewrite- -Per Chr- --Block-- --Seeks-- Machine Size K/sec %CP K/sec %CP K/sec %CP K/sec %CP K/sec %CP /sec %CP super.elastic.or 8G 56135 92 123017 43 51806 16 49672 70 166943 22 350.5 1 ------Sequential Create------ --------Random Create-------- -Create-- --Read--- -Delete-- -Create-- --Read--- -Delete-- files /sec %CP /sec %CP /sec %CP /sec %CP /sec %CP /sec %CP 16 2634 50 +++++ +++ 22970 99 5227 99 +++++ +++ 23051 97 super.elastic.org,8G,56135,92,123017,43,51806,16,49672,70,166943,22,350.5,1,16,2634,50,+++++,+++,22970,99,5227,99,+++++,+++,23051,97
As you see, the noop scheduler does better than the cfq one, in every test, in some cases drastically. As in that wonderful line from Toy Story, "(Bo:) I found my movin' buddy!".
By the way, a similar argument applies to virtualized guest operating systems running under a host OS. The host is probably in a better position to sort I/O than the guests, so they should also just use the noop I/O elevator.