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。