news 2026/6/25 10:40:31

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/6/25 4:52:13

Unity翻译插件终极指南:一键实现游戏多语言本地化

还在为看不懂日文、韩文游戏而烦恼吗?XUnity Auto Translator正是你需要的解决方案!这款强大的Unity翻译插件能够智能识别游戏中的文本元素,并提供实时翻译服务,让你轻松跨越语言障碍,畅享全球游戏乐趣。 【免费下载链…

作者头像 李华
网站建设 2026/6/24 11:26:16

哔哩下载姬深度解析:全方位掌握B站视频高效下载技巧

在当今数字化内容爆炸的时代,B站用户经常面临优质视频无法离线保存的困境。哔哩下载姬作为专业的B站视频下载解决方案,彻底解决了视频保存的技术难题,支持从480P到8K的全画质下载,配备智能批量管理和精准链接解析功能,…

作者头像 李华
网站建设 2026/6/25 3:30:33

Solidity入门:从零开始编写第一个智能合约

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 在快马平台上生成一个适合初学者的Solidity智能合约教程项目。合约功能简单,如存储和读取一个字符串。提供详细的代码注释和部署步骤,帮助新手快速上手。使用…

作者头像 李华
网站建设 2026/6/23 23:56:03

10分钟构建verification failed:(0x1a)错误监控原型

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 开发一个轻量级错误监控原型,功能包括:1)实时日志捕获 2)verification failed:(0x1a)错误模式识别 3)错误分级(严重/警告/提示) 4)自动生成诊断报告 5)Teams…

作者头像 李华
网站建设 2026/6/24 15:14:54

用D盾快速构建安全检测原型系统

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 开发一个快速原型系统,演示D盾的核心功能。系统应允许用户上传代码片段,自动扫描并显示检测结果。支持自定义规则和简单的结果过滤功能。使用Kimi-K2模型生成…

作者头像 李华
网站建设 2026/6/24 16:03:30

5分钟快速验证:你的项目是否会有模块导入问题

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 创建一个项目预检工具,能够:1. 自动扫描项目中的模块使用情况 2. 识别潜在的导入兼容性问题 3. 生成可视化兼容性报告 4. 提供一键配置修复 5. 支持多种框架…

作者头像 李华