CentOS进程调度策略主要分为实时和非实时两类,由内核调度器根据策略和优先级分配CPU资源,以下是核心解析:
一、实时调度策略
特点:优先级高,保证实时性,适用于对响应速度要求严格的场景(如工业控制、音视频处理)。
-
SCHED_FIFO(先进先出)
- 按进程进入就绪队列的顺序执行,先到先得,直到任务完成或被更高优先级进程抢占。
- 优先级范围:1-99(数值越小优先级越高),默认0保留给内核。
- 特性:无时间片,一旦运行除非主动放弃或被抢占,否则持续占用CPU。
-
SCHED_RR(时间片轮转)
- 为每个实时进程分配固定时间片,时间片用完后进程进入就绪队列尾部,等待下一次调度。
- 优先级范围:1-99,支持相同优先级进程的公平调度,避免单个进程长时间独占CPU。
二、非实时调度策略
特点:优先级较低,注重公平性和资源利用率,适用于普通任务和批处理场景。
-
SCHED_NORMAL(默认策略)
- 基于CFS(完全公平调度器),通过红黑树管理进程,根据**虚拟运行时间(vruntime)**排序,运行时间短的进程优先执行。
- 动态优先级:通过
nice
值(-20~19)调整权重,nice
值越小优先级越高(默认0)。
- 时间片轮转:相同优先级进程按时间片轮流执行,保证多任务公平性。
-
SCHED_BATCH
- 适用于CPU密集型批处理任务,不抢占实时进程,但会尽量避免频繁调度以提升吞吐量。
-
SCHED_IDLE
- 仅在系统空闲时运行,优先级极低,用于后台低负载任务。
-
SCHED_DEADLINE(RHEL 8+)
- 基于任务的截止时间(Deadline)调度,确保关键任务在指定时间内完成,适合实时性要求严格的场景(如视频流处理)。
三、关键工具与操作
- 查看调度策略:
chrt -p <pid>
:显示进程的调度策略和优先级。
- 设置调度策略:
chrt -f <优先级> -p <pid>
:设置为FIFO策略;-r
设置RR策略;-o
设置普通策略。
- 调整进程优先级:
nice -n <值> <命令>
:启动时设置nice
值;renice <值> -p <pid>
:修改运行中进程的优先级。
四、注意事项
- 实时策略(FIFO/RR)需谨慎使用,高优先级进程可能导致系统无响应。
- 批处理任务建议使用
SCHED_BATCH
,避免频繁调度影响性能。
- 多核环境下可通过
cgroups
或taskset
绑定进程到特定CPU,提升缓存命中率。
参考来源: