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