@
Donduck #37
为什么 Linux 要有 Windows 的 QoS 控制,这个逻辑不合理,毕竟是两个不同的系统。我猜你想说的是 Linux 没有类似 Windows QoS 的机制?在我看来,Windows 和 Linux 还真就差不多。
我在
https://v2ex.com/t/1129403 这个帖子里解释得比较清楚了,(自动,非指定 affinity )异构调度是个加权调度,依赖四个方面的参数:
1. soc 向系统汇报自身拓扑、容量以及频率温度等等运行时信息
2. 任务本身的特性定义,这个定义可以是历史数据统计而来,也可以手动指定
3. 用户意图
4. 调度器加权算法
调度行为的数学本质是将 1/2/3 作为参数,通过 4 的算法转化为特定的加权数值。
目前 1 是 soc 厂家提供的,仅取决于硬件平台。
加权算法方面,对于 Linux 来说有代码可以参考,对于 Windows 来说是个黑盒。尽管 Linux 的实现依旧 naive ,但我不认为 Windows 能比 Linux 好到哪里去。这是个约束优化的问题,可能不存在求解全局最优的多项式算法。
对于 2 来说,据我所知 Windows 可以通过任务管理器为某个进程设定“效率模式”来影响对于 P/E 核心的偏好。我对 Windows 了解不深,说错见谅。Linux 对应的实现叫 uclamp ,使用标准 cgroup 机制来手动定义任务特性。
对于 3 来说,Windows 应该是基于电源计划,现在(基于 hwp 的 governor )应该叫 power mode overlay 了。Linux 对应的入口是 tuned (过去是 power profile )。两者思路上基本一致。
Windows QoS 或者 Linux 的相关机制,本身只是额外的加权信息,至于它叫什么名字,如何与系统其他部分集成对接,是取决于系统原有框架的。
自动异构调度的未来,以当下的眼光来看就是两条路,要么手动标定所有的任务,要么拉长时间获得足够好的历史参考数据来自动标定任务。调度算法反倒不是很重要(我个人甚至认为 naive 的算法就很好了),毕竟只是个加权,底层逻辑还是公平。
换句话说,只要不用强制 affinity 的手动方式,目前所有依赖动态信息自动做异构调度的效果都差不多,不可能存在质的差异。顶多是有多少人工就有多少智能。