Linux 3.10 CFS 有“时间片”吗?
我很困惑,因为计划设计-CFS.txt明确指出:
CFS 使用纳秒粒度计算,不依赖于任何 jiffies 或其他 HZ 细节。因此,CFS 调度程序不像以前的调度程序那样具有“时间片”的概念,也没有任何启发式方法。只有一个中央可调参数(您必须打开 CONFIG_SCHED_DEBUG):
/proc/sys/kernel/sched_min_grinderity_ns
它可用于将调度程序从“桌面”(即低延迟)工作负载调整为“服务器”(即良好的批处理)工作负载。
但是,多个任务调度程序调整指南提出了两种不同的计算“时间片”的公式。 (取决于可运行任务的数量。)例如这个OpenSUSE 指南。
我只在隔离的 CPU 上运行 SCHED_FIFO 线程。
答案1
CFS
没有“像以前的调度程序那样”的时间片。
时间CFS
片基本上是为同一线程授予 CPU 执行时间的连续切换之间的持续时间。这给你两个选择:
所有线程都有足够的时间至少
min_granularity_ns
在 1 内执行latency_ns
。那么,你的timeslice = scheduling period * (task's weight/total weight of tasks in the run queue)
有太多线程无法容纳
latency_ns
,因此您的时间片会变大以容纳更多想要根据运行的线程timeslice = number_of_running_tasks * sched_min_granularity_ns
这就是为什么CFS
代表完全地公平调度程序并不排除优先级较低的线程,而是不加区别地延长每个人的时间片。