温馨提示×

Debian进程的调度算法有哪些

小樊
40
2025-12-10 17:20:57
栏目: 智能运维

debian进程调度算法概览

debian基于linux内核,进程调度由内核提供多种“调度策略”(scheduling policies)。现代内核以**完全公平调度器(cfs)**作为普通进程的默认调度器,并按“调度类”分层:stop_sched_class > dl_sched_class > rt_sched_class > fair_sched_class > idle_sched_class,按此顺序挑选下一个要运行的任务,因此实时与截止期任务总是优先于普通任务执行。

调度策略一览

策略 用途与对象 核心机制 关键特性
sched_normal(sched_fair) 普通交互与后台任务 cfs以vruntime为键的红黑树维护就绪队列,按权重分配cpu时间 公平、可抢占、支持cgroup组调度
sched_batch 批处理/非交互负载 基于cfs,降低唤醒抢占敏感性,倾向于更长运行 降低交互干扰,提高吞吐
sched_idle 极低优先级后台任务 基于cfs,权重极低 仅在系统空闲时运行
sched_fifo 实时任务 无时间片、按优先级队列,先进先出 可被更高优先级抢占,同优先级不抢占
sched_rr 实时任务 时间片轮转,时间片用尽放队尾 同优先级间公平轮转
sched_deadline 有截止期任务 红黑树按绝对截止期排序,选择最早截止任务 面向可预期时延与截止期保证
stop_sched_class / idle_task 内核内部 stop可抢占一切;idle为每cpu空闲线程 用于停机/空闲兜底,不面向普通用户进程

以上策略与调度类在linux/debian中稳定存在,其中cfs自2.6.23起成为默认普通调度器;实时与截止期策略用于满足时延敏感与可预期执行需求。

cfs公平调度要点

  • vruntime度量公平性:权重越高(nice越小),单位真实时间对vruntime的增量越小,因而更常被选;红黑树维护就绪实体,始终选择**最左(最小vruntime)**的实体运行。
  • 不使用固定时间片:以sched_latencymin_granularity控制“运行窗口”和最小运行粒度,配合权重实现按比例的cpu份额;唤醒时通过wakeup_granularity阈值进行适度的抢占,兼顾响应与开销。
  • 支持cgroup组调度:可按进程组分配cpu份额,组内再按成员权重分配,形成层级公平。

历史与演进

  • linux 2.4:基于优先级的**o(n)**调度器,扩展性差。
  • linux 2.6早期:**o(1)**调度器,引入active/expire双数组与位图,查询效率提升到o(1)。
  • 随后引入rdsl/staircase等改进思路,最终演进为cfs作为通用调度器,以公平与简洁为目标并显著提升可扩展性。

查看与设置调度策略的常用方法

  • 查看:使用ps -eo pid,comm,stat,pri,nice,rtprio,cls;其中cls列显示调度类(如ff/rr/dl/idle/fair),rtprio显示实时优先级(非实时为-)。
  • 设置实时策略:chrt命令,例如:
    • 以fifo运行:sudo chrt -f 50 command
    • 以rr运行:sudo chrt -r 50 command
  • 调整普通进程优先级:nice/renice(nice取值范围**-20~19**,数值越大优先级越低、权重越小)。
  • 注意:实时优先级具有更高调度权,错误使用可能影响系统响应与稳定性,生产环境需谨慎。

0