chrt 命令:设置/操作 Linux 进程的实时属性
问:如何在 Linux 操作系统下使用 shell 提示符设置进程的实时调度优先级?
A.您可以使用 chrt 命令来设置或检索现有 PID 的实时调度属性/调度优先级。您还可以使用给定的属性运行 COMMAND。
了解 Linux 调度优先级
手册页中写道:
调度程序是内核的一部分,它决定下一个由 CPU 执行哪个可运行进程。Linux 调度程序提供三种不同的调度策略,一种用于普通进程,两种用于实时应用程序。
- SCHED_OTHER – 大多数进程使用的默认通用分时调度策略。
- SCHED_FIFO或SCHED_RR – 适用于需要精确控制选择可运行进程执行方式的特殊时间关键型应用程序
- SCHED_BATCH – 用于以“批处理”方式执行进程
调度算法
- SCHED_FIFO 使用先进先出调度算法
- SCHED_RR 使用 Round Robin 调度算法
- SCHED_OTHER 使用默认的 Linux 分时调度算法
- SCHED_BATCH 使用调度批处理进程算法
util-linux 包
chrt 命令是util-linux 包的一部分- Linux 系统运行所必需的低级系统实用程序。它默认安装在 Debian / Ubuntu / CentOS / RHEL / Fedora 和几乎所有其他 Linux 发行版下。
如何使用 chrt 命令获取Linux进程的实时属性?
要获取/检索现有任务/PID 的实时属性,请输入:
输出:
# chrt -p pid
# chrt -p 112
# chrt -p 1
pid 1's current scheduling policy: SCHED_OTHER pid 1's current scheduling priority: 0
任何用户都可以检索调度信息。无需特殊权限。
如何使用 chrt 命令设置Linux进程(已运行的进程)的实时属性?
使用如下语法设置新的优先级:
在设置新的调度策略之前,需要找出每种调度算法的最小和最大有效优先级,输入:
输出:
# chrt -p prio pid
# chrt -p 1025
# chrt -p 55 1025
# chrt -p 1025
# chrt -m
SCHED_OTHER min/max priority : 0/0 SCHED_FIFO min/max priority : 1/99 SCHED_RR min/max priority : 1/99 SCHED_BATCH min/max priority : 0/0
如何设置 SCHED_BATCH 调度策略?
要将调度策略设置为 SCHED_BATCH,请输入:
# chrt -b -p 0 {pid}
# chrt -b -p 0 1024
如何设置 SCHED_FIFO 调度策略?
要将调度策略设置为 SCHED_FIFO,请输入:
# chrt -f -p [1..99] {pid}
将策略设置为 SCHED_FIFO,优先级为 50:
# chrt -f -p 50 1024
# chrt -p 1024
如何设置 SCHED_OTHER 调度策略?
要将策略调度策略设置为 SCHED_OTHER,请输入:
# chrt -o -p 0 {pid}
# chrt -o -p 0 1024
# chrt -p 1024
如何设置 SCHED_RR 调度策略?
要将调度策略设置为 SCHED_RR,请输入:
# chrt -r -p [1..99] {pid}
将策略设置为 SCHED_RR 调度,优先级为 20:
# chrt -r -p 20 1024
# chrt -p 1024
进一步阅读:
如果您运行 CPU 密集型进程,则应该熟悉其他工具:
- 使用修改后的调度优先级来运行程序的好命令
- renice 命令用于改变正在运行的进程的优先级
- taskset 命令用于检索或设置进程的 CPU 亲和性
- 手册页 nice、renice、chrt、taskset、sched_setaffinity 和 sched_setscheduler