IT技术博客大学习 共学习 共进步
全部 移动开发 后端 数据库 AI 算法 安全 DevOps 前端 设计 开发者

标签:CFS

共 1 篇相关文章

IT 累计浏览 2,252

CFS中的虚拟运行时间

这篇讲的是Linux内核CFS调度器中最核心也最容易让人困惑的一个概念:虚拟运行时间(vruntime)。作者从对vruntime的不理解出发,在研究cgroup的CPU子系统时,才真正理清了它的原理。 CFS追求的是理想中的“完全公平”,但现实中同一时刻一个CPU核心只能跑一个进程。因此,算法需要一种机制来惩罚当前占用CPU的进程,从而照顾那些等待的进程。这个机制,就是vruntime。简单说,vruntime越小的进程,越值得被调度。 它的精妙之处在于计算方式:vruntime并非进程实际运行的时间,而是结合了进程“权重”后的换算值。权重越大(对应用户态优先级nice值越低),进程实际运行一毫秒所产生的vruntime就越小,这样它在调度队列中的位置就越靠前(内核用一棵红黑树管理,vruntime小的在左端),从而获得更多的CPU时间。 文章还揭示了内核是如何将用户熟悉的nice值映射到内部权重的,那就是通过一个叫`prio_to_weight`的静态数组进行转换。这套机制将“优先级”这个概念,巧妙地转化为“需要运行的紧迫度”,从而在动态调度中实现了对不同重要性进程的公平分配。