首页/系统/Linux 内核与性能调优速查/sched_rr_timeslice_ms 轮转时间片
CPU 与调度60 条

sched_rr_timeslice_ms 轮转时间片

SCHED_RR 每个时间片的长度(默认 100ms);FIFO 不轮转,RR 在片用完或更高优先级任务到来时让出。

什么是 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 带宽与实时任务清单。
绑定中断亲和性之后,实时任务与中断争抢同一个核的情况更容易出现;评估调度参数时把中断分布一并看,才能解释延迟尖峰的来源。

易错点

  • RR 与 FIFO 优先级高于所有普通任务,先确认系统里谁在用 RT 策略,否则调参等于在改动业务延迟的边界
  • 时间片与 RT 带宽限制共同决定行为,排查 RT 延迟要两者一起看,只调时间片容易误判
  • 把普通任务问题归结为调度策略:多数延迟问题来自 IO、锁与内存回收,而非 RR 时间片
  • 忽略不同内核版本的默认值与限制差异,跨版本迁移后行为可能发生变化

数据来源与参考

  • Linux 内核 Documentation/scheduler/sched-rt-group.rst
  • Linux 内核源码 kernel/sched/rt.c
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌