【问题标题】:CFQ scheduling algorithmCFQ调度算法
【发布时间】:2013-05-14 08:04:42
【问题描述】:

CFQ 算法使用基于发出请求的进程的 I/O 优先级的有序队列集。这意味着有一个优先级进程队列,比如说,1,另一个优先级 2,等等。

我知道该算法从每个队列中获取第一个请求,对它们进行排序(以避免不必要的头部移动)并将它们放入调度队列以进行处理。但是由于一个请求可以有很多块要读取(不一定是连续的),这种排序怎么可能呢?我的意思是,如果我有:

Request1 = [1,2,345,6,423] 

Request2 = [3,4,2344,664]

作为 [a,b,c] 块 a、b 和 c 的列表,请求 1 和 2 是如何放入调度队列的?如您所见,它们有一个非空的交叉点(例如第 6 块在第 3 块和第 4 块之后)

我不明白的另一件事是,由于一个请求可以有多个要读取的块,所以在其中进行了什么样的调度? FCFS?还是它订购积木?

例如,假设我们有一个包含以下要读取的块列表的请求:

[1,23,5,76,3]

算法将如何处理这个问题?

由 FCFS:

[1,23,5,76,3]

或通过对块进行排序:

[1,3,4,23,76]

也许我不了解算法,找不到足够的文档。如果有人有更详细解释的论文链接,请参考我。

【问题讨论】:

    标签: scheduling hard-drive


    【解决方案1】:

    据我了解,CFQ 不会安排单轨请求,而是安排多个请求的时间片。 引用IA64wiki:

    CFQ 调度程序旨在公平地分配磁盘时间 竞争访问磁盘的进程。此外,它使用 提高绩效的预期和最后期限,并尝试 绑定延迟。

    每个发出 I/O 的进程都会获得一个时间片,在该时间片期间它有 同步请求的独占访问。时间片是有界的 通过两个参数:slice_sync 由进程的 I/O 优先级调整 给出每个切片的长度(以毫秒为单位);和quantum 给出 可以发出的请求数。

    所有进程共享一组 17 个用于异步 I/O 的队列,一个用于 每个有效的 I/O 优先级。每个队列根据 slice_async按优先级调整),并处理队列 循环。

    在每个切片中,请求被合并(前后),并且 根据 SCAN 发出,向后搜索到 back_seek_max 允许,但与正向相比,back_seek_penalty 有偏差 寻求。 CFQ 将在一个切片内等待最多 slice_idle 毫秒的进程 发出更多的 I/O。这允许预期,也提高了 进程发出突发 I/O 时的公平性;但总的来说它减少了 性能。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-03
      • 2011-04-16
      • 2011-03-15
      • 2012-07-11
      • 2012-11-07
      • 1970-01-01
      相关资源
      最近更新 更多