加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

linux – CFS中vruntime的概念是什么

发布时间:2020-12-13 19:33:28 所属栏目:Linux 来源:网络整理
导读:我一直在阅读内核中的 Linux内核和CFS调度程序.我遇到了vruntime(虚拟运行时),它是CFS调度程序背后的核心概念.我从“Linux内核开发”和互联网上的其他博客中读到,但无法理解vruntime背后的基本计算. vruntime是属于特定进程还是属于具有相同nice值的进程组.
我一直在阅读内核中的 Linux内核和CFS调度程序.我遇到了vruntime(虚拟运行时),它是CFS调度程序背后的核心概念.我从“Linux内核开发”和互联网上的其他博客中读到,但无法理解vruntime背后的基本计算. vruntime是属于特定进程还是属于具有相同nice值的进程组.什么是加权因子以及如何计算?我经历了所有这些概念,但无法理解.另外vruntime和* min_vruntime *有什么区别?

解决方法

vruntime是每线程;它是嵌套在task_struct中的成员.

本质上,vruntime是线程“运行时”的度量 – 它在处理器上花费的时间. CFS的重点是对所有人公平;因此,算法可归结为一个简单的事情:(在给定的队列中的任务中)具有最低vruntime的任务是最值得运行的任务,因此将其选为“下一个”. (实际的实现是使用rbtree来提高效率).

考虑到各种因素 – 如优先级,漂亮的值,cgroups等 – vruntime的计算并不像简单的增量那样简单.我建议阅读“Professional Linux Kernel Architecture”,Mauerer,Wrox Press中的相关部分 – 它会详细解释.

Pl见下面快速尝试总结其中的一些内容.

其他资源:
Documentation/scheduler/sched-design-CFS.txt

快速摘要 – vruntime计算:
(根据这本书)

>大部分工作都在kernel / sched_fair.c中完成:__ update_curr()
>打电话给计时器打勾
>更新刚刚在处理器上花费的“当前”的物理和虚拟时间
>对于以默认优先级运行的任务,即nice值0,所花费的物理和虚拟时间是相同的
>对于其他优先(好)级别的任务,情况并非如此;因此,vruntime的计算受到使用负载权重因子的当前优先级的影响

delta_exec =(unsigned long)(现在 – curr-> exec_start);
// …
delta_exec_weighted = calc_delta_fair(delta_exec,curr);
curr-> vruntime = delta_exec_weighted;

忽略一些舍入和溢出检查,calc_delta_fair的作用是什么
计算以下公式给出的值:

delta_exec_weighed = delta_exec * (NICE_0_LOAD / curr->load.weight)

问题是,更重要的任务(具有较低值的那些)将具有更大的任务权重;因此,通过上述等式,对它们的vruntime将会更小(因此让他们在rbtree上更多地排在左边!).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读