首页/系统/Linux 内核与性能调优速查/chrt 设置调度策略与优先级
CPU 与调度60 条

chrt 设置调度策略与优先级

查看或设置进程调度策略:FIFO(-f)/RR(-r)/BATCH(-b)/IDLE(-i)/OTHER(-o);-p 改运行中进程,直接带命令则启动新进程。

chrt 是干什么的

chrt 用于查看或设置进程的调度策略与优先级。策略包括 SCHED_FIFO(-f,实时先进先出)、SCHED_RR(-r,实时轮转)、SCHED_BATCH(-b,批处理)、SCHED_IDLE(-i,仅在系统完全空闲时运行)与 SCHED_OTHER(-o,默认的普通分时策略)。带 -p 修改已运行的进程,不带 -p 则按指定策略启动新进程。实时优先级范围 1 到 99,数值越大优先级越高。

基本信息

实时优先级1 到 99,数值越大越高,高于所有普通任务
查看现状chrt -p <pid>
修改运行中进程chrt -f -p 50 <pid>
启动新进程chrt -b 0 ./backup.sh
权限设置实时策略需要 CAP_SYS_NICE 或 root

典型使用场景

  • 低延迟进程需要稳定及时的调度机会
  • 把批处理任务降级,减少对交互任务的影响
  • 非关键任务放到 SCHED_IDLE,只在系统空闲时运行
  • 排查实时任务导致的系统整体响应变差
  • 为音视频或网络收发进程设置 FIFO/RR 策略

常用操作

常用操作
chrt -p 12345              # 查看现有策略与优先级
chrt -p -m 12345           # 以策略名称形式查看
chrt -f -p 50 12345        # 改为 SCHED_FIFO,优先级 50
chrt -r -p 10 12345        # 改为 SCHED_RR,优先级 10
chrt -b 0 ./backup.sh      # 以批处理策略启动备份任务
chrt -i 0 ./idle-worker    # 仅在系统空闲时运行
taskset -c 2 chrt -f 99 ./realtime-task   # 常见组合:实时策略加绑核
chrt -o -p 0 12345         # 恢复为默认分时策略

调度策略对照

策略选项说明
SCHED_FIFO-f实时先进先出,同优先级不互相抢占,直到阻塞或主动让出
SCHED_RR-r实时轮转,同优先级按时间片轮流运行
SCHED_OTHER-o默认分时策略,配合 nice 调整相对份额
SCHED_BATCH-b批处理,唤醒频率更低,适合吞吐型任务
SCHED_IDLE-i仅在系统完全空闲时运行,优先级最低
实时策略的优先级高于系统上所有普通线程,设置不当可能饿死关键服务,改前先记录原策略以便回退。
实时任务的运行时间受实时带宽参数约束,跑满带宽后会被限流,表现为周期性卡顿,并不是无限制独占 CPU。

易错点

  • 把实时优先级设得过高:会饿死内核线程与关键服务,系统可能失去响应
  • 把 SCHED_IDLE 当普通低优先级用:它在系统完全空闲前几乎不运行,任务可能长时间不推进
  • 不记录原策略:出问题后无法准确回退到改动前的设置
  • 忘记实时带宽限制:RT 任务被限流后表现为周期性卡顿,容易被误判为应用缺陷
  • 多线程服务只改主线程:子线程仍是原策略,实际效果与预期不符

数据来源与参考

  • util-linux 文档 chrt(1)
  • Linux 内核 Documentation/scheduler/sched-rt-group.rst
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌