网格计算和SGE
从
概念上讲,网格很简单。它是执行任务的计算资源的集合。对用户而言,它就是一个大系统,提供单个切入点,以访问强大而分散的资源。用户将网格视作单个计算
资源
SGE的工作原理
Sun Grid Engine
软件为用户提供了向
Sun Grid Engine
系统提交要求计算的任务的方法,以透明地分配相关的工作负荷。用户可以向
Sun Grid Engine
系统提交批处理作业、交互式作业和并行作业。
Sun Grid Engine
用以下方式调解可用资源和作业需求。
通过
Sun Grid Engine
系统提交作业的用户描述出作业需求的概况。此外,系统还要检索用户的身份以及他或她与项目或用户组的从属关系。用户提交作业的时间也将存储起来。
SGE的组成
节点(
Hosts
)
后台程序(
Daemons
)
sge_qmaster
–
the Master Daemon
sge_schedd
–
the Scheduler Daemon
sge_execd
–
the Execution Daemon
sge_commd
–
the Communication Daemon
队列(
Queues
)
常用命令
qsub
命令用来向
SGE
提交批处理作业,
SGE
支持单或多节点作业。
qsh
命令用来提交带
xterm
交互式作业,在执行主机上开启
X-windows.
qlogin
命令与
qsh
相似也是提交交互式作业到队列中,只是它不开启
X-windows
,而是利用现在的终端传送
I/O
,该命令与远程主机建立
telnet
连接,使用标准的
server-client
命令
qrsh
命令与
qlogin
类似,与远程主机通过
rsh
连接。
qalter
可用来改变处于
pending
状态的作业属性。
qresub
命令允许用户通过拷贝处于
pengding
或
runing
状态的作业来创建新的作业。新建作业与原作业具有相同的属性,并被分配了新的
job
ID
和
hold
状态。该命令可用来先拷贝一个作业再修改其属性。
qdel 删除任务
qmod 修改队列和任务属性
qstat 查看任务和队列状态
qacct
–
此命令从群集日志文件中抽取任意帐户信息。
qmon
–
此命令为群集和队列配置提供用户界面。
qdel
–
用户、操作人员或管理人员可使用此命令向作业或其子集发送信号。
qhold
–
此命令阻止已提交作业的执行。
qhost
–
此命令显示
Sun Grid Engine
执行主机的状态信息。
qconf 管理队列
qconf 管理队列
qsub常用选项
-a date_time
作业开始运行时间
-b y[es]|n[o]
判断作业指定是二进制文件或
scripts
。
y
:是
n
:
scripts
-display
使用
X-windows
-dl date_time
定义作业到期时间,在作业到期时间之前,作业的优先级会逐步提高,直到管理员指定的最高级别。
-e
指定输出
error
文件的路径及文件名
-hard
定义作业被调度的硬性要求
-h
作业
hold
类型。
u
:表示用户
hold,s:
表示系统
hold
,
o
:表示被操作员
hold
,
n
:取消
hold
,
U
:取消用户
hold
,
S
:取消系统
hold
,
O
:取消操作员
hold
。
-i
定义输入文件
-V
可以使用。
可以使用
-v PWD
来代替
-cwd
-j y[es]|n[o]
定义作业的标准错误输出是否写入的输出文件中
-l resource=value,
表明作业运行所需要的资源。
-m b|e|a|s|n
。定义邮件发送规则。
b
:作业开始时发送。
e
:作业结束时发送。
a
:作业失败时发送
s
:作业挂起时发送。
n
:不发送
-M user[@host]
定义邮件地址
-notify
:定义发送
SIGSTOP or SIGKILL
信号的延迟时间
-now y[es]|n[o]
:立即执行作业
-N
作业名
-o [[hostname]:]path
:定义输出文件路径、文件名
-P project_name
:定义项目名称
-p priority
:定义优先级
-pe parallel_environment
:定义并行环境
-q wc_queue_list
:定义作业运行队列
-R y[es]|n[o]
:定义是否为作业保留资源。
-r y[es]|n[o]
:定义作业失败后是否重新运行
-soft
定义作业被调度的软性要求
-u username,
只有
qlter
命令可以使用该参数。修改作业的用户名
-v variable
:定义环境变量
-verbose
使
qrsh
命令输出信息
-verify
验证作业参数时使用
-V
传递当前命令的所有环境变量
qconf常用选项
% qconf ¨Csql ¨C
显示队列列表
% qconf -sq
队列名
¨C
显示该队列属性
qname
–
所请求的队列名称。
hostname
–
队列所处的主机。
processors
–
多处理器系统中此队列有权访问的处理器。
qtype
–
允许在此队列中运行的作业类型。目前包括批处理作业、交互式作业、点检查作业、并行作业或它们的任意组合或相互转换的作业。
slots
–
可在队列上同时执行的作业数量。
察看队列属性
owner_list
–
队列的拥有者。
user_lists
–
此参数下所列的用户访问列表中标识的用户或组有权访问此队列。
xuser_lists
–
此参数下所列的用户访问列表中标识的用户或组无权访问此队列。
complex_list
–
列于此参数下的属性组与队列相关联,而且这些属性组中所含的属性构成此队列的可请求属性组。
complex_values
–
提供给此队列的某些属性组属性的赋值。
察看主控主机
由于主控主机会随时可能在当前的主控主机和某个影像主控主机之间切换,主控主机的位置对用户来说应该是透明的。
用文本编辑器,打开
/opt/grid-engineer/default/common/act_qmaster
文件。
此文件中有当前主控主机的名称。
显示执行主机
% qconf ¨Csel
显示当前配置为执行主机的所有主机的列表。
% qconf -se
主机名称
显示指定的执行主机的详细信息
% qhost
显示执行主机的状态和负荷信息
显示管理主机
% qconf -sh
显示有管理权限的主机列表
显示提交主机
% qconf -ss
可请求的属性
提
交一个
Sun Grid Engine
作业时,可指定该作业的需求概况。用户可以指定作业所需的主机或队列的属性或特性以保证作业成功运行。
Sun Grid Engine
将这些作业需求映射到
Sun Grid Engine
群集的主机和队列的配置,从而找到适合该作业的主机。
可用的属性包括队列特性列表、全局属性和主机相关属性的列表,以及管理员定义的属性。但是,为方便起见,
Sun Grid Engine
管理员通常只将一个所有可用属性的子集定义为可请求。
显示可请求属性列表
% qconf
–
scl
显示已配置的属性组列表
属性组包含一组属性的定义。有三种标准属性组:
global
–
针对群集全局属性(可选)
host
–
针对主机特有的属性
queue
–
针对队列特性的属性
显示可请求属性列表
% qconf -sc
属性组名称
[,...]
显示某个特定属性组的属性
名称一栏中的显示与
qconf -sq
命令显示的第一栏基本相同
缩写名一栏包含可由管理员定义的第一栏中全名的缩写
可否请求一栏表明是否可将相应的项用于
qsub
关系栏定义关系运算以用于计算队列是否满足用户请求
可否使用栏和缺省值栏对管理员极其有用,管理员可以用它们声明
?°
可使用资源
?±
,。用户可以像请求其它属性一样请求可使用资源
用户访问权限
获得当前配置的
ACL
列表
% qconf -sul
显示一个或多个访问列表中的项
% qconf -su ACL
名称
[,...]
注:
ACL
包含用户帐户名和
UNIX
组名,
UNIX
组名用前缀“
@
”标识出来。这样即可确定您的帐户所属的
ACL
。
从命令行运行简单作业
执行任何
Sun Grid Engine
命令之前,必须设置适当的可执行搜索路径和其它环境条件。
% qsub /opt/grid-engineer/examples/jobs/simple.sh
qsub
命令应确认作业已成功提交:您的作业
1 ("simple.sh")
已提交
% qstat
命令检索作业的状态信息
若
qstat
命令没有产生输出,则系统实际上无已知作业。结果:
simple.sh.o1
和
simple.sh.e1
。
提交批处理作业
Shell
脚本即批处理作业,主要指集成到一个文件中的一系列命令行指令。
chmod
命令可使脚本文件变成可执行文件。一旦调用脚本,即可启动相应的命令解释器(例
如,
csh
、
tcsh
、
sh
或
ksh
),解释每条指令,其结果等同于执行脚本的用户手动输入这些指令。您可以在一个
shell
脚本内调用任意命令、应用程序和其它
shell
脚本。
资源需求定义
实际上要执行主机成功完成作业,大部分作业要求一些先决条件。这些先决条件包括足够的可用内存、安装所需软件或某种操作系统体系结构。而且,群集管理者也经常对群集中的机器加上一些使用限制。例如,作业可使用的
CPU
时间就常常受到限制。
资源需求示例
% qsub -l arch=solaris64,h_vmem=750M,permas=1 \
permas.sh
要求至少有
750 MB
内存的
solaris64
主机,且该主机要有可用的
permas
许可证。
SGE
如何分配资源
资源分配算法
1.
读入并分析所有缺省的请求文件。
2.
处理脚本文件的内嵌选项。
3.
提交作业时读取所有脚本的内嵌选项,而不考虑其在脚本文件中的位置。
4.
从命令行读取和分析所有请求。
SGE
如何分配资源
评估请求优先顺序
1.
脚本
/
缺省请求文件从左到右
2.
脚本
/
缺省请求文件从上到下
3.
命令行从左到右
SGE
如何分配资源
评估请求优先顺序
1.
脚本
/
缺省请求文件从左到右
2.
脚本
/
缺省请求文件从上到下
3.
命令行从左到右
SGE如何分配资源
分配所请求的硬性资源。若请求无效,将拒绝提交。若提交时无法满足一个或多个请求(例如被请求的队列正忙),作业将假脱机,稍后重新调度。若所有硬性请求都能满足,将分配这些资源,作业可以运行。
检查所请求的软性资源。即使部分或全部请求无法满足,作业仍可运行。若多个队列(已满足硬性资源请求)提供了部分软性资源列表(重叠或不同),
Sun GridEngine
软件将选择满足最多软性请求的队列。
提交作业
作业优先级
关
于不同作业的调度过程顺序,缺省情况下应用先进先出
(fifo)
规则。所有暂挂(尚未调度)作业均插入到一个列表中,第一个提交的作业在列表的头部,接下来是第二项提交的作业,等等。首先尝试调度先提交的作业。若至少
有一个可用的合适队列,则作业将得到调度。
Sun Grid Engine
软件此后将试图调度第二项作业,而不论第一项作业是否已分配。暂挂作业中的此优先顺序可通过由群集管理员分配给作业的优先级值覆盖。实际的优先级值可通过
使用
qstat
命令显示(优先级值包含在标题为
P
的暂挂作业显示的最后一栏)
等份额调度
fifo
规则有时会导致问题,尤其是若用户试图同时提交一系列作业的情况下(例如,通过
shell
脚本发出一个接一个的提交)。所有后来提交的和指定到同一组队列的作业均不得不等待很长的时间。等份额调度将已拥有运行作业的用户的作业排列在优先级列表
的结尾,从而避免了这一问题。排序仅在同一优先级值范围的作业中执行。若
Sun Grid Engine
调度程序配置项
user_sort
设置为
TRUE
(请参考
sched_conf
手册页以获得细节),激活等份额调度。
队列选择
Sun Grid Engine
系统不分配请求非特定队列的作业,如果它们不能即时启动的话。此类作业将在
sge_qmaster
中标记为假脱机,该命令会不时尝试重新调度它们。于是,作业将分配给下一个可用的合适队列。与此相反,在请求中指明队列名的作业将直接进入该队列,无论它
们是否能启动者处于假脱机状态。
若作业被调度,并且有多个空闲队列满足其资源请求,则在合适的队列中,通常作业将被分配给负荷最轻的主机上的队列。
群集管理者可将此依赖于负荷的方案更改为固定的顺序算法。
监视和控制SGE作业
原则上,有三种方法可监视提交的作业。
使用
Sun Grid Engine
图形用户界面
QMON
在命令行使用
qstat
命令
通过电子邮件
用
qstat
监视作业
% qstat
提供已提交作业的概述
% qstat -f
另外包含了有关当前配置队列的信息
qstat
job-ID prior name user state submit/start at queue function
231 0 hydra craig r 07/13/96 20:27:15 durin.q MASTER
232 0 compile penny r 07/13/96 20:30:40 durin.q MASTER
230 0 blackhole don r 07/13/96 20:26:10 dwain.q MASTER
233 0 mac elaine r 07/13/96 20:30:40 dwain.q MASTER
234 0 golf shannon r 07/13/96 20:31:44 dwain.q MASTER
236 5 word elaine qw 07/13/96 20:32:07
235 0 andrun penny qw 07/13/96 20:31:43
注:
state
栏包含的单个字符代码含义如下:
r
表示正运行,
s
表示已暂停,
q
表示已排队,
w
表示在等待
qstat -f
queuename qtype used/free load_avg arch states
dq BIP 0/1 99.99 sun4 au
durin.q BIP 2/2 0.36 sun4
231 0 hydra craig r 07/13/96 20:27:15 MASTER
232 0 compile penny r 07/13/96 20:30:40 MASTER
dwain.q BIP 3/3 0.36 sun4
230 0 blackhole don r 07/13/96 20:26:10 MASTER
233 0 mac elaine r 07/13/96 20:30:40 MASTER
234 0 golf shannon r 07/13/96 20:31:44 MASTER
fq BIP 0/3 0.36 sun4
####################################################
- PENDING JOBS - PENDING JOBS - PENDING JOBS - PENDING JOBS - PENDING JOBS -
####################################################
236 5 word elaine qw 07/13/96 20:32:07
235 0 andrun penny qw 07/13/96 20:31:43
命令行控制作业
可以使用
qdel
命令取消
Sun Grid Engine
作业,无论它们是正在运行还是处于假脱机状态。
qmod
命令可以暂停和取消暂停(恢复)已经在运行的作业。
使用这两个命令都需要知道作业标识号,此标识号可由
qsub
命令得到。若忘了标识号,可通过
qstat
检索。
% qdel
作业
ID
% qdel -f
作业
ID 1,
作业
ID 2
% qmod -s
作业
ID
% qmod -us -f
作业
ID 1,
作业
ID 2
% qmod -s
作业
ID.
任务
ID
范围
用
qmod
控制队列
% qmod -s
队列名
% qmod -us -f
队列名
1
、队列名
2
% qmod -d
队列名
% qmod -e
队列名
1
、队列名
2
、队列名
3
注意:注意–
暂停
/
取消暂停和禁用
/
启用队列都需要拥有者、
Sun Grid Engine
管理人员或操作人员权限
SGE
的管理
主
控主机
¨C
主控主机是一切群集活动的中心。它运行主控守护程序
sge_qmaster
。
sge_qmaster
控制所有的
Sun Grid Engine
组件(如队列和作业),并维护关于组件状态和用户访问权限之类的表单。主控主机通常运行
SGE
调度程序
sge_schedd
。除了在安装过程中执行的配置
外,主控主机不需要进一步配置。
执行主机
¨C
执行主机是有权执行
Sun Grid Engine
作业的节点。因此,该主机上有
Sun Grid Engine
队列,并运行
Sun Grid Engine
执行守护程序
sge_execd
。
管理主机
¨C
可为主控主机以外的其它主机赋予权限,以在
Sun Grid Engine
中完成任何种类的管理活动。管理主机可用以下命令设置:
qconf -ah
主机名
提
交主机
¨C
提交主机仅允许提交和控制批处理作业。尤其是登录到提交主机的用户可通过
qsub
提交作业,可通过
qstat
或运行
Sun Grid Engine
的
OSF/1Motif
图形用户界面
QMON
控制作业状态。提交主机可用以下命令设置:
qconf -as
主机名
常见错误处理
sge_qmaster
日志文件:
/opt/gridengineer//default/spool/qmast/message
qstat -j <
作业
ID>
qalter -w v <
作业
ID>
问题–
作业的输出文件显示:
Warning: no access to tty; thus no job control in this shell...
。
可能原因
1
–
一个或多个登录文件包含了
stty
命令。这些命令仅在存在终端时有用。
可能原因
2
–
脚本错误。
可能的解决方案
1
–
在
Sun Grid Engine 5.3
(企业版)批处理作业中,没有与这些作业关联的终端。您必须从登录文件中删除所有
stty
命令,或者用一条在处理前检查终端的
if
语句把它们括起来。
可能的解决方案
2
–
添加“
#$ -S /bin/sh”
常见错误处理
问题–
您可以从命令行运行作业脚本,但通过
qsub
命令运行时失败。
可能原因
1
–
可能对作业设置了进程限制。要测试这一点,写出执行
limit
和
limit -h
功能的测试脚本。分别在
shell
提示下和通过
qsub
命令交互执行两个脚本,比较结果。
可能原因
2
–
系统同步未完成
可能的解决方案
1
–
确保将配置文件中用于在
shell
中设置限制的所有命令删除。
可能的解决方案
2
–
rocks-user
,
cluster-fork 411get –all ,
作同步。
常见问题处理
问题
¨C
执行主机报告负荷为
99.99
。
能原因
¨C
有三种可能。
1. execd
守护程序未在主机上运行。
2.
未正确指定缺省域。
3. qmaster
主机所见的执行主机名与执行主机自身所见不同。
可能的解决方案
¨C
1.
作为
root
用户,在执行主机上通过运行
$SGE_ROOT/default/common/rcsge
脚本来启动
execd
守护程序。
2.
作为
Sun Grid Engine
(企业版)管理员,运行
qconf -mconf
命令并将
default_domain
变量更改为
none
。
3.
若您正使用
DNS
解析运算群集的主机名,则请配置
/etc/hosts
和
NIS
以返回完全合格的域名
(FQDN)
作为主要主机名。
常见错误处理
报告作业或队列处于错误状态
E
处理方法:
$SGE_ROOT/default/spool/qmaster/messages
再就具体问题进行相关处理,一般的问题有:
计算节点未挂载数据盘,出现文件找不到的错误。