Linux 3.10 CFS 有“时间片”吗?

Linux 3.10 CFS 有“时间片”吗?

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代表完全地公平调度程序并不排除优先级较低的线程,而是不加区别地延长每个人的时间片。

相关内容