Chinaunix首页 | 论坛 | 博客
  • 博客访问: 6073473
  • 博文数量: 2759
  • 博客积分: 1021
  • 博客等级: 中士
  • 技术积分: 4091
  • 用 户 组: 普通用户
  • 注册时间: 2012-03-11 14:14
文章分类

全部博文(2759)

文章存档

2019年(1)

2017年(84)

2016年(196)

2015年(204)

2014年(636)

2013年(1176)

2012年(463)

分类: LINUX

2013-01-30 13:03:40

CFQ (Completely Fair Queuing 完全公平的排队)(elevator=cfq)

是内核中的默认算法,可以通过cat /sys/block/磁盘名/queue/scheduler进行查看。

[wuyaalan@localhost iosched]$ cat /sys/block/sda/queue/scheduler
noop anticipatory deadline [cfq] 

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

    对于通用服务器来说CFQ通常是最好的选择。它试图均匀地分布对I/O带宽的访问。在多媒体应用, 总能保证audiovideo及时从磁盘读取数据。但对于其他各类应用表现也很好。每个进程一个queue,每个queue按照上述规则进行merge sort。进程之间round robin调度,每次执行一个进程的4个请求。可以调 queued quantum 来优化。    

    内核中关于磁盘调度的相关参数见/sys/block/sda/queue/iosched,该目录下列举了相关调度参数。

[wuyaalan@localhost iosched]$ ls
back_seek_max      fifo_expire_sync  low_latency  slice_async_rq
back_seek_penalty  group_idle        quantum      slice_idle
fifo_expire_async  group_isolation   slice_async  slice_sync
[wuyaalan@localhost iosched]$
针对上面的参数作出解释:

back_seek_max   该参数以字节为单位,规定了磁头向后寻址的最大范围,默认值是16M。这个idea来自于as算法,对于请求所访问的扇区号在磁头后方的请求,cfq会像向前寻址的请求一样调度他。
    
 back_seek_penalty 该参数用来计算向后寻址的代价,默认值是2。  相对于前方查找,后方查找的距离为1/2(1/back_seek_penalty)时,cfq调度时就认为这两个请求寻址的代价是相同的。

 fifo_expire_async   该参数用来控制异步请求的超时时间,默认值是250ms。如果队列被激活后,则优先检查是否有请求超时,如果有超时的请求,则派发。但是,在队列激活的期间内,只会派发 一个超时的请求,其余的请求按照请求的优先级,以及所访问的扇区号大小来派发。
    
 fifo_expire_sync   该参数用于控制同步请求的超时时间,默认值是125ms。

group_idle 该参数为了提高吞吐量,默认值是8ms。

group_isolation 该参数用来标识应用程序所在的cgroup。

low_latency 该参数用来表示低延迟,默认值是1ms。

quantum    (number of requests)该参数用于控制队列派发到设备驱动层所含有的请求数,默认值是8。不管是同步队列还是异步队列, 在时间片内,超过这个限制,则不再派发请求。对于异步队列 而言,请求数的派发个数还取决于参数slice_async_rq.

slice_sync 该参数用来计算同步队列的时间片, 默认值是100ms。时间片还依赖于队列的优先级。同步队列的时间片的计算公式是:time slice=slice_sync + (slice_sync/5 * (4 - priority));
 slice_async   该参数功能同slice_sync,但是用来计算异步队列的时间片,默认值是40ms。异步队列的时间片的计算公式是:time slice=slice_async + (slice_async/5 * (4 - priority));


slice_async_rq   参数用来计算在时间片内异步请求被派发的最大数,默认值是2。同样,最大请求数也依赖于队列的优先级。
      计算公式是:最大请求数=2 * slice_async_rq( 8 –priority )。
slice_idle   该参数只控制同步队列的idle time,默认值是8ms。当同步队列当前没有请求派发时,并不切换到其他队列,而是等待8ms,以便让应用程序产生更多的请求。直到同步队列的时间片用完。
slice_sync    该参数用来计算同步队列的时间片, 默认值是100ms。时间片还依赖于队列的优先级。同步队列的时间片的计算公式是:time slice=slice_sync + (slice_sync/5 * (4 - priority));

该博客参考:http://blog.chinaunix.net/uid-23438246-id-3349808.html


阅读(840) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~