首页 > 编程语言 >IO调度算法的简单学习与整理

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

时间:2023-05-30 13:35:53浏览次数:46  
标签:请求 调度 sys 算法 Deadline 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]# 

标签:请求,调度,sys,算法,Deadline,IO
From: https://www.cnblogs.com/jinanxiaolaohu/p/17442962.html

相关文章

  • 算法与数据结构高手养成-求职提升特训
    算法与数据结构高手养成-求职提升特训download:3w51xuebccom算法和数据结构是计算机科学中非常重要的概念。它们不仅在编程中扮演了关键角色,而且在其他领域如人工智能、机器学习和物联网等也具有广泛的应用。本文将介绍算法和数据结构的定义和重要性。算法的定义算法是指一组用于......
  • flutter开发Nuget.exe not found, trying to download or use cached version解决方法
    问题:Nuget.exenotfound,tryingtodownloadorusecachedversion解决方法:首先确保VisualStudio安装,这个是flutter构建Window应用必须的,并且安装了对应的WindowsSDK,通过VisualStudioInstaller安装管理员身份运行cmd窗口,然后执行wingetinstallMicrosoft.NuGet安装NuG......
  • hmac(md5,sha256) 魔改算法逆向
    2bebb2b85345bac93a790d1a6986b3d5经验1貌似特征码,需要在从伪代码切换到汇编模式,再点击看具体值2找出特征码,然后google再带算法,再带csource如md50x242070DBcsource3md5和sha1在transfrom4个特征相同,sha1多两个重命名经验根据上下文关系,需要点进去发现特征量,验......
  • 一文通吃:从 ZooKeeper 一致性,Leader选举讲到 ZAB 协议与 PAXOS 算法(上)
    本文首发自「慕课网」,想了解更多IT干货内容,程序员圈内热闻,欢迎关注"慕课网"或慕课网公众号!作者:大能|慕课网讲师本文将从ZooKeeper集群如何保证一致性,讲到zookeeper保证数据一致性的协议,然后展开讲Zookeeper集群Leader选举,包括集群三种节点的类型,ZAB协议中节点的四种状态,以及两种......
  • 代码随想录算法训练营第二十一天|530. 二叉搜索树的最小绝对差、
    【参考链接】530.二叉搜索树的最小绝对差【注意】1.二叉搜索树采用中序遍历,其实就是一个有序数组。2.使用双指针,更快。【代码】1#Definitionforabinarytreenode.2#classTreeNode(object):3#def__init__(self,val=0,left=None,right=None):4#......
  • 《asyncio 系列》3. 详解 Socket(阻塞、非阻塞),以及和 asyncio 的搭配
    楔子在前面两篇文章中,我们介绍了协程、任务和事件循环,研究了如何同时运行长耗时的操作,并探索了一些可以优化此操作的asyncioAPI。然而,到目前为止,我们只是用asyncio.sleep函数模拟了长时间的操作。由于我们想要构建的不仅是演示应用程序,因此我们将使用一些真实世界的阻塞操作......
  • 每天一颓: 均摊分析, pi函数和KMP算法
    资料内容:https://oi-wiki.org/string/kmp/很久以前学过,写一些笔记作复习资料一些概念:真前缀,真后缀等等不作介绍(真前后缀匹配函数)前缀函数(pi函数):\[\pi[i]=\max_{k=0\dotsi}\{k:s[0\dotsk-1]=s[i-(k-1)\dotsi]\}\]特别规定,\[\pi[0]=0\]/......
  • 关于vi编辑出现E325: ATTENTION的解决方案
    解决方案 1-vifilename进入编辑器,查看报错信息,出现E325:ATTENTION例如:E325:ATTENTIONFoundaswapfilebythename"rm/var/opt/gitlab/gitlab-rails/etc/.gitlab.yml.swp"2-复制Foundaswapfilebythename之后的信息,并退出......
  • SpringSecurity集成启动报 In the composition of all global method configuration,
    一.异常内容Causedby:org.springframework.beans.factory.BeanCreationException:Errorcreatingbeanwithname'methodSecurityMetadataSource'definedinclasspathresource[org/springframework/security/config/annotation/method/configuration/GlobalMet......
  • 使用 Collections中的replaceAll方法 替换list中的指定元素
    以下实例演示了如何使用Collections类的replaceAll()来替换List中所有的指定元素:importjava.util.Arrays;importjava.util.Collections;importjava.util.List;publicclassImoocStudent{publicstaticvoidmain(String[]args)throwsException{......