ionice `none: prio 0` 相当于什么?

ionice `none: prio 0` 相当于什么?

ionice 手册指出:

请注意,在内核 2.6.26 之前,未请求 io 优先级的进程正式使用“none”作为调度类,但 io 调度程序会将此类进程视为尽力而为类。尽力而为类别中的优先级将从进程的 cpu 良好级别动态派生:io_priority = (cpu_nice + 20) / 5。

对于 2.6.26 之后带有 CFQ io 调度程序的内核,未请求 io 优先级的进程会继承 CPU 调度类。 io 优先级源自进程的 cpu 好级别(与内核 2.6.26 之前相同)。

我是 2.6.26 发布的,但这仍然留下一些悬而未决的问题(我假设是 CFQ):

  1. 预定类的继承映射是什么? TS SCHED_OTHER = 尽力而为(io 类 2)吗?

  2. 使用 ionice -p 命令获取值时,返回none: prio 0。然而,ionice man 中提到的公式表明,相同的进程(CPU 性能为零)将是best-effort: prio 4因为 (0 + 20) / 5 = 4。

所以我现在的假设是none: prio 0= best-effort: prio 4,但我希望有人可以引用一些内核源代码来证明这是绝对正确的。

答案1

1)来自文档计划设计-CFS.txt:

CFS 代表“完全公平调度程序”,是由 Ingo Molnar 实现并合并到 Linux 2.6.23 中的新“桌面”进程调度程序。它替代了之前的普通调度程序的 SCHED_OTHER 交互代码。

您似乎将 O(1) 调度程序与 CFQ io 调度程序混淆了。

所以就有了 SCHED_{NORMAL, BATCH, IDLE} 策略。 IDLE 没有任何优先级。并安排空闲、尽力且实时的课程。

2)遗憾的是,您没有显示您输入的命令。例如,将 init 的 io-scheduling 更改为尽力而为类

# ionice -p 1
无:prio 0
# ionice -c2 20 -p 1
# ionice -p 1
尽力而为:prio 4

相关内容