大规模基础设施管理与谷歌云平台应用指南
1. CPU 调度
CPU 调度是在处理器上调度作业的过程,内核的任务是确保 CPU 尽可能忙碌。调度类别分为实时和正常两类:
- 实时调度 :包含 SCHED_FIFO 和 SCHED_RR。
- 正常调度 :包含 SCHED_OTHER、SCHED_BATCH 和 SCHED_IDLE。
实时线程会使用实时 CPU 调度器优先调度,而正常调度器用于不需要实时处理的线程。在大规模计算中,可能需要调整 CPU 调度策略。可以通过关注 nonvoluntary_ctxt_switches
参数来判断是否需要调整,示例代码如下:
# grep voluntary /proc/1/status
voluntary_ctxt_switches: 136420
nonvoluntary_ctxt_switches: 59
如果非自愿上下文切换次数较高,可能需要考虑更改调度器。对于与网络带宽和磁盘输入/输出相关的数据吞吐量,可使用 SCHED_OTHER 调度器;如果关注延迟问题,则使用 SCHED_FIFO 调度器。正常策略通常比实时策略能带来更好的吞吐量,因为正常策略不会像实时调度器那样为确保实时处理而抢占进程。
可以使用 chrt
命令来操作进程的调度策略,以下是操作示例: