1. 引言
上一篇文章中,我们介绍了 linux 调度器的演进:
linux 进程调度器(下) -- 调度器演进
在上一篇文章中,我们知道,到 Linux 2.6.23 版本后,linux 实际上维护了一组调度器来实现不同的调度需要,它们被分为了四层:
- DL 调度器:采用 sched_deadline 策略;
- RT 调度器:采用 sched_rr 和 sched_fifo 策略;
- CFS 调度器:采用 sched_normal 和 sched_batch 策略;
- IDEL 调度器:采用 sched_idle 策略。
那么,我们怎么才能让我们的进程被不同层的调度器调度呢?那就需要使用 linux 提供的十分有用的工具 -- chrt 来实现了,本文我们就来介绍一下这个命令的使用。
2. chrt 命令的介绍
chrt 命令是 linux 提供的一个底层应用指令,它可以在运行时设置进程的某些属性,还可以更改调度策略和调度优先级。
它的使用方式是:
$ chrt [options] -p [priority] pid
看起来用法非常简单,chrt 最简单的使用方法是查询,这个场景下不需要传递 options 和 priority:
可以看到,该进程的 priority 是 0,调度策略是 SCHED_OTHER,也就是默认策略,由 CFS 调度器基于 SCHED_NORMAL 策略调度。
3. chrt help
通过 chrt --help
命令,就可以看到全部参数的说明:
实际上,这套说明已经是十分清晰了。
4. chrt 的 options
chrt 的 options 有五种选择,分别对应了上一篇文章中介绍的四层调度器的五个策略:
- SCHED_DEADLINE:仅供系统使用的 DL 调度器使用的策略,用户不能选择;
- SCHED_FIFO:使用 RT 调度器的 sched_fifo 策略,先入先出任务队列;
- SCHED_RR:使用 RT 调度器的 sched_rr 策略,采用轮询机制实现调度算法;
- SCHED_OTHER:使用 CFS 调度器的 sched_other 策略,使用默认的 time_sharing 计划算法;
- SCHED_BATCH:使用 CFS 调度器的 sched_batch 策略,采用批处理算法批量提交任务和执行;
- SCHED_IDLE:使用 IDLE 调度器的 sched_idle 策略。
5. chrt 的 priority
通过 chrt -m
命令,可以查看 chrt 不同的调度策略下,用户可选的优先级范围:
priority 就是能够在一定程度上影响调度优先级的 nice 值,尽管只有 SCHED_FIFO 和 SCHED_RR 两个调度器可以让我们去指定,因为 RT 调度器是采用传统的 O(1) 调度算法来实现的基于时间片调度的策略的。