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延迟时间内执行
谢谢