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

详细介绍:Linux 调度类(sched_class)

Linux 调度类(sched_class)

总览与优先级顺序

Linux 内核把不同调度策略的实现抽象为若干调度类(sched_class),平台按固定顺序遍历这些类来选择下一个运行任务。常见的类及顺序是:

内核中对应的声明示例:

extern const struct sched_class stop_sched_class;
extern const struct sched_class dl_sched_class;
extern const struct sched_class rt_sched_class;
extern const struct sched_class fair_sched_class;
extern const struct sched_class idle_sched_class;

sched_class 抽象(接口与职责)

每个调度类借助 struct sched_class 提供一组回调函数,常见接口包括:
enqueue_task / dequeue_task:把任务放入/移出该类的就绪结构。
pick_next_task:从该类中选择下一个要运行的 task_struct*(scheduler 调度时首要调用)。
task_tick:tick 时类特有的处理(如 RR 换位、CFS 更新 vruntime)。
get_rr_interval:只对带时间片的实时轮转(SCHED_RR)有意义。
balance / select_task_rq / migrate_task_rq / task_woken / set_cpus_allowed:仅在 SMP 下由类实现与负载均衡和迁移相关的策略。
switched_from / switched_to / prio_changed:切换或优先级变化时的处理(注意 switched_from 可能释放 rq->lock,pair 是由 p->pi_lock 串行化)。
否支持 uclamp。就是uclamp_enabled(条件编译项):类

enqueue_task / dequeue_task:把任务放入/移出该类的就绪结构。
pick_next_task:从该类中选择下一个要运行的 task_struct*(scheduler 调度时首要调用)。
task_tick:tick 时类特有的处理(如 RR 换位、CFS 更新 vruntime)。
get_rr_interval:只对带时间片的实时轮转(SCHED_RR)有意义。
balance / select_task_rq / migrate_task_rq / task_woken / set_cpus_allowed:仅在 SMP 下由类达成与负载均衡和迁移相关的策略。
由 p->pi_lock 串行化)。就是switched_from / switched_to / prio_changed:切换或优先级变化时的处理(注意 switched_from 可能释放 rq->lock,pair
uclamp_enabled(条件编译项):类是否支持 uclamp。
在这里插入图片描述

各调度类详解

1) stop_sched_class

  • 用途:处理内核的 stop/停止样例(如 stop_machine、CPU 热插拔相关的短期“阻塞/停止”任务)。
  • 特点:优先级最高,短期任务,确保内核关键工作能抢占其他用户任务。

2) dl_sched_class(SCHED_DEADLINE)

3) rt_sched_class(SCHED_FIFO / SCHED_RR)

  • 用途:传统实时策略,基于静态优先级(0–99)。SCHED_FIFO:先到先运行直到阻塞/自愿让出;SCHED_RR:同优先级轮转时间片。
  • 数据结构:按优先级分队列 + 优先级位图(bitmap)以快速找到最高优先级任务。
  • 特点:优先级高于 CFS,被 RT 任务占满时会阻塞普通任务;对响应性要求高,但可导致优先级反转疑问(需使用优先级继承等机制)。
  • 调度与抢占:RT 任务一旦就绪通常会抢占低优先级任务。rr 使用 timeslice(sched_rr_timeslice_ms)进行轮转。

4) fair_sched_class(CFS:完全公平调度器)

5) idle_sched_class

  • 用途:当无其他任务可运行时,运行每个 CPU 的 idle 线程。
  • 特点:最低优先级,通常进入节能/空闲循环。

调度决策流程要点(高层)

  1. 就绪/唤醒:唤醒时会调用相应调度类的 enqueue_task,并可能触发 check_preempt_curr 来判断是否立刻抢占。
  2. 选择任务:调度器(pick_next_task_fair 等)会按调度类顺序调用每个类的 pick_next_task,第一类返回非 NULL 的任务即被选中(即高优先级类优先)。
  3. 切换与时钟片:调用 put_prev_task / set_curr_task / task_tick 等维护数据与切片逻辑。
  4. 迁移/均衡:负载均衡逻辑会在必要时移动任务或调整 runqueue(不同类有不同的均衡策略)。

策略与系统调用

  • 政策设置:sched_setscheduler(SCHED_FIFO / SCHED_RR / SCHED_OTHER 等)、sched_setattr(包含 SCHED_DEADLINE 参数)。
  • 查看/调试:/proc//sched、/proc/sched_debug、chrt、schedtool;可以用 ps -o pid,comm,policy,rtprio。
http://www.jsqmd.com/news/267387/

相关文章:

  • 论文怎么降低AI率?知网算法大更新!学长亲测aigc免费降重,汇总5款降ai率工具红黑榜 - 殷念写论文
  • 3D模型格式转换终极指南:突破跨平台兼容性瓶颈
  • XMedia Recode v3.6.1.2:全能视频格式转换工具
  • 收藏!2026年大模型学习指南:普通人也能抓住的AI红利
  • LG EXAONE 4.0:12亿参数双模式AI新标杆
  • 【收藏必备】多模态大模型入门指南:从NLP到多模态的完整技术解析
  • 新加坡硕士留学中介口碑排名揭晓,录取案例多,助力留学申请 - 留学机构评审官
  • 华为OD机试真题精讲:智能成绩表(Python/Java/C++多语言实现)
  • 2026年上海GEO优化公司推荐:专业服务行业深度评测,解决可见性与转化率核心痛点 - 品牌推荐
  • 原神抽卡数据永久保存全攻略:告别6个月记录丢失困扰
  • 华为OD机试真题精讲:AI处理器组合(Python/Java/C++多语言实现)
  • c语言之mbedtls ssl client代码示例
  • 10.4 模型服务化部署:从实验室到生产环境
  • Buzz转录故障排查全攻略:从紧急修复到性能优化
  • 2026年首月杭州GEO公司核心性能实测:系统稳定性与引流转化效果的综合绩效排名 - 品牌推荐
  • 告别绘图烦恼!Mermaid图表工具让你用文字轻松创作专业图表
  • 智能内容解锁工具:终极免费阅读解决方案完整指南
  • 2026年广州GEO优化公司推荐:工业制造场景深度评价,针对精准询盘增长核心痛点 - 品牌推荐
  • DownKyi:B站视频下载的终极免费解决方案
  • Office功能区定制终极指南:零代码打造专属办公界面
  • 导师推荐!研究生必备!8款一键生成论文工具TOP8测评
  • D3DCompiler_47.dll丢失找不到怎么办? 免费下载方法分享
  • 政务站群程序如何配置百度富文本编辑器的PDF目录提取?
  • 基于ssm+vue的景区售票系统[ssm]-计算机毕业设计源码+LW文档
  • 5分钟精通Windows热键冲突排查:热键侦探实战手册
  • 基于ssm+vue的大学迎新系统[ssm]-计算机毕业设计源码+LW文档
  • 军工保密系统如何安全导入Word文档到百度富文本编辑器?
  • 2026年河南弯管机生产商排名,为你筛选优质厂家 - 工业品牌热点
  • 2026年苏州GEO优化公司推荐:企业AI搜索生态构建深度评测与排名解析 - 品牌推荐
  • 【Python毕设源码分享】基于Python的医疗预约与诊断系统的设计与实现(程序+文档+代码讲解+一条龙定制)