当前位置: 首页 > news >正文

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的复杂层次结构。

更多内容请看下回。

http://www.jsqmd.com/news/101087/

相关文章:

  • SillyTavern轻松搞定版本升级:从焦虑到自信的无忧指南
  • 10分钟精通原神智能助手:从零到精通的完整配置指南
  • 视频创作者必看!这7个素材网站
  • LangChain 1.0 VS LangGraph 1.0:智能体我该用哪一个?
  • 比手动排查快10倍:自动化修复Python库缺失问题
  • 怎么查看自己Ubuntu剩余空间有多少个G呢?
  • LobeChat镜像优势详解:为何它成开源大模型前端首选?
  • LobeChat医疗健康问答合规性讨论
  • 5分钟验证:不安装运行时也能测试.NET应用的新方法
  • 手写海康OpenApi签名规范,实现手动调用api(sdk:artemis-http-client)
  • MHT-FE710 光纤组合导航系统技术指南:高精度导航的多接口适配与工程实践
  • 吹爆FreeBuds SE4 ANC的新音效 | 浅聊体验
  • 网盘直链解析终极方案:彻底告别下载限制的完整指南
  • 纪念币预约神器:3步实现高效自动预约的终极指南
  • Unity翻译插件终极指南:3步实现游戏无障碍体验
  • Google Drive高效下载终极指南:解锁无限下载潜力
  • vue中的props详解
  • A module that was compiled using NumPy 1.x cannot be run in NumPy 2.0.2 as it may crash. To support
  • tlias的部门的增删改查操作
  • LangChain构建智能文档分析系统的7个核心技术模块
  • NVIDIA TensorRT-LLM高性能推理框架解析
  • LobeChat能否支持星际语言翻译?外星文明假说沟通模型构建
  • 问题:本地启动项目,想让其他人在他们自己的电脑也能访问该项目。需要怎么配置代理?
  • 生产环境Helm实战:从零搭建高可用应用发布流水线
  • 纪念币预约自动化终极指南:高效提升预约成功率
  • 跟着铁头山羊学STM32单片机(串口篇)
  • Unity游戏翻译终极方案:XUnity.AutoTranslator技术深度解析
  • 10分钟构建verification failed:(0x1a)错误监控原型
  • Helm vs 原生K8s:部署效率对比实测
  • 零基础入门:VSCode和Anaconda的Python开发环境搭建