[转帖]Linux内核中的IO调度器介绍_VMware, Unix及操作系统讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  VMware, Unix及操作系统讨论区 »
总帖数
1
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 2727 | 回复: 0   主题: [转帖]Linux内核中的IO调度器介绍        下一篇 
    本主题由 koei 于 2014-5-2 16:05:35 移动
骑着驴儿去编程
注册用户
等级:少校
经验:865
发帖:56
精华:2
注册:2013-2-1
状态:离线
发送短消息息给骑着驴儿去编程 加好友    发送短消息息给骑着驴儿去编程 发消息
发表于: IP:您无权察看 2013-2-6 15:35:35 | [全部帖] [楼主帖] 楼主

Linux内核2.6开始引入了全新的IO调度子系统。Linux内核提供了CFQ(默认), deadline和noop三种IO调度器。本文首先介绍三种IO调度器各自的特点和应用场景,之后会介绍Linux内核提供的为每一个块设备指定IO调度器和调整IO调度器参数的接口。


CFQ(Complete Fair Queuing)完全公平的排队

CFQ实现了一种QoS的IO调度算法。该算法为每一个进程分配一个时间窗口,在该时间窗口内,允许进程发出IO请求。通过时间窗口在不同进程间的移动,保证了对于所有进程而言都有公平的发出IO请求的机会。同时CFQ也实现了进程的优先级控制,可保证高优先级进程可以获得更长的时间窗口。

CFQ适用于系统中存在多任务I/O请求的情况,通过在多进程中轮换,保证了系统I/O请求整体的低延迟。但是,对于只有少数进程存在大量密集的I/O请求的情况,会出现明显的I/O性能下降。

Linux系统中可以通过cat /sys/block/.../queue/scheduler进行查看。



root@src-yinzh:~$cat /sys/block/sda/queue/scheduler


noop deadline [cfq]


可以使用echo 调度算法 > /sys/block/磁盘名/queue/scheduler进行修改磁盘IO调度算法时。



root@src-yinzh:~$echo "noop" > /sys/block/sda/queue/scheduler
root@src-yinzh:~$cat /sys/block/sda/queue/scheduler


[noop] deadline cfq





    CFQ调度器主要提供如下参数




root@src-yinzh:~$ls /sys/block/sda/queue/iosched/


back_seek_max fifo_expire_async group_idle quantum slice_async_rq slice_sync
back_seek_penalty fifo_expire_sync low_latency slice_async slice_idle


slice_idle:如果一个进程在自己的时间窗口里,经过slice_idle时间都没有发射I/O请求,则调度选择下一个程序。

Quantum:该参数控制在一个时间窗口内可以发射的I/O请求的最大数目。

low_latency:对于I/O请求延时非常重要的任务,可以打开低延迟模式来降低I/O请求的延时。


  1. NOOP调度算法

NOOP调度器十分简单,其只拥有一个等待队列,每当来一个新的请求,仅仅是按先来先处理的思路将请求插入到等待队列的尾部。

其应用环境主要有以下两种:一是物理设备中包含了自己的I/O调度程序,比如SCSI的TCQ;二是寻道时间可以忽略不计的设备,比如SSD等。



  1. DEADLINE调度算法

DEADLINE调度算法主要针对I/O请求的延时而设计,每个I/O请求都被附加一个最后执行期限。该算法维护两类队列,一是按照扇区排序的读写请求队列;二是按照过期时间排序的读写请求队列。如果当前没有I/O请求过期,则会按照扇区顺序执行I/O请求;如果发现过期的I/O请求,则会处理按照过期时间排序的队列,直到所有过期请求都被发射为止。在处理请求时,该算法会优先考虑读请求。

当系统中存在的I/O请求进程数量比较少时,与CFQ算法相比,DEADLINE算法可以提供较高的I/O吞吐率。



DEADLINE调度算法提供如下参数




root@src-yinzh:~$ls /sys/block/sda/queue/iosched/


fifo_batch front_merges read_expire write_expire writes_starved


writes_starved:该参数控制当读写队列均不为空时,发射多少个读请求后,允许发射写请求。

read_expire:参数控制读请求的过期时间,单位毫秒。

write_expire:参数控制写请求的过期时间,单位毫秒。

该贴由koei转至本版2014-5-2 16:05:35




赞(0)    操作        顶端 
总帖数
1
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论