网格计算和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 管理队列
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
再就具体问题进行相关处理,一般的问题有:

计算节点未挂载数据盘,出现文件找不到的错误。



www.jiangyexiang.com


QQ×××流:283605880