http://man.chinaunix.net/newsoft/openpbs/OpenPBs.htm
Portable Batch System
OpenPBS Release 2.3
Administrator Guide
Translator: 裴建中(北京工业大学)
Email: pjz0311@emails.bjut.edu.cn
QQ: 250386348
注:翻译这一管理员指南仅仅是想和大家共同学习和交流与集群相关的知识,并无他意。文中带有下划线的句子是我觉得理解的不好的地方,其后同时保留了原来的英文以便大家理解,请留意。对于具体的几种类型系统的依赖性构建这里省略掉了,略掉的地方标有‘?????’。文中翻译不当的地方敬请各位批评更正。另外尤其是有关NQS、OpenPBS的心得体会希望能和大家多多交流。
1.1. 什么是PBS?
1.3. 发布信息
2.1. 计划
2.2. 安装总结
2.3. 构建细节
2.4. 依赖于机器的构建说明
2.4.6. SGI Workstations Running IRIX5
2.4.7. SGI Systems Running IRIX6
3.1. 单一执行系统
3.2.1. 安装多个Moms
3.3. 网络地址和端口
3.4. 启动守护进程
3.4.1. 启动Mom
3.5. 配置作业服务器,pbs_server
3.6. 配置可执行服务器,pbs_mom
3.7. 配置调度器,pbs_sched
1. 介绍
此文档用来为系统管理员提供构建、安装、配置并且管理PBS所需的一些信息。很可能有一些重要的信息项被漏掉了。这类文档中没有更加完善的了,到目前为止,它已经被好几个不同的管理员在不同的站点进行了更新,当然仍是比较欠缺。
1.1. 什么是PBS?
PBS是一个批处理作业和计算机系统资源管理软件包。它原本是按照POSIX 1003.2d批处理环境来开发的。这样,它就可以接受批处理作业、shell脚本和控制属性,作业运行前对其储存并保护,然后运行作业,并且把输出转发回提交者。
PBS可以被安装并配置运行在单机系统或多个系统组来支持作业处理。由于PBS的灵活性,多个系统可以以多种方式组合。
1.2. PBS的组件
PBS包括四个主要的组件:命令组件、作业服务器、作业执行组件和作业调度器。这里给出每一部分的简要描述来帮助你在安装过程中做出决定。
命令组件:
PBS支持与POSIX1003.2d相一致的命令行和图形接口两种命令方式。这些命令用于提交、监视、修改和删除作业。命令可以被安装在任何PBS支持的系统类型上,并且不需要在本地安装任何其它的PBS组件。共有三种类型的命令:任何已授权用户可以使用的命令;操作员命令;管理员命令;操作员和管理员命令需要不同的访问权限。
作业服务器:
作业服务器是PBS的中心。在本文档中,它一般被称作服务器或被称为可执行文件的名字pbs_server。所有命令和其它守护进程都通过IP网络和服务器通信。服务器的主要功能就是提供基本的批处理服务,例如接收/创建一个批处理作业,修改作业,保护作业免受系统宕机的影响并运行作业。
作业执行器:
作业执行器是一个守护进程,它真正地把作业放入执行队列。这一进程,pbs_mon,被非正式地命名为Mom,正如它是所有正在执行的作业的母亲(mother)一样。当Mom从一个服务器那里接收一个作业拷贝时就将它放入执行队列。Mom创建一个和用户登陆会话尽可能一致的新的会话。例如,如果用户的登陆shell是csh,那么Mom就创建一个会话,在此会话中.login和.cshrc一样运行。当服务器指示需要那么做时,Mom也负责把作业的输出返回给用户。
作业调度器:
作业调度器是另一个守护进程,这一进程包括site’ policy[1],这一策略控制着哪一个作业被运行,在那个节点运行,什么时候运行。因为每一个site对于什么是好的或者有效的策略都有它自己的想法,PBS允许每一个site来创建它自己的调度器。当运行的时候,调度器就可以和不同的Moms进行通信来获知系统资源的状态;和服务器进行通信来获知要执行的作业的有效性。与服务器之间的接口是通过和命令组件一样的API。实际上,调度器仅仅作为服务器的批处理管理器出现的。
除了上面主要的部分之外,PBS也提供了一个应用编程接口,API,命令组件用它来和服务器进行通信。这一API在和PBS一起完成的第三部分的man pages中描述。A site[1]如果愿意可以利用这些API来实现新的命令。
1.3. 发布信息
1.3.1. Tar文件
PBS是以一个单一的tar文件来提供的。这个tar文件包括:
Ø 以后记和文本两种形式提供的本文档
Ø 一个“配置”脚本,所有的源码,头文件和用于构建并安装PBS的make文件。
当解压tar文件时,将会在上面的信息之上创建一个顶层目录。这一顶层目录将被命名为发布版本加补丁级别。例如,对于发布版本2.1和补丁级别13,这一目录将被命名为pbs_v2.1p13。
建议这些文件在解压时带上-p参数以便保留权限位。
1.3.2. 附加要求
PBS使用一个由GNU的autoconf生成的配置脚本来产生make文件。如果你有一个POSIX make程序,那么由配置脚本生成的make文件将尝试利用POSIX的make特性。当构建时如果你的make不能够处理这个make文件那么你可能用的是一个被破坏的make。要是在构建时make失败,就试一下GNU的make。
如果使用了基于GUI的Tcl或基于调度器的Tcl,就需要有Tcl的头文件和库。Tcl的官方网站是:http://www.scriptics.com/, ftp://ftp.scriptics.com/pub/tcl/tcl8_0
PBS已经不再使用Tcl8.0之前的版本。必须使用Tcl和Tk8.0或更高的版本。
如果使用了BaSL调度器,将需要yacc和lex(或者GNU bison和flex)。对于bison和flex的有关站点是:http://www.gnu.org/software/software.html prep.ai.mit.edu:/pub/gnu
为了格式化包含在这一发布版本的这一文档,我们强烈推荐使用GNU groff包。最新的groff版本1.11.1,它可以在这里找到:http://www.gnu.org/software/groff/groff.html
2. 安装
这一部分试图来解释构建和安装PBS的步骤。PBS安装可以通过GNU的autoconf过程来完成。这一安装过程与其他许多“典型”软件包相比需要更多的手工配置。因为有一些涉及site policy的选项,所以安装就不能被自动的决定。如果PBS运行在基于intel x86的红帽Linux上,可以使用RPM包来安装。对于安装说明请看2.4.9部分。
为了获得一个可用的PBS安装,需要有下面的步骤:
1. 阅读这一指南并为主机和PBS的大概配置做一个计划。见1.2节和3.0到3.2节。
2. 决定PBS源码和(构建)目标文件的放置位置。见2.2节。
3. 把发布的文件解压为源码树。见2.2节。
4. 选择“配置”选项并从目标书的顶层来运行configure。见2.2到2.4节。
5. 在目标树的顶层通过make来编译PBS。见2.2到2.3部分。
6. 在目标树的顶层通过make install来安装PBS的模块。需要root权限。见2.2节。
7. 如果PBS正在管理一个多个节点的联合体或者像IBM SP这样的并行系统时,创建一个节点描述文件。见第3章批处理系统配置。节点可以在服务器通过qmgr命令启动之后加入,即使这时节点文件还没有创建。
8. 启动(bring up)并配置服务器。见3.1到3.5节。
9. 配置并启动Moms。见3.6节。
10.通过调度一些作业来测试。见qrun(8B)man page.
11.配置并启动调度程序。通过授权(enabling)调度来设置服务器为活动状态。见第四章
2.1. 计划
PBS能够支持很广泛的配置。它可以被安装并用于控制简单或大型系统中的作业。它可以在多个系统之间用于作业负载均衡。可以用于把一个集群或并行系统的节点分配给并行和串行作业。或者它能够处理上述的混合情况。
在进一步介绍之前,我们需要定义一些术语。PBS如何使用这些术语和你可能期望的有所区别。
节点:
一个带有一个单操作系统映像(image),一个统一虚拟内存映像,一个或多个cpu和一个或多个IP地址的计算机系统。通常,术语执行机被用作节点。一个像SGI Origin 2000这样在一个单一操作系统拷贝下运行的多个处理单元的盒子对PBS来说就是一个节点而不管SGI的术语是什么。一个像IBM SP这样包含多个单元的盒子,每一个都有它自己的操作系统的拷贝,就是多个节点的集合。(A box like the SGI Origin 2000, with contains multiple processing units running under a single OS copy is one node to PBS regardless of SGI’s terminology. A bos like the IBM SP which contains many units, each with their own copy of the OS, is a collection of many nodes.)
一个机群节点声明为包含一个或多个虚拟处理器。使用术语“虚拟”是因为在一个物理节点中声明的虚拟处理器的数量可以等于或大于或小于实际处理器的数量。现在分配的是这些虚拟处理器而不是整个的物理节点。一个机群节点的虚拟处理器(VPs)可以以独占的方式或临时共享的方式分配。分时节点不会被认为包含有虚拟节点并且这些节点没有分配作业也没有被作业所使用。
联合体(Complex):
由一个批处理系统管理的主机的集合。一个联合体可以由在某一时间仅分配有一个作业的节点组成或者由分配有多个马上要执行的作业的节点组成,或者是两者的组合。
集群:
由多个集群节点组成的联合体。
集群节点:
一个这样的节点——它的虚拟处理器在某一时间专门分配给一个作业(见独占节点部分),或者多个作业(见临时共享节点)。这一节点类型也可以被称作空间共享。如果一个集群节点有多于一个虚拟处理器,这些虚拟节点可以被分配给不同的作业或者用于满足单个作业的需要。然而,单个节点上的所有处理器将被按照同一种方式来分配,例如,所有虚拟处理器将被分配为独占的或者临时共享的。在多个作业中分时共享的主机被称为“timeshared”。
独占节点:
一个独占节点就是在某一时间只能用于一个并且只能是一个作业。对于一个作业的整个持续时间,一个节点集可以以独占的方式分配给这个作业。这是提高消息传递程序性能的典型做法。
临时共享节点:
一个临时共享节点,它的虚拟处理器被多个作业临时共享。如果几个作业需要多个临时共享节点,某些虚拟处理器可能分配给两个作业,某些可能对其中一个作业是唯一的(some VPs may be allocated commonly to both jobs and some may be unique to one of the jobs)。当一个虚拟处理器以分时共享为基础分配时,它将一直保持分时共享状态直到所有使用它的作业都终止为止。然后这个虚拟处理器就可以以分时共享或者独占的使用方式再一次分配。
分时共享:
在我们的上下文中,分时共享总是允许多个作业同时在一个执行主机或节点上运行。一个分时共享节点就是作业可以分时共享的节点。通常使用术语主机与分时共享相联接而不是节点,正如分时共享主机。如果使用了术语节点而没有分时前缀,这个节点就是可以以独占方式或者分时共享方式分配的集群节点。
如果一个主机或节点被指示为分时共享,它将永远不会被服务器分配为独占的或者临时共享的。
负载均衡:
一个策略——在此策略中通过多个分时主机来分发作业,在每个主机上平坦作业负载。作为一个策略,通过执行主机的作业分发是作业调度器的单独的功能。
节点属性:
对于提供控制信息的作业、队列和服务器,节点拥有与它们相关联的属性。这些为节点所定义的属性有:状态、类型、虚拟机的数量、需要分配节点的作业列表和一些特性(properties)。
节点特性:
为了提供一个成组分配节点的方法,一个零个或多个节点特性的集合可以提供给每一个节点。特性对PBS并没有什么意义,仅仅是一个字符构成的串。作为PBS的管理员,你可以选择任何你想要得特性名字。你对特性名字的选择应当传给用户。
批处理系统:
一个PBS批处理系统包括一个作业服务器(pbs_server),一个或多个作业调度器(pbs_sched)和一个或多个执行服务器(pbs_mom)。在PBS以前的版本中,一个批处理系统仅能够被设置来支持由独占节点或者支持一个或多个分时主机构成的一个集群。不支持临时共享节点。随着这一版本的发布,一个PBS批处理系统可以设置为将作业分给一个大的分时共享系统,多个分时共享系统,一个其节点以独占或临时共享方式使用的集群,或者任何前述方式的混合。
批处理联合体:
如果PBS安装在一个分时共享系统中,所有三个守护进程可以寄存(reside)在这个系统中;或者你可以把服务器(pbs_server)和/或调度器(pbs_sched)放在一个“前端”系统中。Mom(pbs_mom)必须运行在每一个用来执行作业的系统中。
如果PBS安装在一个由多个分时系统组成的集合中,Mom必须运行于每一个系统中,服务器和调度器可以安装在其中一个系统上或者一个前端系统上。如果你使用的是提供的默认调度程序,你需要为服务器配置一个节点文件,在节点文件中每一个分时共享系统都被命名。你需要为每一个主机名字追加:ts以把它们识别为分时共享。
同样的安排适用于一个集群,除非节点文件中的节点名字没有附加:ts
2.2. 安装总结
正常的PBS构建过程就是将源码与目标相分离。这允许将源码的单个拷贝放到一个共享文件系统中,从这个系统中就可以构建不同的目标系统。并且,源码可以通过设为只读以便免受意外破坏或修改。
在下面的描述中,源码树就是将tar文件解包为目录(和子目录)的结果。源码树的图显示在图2-1中。
目标树是一个平行目录的集合,在此当中目标模块被真正的编译。这棵树可以(一般也应该)从源码树中分离开。
这里列出“配置”、编译、安装和批处理系统配置步骤的一个总结。紧跟着就是每一个符号的详细解释。推荐你在安装之前阅读全部这些说明。安装PBS:
1. 把tar文件放在你想在其中维护源码的系统上。
2. 解压tar文件。
tar xpf file
这将在当前目录生成的一个以当前发布的版本号再加上补丁号码命名的单一目录中解压。在那个目录下将有好几个文件和子目录。这一目录和子目录构成源码树。你可以在这时将源码树设为写保护,并且你也应该这样做。
在顶层目录中有两个文件,Release_Notes和INSTALL。Release_Notes文件包括有关发布内容的信息,自上一个版本以来变化的信息和这一指南中的安装说明要点。INSTALL文件包含有关GNU配置用法的标准注释。
3. 如果按照建议那样选择将构建目标和源码树相分离,那么这次创建的顶层目录将变为目标树。目标树必须寄存于挂载在和目标系统相同结构上的一个文件系统上。对此你将生成PBS二进制目标文件(The target tree must reside on a file system mounted on the same architecture as the target system for which you are generating the PBS binaries.)。这可能是拥有源码的同样的系统或者不是。改变目录到目标树的顶端。
4. 选择一个作业调度器。PBS一个独特的特性就是它的外部调度模块。这允许a site 来实现它所选择的策略。在实现策略方面提供甚至更多的自由。PBS提供三种调度框架。调度器可以用C语言、Tcl脚本语言或者PBS自己的C语言的扩展、批处理调度语言或者BaSL来开发。
正如已分发的(As distributed),配置默认设为基于C语言的先进先出调度器。这一调度器可以配置为好几个普通的简单的调度策略,而不仅仅是先进先出和名字所暗示的那样。安装这个调度器时,几个特定的配置文件被安装在了{PBS_HOME}/scheduler_priv/下。你需要根据your site来修改这些文件。在4.5节基于QC的调度器样例和4.5.1节先进先出调度器部分会讨论这些文件。
要改变所选择的调度器,见这一章的特性和包选项部分的配置选项-set-sched 和 –set-sched-code。在这一指南的稍后部分调度策略一章可以找到调度器的各种类型的附加信息以及如何来配置先进先出。
5. 阅读2.3节,然后从在第三步创建的目标树的顶端,键入下面的命令
{source_tree}/configure [options]
{source_tree}是源码树中配置脚本的完整的相对或绝对路径。如果你在源码树中进行构建就在存放配置脚本的源码树的顶端键入./configure [options]。这将以当前的工作路径为开始生成完整的目标树和头文件以及用于构建PBS的make文件。如果你选择在配置命令行中指定要改变的选项,只需要重新运行配置脚本。见2.3节配置选项信息的构建细节。
没有绝对需要的选项,除非C编译器的供应商不是ANSI,建议你使用—set-cc选项而不要使用gcc。如果你想构建PBS的GUI,并且Tcl库没有在正常的位置,/usr/local/lib,那么你将需要指定—with-tcl=directory给出Tcl库的路径。
不带任何其它选项来运行配置将生成一个带有下面默认设置的可工作的PBS系统:
Ø 用户命令安装在/usr/local/bin。
Ø 守护进程和管理命令安装在/usr/local/sbin。
Ø 守护进程的工作路径(PBS_HOME)是usr/spool/pbs。
Ø 调度器将是基于C的FIFO调度器。
因为你所选择的选项的数量可能比较庞大,又因为每一个选项非常冗长,你可能希望创建一个包含有配置命令和所选择的选项的shell脚本。
这个文档没有根据默认的设置生成。你可以通过指定—enable-doc选项来配置或者通过改变到目标树中的doc子目录并键入make来生成它。
为了从包含的源码中构建并打印这一文档的后记拷贝,你将需要GNU的groff格式化语言包,这一软件包包含有“ms”格式化宏包。你可以选择不同的字体集来打印。在源码树中,字体集文件”doc/doc_fonts”可以被修改。请阅读那个文件中的注释。注意字体位置4留给安装的符号字体(Note that font position 4 is left with the symbol font mounted)。
6. 运行配置脚本之后,下一步就是通过从目标树的顶端键入make编译PBS。
7. 为了安装PBS你必须以root权限运行。作为root,从目标树的顶端键入make install。这将生成运行PBS所需要的工作目录结构并将程序安装在适当的可执行路径下。
当工作路径生成时,还要检查它们是否设置了正确的所有权和许可权。执行这一检查确保这些文件没有被篡改并确保PBS折衷的安全性。部分检查是要确保所有的父目录和所有文件是:
Ø 由root所拥有(bin, sys, or any uid < 10),否则返回EPERM;
Ø 组所有权要有gid < 10,否则返回EPERM;
Ø 目录不是全部可写(world writable)的,或者要求全部可写的地方要设置有sticky位。否则返回EACCESS;
Ø 文件或目录确实是一个文件或目录,否则返回ENOTDIR。
不同的PBS守护进程在启动时也将执行相同的检查。
8. 如果在你的PBS集群中有多于一个主机,你需要为服务器创建一个节点文件。创建文件{PBS_HOME}/server_priv/nodes。它应该每个节点包含在一行中,在节点上运行有Mom。行应当包含有短的主机名,不包括域名部分。例如,如果你有三个节点:larry.stooge.com, curley.stooge.com, and moe.stooge.com;那么节点文件应该包括
larry
curley
moe
如果节点是将被用于负载均衡的分时共享节点,每一个节点的名字后追加:ts,即:
larry:ts
curley:ts
moe:ts
9. 为了使其其作用,三个守护进程,pbs_server, pbs_sched和pbs_mom必须由root运行。在一个生产系统中典型情况是,它们是在引导文件/etc/rc*中在系统引导时启动的。第一次时,你要手动启动这些进程。守护进程会将它自己放在它自己的目录{PBS_HOME}/*_priv下,*可以是serv,resmom, 或者sched。
注意所有三个守护进程不必必须在所有系统中存在。对一个大系统的情况,所有三个可以都存在。对于集群工作站的情况,你可以仅在一个系统上运行服务器(pbs_server)和调度器(pbs_sched),在每一个可能执行作业的节点上运行一个Mom(pbs_mom)的拷贝。这时,假定你计划在一个系统上运行三个守护进程。为了拥有一个功能齐全的系统,每一个守护进程将需要特定的配置信息。除了节点文件,在服务器运行之后,服务器配置信息通过qmgr命令来提供。节点信息在服务器启动之前通过编辑结点文件输入。Mom和调度器的配置信息通过编辑位于{PBS_HOME}/mom_priv或{PBS_HOME}/sched_priv的配置文件来提供。这在这一指南的第三章批处理系统配置中会被详细的解释。
A. 在启动执行server(s), Mom(s)之前,在每一个执行主机上,你需要创建它的配置文件。开始时,下面的这些行就足够了:
$logevent 0x1ff
$clienthost server-host
server-host是运行服务器的主机的名字。如果服务器和Mom在同一个主机上server-host是不需要的。创建文件{PBS_HOME}/mom_priv/config并将上面的行拷贝进来。对于配置文件中的更多信息见pbs_mom(8)的mam page和3.6节配置执行服务器。
启动执行服务器,pbs_mom,
{sbindir}/psb_mom
不需要任何选项或参数。见pbs_mom(8) man page.
B. 仅仅在第一次时,启动pbs_server时带”-t create” 选项,
{sbindir}/pbs_server –t create
这一选项致使服务器来初始化不同的文件。在第一次运行后这一选项将不再需要,除非你想清楚服务器数据库并重新启动。更多的信息见pbs_server(8)。
C. 启动选择的调度器,pbs_sched。
i. 对基于C语言的调度器,例如默认的先进先出调度器,一般是需要选项的。运行调度器,键入
{sbindir}/pbs_sched
更多的细节见man page pbs_sched_cc(8)。
ii. 对于BaSL调度器,调度策略是用和C类似的专用的批处理调度语言写的。调度的代码包括BaSL结构体,必须首先使用basl2c转换成C。这可以使用配置选项—set-sched-code=file来完成,文件是一个basl源码文件的相对(相对于src/scheduler.bash/samples)或绝对路径。文件的名字必须以.basl结尾。一个不错的实例程序是“fifo_byqueue.basl”,它可以在一个单机服务器上、单机执行主机环境,或者在单机服务器、多节点主机环境中调度作业。更多的所用算法的信息可以阅读实例调度器的头文件。
调度器的配置文件在BaSL中是一个很重要的实体,因为它是服务器列表和主机资源所寄存的地方。通过键入:{sbindir}/pbs_sched –c config_file来执行基于basl的调度器。默认情况下调度器在{PBS_HOME}/sched_priv下搜索配置文件。更多的信息可以在man page pbs_sched_basl(8)中找到。
iii. Tcl调度器需要Tcl代码策略模块。可以在src/scheduler.tcl/sample_scripts下找到Tcl脚本的例子。对于基于Tcl的调度器,Tcl脚本主体应该放在{PBS_HOME}/sched_priv/some_file下,通过{sbindir}/pbs_sched –b PBS_HOME/sched_priv/some_file来运行调度器。更多信息可以在man page pbs_sched_tcl(8)中找到。
10. 以root登陆到系统中并通过键入:
#qmgr
Qmgr: set server managers = your_name@your_host
定义自己为管理员到服务器中。有关qmgr的信息可以在qmgr(8) man page中找到,并且可以在qmgr中键入help来利用在线帮助。从这时起,你就不再需要root特权了。注意,your_host可以是安装有PBS的qmgr命令的任何主机。你现在可以从舒适的工作站来配置并管理一个远程的批处理系统。现在你需要至少定义一个队列。典型情况下他将是一个执行队列,除非这个服务器纯粹作为一个网关来使用。你可以选择建立一个最小数量、最大数量,并且/或者对某些资源有默认的资源限制的队列。例如,建立一个资源限制为最小1秒,最大12 cpu小时,并且默认为30 cpu分钟的一个命名为“dque”的队列;在qmgr中发出下面的命令:
Qmgr: create queue dque queue_type = e
Qmgr: s q dque resources_min.cput =1, resources_max.cput = 12:00:00
Qmgr: s q dque resources_default.cput = 30:00
Qmgr: s q dque enabled = true, started = true
你也可以通过限制访问服务器的场所来增加系统的安全性。对你的域的限制服务,给出下面的qmgr命令:
Qmgr: set server acl_hosts = *.your_demain
Qmgr: set server acl_host_enable = true
最后,激活服务器和调度器之间的交互,例如,通过pbs_sched来调度作业,发出:
Qmgr: s s scheduling = true
当属性scheduling设为true时,服务器将调用作业调度器,如果设为false作业调度器不再被调用。scheduling的值也可以在服务器命令行中带上-a选项来指定。
2.3. 构建细节
总体介绍给出了足够的信息来构建一个基本的PBS系统,还有好多选项你可以利用,并可以做一些定制的裁减。
2.3.1. 配置选项
下面是一些配置脚本选项的细节信息。
2.3.1.1. 一般配置选项
下面是不影响PBS功能的一般的配置选项。
--cache-file = file
将系统配置测试结果缓冲到文件。
默认为:config.cache
--help
打印出可用选项的信息
--no-create
不创建输出文件
--quiet, -silent
不打印“checking”信息。
--version
打印创建configure的autoconf版本。
--enable-depend-cache
这一选项打开了configure缓存其整个运行过程中makedepend信息的能力。如果在重新运行configure时用户做了一定的配置改变,这可能会是有害的,但是它可以在有经验的开发者的帮助下节省时间。
默认:disabled
2.3.1.2. 目录和文件名字
这些选项指定PBS对象放置的地方。
--prefix=PREFIX
在PREFIX目录的子目录中安装文件
默认:usr/local
--exec-prefix=EPREFIX
在EPREFIX的子目录中安装结构依赖的文件。
默认:见PREFIX
--bindir=DIR
在子目录DIR中安装用户可执行的命令。
默认:EPREFIX/bin (/usr/local/bin)
--sbindir=DIR
在子目录DIR中安装管理员可执行命令。这包括特定的管理的命令和守护进程。
默认:EPREFIX/sbin (/usr/local/sbin)
--libdir=DIR
对象代码库放在DIR中。这包括PBS API库,libpbs.a。
默认:PREFIX/lib (/usr/local/lib)
--includedir=DIR
C语言头文件安装在DIR中。
默认:PREFIX/include (/usr/local/include)
--mandir=DIR
在DIR中安装man pages
默认:PREFIX/man (/usr/local/man)
--srcdir = SOURCE_TREE
可以在目录SOURCE_TREE中找到PBS源码。
默认:configure脚本所在的位置。
--x-includes = DIR
X11头文件在目录DIR中。
默认:尝试自动定位头文件
--x-libraries
X11的库在目录DIR中
默认:尝试自动定位库。
2.3.1.3. 特性和包选项
一般,这些选项采用下面的形式:
--disable-FEATURE 对FEATURE不编译,等同于—enable-FEATURE=no
--enable-FEATURE 对FEATURE编译
--with-PACKAGE 包含PACKAGE来编译
--without-PACKAGE 包含PACKAGE时不编译,等同于with-PACKAGE=no
--set-OPTION 设置OPTION的值
对于PBS,认可的—enable/disable, --with/without, 和—set选项是:
--enable-docs
构建(或不构建)PBS文档。如果构建,你将需要下面的GNU应用:groff, gtbl和gpic。即使这个选项没有设置,man pages仍会安装。
默认:disabled
--enable-server
构建(或不构建)PBS作业服务器,pbs_server。正常情况,所有的组件(Commands, Server, Mom, 和Scheduler)都会构建。
默认:enabled
--enable-mom
构建(或不构建)PBS的作业执行进程,pbs_mom。
默认:enabled
--enabled-clients
构建(或不构建)PBS命令。
默认:enabled
--with-tcl = DIR_PREFIX
如果你希望编译基于Tcl的PBS特性并且Tcl库不在/usr/local/lib中,就使用这个选项。这些基于Tcl的特性包括GUI接口xpbs。如果设置了下面的选项—with-tclx,仅当Tcl库没有和Tclx库一起放置时使用这个选项。当设置时,DIR_PREFIX必须指定包括Tcl库的绝对路径。
默认:如果—enable-gui为enabled,那么和Tcl应用一起构建;否则,没有Tcl应用时不会构建。
--with-tclx = DIR_PREFIX
如果你希望基于Tcl的PBS特性改为基于Tclx就使用这一选项。这一选项意味着—with-tcl。
默认:不使用Tclx
--enable-gui
构建xpbs GUI。仅当设置了—with-tcl时有效。
默认:enabled
--set-cc[=ccprog]
指定使用那个C编译器。这将覆盖CC环境设置。仅当指定了—set-cc,然后CC才可设为cc。
默认:gcc(毕竟,configure也是来自于GNU)
--set-cflags[=FLAGS]
设置编译器标志。这用于设置CFLAGS变量。仅当指定了—set-cflags,然后CFLAGS被设为“”。在Irix6、等下,必须设为-64来编译64位的对象。--set-cflags=-64。注意,多个标志,诸如-g和-64应该用引号括起来,例如,--set-cflags=’-g -64’
默认:CFLAGS针对系统类型设为一个最好的估测值。(CFLAGS is set to a best guess for the system type.)。
--enable-debug
以有效的调试特性构建PBS。这允许守护进程保持依附于标准输出并产生大量的信息。
默认:disabled
--set-tmpdir = DIR
设置临时路径,在这一路径中pbs_mom将为作业创建临时的目录。只用于Cray系统。
默认:/tmp
--set-server-home = DIR
为PBS工作路径设置顶层的路径名字,PBS_HOME。这一路径必须寄存在运行有任何守护进程的主机的本地文件系统中。那意味着你必须在任何运行有pbs_mom的系统中有一个本地文件系统,和运行有pbs_server和/或pbs_sched的系统一样。PBS使用同步写文件来维护状态。我们推荐文件系统在每一台主机上有相同的挂载点和路径,这将使你能够从一个系统中拷贝守护进程到另一个系统而不用在每一个系统上构建。
默认:/usr/spool/pbs
--set-server-name-file = FILE
设置将包含默认服务器名字的文件的名字。这个文件由命令用于决定联系那个服务器。如果FILE不是一个绝对路径,它将是相对于—set-server-home, PBS_HOME的值的计算的(evaluated)路径。
默认:server_name
--set-default-server = HOSTNAME
设置客户机将会联系的主机的名字,当没有设置时可在命令调用中指定。它必须是主机的主网络名字。
默认:编译PBS的主机的名字。
--set-environ = PATH
设置包含有环境变量的文件的路径名字,环境变量由守护进程使用并放在作业的环境中。对于基于AIX的系统,我们建议设置这个选项为/etc/environment。相对路径的名字解释为相对于—set-server-home, PBS_HOME的值。
默认:在路径PBS_HOME中的文件pbs_environment。对这个文件的讨论和环境,见6.1.1节内部安全。你可以编辑这个文件来修改这个路径或者加入其它的环境变量。
--enable-plock-daemons = WHICH
使守护进程能够把它们自己锁进内存来提高性能。参数WHICH对pbs_server为逻辑或值1,对pbs_schduler为2,对pbs_mom为4(7就是所有三个进程)。对Unicos系统这个选项推荐使用。它一定不能用于AIX系统。
默认:disabled
注意,这一特性使用了Linux和bsd派生的系统中不可用的plock()系统调用。在使用这个特性之前,检查plock(3)在系统中是否可用。
--enable-syslog
使能够使用系统日志来用于错误报告。这是除标准的PBS日志之外的选项。
默认:disabled.
--set-sched = TYPE
设置调度器(语言)类型。如果设为c,将编译一个基于C的调度器。如果设为tcl,将使用一个基于Tcl的调度器。如果设为basl,将生成一个批处理语言调度器。如果设为no,没有调度器将被编译,作业将不得不手工运行。
默认:c
--set-sched-code = PATH
设置包含有调度器源码的文件或路径的名字。这仅用于C和BaSL调度器,在此—set-sched设为c或basl。对C调度器,这应该是一个目录名字。对BaSL调度器,它应该是以.basl结尾的文件的名字。如果路径是非绝对路径,它将被解释为相对于SOURCE_TREE/src/schedulers.SCHED_TYPE/samples。例如,如果—set-sched设为basl,那么设置—set-sched-code为fifo_byqueue.basl。
默认:fifo(基于C的调度器)
--enable-tcl-qstat
用Tcl解释器扩展构建qstat。这允许site[1]和用户定制化。仅当—with-tcl已经存在时才有效。
默认:disabled
--set-tclatrsep = CHAR
在Tcl/Tclx脚本中,设置字符用于作为属性和资源名字之间的分隔符。
默认:”.”
--set-mansuffix = CHAR
设置字符由于作为man page 部分的后缀字母。例如,qsub man page安装为man1/qsub.1B。不待后缀安装,--set-mansuffix = “”.
默认:”B”
--set-qstatrc-file = FILE
如果在用户的home目录中没有.qstatrc文件,设置qstat将使用的文件的名字。这个选项仅当设置了—enable-tcl-qstat时有效。如果FILE是一个相对路径,它将被计算(evaluated)相对于PBS Home路径,见—set-server-home。
默认:PBS_HOME/qstatrc
--with-scp
当拷贝一个文件到一个远程主机或从一个远程主机进行拷贝时,指示PBS来尝试使用安全拷贝程序, scp。这也应用于发送输出文件和stage-in/stage-out文件。如果使用scp时尝试失败,万一scp在远程主机中不存在,PBS将尝试使用rcp拷贝。对本地发送,总是使用“/bin/cp -r”。对于远程发送,需要一个rcp的变量。在任何发送文件失败时程序必须总要提供一个非零的退出状态。对于所有的rcp实现这是不正确的,因此,在源码中包含了一个有名的好的rcp,见mom_rcp。在7.5节发送输出文件可以找到更多的信息。
默认:使用sbindir/pbs_rcp(来自于mom_rcp源码路径),此处sbindir是来自—sbindir的值。
--enable-shell-pipe
当有效后,pbs_mom通过一个管道传递作业脚本的名字给顶级的shell。脚本文件是shell的标准输入文件。更多的信息见7.3节Shell调用。
默认:enabled
--enable-rpp
对于由调度器发向mom的资源询问,使用可靠的包协议,RPP,而不是UDP。如果不可用,使用TCP替代。
默认:enabled
--enable-sp2
为IBM SP打开专门的特性。这个属性仅当机器类型是aix4时有效。PBS机器类型是由配置脚本自动决定的。
默认:disabled
关于在发布版3.1之前的PSSP软件,需要访问两个IBM提供的库,libjm_client.a和libSDR.a(With PSSP software before release 3.1, access to two IBM supplied libraries, libjm_client.a and libSDR.a, are required)。 当安装ssp.clients文件集时安装这些库,并且PBS将期望在标准的位置寻找这些库。
随着PSSP3.1和更高的版本,就不再需要libjm_client.a和libSDR.a,替换为使用switchtbl.a来装载和卸载开关(instead libswitchtbl.a is used to load and unload the switch)。见2.4节依赖于机器的构建说明部分中子章节下的讨论。
--enable-nodemask
在支持SGI Origin2000的节点掩码构建PBS。需要Irix6.x。
默认:disabled
--enable-pemask
在Cray T3e上构建支持控制pe-specific作业放置的调度器的PBS(Biuld PBS on Cray T3e with support for scheduler controlled pe-specific job placement)。需要Unicos/MK2。
默认:disabled
--enable-srfs
这一选项使得能够支持会话预留(Reservable)文件系统。它仅在NASA修改的Cray系统中有效,支持会话预留文件系统,SRFS。
默认:disabled
--enable-array
在Irix 6.x下设置这一选项会强迫使用SGI排列会话跟踪。如果MPI作业使用排列服务进程,推荐(原文为recommanded)使这一特性有效。PBS机器类型设为irix6array。禁用这一选项迫使使用POSIX会话IDs。见2.4.5节SGI系统运行IRIX6。
默认:自动检测其存在性和/etc/config/array的内容(Autodetected by existence and content of /etc/config/array)。
2.3.2. Make File 目标
下面的目标名字对make是可应用的:
all 默认目标,它将编译所有东西。
Build 和all一样。
Depend 构建头文件的依赖规则
Install 安装所有东西
Clean 清除所有对象和在当前子目录树中的可执行程序文件。
Distclean 保留目标树的清洁。它将删除在构建时创建的所有文件。
通过改变到适当的子目录并键入”make”或”make install”,编译或安装一块是可能的,如Mom。
2.4. 依赖于机器的构建说明
有好多仅用于特别类型机器可能存在的变量。如果你不为下面的类型进行构建,你可以忽略这一部分。
2.4.1. Cray Systems
2.4.1.1. Cray C90, J90, and T90 Systems
???????????
2.4.1.2. Unicos 10 with MLS
????????????????????????????
2.4.1.3. Cray T3E Systems
???????????????????????????????????
2.4.2. Digital UNIX
??????????????????????????
2.4.3. HP-UX
在HP-UX下编译PBS时,下面是对CFLAGS的建议值:
--set-cflags=”-Ae”
2.4.4. IBM Workstations
????????????????????????
2.4.5. IBM SP
?????????????????????
2.4.6. SGI Workstations Running IRIX5
???????????????????????
2.4.7. SGI Systems Running IRIX6
??????????????????????????????
2.4.8. FreeBSD and NetBSD
一直到至少版本2.2.6,对FreeBSD存在一个问题。如果会话的领导者退出,有可能失去这些进程的集合所属会话的线索。这意味着一个作业的上级shell留下一些进程在后台运行然后退出,当作业被删除时Mom将不能找到它们。这个问题在将来的版本中应该会修复。
2.4.9. Linux
对于intel x86,支持红帽版本4.x-6.x。对于红帽Linux有两种RPM包。第一种包含整个PBS发行版,意味着适用于前端节点的。第二种是一个mom/client发行版,这意味着适用于机群计算机节点。整个PBS发行包应当安装并装完整个包装盒(The entire PBS distribution package should install and run out of the box)。如果你安装一个单一的分时共享主机,那么你已经完成。如果你要安装计算节点构成的一个集群,那么要在每一个计算节点中安装mom包。对每一个计算节点必须做一下小的配置。
你必须编辑这两个文件:
1、/usr/spool/pbs/mom_priv/config
2、/usr/spool/pbs/default_server
你必须以运行pbs_server的机器的完全限定的域名来替换。
注意:如果你移走PBS包(pbs或pbs_mom),一些文件将会残留在/usr/spool/pbs中。
如果PBS不再需要,这些可以安全的删除掉。
2.4.10. SUN Running SunOS
???????????????????????????????
3. 批处理系统配置
既然系统已经够兼并安装,工作正将开始。必须配置服务器和Moms并实现调度策略。这些事项时紧密联在一起的。有好几种方法可以来管理调度哪一个、多少个作业来执行。每一种方法对调度策略和服务器属性的实现都有着一定的影响。一个例子就是将作业从单一的池(队列)中进行调度的决策,或者将作业划分到多个队列中的其中之一,每一个队列以不同的方式管理。在第4章调度策略中会有更多这类问题的讨论。
3.1. 单一执行系统
如果你在一个单一的系统上安装PBS,你要准备配置那些守护进程并开始注意你的调度策略。我们仍建议你阅读3.2.3节——作业在那里运行,接着阅读3.3节网络地址。不需要节点文件。
如果你愿意,PBS服务器和调度器,pbs_server和pbs_sched,能够运行在一个系统中,而昨夜在另外的系统中执行。这是在下一节讨论的多个执行系统的一个微不足道的方式。我们建议你读一下。如果你正在运行的是默认的调度器,fifo,你将需要一个每一个执行主机都带有一个入口的节点文件。这一入口就是运行有Mom的主机的名子。并且带有后缀:ts。另外,如果你编写了自己的调度器,调度器可以有多种方式指明主机作业应在那个节点上运行,而不是由节点文件指定。
3.2. 多执行系统
如果你要在多于单台计算机上运行,你将需要在所有期望执行作业的每一个系统上安装执行进程(pbs_mom)。如果你运行的是默认的调度器,fifo,你将需要每一个执行主机都带有一个入口的节点文件。这一入口就是运行有Mom的主机的名子,带有后缀:ts。另外,如果你要写自己的调度器,有多种方式来告知你的调度器主机作业将在哪里运行,而不是由服务器节点指定。
3.2.1. 安装多个Moms
共有四种方式,在这些方式中一个Mom可以安装在每一台不同的执行主机上。
1、第一种方式就是在每一台主机上做PBS的完全安装。当这种方式运转时有一点浪费。
2、第二种方式就是以下面的选项重新运行配置文件,-disble-server -set-sched=no。你也可以选择—disbale-clients,但用户经常在一个作业脚本中使用这些PBS命令。这样你将可能来构建这些命令。然后你将需要重新编译,接着在每一台执行主机上进行安装。
3、第三种方式就是在每一个系统中仅做Mom(或许是命令)的安装。如果系统要运行和在PBS编译的地方产生的一样的二进制可执行文件,转到src/mom下以root用户键入make install。要安装命令部分,cd ../cmds,然后再次make install。如果系统需要重新编译,在顶层目录重新编译库文件然后按照上面那样进行处理。
4、第四种方式需要系统应能够执行已存在的二进制文件,需要在sbindir和bindir目录下安装PBS守护进程和命令部分,在初始化期间,每一台主机上的完全构建应该是可用的。这些目录,不像PBS_HOME目录一样可以寄存在一个网络文件系统中。如果主机上的目标树是可访问的,以root身份在每一台执行主机上执行下面的命令:
sh {target_tree}/buildutils/pbs_mkdirs [-d new_directory] mom
sh {target_tree}/buildutils/pbs_mkdirs [-d new_directory] aux
sh {target_tree}/buildutils/pbs_mkdirs [-d new_directory] default
这将在每一台主机上构建所需要的PBS_HOME部分。如果你希望将PBS_HOME放在节点上的不同位置,可以使用-d选项。这一目录必须在节点上的本地存储,而不是在一个共享文件系统上。如果你为PBS_HOME使用了一个不同的路径,而不是在运行configure时指定的,你必须也要以相应的-d选项启动pbs_mom,以至于pbs_mom知道PBS_HOME的位置。
如果目标树不可访问,将pbs_mkdirs shell脚本拷贝到每一台执行主机上,接着以root身份以上面的操作(operands)来执行它。
正如下一节要解释的内容,你现在将需要声明所有执行主机的名字给pbs_server进程。
3.2.2. 声明节点
在PBS中,由服务器来处理将集群节点(实际是节点的虚拟处理器,VPs)给一个作业。每一个节点必须运行有它自己的Mom拷贝。如果仅有分时共享主机为PBS所服务,作业调度器就必须指示作业应在哪里运行。如果没有指定,服务器将在它所运行的主机上执行作业。完整的细节见下一节。如果以独占或临时共享方式来分配节点的虚拟处理器,节点的列表必须指定给服务器。这一列表也可以包含分时共享节点。标记为分时共享的节点将由服务器在一个连同其它节点一起的节点状态报告中列出。然而服务器并没有试图将它们分配给作业。列表中分时共享节点的存在完全作为一种便利提供给作业调度器和其它程序,如xpbsmom。
节点列表是在服务器的home目录PBS_HOME/server_priv下的命名为nodes的文件中提供给服务器的。这是一个每行带有一个单一节点说明的文本文件。文件中每一行的格式为:
node_name[:ts] [property…] [np=NUMBER]
Ø 节点的名字就是节点(主机名字)的网络名字,它不必必须是完全符合限定的(事实上它最好尽可能短一些)。附加在名字后面的可选项:ts指示出这个节点是一个分时共享节点。
Ø 可以指定零个或多个特性。特定仅仅是对PBS没有意义的文字数字字符的串(第一个字符必须是字母)。
Ø 可以添加表达式np=NUMBER来声明节点上的虚拟处理器的数目。NUMBER是一个数字串。例如np=4。这一表达式将允许给一个作业或多于一个作业分配虚拟处理器可达到NUMBER次。对于一个集群节点如果没有指定np=#,将假定只有一个虚拟处理器。然而可以没有警告的在一个分时共享节点上声明np=#,不过它是没有意义的。
Ø 一行中的每一项必须由空格分隔。这些项可以以任何顺序列出,除了主机节点的名子必须放在首位之外。
Ø 如果第一个非空格字符是若个标记’#’,则可以包含注释行。
下面是一个可能的节点文件的例子:
# The first set of nodes are cluster nodes.
# Note that the properties are provided to group
# certain nodes together.
Curly stooge odd
Moe stooge even
Larry stooge even
Harpo marx odd np=2
Groucho marx odd np=3
Chico marx even
# And for fun we throw in one timeshared node.
Chaplin:ts
启动pbs_server之后,通过qmgr命令可以输入或修改节点列表
增加节点:
Qmgr: create node node_name [attributes=values]
属性和它们所关联的可能的值是:
属性 | 值 |
state properties ntype np | free, down, offline 任何字符数字串或逗号分隔的串集合 cluster, time-shared 大于零的虚拟处理器的数量 |
除了可以有管理员设定的上面列出的情况,还有仅能在内部设定的确定的其它情况。
当达到了一个节点上的平均负载门限值时,后台执行作业进程pbs_mom就设置busy状态。在Mom的配置文件[3.6节]中见max_load。当作业在一个节点上运行时将设置Job-exclusive和job-sharing状态。请注意,所有都号分隔的串必须在双引号中括起来。例如:
create node box1 np=2, ntype=cluster, properties=”green, blue”
修改节点:
set node node_name [attributes[+|-]=values]
这里的属性和创建节点时一样。如:
set node box1 properties+=red
set node box1 properties-=green
set node box1 properties=purple
删除节点:
Qmgr: delete node node_name
例如:
delete node box1
3.2.3. 作业在哪里运行
作业在哪里或将在哪里运行是由调度器和服务器之间的交互决定的。这一交互受存在的节点文件的影响。
3.2.3.1. 没有节点文件
如果节点文件不存在,服务器仅仅知道它自己的主机。它假定作业可以在其上运行。当要求运行一个作业而没有明确指定的执行主机时,默认将是它自己的主机。否则,它将尝试直接在运行作业要求的地方执行作业。典型情况下,作业调度器将知道其它的主机因为它是at your site按照那种方式写的。调度器将指示服务器在哪里运行作业。
如果多于一台主机被调度时,默认的fifo调度器依赖于节点文件的存在。文件中所包含的任何或所有节点可以是带有“:ts”的分时共享主机。
3.2.3.2. 存在节点文件
如果一个节点文件存在,那么下面的规则将其作用。
1、如果在运行作业请求中指定了一台明确的主机并且指定的主机在节点文件中是一台分时共享主机,服务器将尝试在那台主机上运行作业。
2、如果在运行作业请求中指定了一台明确的主机并且指定的节点不在节点文件当中作为一台分时共享主机,或者在运行作业请求中指定了多个节点,那么服务器尝试在指定的集群节点中分配一个(或为请求中的多个)虚拟处理器给作业。所有制定的节点必须在服务器的节点文件中存在。如果分配成功,作业[shell脚本]将直接在分配的第一个节点上运行。
3、如果在作业请求中没有指定运行的具体位置,但是作业请求了节点,那么如果可能,与请求相匹配的集群节点上的虚拟处理器被分配。如果分配成功,作业就在与节点请求中第一个说明相匹配的已分配节点上运行。注意,调度器可以修改作业的初始节点请求,见作业属性neednodes。
对于声明有多个虚拟处理器的SMP节点,分配的处理器的顺序由服务器的属性node_pack设置所控制:
Ø 如果设为true,虚拟处理器将首先从有着较少空闲虚拟处理器的节点上获取。这将作业塞进较少的可能节点中,为那些在一个节点上需要多个虚拟处理器的作业留下那些拥有多个虚拟处理器的可利用节点。
Ø 如果node_pack设为false,将从拥有多个空闲虚拟处理器的节点中进行分配。这将作业通过节点进行分散以便最小化作业之间的冲突。
Ø 如果node_pack没有设为true或false,例如,unset,那么虚拟处理器将按照服务器节点文件中声明的节点顺序来分配。小心,如果设置了node_pack,节点的内部顺序将改变。如果node_pack在后来unset,顺序将不再变化,但是它将不再是节点文件中原来建立的顺序。一个用户可以通过给每一个节点表达式添加条件ppn=#(每个节点一个处理器)来请求每个节点中的多个虚拟处理器。例如,在每3个节点中请求2个虚拟处理器并且在每5个节点中请求4个虚拟处理器,用户可以请求
-l nodes=3:ppn=2+2:ppn=4
4、如果设置了服务器属性default_node,它的值将被使用。如果这个值与一个分时共享节点相匹配,作业将在那个节点上运行。如果default_node的值可以被匹配到一个或多个空闲集群节点的集合,它们将被分配给作业。
5、如果没有设置default_node,并且至少定义了一个分时共享节点,那个节点将被使用。如果定义了多个节点,选择其中一个给作业,但是选择那个节点是不可预测的。
6、最后一个选择是按照好像作业已经请求了1#shared来做。作业分配给了任何存在的作业共享虚拟处理器,或者不存在作业共享虚拟处理器,那么一个空闲的虚拟处理器作为作业共享来分配。
上面的意思可以概括为下面的指导方针集:
Ø 如果批处理系统包含一个单一的分时共享主机,这一主机上运行有服务器和Mom,所有作业在这里运行是没有问题的。调度器仅需要说明它要运行哪一个作业。
Ø 如果你要运行一个拥有一个或多个后端主机的分时共享联合体,在联合体中Mom运行在不同的主机上而服务器不是,那么通过不同的主机进行负载均衡就是调度器决定那个主机来放置所选择的作业的事情。这可以通过使用资源监视器API-addreq()和getreq()调用询问Mom那边的资源监视情况来完成。调度器告诉服务器在哪里运行每一个作业。
Ø 如果你的集群由集群节点组成并且你正在运行已经分发的(多个节点)作业,和串行作业一样,典型情况下,调度器典型地使用Query Resource或Avail请求服务器考虑每一个入队列的作业。然后调度器从服务器回应的能够运行的作业中选出一个,并且通过设置服务器属性default_node为一个临时共享节点1#shared来指示,不要求节点的作业将集中放置在一些临时共享节点中。
Ø 如果你有一个批处理系统既支持集群节点又支持一个分时共享节点,情形就像上面那样,仅当你希望改变default_node来指向一个分时共享主机。那些不要求节点的作业将在分时共享主机上结束运行。
Ø 如果你有一个批处理系统既支持集群节点又支持多个分时共享主机,你有一个需要智能调度器的复杂系统。调度器必须识别出哪一个作业需要节点并使用Avail请求服务器。它也必须识别出哪一个作业可以在分时主机中进行负载均衡,并在指示作业应该运行时将主机名字提供给服务器。提供的fifo调度器有这个能力。
3.3. 网络地址和端口
PBS利用完全限定的主机名字来识别作业和它们的位置。通过运行有服务器pbs_server的主机名字可以认识到批处理系统。由守护进程所使用的名子,或用于鉴别信息的名子是规范的主机名字。这一名字从主要的名字域h_name来获取,这个域在由库调用gethostbyaddr()返回的结构中。根据我们对IETF RFCs的理解,这个名字必须是完全限定的并对任何赋予那一主机的IP地址是一致的。三个守护进程和命令组件将尝试使用/etc/services来识别标准的用于通信的端口号。端口号不必低于不可思议的1024。应该加到/etc/services中的服务的名字是:
Pbs 15001/tcp # pbs server (pbs_server)
Pbs_mom 15002/tcp # mom to/from server
Pbs_resmom 15003/tcp # mom resource management requests
Pbs_resmom 15003/udp # mom resource management requests
Pbs_sched 15004/tcp # scheduler
列出的端口号是这一PBS版本使用的默认号码。如果你要改变它们,注意要对所有的系统使用相同的号码。注意,名字pbs_resmom是在分离作业执行(pbs_mom)和资源监视(pbs_resmom)进程时从早期版本遗留下的名字。这两个功能被合并进了pbs_mom,虽然在参考合并后的功能时术语“resmom”仍可能被发现。
如果在/etc/services中没有发现这些服务,PBS组件将默认为上面列出的端口号。
如果服务器是以非标准的端口号启动的,见pbs_server(8) man page中的-p选项,服务器“name”变为host_name.domain:port,端口就是使用的数字端口号码。见改变测试系统的讨论,6.4节。
3.4. 启动守护进程
所有三个守护进程程序,Server, Scheduler和Mom,必须以root的真实有效的uid来运行。典型地,守护进程从系统的boot文件中启动,例如,/etc/rc.local。然而,推荐服务器“由手动”进行首次启动。并在系统引导时间运行之前进行配置。
3.4.1. 启动Mom
Mom应该在系统引导时间启动。典型情况下不需要选项。如果在服务器之前启动它很好地工作,因此它会做好准备响应服务器端的“你在哪里吗?”的ping询问。通过下面这行来启动Mom
{sbindir}/pbs_mom
在/etc/rc2中或者等同的引导文件中。
如果Mom被关闭并且主机系统仍在运行,Mom应当以下面的选项重起:
-p 这将指示Mom让正在运行的作业继续运行。因为Mom已经不再是作业的父进程,所以当作业进程结束时它将不会被通知(SIGCHLD),必须选举一个进程来确定什么时候作业结束。因此资源的使用信息可能不是完全准确的。
-r 这将指导Mom杀死任何已经不再运行的作业。
没有-p或-r选项,Mom将假定由于一个系统的重新启动或冷启动作业处理是不存在的。它不会尝试去杀死这些处理进程,并要求在系统重新启动之前正在运行的作业重新入队列。
默认情况下,Mom仅从它的系统中一个授权的端口接受连接,可以是与“localhost”相关的端口或是通过gethostname(2)返回的名字。如果服务器或调度器运行在不同的主机上,主机名字必须在Mom的配置文件中指定。见pbs_mom(8B) man page 中的-c选项,在管理员指南中,见3.6节配置文件中配置执行服务器,pbs_mom的更多信息。
你要是希望利用序言和/或结束语脚本特性,请看6.2节“作业序言/结束语脚本”。
3.4.2. 启动服务器
服务器的初始化启动或任何在重新创建了home目录的第一次启动必须带上-t 创建选项。这个选项会指示服务器创建一个新的服务器数据库。这最好手动完成。如果一个数据库已经存在,在接收到肯定的确认相应之后就会丢弃它。这时需要配置服务器。见3.5节服务器配置。创建选项使服务器处于一个“空闲”状态。在这一状态中,服务器不会联系调度器并且作业也不会运行,除非手工使用qrun(1B)命令。一旦服务器就绪,它就能通过设置服务器属性scheduling值为true来置于“激活”状态:
qmgr –c “set server scheduling=true”
scheduling的值可以跨过服务器的终止/启动而保留。服务器配置完之后,就可以放进服务(service)中。正常情况下,它会通过系统引导文件中这样的一行来启动:
{sbindir}/pbs_server
可以指定-t start_type选项,start_type是在psb_server man page中指定的一个选项。默认是warm。另一个有用的选项是-a true|false选项。这会打开|关闭PBS调度器的调用功能。
3.4.3. 启动调度器
调度器也应该在系统引导时间启动。通过在/etc/rc2或等同的文件中输入命令来启动:
{sbindir}/pbs_sched [options]
对于默认的fifo调度器不需要选项。典型情况下,对于基于BaSL的调度器文艺需要的选项是-c config_file选项,指出配置文件。对于基于BaSL的调度器,这个选项用于指定要调用的Tcl脚本。
3.5. 配置作业服务器,pbs_server
服务器管理包括配置服务器属性和建立队列和它们的属性。不像Mom和作业调度器,除了节点文件,作业服务器(pbs_server)在它运行时配置的。使用qmgr(1B)命令完成配置服务器和队列属性并创建队列。这必须要使用root身份或者在这一指南中的构建概要一节最后一步所指出的被授予PBS管理员权限的用户。确切地说,需要来设置什么依赖于你的调度策略和你如何选择来实现它。系统至少需要建立一个队列并初始化特定的服务器属性。
下面是“最低要求”服务器属性和推荐的属性。由于例子的缘故,我们将假定你的环境(your site)是一个大的网络的子域并且在你的环境中所有主机都有下面各式的名字:
host.foo.bar.com
且批处理系统包括一台以big.foo.bar.com命名的大型机。
3.5.1. 服务器配置
下面的属性是需要的或推荐的。它们通过qmgr(1B)命令的子命令set server(s s)来设置。这里不会讨论所有的服务器属性,只有使得系统启动并运行的合理的属性才会讨论。见pbs_server_attributes man page查看服务器属性的完整清单。
3.5.1.1. 需要的服务器属性
default_queue
如果队列没有在qsub(1B)命令中指定这将声明作业提交的默认队列。队列必须首先创建。例如:
Qmgr: c g dque queue_type=execution
Qmgr: s s default_queue=dque
3.5.1.2. 推荐的服务器属性
acl_hosts
可以提交作业的主机列表。例如,如果你希望允许你的子域中的所有系统另加一台其它的主机,boss,在管理中心(headquarters)来提交作业,那就设置:
Qmgr: s s acl_hosts=*.foo.bar.com, boss.hq.bar.com
Acl_host_enable
使得服务器主机可以访问控制列表,见上面。
Qmgr: s s acl_host_enable=true
default_node
定义可以运行作业的节点,否则指定默认节点。见看3.2.3节作业在哪里运行,如何设置这个属性依赖于你的系统的讨论。默认值(也是当这个属性没有设置时的假定值)是1#shared。
Qmgr: s s default_node=big
注意,这个值可以指定为big或者big.foo.bar.com。如果有一个节点文件,这个值必须准确匹配节点文件中指定的名字。例如,两个地方都是big或者都是big.foo.bar.com。
managers
在指定的主机定义授予那个用户批处理系统管理员的权限。例如,在子域的所有系统中授予“me”权限,并且仅从这个系统big中授予“sam”权限,那么:
Qmgr: s s managers=me@*.foo.bar.com, sam@big.foo.bar.com
node_pack
定义分配给作业的多个cpu集群节点的顺序。见3.2.3节作业在哪里运行的讨论。如果设置这个属性,内部节点列表将基于空闲虚拟处理器的数量来排序。如果设为true,作业被挤放到最少的可能节点中。如果设为false,作业将分散到尽量多的可能节点中。如果没有设置,作业将按照声明给服务器的节点的顺序来放置。
operators
在一台指定的主机上,定义授予那些用户批处理系统操作员权限,由管理员指定。
query_other_jobs
这个属性决定了访问属于其他用户的作业状态的能力。如果没有设置,或者设置为false,用户将不能询问不属于他(她)自己的任何作业的状态。大多情况会乐意把这个属性设为true:
Qmgr: s s query_other_jobs = true
Resources_defaults
这一属性设置(establishes)了分配给作业的资源限制,这些作业是已经提交的而没有限制的作业,对此属性没有队列限制。对任何用于调度策略的资源需求分配一个默认值是很重要的。对你的系统类型(* is irix6, linux, solaris5,…)见文档pbs_resources_* man page。
Qmgr: s s resources_defaults.cput=5:00
Qmgr: s s resources_defaults.mem=4mb
Resources_max
这一属性设置了在服务器上进入任何队列的作业可以使用的资源的最大数量。这一限制仅当没有指定的队列对指定的资源定义了resources_max属性。
3.5.2. 队列配置
PBS定义了两种类型的队列,路由队列和执行队列。一个路由队列是一个用于把作业移到不同PBS服务器中存在的其它队列中的队列。路由队列和早期的NQS管道队列很相似。一个作业必须寄存在符合运行条件的执行队列中。在作业运行期间它一直保留在执行队列中。
一个服务器可以有其中一种或两种类型都有的多个队列。一个服务器必须至少定义一个队列。典型情况下,它将是一个执行队列;当寄存在一个路由队列中时作业不能被执行。
队列属性分为三组:那些两种队列类型都适用的,那些仅适用于执行队列的,和那些仅适用于路由队列的。如果一个“仅适用于执行队列”的属性设置给了一个路由队列,或者相反,它将被系统简单忽略。但是,由于这种情况可能暗示着管理员犯了一个错误,服务器会对这一冲突发出一个警告信息。如果改变了队列的类型而有一些属性并不适用于新的类型时会发出同样的信息。
这里不会讨论所有的队列属性,只有使得系统启动并运行的合理的属性才会讨论。完整的队列属性的列表见pbs_queue_attributes man page。
3.5.2.1. 对所有队列都需要的属性
queue_type
必须设置为execution或者routing。队列类型必须在队列起作用之前设置。如果类型与仅对其它队列类型有效的特定属性相冲突,设置请求会被服务器拒绝。
Qmgr: s q dque queue_type = execution
enabled
如果设为true,作业可以压入队列。如果设为false,作业将不被接受。
Qmgr: s q dque enabled = true
started
如果设为true,队列中的作业会被处理。如果队列是一个路由队列,由服务器进行发送(routed);或者如果是一个执行队列,就由调度器调度。
Qmgr: s q dque started = true
3.5.2.2. 路由队列需要的属性
route_destinations
列出本地队列,或者在这一路由队列中的作业可以发送到的其它服务器中的队列。例如:
Qmgr: s q routem route_destinations = dque, overthere@another.foo.bar.com
3.5.2.3. 对所有队列都推荐的属性
resources_max
如果你选择了基于作业大小或类型的多个执行队列,你或许希望为不同的资源限制设置最大和最小值。这将限制可以进入队列的作业。可以建立一个路由队列来“供给”执行队列并且作业可以根据那些限制自动进行分发。
在队列级别对指定的资源定义resource_max值将覆盖服务器级别中定义的相同的resource_max值。因此,对一个队列限制,和定义一个较低的值一样,定义一个比服务器相应限制较高的值是可能的。对一种资源类型,如果没有声明最大数量值,对那种资源就没有限制。例如:
s q dque resources_max.cput = 2:00:00
设置了一个限制,即请求cpu时间不超过两个小时的作业才允许入队列。对内存没有限制,mem在限制一个作业时可以请求。
Resources_min
在一个作业将被接受进入队列之前,定义由作业指定的资源限制的最小值。如果没有设置,就没有最小限制。
3.5.2.4. 对执行队列推荐的属性
resources_default
对于进入到没有指定一定资源限制的队列中的作业定义一组默认值。有一个相应的服务器属性对所有作业设置了一个默认值。
对指定资源用途的限制是通过检查不同作业,队列和服务器属性来设置的。下面的列表显示了这些属性以及它们的前驱:
1、作业属性Resource_List,例如,用户所请求的。
2、队列属性resources_default.
3、服务器属性resources_default。
4、队列属性resource_max。
5、服务器属性resources_max。
*、在Unicos下面,用户提供的值必须在系统用户数据库中,(用户数据库)UDB,用于限制用户的。如果用户没有提供一个值,就使用上面列出的默认值中较低的值和UDB限制值。
请注意,对一个作业,一个没有设置的资源限制被视为一个无限的限制。
3.5.2.5. 作业进入队列的选择性路由
经常基于作业的资源要求,发送一个作业到一个服务器中的不同队列或者服务器之间的不同队列是令人想要的。上面讨论的队列属性resources_min和resources_max使得这个选择性路由成为可能。作为一个例子,让我们假定你希望建立两个执行队列,一个用于小于1分钟cpu时间的短作业,另一个用于大于1分钟或更长的长作业。称它们为short和long。按下面那样应用resources_min和resources_max属性:
Qmgr: set queue short resources_max.cput = 59
Qmgr: set queue long resources_min.cput = 60
当一个作业要入队列,他请求的资源列表相对于队列的限制要进行测试:
resources_min <= job_requirement <= resources_max。如果资源测试失败,不接受作业进入队列。因此,要求20秒cpu时间的作业将被接受进入到short队列而不是long队列。注意,如果最小和最大限制相同,只有确切的值才会通过测试。
你可能希望建立一个路由队列来发送作业到带有资源限制的队列中。例如:
Qmgr: create queue feed queue_type = routing
Qmgr: set queue feed route_destinations = “short, long”
Qmgr: set server default_queue = feed
一个作业依赖于它要求的cpu时间将在short或long队列中结束。你应该总是按照强限制性优先的顺序列出目标队列,第一个满足作业需求的队列将成为它的第一个目标(假定队列是有效的)。把上面的例子扩展为三个队列:
Qmgr: set queue short resources_max.cput = 59
Qmgr: set queue long resources_min.cput = 1:00, resources_max.cput = 1:00:00
Qmgr: create queue verylong queue_type = execution
Qmgr: set queue feed route_destinations = “short, long, verylong”
请求20分钟cpu时间的作业将放入long队列。请求1小时10分钟的作业默认情况下将在队列verylong中结束。小心,如果在一个如上面显示的带有cput的资源上做测试,并且一个作业没有指定资源项(它没有显示在qsub命令-l resource=value的列表中),测试将通过。在上面的情况中,没有cpu时间限制的作业将允许进入short队列。由于这个原因,与未设置的限制就被考虑为一个无限的限制这个事实一起,你可能希望给队列或者服务器添加一个默认值。即
Qmgr: set queue short resources_default.cput = 40
或者
Qmgr: set server resources_default.cput = 40
这将看到没有cpu时间说明的作业被限制为40秒。在一个队列级别中的resources_default属性仅应用于那个队列中的作业。注意两个事实:
1、如果赋予了一个默认值,说明它是在最大和最小值测试之后完成的。
2、如果一个作业移到了另一个队列,从一个队列属性resources_default中赋予一个作业的默认值是不会一起移过去的,因此当作业被指定时,那些资源限制变为未设置。如果新的队列制定了默认值,当作业在新的队列中时,那些默认值会赋给它。
3、如果没有队列级的默认值那么服务器级别的默认值会被应用。在上面的例子中,默认属性或者被在服务器级别应用或者被在路由队列级别应用。
最小和最大队列限制与数字化的资源取值一起工作,包括时间和大小值。一般,由于字符比较顺序,与取值为字符串的资源不能一起工作。但是,最小和最大值设置为相同的值来强制一个准确的匹配是可行的甚至对于取值为字符串的资源,例如,
Qmgr: set queue big resources_max.arch = unicos8
Qmgr: set queue big resources_mon.arch = unicos8
能够用于限制作业进入指定有arch = unicos8的队列big。此外,记住如果作业没有指定arch,测试会自动地通过并且作业被接受进入队列。
在队列(和服务器)上设置关于一个作业能够请求多少个节点的限制是可能的。节点资源本身是一个文本串并且限制比较困难。但是,两个附加的制度资源对所有作业是存在的。它们是nodect和neednodes。按照“节点”资源说明中所声明,Nodect(节点数量)通过服务器设置为用户期望的整数数字。分析那个声明,节点的结果总数设置在nodect中。当一个管理员希望在进入队列的作业所使用的节点数量上放置一个整数限制(resources_min or resources_max)时这是很有用的。基于声明节点的早一点的例子,如果一个用户请求下面的节点,见7.2节并行节点查看更多信息:
3: marx + 2: stooge
nodect将被设为5(3+2)。Neednodes由服务器初始设置为和nodes一样的值。Neednodes可以被用于专门策略的调度器所修改。Neednodes的内容决定了实际分配给作业那些节点。Neednodes对管理员是可见的但对未授权的用户是不可见的。
如果你想为“nodes”(如果用户没有提供时为资源设置的一个值)设置一个队列默认值,“nodect”和“neednodes”的相应默认值也必须设置。例如:
qmgr: set queue foo resources_default.nodes = 1
qmgr: set queue foo resources_default.nodect = 1
qmgr: set queue foo resources_default.neednodes = 1
只有“nodect”才设置最大和最小限制。例如:
qmgr: set queue foo resources_min.nodect = 1
qmgr: set queue foo resources_max.nodect = 15
一定不要为Nodes或neednodes设置最大和最小值,因此那些是字符串值。
3.5.3. 报告服务器配置
你是否希望报告一个服务器的配置信息来重用,可以使用qmgr(8B)的子命令print。例如,
qmgr –c “print server” > /tmp/server.con
qmgr子命令需要文件server.con中的记录来重新创建包括队列的当前配置。命令应能通过标准输入返回给qmgr:
qmgr < /tmp/server.con
3.6. 配置可执行服务器,pbs_mom
Mom是通过在初始化时读一个配置文件并发送SIGHUP信号时配置的。这个文件在pbs_mom(8) man page同样也在下面的章节中描述。
当Mom运行时如果没有指定-c选项,如果存在它将打开PBS_HOME/mom_priv/config。如果不存在,Mom将以任何方式继续。这一文件可以放在别的地方或者给它一个不同的名字,在这种情况下,pbs_mom必须以-c选项启动。文件给pbs_mom提供了好几种类型的运行时信息:静态资源的名字和值,通过一个shell escape请求运行的程序提供的外部资源,和在初始化(和重新初始化)时传递给内部设置函数的值。每一项类型和由空格分开的各部分在一单独的行上。如果行以“#”开始,这行被认为是一个注释接着被跳过。
3.6.1. 访问控制和初始化值
一个初始化值指示符(directive)有一个以美元符号$开始的名字并且必须通过一个内部表被Mom所认识。当前这个表的输入是:
clienthost
一个$clienthost输入致使一个主机名字加入到主机列表中,只要使用一个授权的端口Mom就允许这些主机进行连接。例如,对于允许主机“fred”和“wilma”来连接的配置文件,有两行记录:
$clienthost fred
$clienthost wilma
pbs_mom总是允许两个主机名字来连接,“localhost”和由系统调用gethostname()返回的名字。这些名字不需要再配置文件中指定。作为“clienthosts”列出的主机组成了一个主机“姐妹关系”。姐妹关系中的任何一个将接受来自一个调度器[资源监视器(RM)请求]或者服务器[待执行的作业]或者姐妹关系内部的连接。它们也将从姐妹关系当中的内部Mom(IM)消息。对一个能够彼此进行IM消息通信的姐妹关系,它们必须共享相同的RM端口。
对于一个能够从一个Mom中查寻资源信息的调度器,调度器的主机必须作为一个clienthost来列出。如果服务器提供有节点文件,文件中主机(节点)的IP地址将由服务器转寄给节点文件中列出的每一台主机上的Mom。这些主机不必存在于不同的Mom配置文件中因为它们从服务器端接收列表时将在内部添加。服务器主机必须和Mom是同样的主机或者在每一个Mom配置文件中作为一个clienthost输入列出。
restricted
一个$restricted主机输入导致一个主机名字被加入到主机列表中,这些主机将不需要使用一个授权的端口就被允许连接到Mom。这些名字允许通配符匹配。例如,这有一行配置文件记录,它将允许来自于域“ibm.com”中的任何主机的查询。
$restricted *.ibm.com
来自于指定的主机中的连接被限制为只可以做内部查询。控制文件中没有资源可以汇报并且没有控制请求可以发布。这将防止非root身份运行的任何shell命令。这类输入典型用于指定一个诸如xpbsmom这样的监视工具可以运行的主机。Xpbsmom将向Mom查询一般的资源信息。
logevent
一个$logevent输入设置了能决定由pbs_mom登记日志事件类型的掩码。例如:
$logevent 0x1ff
$logevent 255
第一个例子将登记日志事件掩码设置为0x1ff(511),这将使得能够登记包括调试事件在内的所有事件。事件的值在6.3节使用和维护日志部分。
ideal_load
一个$ideal_load指示符声明了一个节点负载的低水位标记。它在联合$max_load指示符下起作用。当节点上的平均负载低于ideal_load时,节点上的Mom将通知服务器节点已经不再忙。例如:
$ideal_load 2.0
max_load
一个$max_load指示符声明了一个节点负载的高水位标记。它与$ideal_load指示符联合使用。当平均负载超过高水位标记时,节点上的Mom将通知服务器节点忙。节点的状态将显示为busy。一个繁忙的集群节点将不再分配给作业。这在防止将作业分配给那些忙于交互会话的节点是很有用的。一个busy状态的分时共享节点在调度器的指示下仍可以运行新的作业。两个指示符$ideal_load和$max_load都增加了一个静态资源,ideal_load和max_load,它们可以由调度器查询。当均衡作业负载时默认的FIFO调度器支持这些静态资源。更多的信息见FIFO调度器的讨论。
usecp
如果Mom要移动一个文件到一台它自己所在主机之外的主机,Mom正常情况下使用scp或rcp来传输文件。这也应用于stage-in/out以及作业的标准输出/错误的发送。[清学习qsub的-o和-e选项,学习qsub(1) man page来理解标准输出和错误文件的命名习惯。]报告的目标为hostx:/full/path/name。因此如果hostx和运行Mom的不是同一个系统,那么它使用scp或rcp;如果是同一系统,那么Mom使用/bin/cp。
如果目标文件系统是在PBS环境(集群)的所有系统中挂载的NFS,那么cp可以比s/rcp工作的更好。配置文件中一个或多个$usecp指示符能用于在那些cp命令可替代s/rcp的文件系统中通知Mom。$usecp输入的格式:
$usecp host_specification:path_prefix substitute_prefix
host_specification是一个完全限定的host-domain名字或者和在服务器主机ACL属性中使用的那样是一个通配的host-domain说明。Path_prefix是在指定的主机中可见的NFS文件的完全限定路径的第一部分。Substitute_prefix是指向Mom主机中相同文件的路径的初始部分。如果使用了不同的挂载点,path_prefix和substitute_prefix会不同。如果对于交叉挂载(cross mounted)的文件系统使用了相同的挂载点,那么两个前缀将是一样的。当给定一个文件目标时,Mom将:
1、匹配host_spec和它的主机名字。如果相匹配,Mom将使用cp命令来移动文件。如果host_spec为localhost,那么Mom也将使用cp。
2、如果匹配在第一步中失败,Mom将顺序匹配目标的主机部分和每一个$usecp host_specification。如果主机相匹配,Mom将匹配path_prefix和目标名字的初始部分。如果相匹配,Mom将丢弃主机名字,以substitute_prefix来替换与path_prefix相匹配的路径的初始部分,对目标使用cp。
3、如果主机既不是本地主机也不匹配任何usecp指示符,Mom将使用rcp命令来移动文件。
例如,主机myworkstation.company.com上的一个用户在她的当前路径是/u/wk/her_home/proj时提交了一个作业。她的作业的输出目标将由PBS给定为myworkstation.company.com:/u/wk/her_home/proj/123.OU。作业在主机pool2.company.com上运行,这一主机上有挂载为/r/home/her_home的用户home文件系统,那么在pool2上的配置文件中,下面的输入:
$usecp myworkstation.company.com: /u/wk/ /r/home/
$usecp *.company.com: /u/wk/ /r/home/
都将导致一个cp拷贝到 /r/home/her_home/proj/123.OU而不是一个rcp到myworkstation.company.com:/u/wk/her_home/proj/123.OU。
注意,目标是按照配置文件中的顺序来匹配$usecp的输入的。主机和文件前缀的第一个匹配决定了替代部分(substitution)。因此,如果你在HostA上的/foo和每一台其它主机上的/bar上挂载有相同的文件系统,那么对于pool1的输入应该按照下面的顺序:
$usecp HostA.company.com:/foo /bar
$usecp *.company.com:/bar /bar
cputmult
一个$cputmult输入设置了一个用于调整由作业所使用的cpu时间的因子。这是提供来允许调整可控的(charged)时间和强加的(enforced)限制的,这里作业可能运行在有着不同的cpu性能的系统中。如果Mom所在的系统比参考(reference)系统更快,设置cputmult为一个大于1.0的十进制值。如果Mom所在的系统更慢,设置cputmult为一个介于1.0和0.0之间的值。这个值由:
value = speed_of_this_system / speed_of_reference_system
给出。例如:
$cputmult 1.5
或者
$cputmult 0.75
wallmult
一个$wallmult输入设置了一个由作业针对一个公共的参考系统用于调整壁钟时间用法的因子。这一因子用于壁钟时间的计算和限制,和cputmult用于cpu时间的方式相同。
prologalarm
一个$prologalarm输入为序言和结束语设置以秒为单位的暂停(time-out)周期。如果脚本悬而未决或者要花费好长时间来执行,设置警报是来防止脚本锁定作业。默认值是30秒。一个例子:
$prologalarm 60
3.6.2. 静态资源
对于静态资源的名字和值,配置文件包括一个资源名字/值对的列表,每行一对并且由空格分隔。静态资源名字和值的一个例子可以是不同类型的磁带驱动的数量,可以由
tape3480 4
tape3420 2
tapedat 1
tape8mm 1
来指定。名字可以是任何形式而没有限制为实际的硬件。例如,输入pong 1可以用于指示调度器这一系统中一个特定的软件是可用的。
3.6.3. shell 命令
如果一个名字/值对的值部分的第一个字符是惊叹号(!)行的整个剩余部分被保留并通过标准库例程system(3)的服务来执行。作为对资源查询的响应,返回shell命令输出的第一行。
Shell escape为资源监视器提供了一种方式来产生任意的(arbitrary)信息给调度器。正如下面解释的那样,随着资源查询发送的任何限制符(qualifier)的值替换一个百分号(%)后面跟有限制符的名字的记号,完成了参数的置换。例如,这有一个配置文件行给出了一个“escape”的资源名字:
escape !echo %xxx %yyy
如果一个对于“escape”的查询没有带限制符发送,执行的命令将是“echo %xxx %yyy”。如果发送了一个限制符“escape[xxx=hi there]”,执行的命令将是“echo hi there %yyy”。如果发送了两个限制符“escape[xxx=hi][yyy=there]”,执行的命令将是“echo hi there”。如果发送的限制符在命令行中没有匹配的记号,“escape[zzz=snafu]”,将报告一个错误。
另一个例子将允许带有Mom的调度器查询一个文件的存在性。下面的输入将被放在Mom的配置文件中:
file_exists !if test –f %file; then echo yes; else echo no; fi
查询串“file_exists[file=/tmp/lockout]”如果文件存在时将返回“yes”,否则返回“no”。
另一个shell命令配置输入的可能用途是提供一种方法,据此可以跟踪移动的软件许可的使用。如果可以编写一个程序来查询许可服务器,可以返回有效许可的数量来告知调度器是否可能来运行一个需要某一个(certain)许可的包的作业。[你获得了写这个程序的快乐(You get the fun and games of writing this program)]
3.6.4. 配置文件的例子
对于下面的例子,我们将假定你的地点(you site)是“The Widget Company”并且你的域名是“wedget.com”。下面是一个针对pbs_mom的配置文件的例子,在此,批处理系统是一个单一大型系统。我们想登记大多的记录并指定:系统有一个8mm磁带驱动。
$logevent 0x0ff
tape8mm 1
如果用于大型系统的调度器正好在一台前端机器上,命名为fe.wedget.com,那么你想允许它来访问Mom,因此配置文件变为:
$logevent 0x0ff
$clienthost fe.widget.com
tape8mm 1
现在,中心已经扩展为两个大型系统。新的系统有两个磁带驱动并且比旧系统快30%。你希望对用户同样的收费不管他们的作业在哪里运行。基于旧系统的收费,你需要将新系统上用掉的时间乘以1.3来和旧系统中收取同样的费用。旧系统中的配置文件保持不变。对于新系统的配置文件是:
$logevent 0x0ff
$clienthost fe.widget.com
$cputmult 1.3
$wallmult 1.3
tape8mm 2
现在你把运行Linux的多台PC组成一个命名为“bevy”的集群。在一群PC当中(as in a bevy of PCs),调度器和服务器运行在同样有挂载为/u/home/…的用户的home文件系统的bevyboss.widget.com上。节点命名为bevy1.widget.com, bevy2.widget.com等。用户的home文件系统是挂载为/r/home/…的NFS。你的个人工作站,adm.widget.com,是你计划运行xpbsmom来监视集群的地方。对于每一个Mom,配置文件看上去像:
$logevent 0x1ff
$clienthost bevyboss.widget.com
$restricted adm.widget.com
$usecp bevyboss.widget.com:/u/home /r/home
3.7. 配置调度器,pbs_sched
一个调度器需要的配置依赖于调度器本身。如果你要以已发布的fifo调度器为开始,请跳到这一指南中前面4.5.1节“FIFO调度器”。
4. 调度策略
(待续……………….)