linux 系统调度器(四) -- 利用 chrt 命令查询与修改进程调度器

2022-09-23 08:30:54 浏览数 (1)

1. 引言

上一篇文章中,我们介绍了 linux 调度器的演进:

linux 进程调度器(下) -- 调度器演进

在上一篇文章中,我们知道,到 Linux 2.6.23 版本后,linux 实际上维护了一组调度器来实现不同的调度需要,它们被分为了四层:

  1. DL 调度器:采用 sched_deadline 策略;
  2. RT 调度器:采用 sched_rr 和 sched_fifo 策略;
  3. CFS 调度器:采用 sched_normal 和 sched_batch 策略;
  4. 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 有五种选择,分别对应了上一篇文章中介绍的四层调度器的五个策略:

  1. SCHED_DEADLINE:仅供系统使用的 DL 调度器使用的策略,用户不能选择;
  2. SCHED_FIFO:使用 RT 调度器的 sched_fifo 策略,先入先出任务队列;
  3. SCHED_RR:使用 RT 调度器的 sched_rr 策略,采用轮询机制实现调度算法;
  4. SCHED_OTHER:使用 CFS 调度器的 sched_other 策略,使用默认的 time_sharing 计划算法;
  5. SCHED_BATCH:使用 CFS 调度器的 sched_batch 策略,采用批处理算法批量提交任务和执行;
  6. SCHED_IDLE:使用 IDLE 调度器的 sched_idle 策略。

5. chrt 的 priority

通过 chrt -m 命令,可以查看 chrt 不同的调度策略下,用户可选的优先级范围:

priority 就是能够在一定程度上影响调度优先级的 nice 值,尽管只有 SCHED_FIFO 和 SCHED_RR 两个调度器可以让我们去指定,因为 RT 调度器是采用传统的 O(1) 调度算法来实现的基于时间片调度的策略的。

0 人点赞