优化存储性能?你需要关注这些Linux I/O调度程序选项

要优化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调度程序

管理员可以为指定的磁盘或整个服务器设置I/O调度程序。要为整个服务器进行设置,修改grub配置 file/etc/default/grub。在这一文件中,找到从Linux开始的那行。在某些版本中,Linux后面可能跟着数字。这行内容中包含着所有的内核启动参数。在这一行添加elevator=setting,“setting”的更改需要借助所使用的I/O调度程序进行。改变GRUB的配置文件完成后,运行grub2-mkconfig -o /boot/grub2/grub.cfg将新的设置写入系统,然后重新启动系统。

虽然更改整个系统的Linux I/O调度程序可以在某些特定的工作负载上生效,考虑更改每块磁盘I/O调度程序设置作为一种备选方案。如果服务器有不同的存储负载,不同的负载类型又正在写入不同的设备,则考虑带着这些设置运行测试。

每块磁盘设备的接口文件都有一个带有名字/sys/block/device/queue/scheduler。你可以重复所请求的调度设置推送到这个文件以使其立即生效,例如重复请求:deadline >/sys/block/sda/queue/scheduler。当设置能够被持续更改时,Linux并不提供标准配置文件,因此你需要在系统启动脚本中集成它并使其自动运行。

作者:祁同伟 来源:https://yq.aliyun.com/articles/128525?utm_content=m_26167


原文发布于微信公众号 - 马哥Linux运维(magedu-Linux)

原文发表时间:2017-08-03

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏人人都是极客

你知道何为线程与进程吗??

什么是线程?线程与进程与有什么关系?这是一个非常抽象的问题,也是一个特别广的话题,涉及到非常多的知识。我不能确保能把它讲的话,也不能确保讲的内容全部都正确。即使...

1612
来自专栏蓝天

设计mooon调度器遇到的难题

进程模型是指内核为一个独立的进程,而每个业务又为独立的一个进程,业务可以为多线程,同时内核会产生相应个数的内核线程与业务线程一一对应,内核线程和业务进程在创建业...

762
来自专栏c#开发者

在 BizTalk Server 2004 SP2 中存档和清除 BizTalk 跟踪数据库

在 Biztalk Server 2004 SP2 中存档和清除 Biztalk 跟踪数据库 发布日期: 2006年09月19日 小结:本白皮书介绍如何配置 B...

3603
来自专栏听雨堂

异步Socket处理的一些测试值

客户端进行发送,服务器端将相同的数据回发到客户端。记录收发的次数。 1. 如果进行较大规模的UI处理(在TextBox中显示接收内容),将会大大降低响应时间,...

2375
来自专栏HTML5学堂

移动端及时调试工具 - weinre使用方法

HTML5学堂:在前一篇文章当中,我们借着weinre讲解了NodeJS中的一些简单命令,也讲解了weinre的安装方法,今天我们把weinre的使用“完结”掉...

3003
来自专栏计算机视觉与深度学习基础

解决win7系统不支持16位实模式汇编程序DOS运行的问题

这学期学习了汇编,在自己电脑上发现,win7的dos不支持16位实模式。 对编程来说,不能运行程序是致命的。 在经过网上搜集资料后,得到一种解决办法--使用do...

2528
来自专栏Java架构沉思录

线程与进程的前世今生

原文:http://blog.csdn.net/luoweifu/article/details/46595285 作者:luoweifu

1183
来自专栏tiane12

CentOS修改系统时间

3053
来自专栏木头编程 - moTzxx

小程序 报错 errcode: 40029, errmsg: "invalid code, hints: [ req_id: HQd79a0747th31 ]

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u011415782/article/de...

2.5K4
来自专栏云计算

Linux性能分析工具与图形化方法

在项目开发中,经常会遇到程序启动时间过长、CPU使用率过高等问题,这个时候需要依靠性能分析工具来定位性能的消耗点。

2.3K31

扫码关注云+社区

领取腾讯云代金券