我一直在阅读有关Linux内核和内核中的CFS调度程序的内容。我遇到了vruntime(虚拟运行时),它是CFS调度程序背后的核心概念。我阅读了“Linux内核开发”以及互联网上的其他博客,但无法理解vruntime背后的基本计算。vruntime属于特定进程还是属于一组具有相同nicevalues的进程。什么是权重因子?它是如何计算的?我经历了所有这些概念,但无法理解。另外,vruntime和*min_vruntime*有什么区别? 最佳答案 vruntime是每线程的;它是嵌套在task_struct中的成员。从本质上讲,vru
我一直在阅读有关Linux内核和内核中的CFS调度程序的内容。我遇到了vruntime(虚拟运行时),它是CFS调度程序背后的核心概念。我阅读了“Linux内核开发”以及互联网上的其他博客,但无法理解vruntime背后的基本计算。vruntime属于特定进程还是属于一组具有相同nicevalues的进程。什么是权重因子?它是如何计算的?我经历了所有这些概念,但无法理解。另外,vruntime和*min_vruntime*有什么区别? 最佳答案 vruntime是每线程的;它是嵌套在task_struct中的成员。从本质上讲,vru
所以当一个任务吃完它的时间片后,它会被重新插入到红黑树中。如果任务之前已经休眠了很长时间,导致vruntime与运行队列中的其他任务相比非常小,那么它会作为红黑树中最左边的节点重复插入,对吧?因此它总是会被选为下一个要运行的任务?我已经检查了core.c和fair.c中的源代码,我没有看到这个任务应该屈服于其他任务的任何地方。尽管在函数pick_next_entity()中,我确实看到了一些任务,例如cfs_rq->next、cfs_rq->last等。它们可能具有更高的运行优先级,但我认为这不是阻止非常小的任务的正确位置vruntime占用处理器时间过长,对吗?有人有线索吗?谢谢,
如果vruntime自进程创建以来就被计算在内,如果这样的进程正在与新创建的处理器绑定(bind)进程竞争(比方说比几天更年轻),那么为什么这样的进程甚至会获得处理器?正如我所读到的,规则很简单:选择最左边的叶子,这是运行时间最短的进程。谢谢! 最佳答案 kerneldocumentationforCFS有点掩饰你的问题的答案,但简要提及:Inpractice,thevirtualruntimeofataskisitsactualruntimenormalizedtothetotalnumberofrunningtasks.所以,v