要优化Linux性能,IT团队应该检查当前正在使用的I/O调度程序,并评估诸如deadline和完全公平队列(Completely Fair Queuing)这样的替代方案选项。
如果某台Linux服务器性能不佳,通常与存储信道有关。几十年前,还相对容易进行分析,服务器拥有RAID阵列,RAID阵列的顶层存在分区并且Ext2文件系统在分区顶层运行。然而在今天的数据中心,分析存储信道就不那么容易了。
许多现代数据中心的Linux服务器运行在VMware虚拟机管理程序的顶端,与不同类型的存储区域网络(Storage Area Network,SAN)系统相连接。这意味着在进行Linux存储优化过程中要考虑许多因素。
常识上认为,当你在虚拟机管理程序上使用Linux,你不需要做关于存储优化的任何操作,但在很多的情况下并非事实。存储性能取决于许多因素,其中的一个因素便是Linux I/O调度程序,如果它调试正确能给性能带来决定性的影响。
了解不同的Linux I/O调度程序类型
I/O调度程序是决定I/O请求是如何被排序的内核进程。有很多种不同类型的调度程序,如deadline类型、Completely Fair Queuing类型以及noop(无操作)类型。在较早的内核版本中,也存在着预期(anticipatory)调度程序。
大多数系统默认的Linux I/O调度程序是完全公平的队列(Completely Fair Queuing)。有了这个调度器,Linux内核尝试在读写请求之前将它们均匀地分配到存储通道中。大多数的虚拟机管理程序和协同SAN产品也在做同样的事情,所以这一类型的调度程序相对于改进,更可能给特定的负载小的降底。尽管如此,这是最安全的选择,这也是为什么所有的版本都使用它作为默认设置。
许多IT专业人士认为当使用智能存储时,noop调度程序提供最佳的性能。有了这一调度程序,Linux内核直接传输读写请求到存储信道,并将他们重新排序。在大多使用虚拟机管理程序、固态硬盘或SAN的情况下,noop调度程序提供了最好的性能。然而,这可能并不总是这样的,特别是在面向大量写入负载时,使用deadline调度程序可能更有助于底层存储信道。
Deadline I/O调度程序以最高效的方式重新排序来优化写入请求,从而在底层虚拟机管理程序层简化了性能负载。如果您的服务器写入操作很多,deadline I/O调度程序值得一试。
最后,还可能会遇到预期调度程序。这一调度程序在旧的Linux内核中使用,现在已并不常见。在这些较旧的内核上,此调度程序在执行文件存储块时通过执行预读来优化读取请求。
1Set Linux I/O调度程序