优化存储性能?你需要关注这些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并不提供标准配置文件,因此你需要在系统启动脚本中集成它并使其自动运行。

本文转自d1net(转载)

目录
相关文章
|
11天前
|
Shell Linux
Linux shell编程学习笔记30:打造彩色的选项菜单
Linux shell编程学习笔记30:打造彩色的选项菜单
|
1月前
|
安全 Linux Shell
Linux上执行内存中的脚本和程序
【9月更文挑战第3天】在 Linux 系统中,可以通过多种方式执行内存中的脚本和程序:一是使用 `eval` 命令直接执行内存中的脚本内容;二是利用管道将脚本内容传递给 `bash` 解释器执行;三是将编译好的程序复制到 `/dev/shm` 并执行。这些方法虽便捷,但也需谨慎操作以避免安全风险。
101 6
|
2月前
|
网络协议 Linux
Linux查看端口监听情况,以及Linux查看某个端口对应的进程号和程序
Linux查看端口监听情况,以及Linux查看某个端口对应的进程号和程序
216 2
|
2月前
|
Linux Python
linux上根据运行程序的进程号,查看程序所在的绝对路径。linux查看进程启动的时间
linux上根据运行程序的进程号,查看程序所在的绝对路径。linux查看进程启动的时间
51 2
|
2月前
|
缓存 监控 网络协议
掌控全局:Linux 系统性能调优技巧全面指南
掌控全局:Linux 系统性能调优技巧全面指南
|
14天前
|
消息中间件 分布式计算 Java
Linux环境下 java程序提交spark任务到Yarn报错
Linux环境下 java程序提交spark任务到Yarn报错
24 5
|
2月前
|
NoSQL Linux C语言
嵌入式GDB调试Linux C程序或交叉编译(开发板)
【8月更文挑战第24天】本文档介绍了如何在嵌入式环境下使用GDB调试Linux C程序及进行交叉编译。调试步骤包括:编译程序时加入`-g`选项以生成调试信息;启动GDB并加载程序;设置断点;运行程序至断点;单步执行代码;查看变量值;继续执行或退出GDB。对于交叉编译,需安装对应架构的交叉编译工具链,配置编译环境,使用工具链编译程序,并将程序传输到开发板进行调试。过程中可能遇到工具链不匹配等问题,需针对性解决。
|
2月前
|
缓存 监控 Linux
在Linux中,如何优化 Linux 系统?
在Linux中,如何优化 Linux 系统?
|
2月前
|
监控 Linux 调度
在Linux中,如何进行调度任务?什么是 crontab 并解释 crontab 中的字段?
在Linux中,如何进行调度任务?什么是 crontab 并解释 crontab 中的字段?
|
27天前
|
存储 监控 安全
探究Linux操作系统的进程管理机制及其优化策略
本文旨在深入探讨Linux操作系统中的进程管理机制,包括进程调度、内存管理以及I/O管理等核心内容。通过对这些关键组件的分析,我们将揭示它们如何共同工作以提供稳定、高效的计算环境,并讨论可能的优化策略。
26 0