IO调度算法的简单学习与整理


前言

前几天整理了 /sys/block/sda/queue/nr_requests
以及 /sys/block/sda/device/queue_depth 的两个参数 # 没别的意思 我就是再背一遍,怕自己记性不好记不住.
其实队列数量和队列参数之外还有一些调度算法.
所以今天想继续研究一下IO的调度算法.
当然了一样还是学习使用chatGPT
但是发现好多结果都是在瞎扯, 需要使用者有一定的基础知识,不然就被蒙蔽了.

chatgpt的一些结果

NOOP、CFQ(Cooperative Fair Queuing)、Deadline 和 C-Deadline 等是常见的硬盘 IO 调度算法,其中 NOOP、Deadline 和 C-Deadline 都属于简单的调度算法。这里具体解释三种调度算法:

NOOP 调度算法
NOOP 是 Linux 操作系统默认的 I/O 调度算法。它非常简单,不会改变请求队列中的顺序,只是按照到达先后依次处理请求。NOOP 调度算法适用于具有较快的硬盘传输速度的 IO 请求,因为它不需要任何调度操作,且没有额外的 CPU 开销。 Deadline 调度算法
Deadline 调度算法是一个混合算法,可以避免读取和写入请求之间的互相等待。请求先被排序,然后根据请求的读取时间和写入时间来排列和处理请求。如果到达了读取时间点,则进行读取操作。如果到达了写入时间点,则进行写入操作。如果都到达了就先处理到达时间较早的请求,以保证公平性。 Deadline 调度算法适用于同时具有读取和写入请求的应用程序,因为它可以让等待时间最久的请求成为下一个处理的请求,从而避免延迟时间过长。 C-Deadline 调度算法
C-Deadline 调度算法是在 Deadline 调度算法的基础上进行改进得到的。它引入了数据分类的概念,让读取请求和写入请求在不同的数据分类中,从而避免了读取和写入请求之间的互相等待。同时,它也遵循 Deadline 的优先级规则,当同时到达读取和写入请求时,总是先处理到达时间较早的请求。 C-Deadline 调度算法适用于高 I/O 并发的应用程序,具有快速的响应速度,可以有效地平衡读取和写入请求,同时保障高容量和高吞吐率的数据传输。

修改参数的方法

在 Linux 中,可以通过以下两种方式修改磁盘 IO 调度算法:

1. 修改内核参数

修改内核参数可以直接影响系统所使用的默认 IO 调度算法。用户可以通过编辑 `/etc/default/grub` 或 `/boot/grub2/grub.cfg` 文件,将 `elevator` 参数的值更改为想要使用的 IO 调度算法的名称,例如:

GRUB_CMDLINE_LINUX="elevator=deadline"

这样就将默认的 CFQ IO 调度算法更改为 Deadline 调度算法。注意,在修改完这个参数后,需要重启系统才能生效。

2. 使用 Sysfs

Sysfs 是一个内核文件系统,它提供了一种访问内核参数的方法。在使用 Sysfs 调整 IO 调度算法时,可以修改 `/sys/block/设备名/queue/scheduler` 文件。例如,使用以下命令将 sda 硬盘设备的默认 IO 调度算法更改为 Deadline 算法:

echo deadline > /sys/block/sda/queue/scheduler

同样需要注意,这个操作是直接修改内核参数而不引起永久性变化,一旦系统重启,操作将会失效。

总之,这些方法可以帮助用户选择合适的 IO 调度算法,以适应特定硬件设备和应用程序的需要,从而提高系统的 I/O 性能和结构效率。

修改说明

建议修改 sys 文件系统 而不是修改grub .

grub 是全局生效.

但是 sys 文件系统应该是针对不同文件系统来生效
需要注意: 方括号里面的是当前选定的调度策略
记录如下:
[root@testsvr116 init.d]# cat /sys/block/sda/queue/scheduler
noop [deadline] cfq
[root@testsvr116 init.d]# echo noop > /sys/block/sda/queue/scheduler
[root@testsvr116 init.d]# cat /sys/block/sda/queue/scheduler
[noop] deadline cfq
[root@testsvr116 init.d]#

IO调度算法的简单学习与整理的更多相关文章

  1. iOS 开发学习资料整理(持续更新)

      “如果说我看得比别人远些,那是因为我站在巨人们的肩膀上.” ---牛顿   iOS及Mac开源项目和学习资料[超级全面] http://www.kancloud.cn/digest/ios-mac ...

  2. iOS 学习资料整理

    iOS学习资料整理 https://github.com/NunchakusHuang/trip-to-iOS 很好的个人博客 http://www.cnblogs.com/ygm900/ 开发笔记 ...

  3. Deep Learning(深度学习)学习笔记整理系列之(五)

    Deep Learning(深度学习)学习笔记整理系列 zouxy09@qq.com http://blog.csdn.net/zouxy09 作者:Zouxy version 1.0 2013-04 ...

  4. Deep Learning(深度学习)学习笔记整理系列之(七)

    Deep Learning(深度学习)学习笔记整理系列 zouxy09@qq.com http://blog.csdn.net/zouxy09 作者:Zouxy version 1.0 2013-04 ...

  5. Deep Learning(深度学习)学习笔记整理系列之(六)

    Deep Learning(深度学习)学习笔记整理系列 zouxy09@qq.com http://blog.csdn.net/zouxy09 作者:Zouxy version 1.0 2013-04 ...

  6. Deep Learning(深度学习)学习笔记整理系列之(四)

    Deep Learning(深度学习)学习笔记整理系列 zouxy09@qq.com http://blog.csdn.net/zouxy09 作者:Zouxy version 1.0 2013-04 ...

  7. Deep Learning(深度学习)学习笔记整理系列之(三)

    Deep Learning(深度学习)学习笔记整理系列 zouxy09@qq.com http://blog.csdn.net/zouxy09 作者:Zouxy version 1.0 2013-04 ...

  8. IO调度算法的理解(转载)

    IO调度器(IO Scheduler)是操作系统用来决定块设备上IO操作提交顺序的方法.存在的目的有两个,一是提高IO吞吐量,二是降低IO响应时间.然而IO吞吐量和IO响应时间往往是矛盾的,为了尽量平 ...

  9. 超全PHP学习资源整理:入门到进阶系列

    PHP是少数几门在语言层面饱受诟病,但在实际开发和应用上却又让人无法撒手的语言之一.就好比路边摊小吃,一遍骂人家不卫生,一遍却又说:真香.所谓接地气,不外如此,大道理不说,PHP光是轮子多.市场占有率 ...

  10. 第二弹:超全Python学习资源整理(进阶系列)

    造一个草原要一株三叶草加一只蜜蜂.一株三叶草,一只蜂,再加一个梦.要是蜜蜂少,光靠梦也行. - 狄金森 "成为编程大牛要一门好语言加一点点天分.一门好语言,一点点天分,再加一份坚持.要是天分 ...

随机推荐

  1. 手把手带你通过API创建一个loT边缘应用

    摘要:使用API Arts&API Explorer调用IoT边缘服务接口创建应用,了解边缘计算在物联网行业的应用. 本文分享自华为云社区<使用API Arts&API Expl ...

  2. 云图说|数据仓库服务 GaussDB(DWS) 的“千里眼、顺风耳”—数据库智能运维

    摘要:数据库智能运维(DMS)是GaussDB(DWS) 为客户数据库快速.稳定运行提供保驾护航的能力,对业务数据库所使用磁盘.网络.OS指标数据,集群运行关键性能指标进行收集.监控.分析.通过综合收 ...

  3. 带你探索CPU调度的奥秘

    摘要:本文将会从最基础的调度算法说起,逐个分析各种主流调度算法的原理,带大家一起探索CPU调度的奥秘. 本文分享自华为云社区<探索CPU的调度原理>,作者:元闰子. 前言 软件工程师们总习 ...

  4. 教你用Java7的Fork/Join框架开发高并发程序

    摘要:Fork/Join框架位于J.U.C(java.util.concurrent)中,是Java7中提供的用于执行并行任务的框架,其可以将大任务分割成若干个小任务,最终汇总每个小任务的结果后得到最 ...

  5. 既快又稳还方便,火山引擎 VeDI 的这款产品解了分析师的愁

    更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 "数据加载速度变快了."这是小吴在使用 DataWind 后的第一感受. 目前就职于国内一家手 ...

  6. 高性能 Jsonpath 框架,Snack3 3.2.54 发布(支持 kotlin data 类反序化)

    Snack3,一个高性能的 JsonPath 框架 借鉴了 Javascript 所有变量由 var 申明,及 Xml dom 一切都是 Node 的设计.其下一切数据都以ONode表示,ONode也 ...

  7. PPT 放映电脑Office版本低怎么办

    转换成全图形PPT 转成图片,无法放动画 转换成全视频 转成视频,无法控制节奏 PPT VIEWEB 本地PPT播放工具

  8. SpringBoot Jar 包太大 瘦身 【终极版】

    思路,将依赖的第三方jar包,移到启动jar包个面外部加载 jar 包 SpringBoot Jar 包太大 瘦身 [初试]简单应用 SpringBoot Jar 包太大 瘦身 [终极版],建议使用这 ...

  9. python argparse传入布尔参数不生效解决

    前言 在一个需要用到flag作为信号控制代码中一些代码片段是否运行的,比如"--flag True"或者"--flag False". 但是古怪的是无法传入Fa ...

  10. k8s-部署 Kubernetes 集群(kubeadm方式)

    一 机器准备 IP 主机名 角色 配置 安装组件 192.168.198.150 master-1 master 2U2G master组件 etcd kubectl 192.168.198.151 ...