Linux 使用Deadline 磁盘调优

磁盘在云环境中正变得很有意思。从之前传统的旋转式磁盘发展到,包括缓存RAID控制器、SSD、云磁盘和EBS、docker挂载等等。但对许多大型系统来说I/O 性能仍然是关注的重点,包括数据库、日志处理、缓存等。

遗憾的是,Linux 在所有这些新I/O 能力方面仍然落后。特别是,I/O 调度器系统的默认值不能很好地适合大部分这些工作负载或环境。大部分系统默认为CFQ 或称完全公平排队调度器,这对普通PC用途场景来说是不错的,但通常不适合使用缓存或SSD 的环境,因为它带来许多延迟,因而通常会限制总体吞吐量。您可在这里参考更多信息:https://en.wikipedia.org/wiki/CFQ

对I/O 调度器的研究并不多,对它们的理解也不充分。你可以在“/sys/block/DEVICE/queue/scheduler”(其中DEVICE 类似sda, hda等,每个系统不尽相同)中见到它们—选项包括CFQ、Noop、Deadline、Anticipatory 等。

如需查看您当前的调度器,只需输入:“cat /sys/block/DEVICE/queue/scheduler”,你会看到[ ]符号内已被选中选项—您可以用常用的“echo”命令进行修改,例如“echo deadline > /sys/block/DEVICE/queue/scheduler”。注意,在“iosched”目录中有一些可调整的选项,这些内容将在未来的博客中讨论。

一般来说,对于云环境、SSD、缓存磁盘系统,要去选择用Deadline 调度器。这将为您提供最好的响应时间和整体吞吐量,除非用的是无缓存RAID 控制器的老式SATA/SAS 磁盘。

但修改这些配置稍微有些麻烦,因为没有相关的配置文件。相反,你需要在“/etc/rc.local”启动脚本中加入自定制配置条目,且每个磁盘都需要单独设置。对于服务器或虚拟机来说的每个“物理”磁盘,通常会被命名为sda、sdb或hda、hdb等,但不同硬盘子系统不尽相同(例如,惠普仍然使用老的c0t0d0s0 命名规则)。这意味着要为每个磁盘加入类似以下一行内容:“echo deadline > /sys/block/DEVICE/queue/scheduler”

总的来说,你应该为你的所有服务器和虚拟机上使用Deadline I/O 调度器,确保针对I/O、延迟和吞吐量进行磁盘优化。


Tags: Linux, 内核
Categories: Linux

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

* Copy This Password *

* Type Or Paste Password Here *