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

io,调度,算法,简单,学习,整理 · 浏览次数 : 38

小编点评

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

正文

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调度算法的简单学习与整理相似的内容:

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

# IO调度算法的简单学习与整理 ## 前言 ``` 前几天整理了 /sys/block/sda/queue/nr_requests 以及 /sys/block/sda/device/queue_depth 的两个参数 # 没别的意思 我就是再背一遍,怕自己记性不好记不住. 其实队列数量和队列参数之

CPU算力提升与实际性能提升的关系

## 关于SPEC2006CPU和RedisBenchmark的理解 ``` 最近研究过硬件CPU的性能和Redis这样单线程重IO服务 突然想对比一下CPU算力提升占Redis性能提升的比率情况 性能很大程度由CPU决定,但是其他部分的提升也会有一些促进作用. 比如内存带宽,IO调度算法优化等.

[转帖]Linux 磁盘I/O 调度算法 说明

2022-08-23 13:031361转载Linux 1 Linux 4.0 IO协议栈框架图 I/O 调度算法在各个进程竞争磁盘I/O的时候担当了裁判的角色。他要求请求的次序和时机做最优化的处理,以求得尽可能最好的整体I/O性能。 Linux 4.0 IO协议栈框架图 I/O调度程序的总结 当向

处理机调度与死锁

一、处理机调度的层次 概念 按什么原则分配CPU:调度算法。 何时分配CPU:调度时机。 如何分配CPU:调度过程。 周转时间:完成时间-进入时间。(注意:从进入系统到执行完成包括在后备队列中等待调度、在就绪队列中等待进程调度、执行以及等待I/O操作完成四部分时间,作业进入是指作业准备好被调度的状态

弹性伸缩:高可用架构利器(架构+算法+思维)

1 介绍 云计算资源弹性伸缩是一种根据业务需求动态调整计算资源规模的技术。它可以根据系统的性能指标(如CPU使用率、内存占用率、磁盘IO、网卡读写率、请求响应时间等)或者预定义的规则(如时间周期、业务事件等),自动增加或减少计算资源的数量,以满足业务负载的变化。这种技术可以确保系统在高峰时期拥有足够

[转帖]Linux中常见IO调度器

https://www.jianshu.com/p/3c16e39a005a 单队列调度算法多队列调度算法 deadline mqdeadlines cfq bfq noop none kyber 对于磁盘I/O,Linux提供了cfq, deadline和noop三种调度策略 cfq: 这个名字是

[转帖]Linux IO调度之队列、队列深度

有关数据结构 请求队列:struct request_queue 请求描述符:struct request 队列深度 可以在端口队列中等待IO请求数量; 具体代表其值的是request_queue的成员nr_requests:存放了每个数据传送方向的最大请求个数; nr_requests在Linux

[转帖]linux下 进程io队列,IO队列和IO调度

IO体系概览 先看看本文主题IO调度和IO队列处于整个IO体系的哪个位置,这个IO体系是非常重要的,了解IO体系我们可以对整个IO过程有个全面的认识。虽然一下两下并不清楚IO体系各个部分的细节,但是我们总是能从这儿找到脉络。知道什么问题在什么位置,这个是解决问题的时候最关键的。任何所谓的专家都不太可

[转帖]Red Hat Enterprise Linux 8 和 9 中可用的 IO 调度程序

Red Hat 弃用了 Red Hat Enterprise Linux 7 中可用的 I/O 调度程序,并引入了四个新的 I/O 调度程序,如下所示, 运行以下命令检查 RHEL8 和 RHEL9 中可用的调度程序 # dmesg | grep -i scheduler [ 0.507104] i

一次系统延迟性优化案例

一次系统延迟性优化案例 服务监控系列文章 服务监控系列视频 延迟的本质 本质是cpu没有及时的运行程序代码。 进程内部 网络io,磁盘io,cpu调度 达到瓶颈 第三方系统 调用的第三方系统慢,mysql,redis等基础组件调度慢, 第三方应用系统调用慢 问题背景 线上隔三差五晚上10点左右总会有