网格计算和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)
队列
查看所有队列 # qconf -sql 查看某个队列的配置 # qconf -sq 队列名 编辑队列配置文件 # qconf -mq 队列名 查看队列中主机情况 # qselect -q 队列名 创建队列 # qconf -aq 对列名
主机组
查看所有主机组 # qconf -shgrpl 查看某个主机组信息 # qconf -shgrp 主机组名 编辑主机组配置 # qconf -mhgrp 主机组名 创建主机组 # qconf -ahgrp 主机组名
用户组
查看所有用户组 # qconf -sul 查看某个用户组信息 # qconf -su 用户组名 编辑用户组配置 # qconf -mu 用户组名 创建用户组并把用户添加到用户组 # qconf -au 用户名 用户组名
qstat使用
# qstat -f # qstat -explain # qstat -j jobid
qmod使用
# qmod -cq 队列名 # qmod -cj job名
修改shell
# qconf -mconf # qconf -mq 队列名
限制单个计算节点可以使用的资源
# qconf -me 节点名
qsub使用(投递任务)
qsub –cwd –l vf=1G –q common.q –l h=compute-0-0 test.sh test.sh: #!/bin/bash #$ –S /bin/bash sleep 100;
启用-l vf参数
查看配置参数 # qconf -sc 修改配置参数 # qconf -mc #name shortcut type relop requestable consumable default urgency #—————————————————————————————- virtual_free vf MEMORY <= YES YES 0 0 #………………………………………………………………………………………………
注意:在管理主节点上进行修改之后最好同步一下,将配置同步到计算节点当中
rocks sync users rocks sync config 同步到其他节点
常用命令
qsub命令用来向SGE提交批处理作业,SGE支持单或多节点作业。
qsh命令用来提交带xterm交互式作业,在执行主机上开启X-windows.
qlogin命令与qsh相似也是提交交互式作业到队列中,只是它不开启X-windows,而是利用现在的终端传送I/O,该命令与远程主机建立telnet连接,使用标准的server-client命令
qrsh命令与qlogin类似,与远程主机通过rsh连接。
qalter可用来改变处于pending状态的作业属性。
qresub命令允许用户通过拷贝处于pengding或runing状态的作业来创建新的作业。新建作业与原作业具有相同的属性,并被分配了新的jobID和hold状态。该命令可用来先拷贝一个作业再修改其属性。
qdel 删除任务
qmod 修改队列和任务属性
qstat 查看任务和队列状态
qacct –此命令从群集日志文件中抽取任意帐户信息。
qmon –此命令为群集和队列配置提供用户界面。
qdel –用户、操作人员或管理人员可使用此命令向作业或其子集发送信号。
qhold –此命令阻止已提交作业的执行。
qhost –此命令显示Sun Grid Engine 执行主机的状态信息。
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
再就具体问题进行相关处理,一般的问题有:
计算节点未挂载数据盘,出现文件找不到的错误。