前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Linux I/O 调度层总结

Linux I/O 调度层总结

作者头像
sean.liu
发布2022-11-02 17:34:23
1.2K1
发布2022-11-02 17:34:23
举报

I/O调度算法,也称I/O调度策略。

前言

现代计算机体系中,硬盘是数据存储的持久化介质,硬盘的访问速度相比内存存在数量级的差距,因此有效的调度能更好利用资源,优化响应。 和CPU调度算法相似,调度的本质是对请求排序。在Linux系统中,这由I/O调度层负责。 在I/O调度之前,如果多个I/O在同一个sector中,或者是相邻sector。Linux可以把多个请求合并为一个来减少请求数量。这是在Block层处理的,可以设置开启或关闭。

算法

Linus电梯

早期LinuxI/O调度算法被称之为电梯算法。 因为硬盘的寻道操作类似于升降电梯,所以最初的算法就是被称作电梯算法也叫扫描(SCAN)算法。下列实际应用的算法中Deadline schedulerAnticipatory scheduler使用了电梯算法为基础,根据某些任务情况作一定调整。 特点:类比电梯运行,也就是顺向截车的原则。即机械臂一定向相同方向扫描完所有请求的磁道,再换个方向运行,反复循环。 优点:有效减少寻道时间。 缺点:没有处理请求饥饿,如果某个磁道中一直有请求占用着,会影响某些请求及时响应。

Deadline scheduler(截止时间调度程序)

为了解决linus电梯中请求饥饿的问题,产生了Deadline scheduler算法。 特点:继承linus电梯的办法,增加了特殊情况的处理。即增加了读请求队列和写请求队列的带超时FIFO队列,当读和写请求的队列中的请求超时,会优先处理这些请求,减缓请求饥饿的情况,读请求优先级高于写请求。 优点:缓解请求饥饿情况,适用于对响应时间敏感的业务,比如数据库。 缺点:牺牲全局吞吐量。

Anticipatory scheduler(预测算法)

在Deadline scheduler基础上优化了顺序请求的情况。

特点:继承Deadline scheduler算法,在处理完一个I/O请求之后会等待6ms(默认),如果此时有当前扇区相邻的请求,则直接处理这个请求。等待时间结束后才会去处理原本的下一个请求。 优点:当系统大量存在顺序请求时,节约大量的寻道时间。 缺点:每次I/O完成后,都需要6ms的延时。

CFQ(Completely Fair Queuing)

完全公平队列算法,当前linux系统默认调度算法。 特点:按照优先级分组,优先处理高优先级。主要算法为时间片轮片。类似分时操作系统的进程调度。 优点:高优先级的响应及时,也不会产生访问饿死情况。

None/NOOP(No Operation)

新的内核已经将命名从Noop改为None。 无操作调度算法,就是什么都不操作。让硬盘做更多的事情,能者多劳。 特点:对系统的负担最小。适合于无寻道的存储设备,也就是固态硬盘(SSD)。 优点:适合随机访问。

选择建议

目前较为常用的调度算法是CFQ,Deadline,None。通常情况,硬盘性能越好,选越靠后的。但实际使用时,应当以测试为准。

  1. 如果使用高性能固态硬盘,比如使用NVME协议,使用M.2PCIE接口的硬盘。建议使用None调度算法。
  2. 如果业务对延迟要求非常高,比如数据库类应用,通常会选用Deadline算法。
  3. 对于云服务器的分布式块存储,则需要根据块存储的性能判断。

配置方法

查看系统支持的I/O调度算法

代码语言:javascript
复制
dmesg|grep -i scheduler

查看硬盘的当前I/O调度算法

代码语言:javascript
复制
cat /sys/block/<dev>/queue/scheduler

设置IO调度算法

代码语言:javascript
复制
echo ${调度算法名称} > /sys/block/<dev>/queue/scheduler

总结

  1. 机械硬盘时期,电梯算法有着最好的寻道,但任务总归有一定优先级的,所以单纯的电梯算法并不适用更复杂的需求。
  2. 目前默认的CFQ算法采用了时间片轮训,类似于进程调度。相比之下,CPU任务调度算法比I/O调度算法要复杂些,但看得出它们都是时间片轮询的方式。
  3. 随着硬件性能和能力的提升,操作系统把功能Offload到硬件会成为一个趋势。
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2022年10月25日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 算法
    • Linus电梯
      • Deadline scheduler(截止时间调度程序)
        • Anticipatory scheduler(预测算法)
          • CFQ(Completely Fair Queuing)
            • None/NOOP(No Operation)
            • 选择建议
            • 配置方法
              • 查看系统支持的I/O调度算法
                • 查看硬盘的当前I/O调度算法
                  • 设置IO调度算法
                  • 总结
                  相关产品与服务
                  对象存储
                  对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
                  领券
                  问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档