CFS sysctl_sched_latency内核参数

时间:2015-07-07 08:52:19

标签: linux linux-kernel kernel

我们有以下内核参数:

sysctl_sched_min_granularity = 0.75
sysctl_sched_latency = 6 ms
sched_nr_latency = 8

我理解(我不知道是否正确),参数sysctl_sched_latency说,runqueue中的所有任务都应该及时执行6ms

因此,如果任务到达time X,则任务应至少在X + 6 ms之前执行一次。

check_preempt_tick定期执行函数task_tick_fair

在此功能开始时,我们会检查delta_execnot greater还是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 tasks(优先级相同)ideal_runtime应该为第一项任务返回1.5 ms

假设此任务已针对1.5 msexit执行。

  • 我们现在3 tasksqueue了。

task2的第二个计算是这样的:

  • 我们在队列中有3 tasks,因此ideal_runtime的时间应为2 ms

  • Task2已针对2 msexit投放。

再次

  • task3计算时间,我们
  • {li> 2 tasksqueue
  • 所以应该为3ms运行。

总结

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

  • 之后执行
  • 因此超出了sysctl_sched_latency(即6毫秒)。

CFS如何确保队列中的所有任务在sysctl_sched_latency时间内执行,此时队列可以一直动态更改?

谢谢,

0 个答案:

没有答案