转载请注明出处:小锋学长生活大爆炸[xfxuezhagn.cn]
如果本文帮助到了你,欢迎[点赞、收藏、关注]哦~
关键指令
sudo chrt -f <优先级> <指令>
示例脚本
当然也可以不是启动Python脚本,普通的指令都可以,可自行适当修改。
#!/bin/bash
# 默认参数值
DEFAULT_CHRT_PRIORITY=99
# 必须是绝对路径
DEFAULT_PYTHON="/home/anaconda3/envs/abc/bin/python"
# 脚本名称
DEFAULT_SCRIPT="train.py"
# 解析命令行参数
while getopts "c:p:s:" opt; do
case $opt in
c) CHRT_PRIORITY=$OPTARG ;;
p) PYTHON=$OPTARG ;;
s) SCRIPT=$OPTARG ;;
\?) echo "Invalid option -$OPTARG" >&2 ;;
esac
done
# 设置默认值,如果没有提供参数
CHRT_PRIORITY=${CHRT_PRIORITY:-$DEFAULT_CHRT_PRIORITY}
PYTHON=${PYTHON:-$DEFAULT_PYTHON}
SCRIPT=${SCRIPT:-$DEFAULT_SCRIPT}
# 启动训练脚本并设置实时调度策略和优先级
sudo chrt -f $CHRT_PRIORITY $PYTHON $SCRIPT
# 获取并显示进程ID (PID)
SCRIPT_PID=$!
echo "Started script with PID: $SCRIPT_PID"
参数解释
CHRT_PRIORITY=10
:设置实时调度策略的优先级为 10。sudo chrt -f $CHRT_PRIORITY $PYTHON $SCRIPT
:使用 SCHED_FIFO 调度策略和设置的优先级来启动 Python 脚本。TRAIN_PID=$!
:获取最后一个放到后台运行的进程的 PID。echo "Started training script with PID: $TRAIN_PID"
:显示启动的进程的 PID。
使用示例
sudo bash script.sh -c 50 -p /path/to/your/python -s your_script.py
nice与chrt的区别
这两个指令都可以用来调整进程的优先级,但略有区别。
nice
命令
- 功能:
nice
命令用于启动一个进程并设置其静态优先级(nice 值)。 - 优先级范围:
nice
值的范围从 -20 到 19,-20 表示最高优先级,19 表示最低优先级。默认值为 0。 - 调度策略:
nice
命令不会更改进程的调度策略,仅调整其在默认调度策略(通常是 CFS,即 Completely Fair Scheduler)中的优先级。 - 使用场景: 适用于大多数普通用户程序,用于调整程序的优先级,以便系统更合理地分配资源。
chrt
命令
- 功能:
chrt
命令用于设置或更改进程的调度策略和实时优先级。 - 调度策略:
chrt
提供多种调度策略,包括 SCHED_OTHER、SCHED_FIFO、SCHED_RR、SCHED_BATCH、SCHED_IDLE 和 SCHED_DEADLINE。最常用的是实时调度策略 SCHED_FIFO 和 SCHED_RR。 - 优先级范围: 实时优先级范围从 1 到 99,1 为最低优先级,99 为最高优先级。非实时调度策略通常使用 nice 值。
- 使用场景: 适用于需要高优先级和严格调度的实时应用程序,例如音频处理、视频处理或其他时间敏感的任务。
非实时调度和实时调度策略的区别
非实时调度策略
非实时调度策略适用于大多数普通用户程序,操作系统会尽量公平地分配 CPU 时间给所有进程。这些策略包括:
- SCHED_OTHER: 这是默认的调度策略(也称为 CFS, Completely Fair Scheduler),用于普通进程。
- SCHED_BATCH: 适用于批处理任务,减少交互性以提高吞吐量。
- SCHED_IDLE: 适用于最低优先级的任务,只有在系统空闲时才运行。
特点
- 公平性: 系统尽量公平地分配 CPU 时间给所有进程。
- 交互性: 优先考虑交互式任务,确保良好的用户体验。
- 适用性: 适用于大多数普通任务,不需要严格的时间限制。
实时调度策略
实时调度策略用于需要严格时间限制的任务,保证高优先级任务能够在需要时及时执行。这些策略包括:
- SCHED_FIFO (First In, First Out): 实时优先级策略,按照优先级顺序执行,具有相同优先级的进程按照先进先出的顺序执行。
- SCHED_RR (Round Robin): 实时优先级策略,类似于 SCHED_FIFO,但在同一优先级上使用时间片轮转调度。
- SCHED_DEADLINE: 最严格的实时调度策略,基于任务的绝对截止时间进行调度。
特点
- 确定性: 高优先级任务可以在需要时及时执行,具有较高的响应性。
- 严格性: 确保实时任务在规定时间内完成。
- 适用性: 适用于音频处理、视频处理、机器人控制等需要实时响应的任务。