博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Linux IO调度器相关算法介绍(转)
阅读量:7060 次
发布时间:2019-06-28

本文共 1447 字,大约阅读时间需要 4 分钟。

IO调度器(IO Scheduler)是操作系统用来决定块设备上IO操作提交顺序的方法。存在的目的有两个,一是提高IO吞吐量,二是降低IO响应时间。然而IO吞吐量和IO响应时间往往是矛盾的,为了尽量平衡这两者,IO调度器提供了多种调度算法来适应不同的IO请求场景。其中,对数据库这种随机读写的场景最有利的算法是DEANLINE。接着我们按照从简单到复杂的顺序,迅速扫一下Linux 2.6内核提供的几种IO调度算法。

1、NOOP

NOOP算法的全写为No Operation。该算法实现了最最简单的FIFO队列,所有IO请求大致按照先来后到的顺序进行操作。之所以说“大致”,原因是NOOP在FIFO的基础上还做了相邻IO请求的合并,并不是完完全全按照先进先出的规则满足IO请求。
假设有如下的io请求序列:
100,500,101,10,56,1000
NOOP将会按照如下顺序满足:
100(101),500,10,56,1000

2、CFQ

CFQ算法的全写为Completely Fair Queuing。该算法的特点是按照IO请求的地址进行排序,而不是按照先来后到的顺序来进行响应。
假设有如下的io请求序列:
100,500,101,10,56,1000
CFQ将会按照如下顺序满足:
100,101,500,1000,10,56
在传统的SAS盘上,磁盘寻道花去了绝大多数的IO响应时间。CFQ的出发点是对IO地址进行排序,以尽量少的磁盘旋转次数来满足尽可能多的IO请求。在CFQ算法下,SAS盘的吞吐量大大提高了。但是相比于NOOP的缺点是,先来的IO请求并不一定能被满足,可能会出现饿死的情况。

3、DEADLINE

DEADLINE在CFQ的基础上,解决了IO请求饿死的极端情况。除了CFQ本身具有的IO排序队列之外,DEADLINE额外分别为读IO和写IO提供了FIFO队列。读FIFO队列的最大等待时间为500ms,写FIFO队列的最大等待时间为5s。FIFO队列内的IO请求优先级要比CFQ队列中的高,,而读FIFO队列的优先级又比写FIFO队列的优先级高。优先级可以表示如下:
FIFO(Read) > FIFO(Write) > CFQ

4、ANTICIPATORY

CFQ和DEADLINE考虑的焦点在于满足零散IO请求上。对于连续的IO请求,比如顺序读,并没有做优化。为了满足随机IO和顺序IO混合的场景,Linux还支持ANTICIPATORY调度算法。ANTICIPATORY的在DEADLINE的基础上,为每个读IO都设置了6ms的等待时间窗口。如果在这6ms内OS收到了相邻位置的读IO请求,就可以立即满足。

IO调度器算法的选择,既取决于硬件特征,也取决于应用场景。

在传统的SAS盘上,CFQ、DEADLINE、ANTICIPATORY都是不错的选择;对于专属的数据库服务器,DEADLINE的吞吐量和响应时间都表现良好。然而在新兴的固态硬盘比如SSD、Fusion IO上,最简单的NOOP反而可能是最好的算法,因为其他三个算法的优化是基于缩短寻道时间的,而固态硬盘没有所谓的寻道时间且IO响应时间非常短。

查看和修改IO调度器的算法非常简单。假设我们要对sda进行操作,如下所示:

cat /sys/block/sda/queue/scheduler
echo “cfq” > /sys/block/sda/queue/scheduler

 

转自 

转载地址:http://kwfll.baihongyu.com/

你可能感兴趣的文章
Laravel核心解读--观察者模式
查看>>
正则化&&逻辑回归
查看>>
三种方法,刷新 Android 的 MediaStore!让你保存的图片立即出现在相册里!
查看>>
ZooKeeper安装
查看>>
[译]浅显易懂的 this 取值规则
查看>>
Express搭建在线便利贴——Webpack配置
查看>>
JavaScript-For 循环和 While 循环
查看>>
原生JS大揭秘—揭开数据类型转换的面纱
查看>>
纯CSS画三角原理解析
查看>>
ArchiMate分层概念
查看>>
Node.js开发系列(一)
查看>>
一文带你快速读懂.NET CLI
查看>>
5G一周热闻:华为夺联通5G大单,首张5G电话卡发放
查看>>
马化腾演讲、张勇内部讲话暴露两大巨头云上端倪
查看>>
云原生应用程序的架构应该怎么设计?
查看>>
腾讯58篇论文入选CVPR 2019,涵盖视觉对抗学习等方向
查看>>
re:Invent第三天:除了拥抱混合云,AWS还一口气发了这些新产品
查看>>
Java工程师的成长路线图是什么?
查看>>
RedHat发布JBoss 7.2,完全支持Java EE 8规范
查看>>
红帽发布第四季度和2019财年报告,多项指标维持两位数增速
查看>>