Linux CFS sysctl_sched_延迟内核参数

Linux CFS sysctl_sched_延迟内核参数,linux,linux-kernel,kernel,Linux,Linux Kernel,Kernel,我们有以下内核参数: sysctl_sched_min_granularity = 0.75 sysctl_sched_latency = 6 ms sched_nr_latency = 8 据我所知(我不知道是否正确),参数sysctl\u sched\u latency表示,runqueue中的所有任务都应该在6ms的时间内执行 因此,如果任务在时间X内到达,则任务应至少在X+6 ms内执行一次 task\u tick\u fair定期执行功能check\u preempt\u tick

我们有以下内核参数:

sysctl_sched_min_granularity = 0.75
sysctl_sched_latency = 6 ms
sched_nr_latency = 8
据我所知(我不知道是否正确),参数
sysctl\u sched\u latency
表示,runqueue中的所有任务都应该在
6ms
的时间内执行

因此,如果任务在
时间X
内到达,则任务应至少在
X+6 ms
内执行一次

task\u tick\u fair
定期执行功能
check\u preempt\u tick

在该函数的开头,我们检查
delta_exec
是否大于
然后检查
ideal_runtime

ideal_runtime = sched_slice(cfs_rq, curr);
delta_exec = curr->sum_exec_runtime - curr->prev_sum_exec_runtime;

if (delta_exec > ideal_runtime) 
例如:

  • 如果我们有
    4个任务
    (相同优先级)
    ideal\u运行时
    应该为第一个任务返回
    1.5ms
假设此任务已执行
1.5毫秒
退出

  • 所以我们现在在
    队列中有
    3个任务
task2
的第二个计算如下:

  • 我们在一个队列中有
    3个任务
    ,因此
    理想运行时间
    应该是
    2ms

  • Task2
    已运行了
    2 ms
    exit

再次

  • task3
    计算时间,我们有
  • 队列中的
    2个任务
  • 因此,它应该运行
    3ms
总而言之

  • task4
    将在
    1.5ms(task1)+2ms(task2)+3ms(task3)后执行

  • 因此,超出了
    sysctl\u sched\u延迟
    (即6毫秒)

当队列可以随时动态更改时,
CFS
如何确保队列中的所有任务在
sysctl\u sched\u延迟时间内执行

谢谢