我有一个带有6个磁盘的RAID 10的Linux数据库(MySQL)服务器(Dell 2950)。它的默认IO调度器是CFQ。 然而,从我所读到的和听到的,当重新sorting/调度也由底层RAID控制器完成时,不需要像CFQ这样的调度器; 相反,因为它没有考虑底层RAIDconfiguration考虑到性能可能实际上降低与CFQ。 主要关心的是降低CPU使用率并提高吞吐量。 另外,我还看到了使用noop / deadline IO调度程序的build议,主要是因为它们的R / W访问的性质。
所以,问题是在这种情况下是应该使用noop还是限期调度程序来代替CFQ。
每个工作量都不一样 所以没有一个适合这个问题的答案。 为了使事情更复杂,大多数IO Scheduler都具有可调参数。 因此,您可以做的最好的事情就是尽可能接近真实的工作负载testing。 只要你的testing是可重复的,它应该工作。
您可以随时更改IO调度程序,而无需重新启动,这使得尝试使用io调度程序很容易。 要做到这一点使用这样的命令echo anticipatory | sudo tee /sys/block/sdb/queue/scheduler echo anticipatory | sudo tee /sys/block/sdb/queue/scheduler用正确的块设备replace预先select的调度程序和sdb。 如果您以根用户身份login,则还可以执行echo anticipatory > /sys/block/sdb/queue/scheduler 。 我使用tee的方法,以便我可以使用sudo。
和minaev一样,我在“繁忙的文件服务器上的Deadline”上也有很多的运气。 我们没有任何数据库的东西,因为它主要是一个计算集群的image processing。 但是,他们会使2 GigE链接饱和,并一次加载该服务器48小时。
处理外部RAIDarrays时,我也使用了NOOP。 我的意思是外部的RAID控制器是自带在外部机箱,服务器只是把它看作一个SCSI驱动器。 如果RAID控制器在服务器,那么我认为你还是要避免NOOP。 但是你应该能够通过一些基准testing来找出最适合你的东西。
不知道是否有帮助,但是这里有一篇红帽杂志的一篇有趣的文章: “为RedHat®EnterpriseLinux®4和2.6内核select一个I / O调度程序” 。 我通常会将调度程序设置为最后期限,并且在我的服务器上运行正常,但是我不得不承认,我没有任何数据可以certificate截止date真的更好。