对于第一个问题,现在没有研究。我使用的Torque+Maui,但是对于你的第二个问题:队列和节点的映射问题,可以提供一个思路。具体可以参见:http://muchong.com/bbs/viewthread.php?tid=4065399&fpage=1,估计你看过,可能被开头的Torque+Maui吓到了,以为下面找不到你要的东西。其实那个帖子在最后的实现上与Maui无关,不妨一试。
现摘抄如下:
1.修改/var/spool/torque/server_priv/nodes文件
node01 np=12 sugon siesta dalton gaussian
node02 np=12 sugon siesta dalton gaussian
node03 np=12 sugon siesta dalton gaussian
node04 np=12 sugon siesta dalton gaussian
node05 np=12 sugon siesta dalton gaussian
node06 np=12 sugon siesta dalton gaussian
node07 np=12 sugon siesta dalton gaussian
node08 np=12 sugon siesta dalton gaussian
node09 np=12 sugon siesta dalton gaussian
node10 np=12 sugon siesta dalton gaussian
node11 np=12 sugon siesta dalton gaussian
node12 np=12 sugon siesta dalton gaussian
node31 np=8 powerlead siesta dalton gaussian others
node32 np=8 powerlead siesta dalton gaussian others
node33 np=8 powerlead siesta dalton gaussian others
node34 np=8 powerlead siesta dalton gaussian others
node35 np=8 powerlead siesta dalton gaussian others
node36 np=8 powerlead siesta dalton gaussian others
node38 np=8 powerlead siesta dalton gaussian others
node39 np=8 powerlead siesta dalton gaussian others
node40 np=8 powerlead siesta dalton gaussian others
node41 np=8 dell siesta dalton gaussian others
node42 np=8 dell siesta dalton gaussian others
node43 np=8 dell siesta dalton gaussian others
node44 np=8 dell molpro
node45 np=8 dell molpro
node46 np=8 dell molpro
将每一个节点分配上属性,每一个节点可以加多个属性,这一点是该方法成功的关键所在。
2.然后创建一系列的队列,并且指定队列只接受哪个用户组的任务,为了简单起见,每一个用户组创建一个相似的队列。然后给队列指定默认的资源。
举一例如下:
创建siesta用户对应的队列SIESTA
qmgr -c "create queue SIESTA queue_type=execution"
创建SIESTA队列,并且指定类型为execution
qmgr -c "set queue SIESTA started=true"
指定SIESTA队列中的任务可以被调度执行
qmgr -c "set queue SIESTA enabled=true"
指定SIESTA队列可以接受新的任务
qmgr -c "set queue SIESTA acl_group_enable=true"
指定SIESTA队列专属某一个用户组
qmgr -c "set queue SIESTA acl_groups=siesta"
指定SIESTA队列的专属用户组为siesta用户组,只有属于siesta用户组的用户才能向改队列中提交任务,其他的用户组不可以。当然,一个用户可以属于多个用户组。
qmgr -c "set queue SIESTA acl_group_sloppy=true"
指定是不是只看用户的第一用户组来决定对队列的使用权。如果该项没有,则只有第一用户组为siesta的用户组才能向该队列对提交任务,如果该项为true,表示检查用户的其他用户组属性。
qmgr -c "set queue SIESTA resources_default.neednodes=siesta"
指定SIESTA队列使用的计算节点是siesta属性的(上面1中指定的)
创建完毕后,可以用qmgr -c "p s"查看创建的队列情况,如下
# Create and define queue SIESTA
#
create queue SIESTA
set queue SIESTA queue_type = Execution
set queue SIESTA resources_default.neednodes = siesta
set queue SIESTA acl_group_enable = True
set queue SIESTA acl_groups = siesta
set queue SIESTA acl_group_sloppy = True
set queue SIESTA enabled = True
set queue SIESTA started = True
其他的用户组都可以类比着创建自己的专属队列。
3.启动服务节点的pbs_server服务和maui服务:
qterm -t quick
停止pbs_server服务
pbs_server
重启pbs_server服务
ps -A |grep maui
找出maui的进程号
18066 ? 00:00:00 maui
杀掉maui进程
kill 18066
重新启动maui
/usr/local/software/maui-3.3.1/sbin/maui
好了,到此为止,大功告成。可以使用了
属于siesta用户组的用户提交任务,就可以默认提交到node01-node43上,只要提交满了,就排队,不能提交到node44-node46上。
但是siesta用户组的成员如果想将自己的某一个任务提交到sugon上,而不是powerlead或者dell上,则可以在自己的脚本中写上:
#PBS -l nodes=1:sugon:ppn=8
表示该任务只向sugon机器提交,如果sugon满了,就排队,即使powerlead和dell有空闲。
如果写为#PBS -l nodes=1:dell:ppn=8
那么siesta用户组的用户只能提交到node41,42,43这三个上,如果满了,就排队,直到这三个节点有空余。不会侵占到node44-node46上。
也就是说这儿对节点属性的要求和队列本身对节点的要求是 “与(and)”的关系。
如果写成:
#PBS -l nodes=1:ppn=8
那么就会从node43倒序向node01检查,看是否有空闲资源。也就是说dell机器优先。
这种做法有一个不令人满意的地方:如果other用户组的用户用OTHER队列向sugon提交任务的话,那么可以提交,并且不出错,但是任务始终在排队状态,永远不会被执行,