对于写入密集型设置,建议进行哪些配置优化,例如磁盘调度算法?
答案1
您应该查看deadline
I/O 调度程序电梯以了解您所描述的访问模式。
这是物理系统还是虚拟系统?如果您有硬件 RAID 控制器,则需要确保有某种形式的电池或闪存支持的写入缓存可用于缓冲和合并写入。
如果这是 RHEL 6.x 系统,请查看tuned 和 tuned-adm 配置文件根据系统的应用来设置一些相应的参数。
这里详细介绍了一些其他有趣的控制器和块设备设置:Linux - 实际硬件 RAID 控制器调整(scsi 和 cciss)
答案2
除了上面 ewwhite 提供的链接之外,你还需要查看Red Hat 性能调优指南。我已经链接了 RHEL6 的版本。
正确地进行性能调优需要大量的时间和耐心。您需要首先弄清楚如何准确、一致地模拟您的工作负载。您需要创建自己的方法来捕获基线性能指标,然后捕获每次配置更改的这些指标。很容易更改一堆参数,最终导致更糟糕的情况,而不知道哪个参数是罪魁祸首。
虽然截止期限调度程序可能是一个很好的调度程序,可以开始您的测试,但值得指出的是,它实际上可能不是您特定工作负载的最佳调度程序。截止期限调度程序是一个确定性 IO 调度程序,这意味着所有读写操作都在已知的时间范围内发生。默认调度程序(完全公平队列 CFQ)在每个 IO 操作之间具有不同的时间间隔。CFQ 调度程序可能更好,因为它将尝试缓冲和重新排序写入,从而使其更高效。值得指出的是,虽然 CFQ 调度程序可能会提高特定工作负载中的写入性能,但由于 IO 操作缓冲,它可能会增加读取延迟。此外,如果您有硬件 IO 控制器(例如 SBA 或 RAID 控制器),使用 NOOP 调度程序实际上可能是这些特定设备最有效的。原因是 NOOP 不会尝试对 IO 操作进行排序,而是从本质上将操作卸载到控制器。如果您处于虚拟化环境中,最好对所有客户操作系统使用 NOOP 调度程序,因为它们不会花时间重新排序 IO 操作,而是将其发送到虚拟机管理程序以让该层处理操作。
祝您调整顺利,如果您不介意的话,请报告您的发现,以便其他人也可以学习。