什么是 RR 时间片
SCHED_RR 是实时调度策略中的轮转模式:同优先级的实时任务按时间片轮流占用 CPU,时间片用完或被更高优先级任务抢占时让出。kernel.sched_rr_timeslice_ms 设定这个时间片的长度,默认 100 毫秒。与之相对,SCHED_FIFO 同优先级任务会一直运行到主动让出或阻塞而不轮转;普通任务则使用 SCHED_OTHER(CFS/EEVDF)。实时任务的总占用还受带宽限制(sched_rt_runtime_us 与 sched_rt_period_us)约束。
基本信息
| 参数路径 | kernel.sched_rr_timeslice_ms |
|---|---|
| 默认值 | 100(毫秒) |
| 相关策略 | SCHED_FIFO(不轮转)、SCHED_OTHER(普通任务) |
| 带宽限制 | kernel.sched_rt_runtime_us / sched_rt_period_us |
| 查看策略 | ps -eo pid,cls,rtprio,comm 或 chrt -p <pid> |
| 生效范围 | 内核全局,影响所有 RR 任务 |
典型使用场景
- 音频与采集类任务:多个同优先级实时任务需要轮流执行
- 排查实时任务互相饿死:FIFO 与 RR 的选择是关键
- 调整实时任务响应间隔:评估时间片长度对切换频率的影响
- 核对 RT 带宽:确认实时任务总占用没有超过限制
- 故障复盘:确认延迟尖峰是否来自实时任务抢占
查看与观测
查看与观测
sysctl kernel.sched_rr_timeslice_ms # 当前时间片
sysctl kernel.sched_rt_runtime_us kernel.sched_rt_period_us
ps -eo pid,cls,rtprio,comm | awk '$2=="RR" || $2=="FF"' # 谁是实时任务
chrt -p <pid> # 单进程策略与优先级
top -b -n1 -o %CPU | head -12 # 结合 CPU 占用观察
cat /proc/sched_debug 2>/dev/null | head -20 # 调度器调试视图(部分内核需开启)调度策略对比
| 策略 | 轮转 | 典型用途 |
|---|---|---|
| SCHED_FIFO | 不轮转,运行到阻塞或让出 | 单任务硬实时 |
| SCHED_RR | 按时间片轮转 | 多个同优先级实时任务 |
| SCHED_OTHER | 按权重公平调度 | 绝大多数普通业务 |
| SCHED_BATCH/IDLE | 低优先级处理 | 批处理与空闲任务 |
修改时间片前先确认系统里确实有 RR 任务在运行(ps 的 cls 列为 RR),没有实时任务的机器上调这个值不会有任何效果。
RR 与 FIFO 的优先级都高于所有普通任务:实时任务出现异常忙等会直接造成业务停顿,排查这类问题要同时看 RT 带宽与实时任务清单。
绑定中断亲和性之后,实时任务与中断争抢同一个核的情况更容易出现;评估调度参数时把中断分布一并看,才能解释延迟尖峰的来源。