news 2026/9/24 20:23:50

Linux CFS(完全公平调度器)原理与实现细节全解析(2)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Linux CFS(完全公平调度器)原理与实现细节全解析(2)

接前一篇文章:Linux CFS(完全公平调度器)原理与实现细节全解析(1)

二、核心概念与关键抽象

2.2 调度实体(sched_entity)

CFS的调度基本单位不是传统的task_struct,而是更通用的抽象 ——调度实体struct sched_entity。

设计原因很简单:

  • 有时调度对象是单个进程/线程;
  • 有时调度对象是任务组(task group)

    或cgroup;

  • 希望在“调度层”统一地处理这些对象,而不关心其内部构成。

因此:

  • 普通进程:task_struct中内嵌一个struct sched_entity;
  • 任务组:task_group中也内嵌一个struct sched_entity;
  • CFS的核心调度逻辑只围绕sched_entity展开。

其关键字段如下(节选):

// include/linux/sched.h struct sched_entity { /* For load-balancing: */ struct load_weight load; struct rb_node run_node; struct list_head group_node; unsigned int on_rq; u64 exec_start; u64 sum_exec_runtime; u64 vruntime; u64 prev_sum_exec_runtime; u64 nr_migrations; #ifdef CONFIG_FAIR_GROUP_SCHED struct sched_entity *parent; /* rq on which this entity is (to be) queued: */ struct cfs_rq *cfs_rq; /* rq "owned" by this entity/group: */ struct cfs_rq *my_q; #endif };

其中:

  • load

任务权重及其倒数等信息,由nice值通过sched_prio_to_weight映射而来。

  • vruntime

虚拟运行时间,是CFS调度排序的核心字段。

  • run_node

作为红黑树节点,使得该实体可插入CFS运行队列的rb-tree中。

  • cfs_rq

/my_q/parent:在启用组调度时构建层次化调度树:

  • cfs_rq

该实体所属运行队列。

  • my_q

如果该实体本身代表一个任务组,则它拥有自己的子运行队列my_q。

  • parent

父级调度实体,实现自上而下的嵌套调度。

这种设计将“调度逻辑”与“被调度对象”解耦,使CFS可以自然支持从单进程到多级cgroup的复杂层次结构。

更多内容请看下回。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/24 18:11:37

J2EE技术及应用实验及报告(黑龙江大学)

一、实验代码百度网盘链接: https://pan.baidu.com/s/1RhiVh6T6eXSJpHvSPcRycw?pwd9999 提取码: 9999二、实验报告 实验一一、实验名称实验1 WEB基础二、实验目的熟悉运行环境的安装和使用;了解和掌握基本的HTML标签和JavaScript语法。三、实验类型验证型四、实验…

作者头像 李华
网站建设 2026/9/24 19:56:26

AI农情数据要素服务平台:让种地靠数据,丰产不盲目

种地的人都懂,“凭老经验”种地太被动:旱了涝了难预判,施肥浇水靠估摸,病虫害要等看出苗头才敢治,最后要么减产要么白扔农资钱。核心问题就一个——没靠谱的依据,全靠“猜”。而AI农情数据要素服务平台&…

作者头像 李华
网站建设 2026/9/25 5:52:38

JavaScript学习笔记:14.类型数组

JavaScript学习笔记:14.类型数组 上一篇用Promise搞定了异步任务的“承诺管理”,这一篇咱们来解锁JS处理底层数据的“硬核工具”——类型数组(Typed Arrays)。做前端如果只跟普通数组打交道,那你大概率没碰过“二进制数…

作者头像 李华
网站建设 2026/9/25 5:52:52

LobeChat能否定制品牌LOGO?白标解决方案

LobeChat能否定制品牌LOGO?白标解决方案 在企业纷纷拥抱大语言模型的今天,一个关键问题浮出水面:如何让用户在与AI对话时,看到的是“我们自己的智能助手”,而不是某个开源项目的影子? 这个问题背后&#xf…

作者头像 李华
网站建设 2026/9/24 13:35:57

navigatetominiprogram实战应用案例分享

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 创建一个navigatetominiprogram实战项目,包含完整的功能实现和部署方案。点击项目生成按钮,等待项目生成完整后预览效果 最近在小程序开发中,nav…

作者头像 李华
网站建设 2026/9/25 1:22:33

1小时验证创意:右键菜单管理工具原型开发

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 快速开发一个右键菜单管理器原型,核心功能包括:1.基本菜单项列表展示 2.添加/删除功能 3.简单的分类管理 4.导出配置功能。使用HTML/CSS/JavaScript实现跨平…

作者头像 李华