PBS(Portable Batch System)最初由NASA的Ames研究中心开发,主要为了提供一个能满足异构计算网络需要的软件包,用于灵活的批处理,特别是满足高性能计算的需要,如集群系统、超级计算机和大规模并行系统。
PBS是功能最为齐全, 历史最悠久, 支持最广泛的本地集群调度器之一。PBS的主要特点有:代码开放,免费获取;支持批处理、交互式作业和串行、多种并行作业,如MPI、PVM、HPF、MPL。
PBS的目前包括:openPBS, PBS Pro和Torque三个主要分支.
OpenPBS:是最早的PBS系统, 目前已经没有太多后续开发
PBS pro:是PBS的商业版本, 功能最为丰富
Torque:是Clustering公司接过了OpenPBS, 并给与后续支持的一个开源版本
应用PBS提交任务则会形成任务队列,依次执行,有效分配资源,避免资源竞争。否则CPU时间片会轮流分配给各个人的任务,从而影响所有人的正常作业。
torque主要由三个主要部件组成:
PBS服务守护进程: pbs_server 负责接收作业提交,位于服务节点
PBS调度守护进程: pbs_sched 负责调度作业,位于服务节点
PBS MOM守护进程: pbs_mom 负责监控本机并执行作业,位于所有计算节点
PBS 是公开源代码的作业管理系统,pbspro是著名的open PBS的商业版。
https://github.com/PBSPro/pbspro/releases
https://github.com/PBSPro/pbspro/blob/master/LICENSE
Open Source License for PBS Professional
Copyright (C) 1994-2019 Altair Engineering, Inc.
For more information, contact Altair at www.altair.com.
This file is part of the PBS Professional (“PBS Pro”) software.
Open Source License Information:
PBS Pro is free software. You can redistribute it and/or modify it under the
terms of the GNU Affero General Public License as published by the Free
Software Foundation, either version 3 of the License, or (at your option) any
later version.
PBS Pro is distributed in the hope that it will be useful, but WITHOUT ANY
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
FOR A PARTICULAR PURPOSE.
See the GNU Affero General Public License for more details.
PBS作业调度详解
1、PBS环境变量
环境变量 | 说明 |
PBS_ENVIRONMENT | 批处理作业为PBS_BATCH,交互式作业为PBS_INTERACTIVE |
PBS_JOBID | PBS系统给作业分配的标识号 |
PBS_JOBNAME | 用户指定的作业名称 |
PBS_NODEFILE | 包含作业所用计算节点的主机名 |
PBS_QUEUE | 作业所执行的队列名称 |
PBS_O_HOME | 执行qsub命令的HOME环境变量值 |
PBS_O_PATH | 执行qsub命令的PATH环境变量值 |
PBS_O_SHELL | 执行qsub命令的SHELL环境变量值 |
PBS_O_HOST | 执行qsub命令节点名称 |
PBS_O_QUEUE | 提交的作业的最初队列名称 |
PBS_O_WORKDIR | 执行qsub命令所在的绝对路径 |
2、PBS作业属性
属性 | 取值 | 说明 |
-l | 以逗号分隔的资源列表 | 设定作业所需资源 |
-N | 作业名称 | 设定作业名称 |
-o | 文件路径 | 设定作业的标准输出文件路径 |
-e | 文件路径 | 设定作业的标准错误文件路径 |
-p | -1024到+1023之间的整数 | 设定作业优先级,越大优先级越高 |
-q | 队列名称 | 设定作业队列名称 |
3、作业资源设置
资源 | 取值 | 说明 |
nodes | 节点资源构型 | 设定作业所需计算节点资源 |
walltime | Hh:mm:ss | 设定作业所需的最大wallclock时间 |
cput | Hh:mm:ss | 设定作业所需的最大CPU时间 |
mem | 正整数,后面可跟b,kb,mb,gb | 设定作业所需的最大内存 |
ncpus | 正整数 | 设定作业所需的CPU数目 |
例如:
nodes=2:ppn=28,即设定该作业所需2个节点,每个节点使用28核。
Nodes=node1:ppn=10+node2:ppn=10,设定node1中10个核核node2中10个核计算。
脚本:
#!/bin/bash
#PBS -l nodes=1:ppn=4
#PBS -l walltime=1500:00:00
#PBS -j oe
#PBS -q batch
source /public/software/profile.d/mpi_openmpi-intel-2.1.2.sh
nodecpu=’cat /proc/cpuinfo|grep processor|wc -l’
Id=’echo $PBS_JOBID | awk -F. ‘{print $1}’’
NP=’cat $PBS_NODEFILE|wc -l’
echo “The Jobbed is $id”
echo “Worker dir is $PBS_O_WORKDIR”
cat $PBS_NODEFILE
echo “begin time is ‘date’”
cd $PBS_O_WORKDIR
mpirun -np 4 vasp_std
echo “End time is ‘date’”
重点参数解释:
source /public/software/profile.d/mpi_openmpi-intel-2.1.2.sh 表示openmpi生效
nodecpu=’cat /proc/cpuinfo|grep processor|wc -l’ 反引号内为计算系统可用的cpu核数目,然后赋值给变量nodecpu
NP=’cat $PBS_NODEFILE|wc -l’ 计算申请的CPU核数量,赋值给NP
echo “Worker dir is $PBS_O_WORKDIR” 输出字符串worker dir is和脚本所在路径
cat $PBS_NODEFILE 输出作业所用计算节点的主机名
echo “begin time is ‘date’” 输出作业开始时间
cd $PBS_O_WORKDIR 进入所在的路径
echo “End time is ‘date’” 输出作业停止时间
4、常用的作业控制命令
qsub:提交作业
qdel:取消作业
qsig:给作业发送信号
qhold:挂起作业
qrls:释放挂起的作业
qrerun:重新运行作业
qmove:将作业移动到另一个队列
qalter:更改作业资源属性
qsig -s KILL 1010 停止1010作业
qdel -p
强制删除作业(当某些作业由于节点死机无法删除时,可由root用户登录,使用qdel -p 作业号来删除作业)
5、作业检测
qstat [选项][作业号]
选项
-f:列出指定作业的信息
-a:列出系统所有作业
-i:列出不在运行的作业
-n:列出分配给此作业的结点
-B:列出PBS Server信息
-q:列出队列状态
-r:列出所有正在运行的作业
6、作业状态
B:只用于作业向量,表示作业向量已经开始执行
E:作业再运行后退出
H:作业被服务器或用户或者管理员阻塞
Q:作业正在排队中,等待被调度运行
R:作业正在运行
S:作业被服务器挂起,由于一个更优先级的作业需要当前作业的资源
T:作业被转移到其他执行节点了
U:由于服务器繁忙,作业被挂起
W:作业在等待它所请求的执行时间的到来(qsub -a)
X:只用于子作业,表示自作业完成
C:作业完成
- 其他几个作业命令
- pestat命令 用于查看计算节点使用情况
state表示节点状态,主要有以下几点参数
Excl:所有CPU资源已被占用
Busy:CPU已接近满负荷运行
Free:全部或部分CPU空闲
Offl:管理员手动指定离线状态
- Showq命令 用于查看所有作业
- Pbsnodes命令 用于列出集群中所有节点的状态和属性
《PBS简介 – PBS作业调度详解》有1条评论