Software license management is typically enabled in one of two models: node-locked and floating. Under a node-locked license, use of a given application is constrained to certain hosts. For example, node013 may support up to two simultaneous jobs accessing application matlab. In a floating license model, a limited number of software licenses are made available cluster wide, and these licenses may be used on any combination of compute hosts. In each case, these licenses are consumable and application access is denied once they are gone.
Moab supports both node-locked and floating license models and even allows mixing the two models simultaneously. Moab monitors license usage and only launches an application when required software license availability is guaranteed. In addition, Moab also reserves licenses in conjunction with future jobs to ensure these jobs can run at the appropriate time.
|By default, Moab supports up to 128 independent license types.|
|Identical licenses, regardless of case, are invalid because case recognition is insensitive. Thus, two licenses spelled the same with different capitalization are still recognized as the same license, and are thus invalid.|
Moab can use one of three methods to determine license availability. These methods include locally specifying consumable generic resources, obtaining consumable generic resource information from the resource manager, and interfacing directly with a license manager.
Both node-locked and floating licenses can be locally specified within Moab using the NODECFG parameter. In all cases, this is accomplished by associating the license with a node using the GRES (or generic resource) attribute. If floating, the total cluster-wide license count should be associated with the GLOBAL node. If node-locked, the per node license count should be associated with each compute host (or globally using the DEFAULT node). For example, if a site has two node-locked licenses for application EvalA and six floating licenses for application EvalB, the following configuration could be used:
NODECFG[node001] GRES=EvalA:2 NODECFG[node002] GRES=EvalA:2 NODECFG[GLOBAL] GRES=EvalB:6 ...
Some resource managers support the ability to define and track generic resource usage at a per node level. In such cases, support for node-locked licenses may be enabled by specifying this information within the resource manager. Moab automatically detects and schedules these resources. For example, in the case of TORQUE, this can be accomplished by adding generic resource specification lines to the MOM configuration file.
Moab may also obtain live software license information from a running license manager. Direct interfaces to supported license managers such as FlexLM may be created using the Native Resource Manager feature. A complete example on interfacing to an external license manager is provided in the FLEXlm section of the native resource manager overview.
Interfacing to Multiple License Managers
Moab may interface to multiple external license managers simultaneously simply by defining additional native resource manager interfaces. See the FLEXlm Native Resource Manager Overview for more information.
Requesting use of software licenses within jobs is typically done in one of two ways. In most cases, the native resource manager job submission language provides a direct method of license specification; for example, in the case of TORQUE, OpenPBS, or PBSPro, the software argument could be specified using the format <SOFTWARE_NAME>[+<LICENSE_COUNT>] as in the following example:
> qsub -l nodes=2,software=blast cmdscript.txt
|The license count is a job total, not a per task total, and the license count value defaults to 1.|
An alternative to direct specification is the use of the Moab resource manager extensions. With these extensions, licenses can be requested as generic resources, using the GRES attribute. The job in the preceding example could also be requested using the following syntax:
> qsub -l nodes=2 -W x=GRES:blast cmdscript.txt
In each case, Moab automatically determines if the software licenses are node-locked or floating and applies resource requirements accordingly.
If a job requires multiple software licenses, whether of the same or different types, a user would use the following syntax:
> qsub -l nodes=2 -W x=GRES:blast+2 cmdscript.txt # two 'blast' licenses required > qsub -l nodes=2 -W x=GRES:blast+2%bkeep+3 cmdscript.txt # two 'blast' and three 'bkeep' licenses are required