面试中遇到的IO调度

        发现在自从二月就没写过博客尴尬尴尬尴尬,然后二面中问道了我IO调度,当时也就在边上闲扯淡,之后百度了一下,感觉是跪了,面试官问的是IO调度的算法,而我说的是磁盘调度算法,虽然有点相似还是不一样好吗?博客里面一部分是百度,仅仅为了整理面试的问题。IO调度算法链接

IO调度算法IO调度算法存在的意义有两个:一是提高IO吞吐量,二是降低IO响应时间。然而IO吞吐量和IO响应时间往往是矛盾的,为了尽量平衡这两者,IO调度器提供了多种调度算法来适应不同的IO请求场景。

1、NOOP
该算法实现了最简单的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请求,就可以立即满足。


磁盘调度算法:磁盘调度的目标是使磁盘的平均寻到时间最少,常用的磁盘调度算法有先来先服务(FCFS),最短寻道时间优先(SSTF)及扫描算法(SCAN)

1.先来先服务直接从字面的意思 可以理解不用多解释


2.最短寻道时间优先,当前磁头我距离哪一个近我就读取哪一个,但是这个会出现问题,磁头频繁移动上下肯定会降低效率的,不能保证平均的寻道时间最短,而且还可能 出现饥饿现象,我一直朝这个方向读下去。


3.扫描算法,在2的算法基础上考虑的磁头的方向问题。这个又称为电梯调度算法。


SPOOLing:为了缓冲CPU的高速性与IO设备低俗性间的矛盾而引入的脱机输入输出技术。提高IO的速度,将独占设备改造为共享设备,实现了虚拟设备



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值