linux-sre-handbook

02-进程调度与优先级

调度策略

完全公平调度 (CFS)

Linux 默认调度类,基于虚拟运行时间 (vruntime):

# 查看调度器
cat /sys/kernel/debug/sched_features

# 查看进程调度信息
cat /proc/<PID>/sched
cat /proc/<PID>/schedstat

实时调度

chrt -p <PID>                    # 查看调度策略
chrt -f -p 50 <PID>              # 设置为 SCHED_FIFO, 优先级 50
chrt -r -p 50 <PID>              # 设置为 SCHED_RR
策略 说明 风险
SCHED_OTHER (CFS) 默认分时 安全
SCHED_BATCH 批处理,不抢占 适合后台
SCHED_IDLE 极低优先级 仅在空闲时运行
SCHED_FIFO 实时 FIFO, 无时间片 可能饿死其他进程
SCHED_RR 实时轮转, 有时间片 比 FIFO 温和

Nice 值与优先级

nice -n 10 command               # 低优先级启动
nice -n -20 command              # 最高优先级 (需 root)
renice -n 5 -p <PID>             # 调整运行中进程

CPU 亲和性 (Affinity)

taskset -pc <PID>                # 查看进程 CPU 亲和性
taskset -c 0,2 command           # 绑定到 CPU 0 和 2
taskset -p 0x3 <PID>             # 位掩码: 0b0011 = CPU 0,1

# systemd 中配置
# CPUAffinity=0 2

用途:减少缓存失效 (cache miss),避免进程在核心间迁移。

进程优先级决策

需要低延迟的实时任务? → SCHED_FIFO + 高优先级
关键服务 (数据库)?     → 负 nice 值 + CPU 亲和性
批处理/后台任务?      → SCHED_BATCH
不重要的任务?         → 正 nice 值 / SCHED_IDLE

延伸阅读