我正在研究 Linux CFS 调度程序,并遇到了这个名为sched_wakeup_granularity_ns
. 如本文所述,其用法如下。
此参数控制任务的唤醒延迟,即它必须经过多长时间才能抢占当前任务。
从这里进一步查找此参数:
如果当前运行进程的虚拟运行时间与抢占进程的虚拟运行时间之差大于 sched_wakeup_granularity_ns 的虚拟运行时间(这里将 sched_wakeup_granularity_ns 转移到具有抢占进程权重的虚拟运行时间),则发生抢占。
在我的系统中这个默认值是 2.5 毫秒。
我的问题:如果一个截止日期 <= 2.5 毫秒的进程同时执行另一个低优先级进程,那么由于这个最小粒度,它将没有机会执行,并且总是会错过它的截止日期。
我的主张正确吗?为什么Linux内核是这样设计的?
当然我们可以把这个参数设置为 0 毫秒,然后重新编译内核,但是在日常生活中,2.5 毫秒期限的任务不是经常发生吗?视频解码器、声音处理应用程序和其他延迟关键工作负载 ?