是否需要实时调度取决于任务能否容忍延迟,而非进程执行快慢;Linux提供SCHED_FIFO和SCHED_RR两种实时策略,优先级1–99,需配置rlimit及内核选项方可启用。

实时性要求的核心判断标准
Linux中是否需要实时调度,不取决于“进程快不快”,而取决于“任务能否容忍延迟”。比如工业PLC控制、音频流处理、高频交易等场景,若关键操作超过几十微秒未执行,就可能引发物理设备异常或数据丢失。此时必须用Realtime调度策略;普通Web服务、数据库查询即使响应慢几百毫秒,通常也不属于实时范畴。
Linux支持的实时调度策略
内核提供两种实时调度类:SCHED_FIFO 和 SCHED_RR,均优先级高于所有普通进程(SCHED_OTHER)。区别在于:
- SCHED_FIFO:同优先级下先到先服务,不主动让出CPU,直到阻塞、退出或被更高优先级抢占
- SCHED_RR:带时间片的轮转式FIFO,用完时间片后让给同优先级其他实时进程
注意:实时优先级范围是1–99(数值越大优先级越高),而普通进程优先级(nice值)完全不参与该排序,仅在实时进程全部让出CPU时才获得调度机会。
启用Realtime调度的必要配置
默认情况下,非特权用户无法设置实时策略,需确认并调整以下三项:
-
检查rlimit限制:运行 ulimit -r 查看当前实时优先级上限。若显示“0”,说明被禁止;需修改 /etc/security/limits.conf,添加类似行:
* soft rtprio 99
* hard rtprio 99 - 确认内核支持:执行 grep CONFIG_RT_GROUP_SCHED /boot/config-$(uname -r),返回 CONFIG_RT_GROUP_SCHED=y 表示启用组调度支持(非必需但推荐)
- 避免禁用实时功能:某些发行版(如RHEL/CentOS)可能通过 -1 可取消限制(需root权限)
安全设置实时进程的典型步骤
以一个音频处理程序 audio_proc 为例,按顺序操作:
- 确保用户已加入 realtime 组或具备 CAP_SYS_NICE 能力
- 启动前设置策略与优先级:chrt -f 80 ./audio_proc(使用SCHED_FIFO,优先级80)
- 验证是否生效:chrt -p $(pgrep audio_proc) 或查看 /proc/PID/status 中的 Tgid 和 Shd 字段
- 避免长时间独占CPU:代码中应合理调用 sched_yield() 或短暂休眠,防止饿死系统其他关键线程(如watchdog、kthreadd)











