Chinaunix首页 | 论坛 | 博客
  • 博客访问: 203153
  • 博文数量: 28
  • 博客积分: 1179
  • 博客等级: 上尉
  • 技术积分: 405
  • 用 户 组: 普通用户
  • 注册时间: 2008-04-21 22:51
文章分类

全部博文(28)

文章存档

2012年(4)

2011年(8)

2010年(2)

2009年(6)

2008年(8)

分类: LINUX

2009-07-23 11:09:04

CFQ(Complete Fairness Queueing) IO scheduler
================================================

cfq被设计成用于多线程能公平的使用磁盘带宽的一种IO调度算法。
cfq为每个进程/线程,单独创建了一个队列来管理该进程所产生的请求。
严格的是说,依据IO上下文创建的队列。而队列之间的调度使用了时间片来调度,
这样就可以保证每个进程都能被很好的分配到IO带宽。从而实现了进程间的公平。
该算法现在作为默认的调度算法。


Selecting IO schedulers
-----------------------
Refer to Documentation/block/switching-sched.txt for information on
selecting an io scheduler on a per-device basis.

Tuning the cfq IO scheduler
------------------------------------
When using 'cfq', the cfq IO scheduler there are 9 parameters under
/sys/block/*/queue/iosched/. All are units of milliseconds.


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

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

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

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

* quantum    (number of requests)
     (CN)该参数用于控制队列派发到设备驱动层所含有的请求数,默认值是4。不管是同步队列还是异步队列, 在时间片内,超过这个限制,则不再派发请求。对于异步队列 而言,请求数的派发个数还取决于参数slice_async_rq.
阅读(1976) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~