news 2026/6/19 22:54:58

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/19 22:51:35

LobeChat多模型切换功能实测:自由选择最佳输出

LobeChat多模型切换功能实测:自由选择最佳输出 在今天的大模型时代,你有没有遇到过这样的场景?写一份技术文档时希望用 GPT-4 保证质量,但日常闲聊又觉得成本太高;处理公司内部数据时想调用本地部署的 Llama3 模型确保…

作者头像 李华
网站建设 2026/6/19 22:51:24

JavaScript学习笔记:13.Promise

JavaScript学习笔记:13.Promise 上一篇咱们用“设计图纸”搞定了类的封装与继承,这一篇要攻克JS开发的“异步老大难”——Promise。做前端绕不开异步:请求接口要等服务器响应、加载图片要等资源下载、定时器要等时间触发…… 而在Promise出现…

作者头像 李华
网站建设 2026/6/19 16:42:54

Sora大模型+飞书多维表格,双强联合,保姆级教你表格一键变视频

前几天,由于飞书官方政策调整原因,大家现在在飞书多维表格里已经不能搜到“Sora、Nano”相关的飞书AI字段捷径了,统一进行了字段名称的修改,现在跟着我手把手操作,教你如何在飞书多维表格里用上Sora大模型,…

作者头像 李华
网站建设 2026/6/18 7:43:47

vue中的props详解

一、props 的作用与设计目标props 是父组件向子组件传递数据的唯一官方通道,其核心设计原则是:单向数据流:父 → 子子组件不得直接修改 propsprops 主要用于数据展示和配置,而非业务状态管理典型使用场景:表单组件接收…

作者头像 李华
网站建设 2026/6/17 11:45:10

艺术漆价格陷阱!这3个平方计算误区你必须知道

艺术漆行业价格体系分析:聚焦面积计算中的常见误区行业痛点分析当前,艺术漆领域在消费端面临一个显著的技术与商业交叉挑战:施工面积的计算标准不统一、不透明。这一痛点直接影响了消费者的采购成本与最终预算的匹配度,容易引发消…

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

零基础学mxGraph:30分钟创建你的第一个交互图表

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 创建一个mxGraph新手教程项目,包含:1. 分步代码讲解(从引入库到基本图形绘制);2. 可交互的示例(点击节点展开…

作者头像 李华