ionice 手册指出:
请注意,在内核 2.6.26 之前,未要求 io 优先级的进程正式使用“none”作为调度类,但 io 调度程序会将此类进程视为最佳努力类。尽力而为类别中的优先级将从进程的 cpu nice 级别动态派生:io_priority = (cpu_nice + 20) / 5。
对于带有 CFQ io 调度程序的 2.6.26 之后的内核,未要求 io 优先级的进程继承 CPU 调度类。io 优先级源自进程的 cpu nice 级别(与内核 2.6.26 之前相同)。
我发布了 2.6.26,但这仍然留下了一些悬而未决的问题(我假设是 CFQ):
调度类的继承映射是什么?TS SCHED_OTHER = Best Effort (io class 2) 吗?
使用 ionice -p 命令获取值时,返回none: prio 0. 但是,ionice man 中提到的公式表明,best-effort: prio 4由于 (0 + 20) / 5 = 4 ,相同的过程(cpu nice 为零)。
所以我此时的假设是none: prio 0= best-effort: prio 4,但我希望有人可以引用一些内核源代码来证明这是权威性的。
小智 0
1)来自文档sched-design-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