首先任务
理论上
- 的虚拟运行时间是当任务将开始执行 其下一个时间片理论上完美的多线程CPU上。
- 在实践中它的实际运行时间归到正在运行的任务
1总数如何进行调度安排所有的 sysctl_sched_latency时间内的任务?
它维护一个时间排序的红色和黑色的树,其中所有可运行的任务是 按其虚拟运行时间排序。左边的节点已经运行了最短的时间。 CFS挑选最左边的任务,并运行它,直到任务计划或调度蜱 那么CPU时间花在它被添加到其虚拟运行时中运行。 当它不再是最左边的节点时,则运行具有最短虚拟的新任务,并且旧的任务被预充电。
2.当一个进程被唤醒究竟在place_entity功能呢?
短版:
当一个进程被唤醒的place_entity功能要么保留 任务的虚拟运行,因为它是或增加它。
龙版本:
当一个进程被唤醒的place_entity功能做以下的事情
初始化临时虚拟运行时最小的任务的CFS运行队列的虚拟运行。
由于睡眠时间少于一个延迟时间不计算,所以 将初始化阈值变量初始化为sysctl_sched_latency。 如果启用GENTLE_FAIR_SLEEPERS功能,那么 则是该变量值的一半。 用此阈值减少先前初始化的临时虚拟运行时间。
确保临时虚拟运行时间至少等于任务的虚拟运行时,通过计算虚拟运行时间设置为最大的本身和任务的虚拟运行。
设置任务的虚拟运行到临时运行。
3.当一个进程被唤醒,为什么是vruntime由sched_latency减去调整?
虚拟运行时间递减,因为睡眠不足单等待时间不计。 例如,如果它的 只睡眠一个调度程序延迟,那么该任务不应在红黑树中更改其位置。
能4.不是导致在运行队列中vruntime值差异较大的过程?
相信在步骤3对问题2所述的逻辑,防止或至少最小化。
参考
sched.c Linux Kernel Source
sched_fair.c Linux Kernel Source
Notes on the CFS Scheduler Design
回答问题1并没有真正回答关于内'sysctl_sched_latency' CFS调度。 – kavadias