Application-level resource requirements can be simple (one requirement for all slots) or compound (different requirements for specified numbers of slots). When resource requirements are set at the application-level as well as the job-level or queue-level, the requirements are combined in different ways depending on whether they are simple or compound.
If resource requirements are not defined at the application level, simple job-level and simple queue-level resource requirements are merged.
Section |
Simple resource requirement multi-level behavior |
---|---|
select |
All levels satisfied |
same |
All levels combined |
order span cu |
Job-level section overwrites application-level section, which overwrites queue-level section (if a given level is present) |
rusage |
All levels merge If conflicts occur the job-level section overwrites the application-level section, which overwrites the queue-level section. |
affinity |
Job-level section overwrites application-level section, which overwrites queue-level section (if a given level is present) |
Compound application-level resource requirements are merged in the following manner:
When a compound resource requirement is set at the application level, it will be ignored if any job-level resource requirements (simple or compound) are defined.
In the event no job-level resource requirements are set, the compound application-level requirements interact with queue-level resource requirement strings in the following ways:
If no queue-level resource requirement is defined or a compound queue-level resource requirement is defined, the compound application-level requirement is used.
If a simple queue-level requirement is defined, the application-level and queue-level requirements combine as follows:
Section |
Compound application and simple queue behavior |
---|---|
select |
Both levels satisfied; queue requirement applies to all compound terms |
same |
Queue level ignored |
order span |
Application-level section overwrites queue-level section (if a given level is present); queue requirement (if used) applies to all compound terms |
rusage |
For example: if the application-level requirement is num1*{rusage[R1]} + num2*{rusage[R2]} and the queue-level requirement is rusage[RQ] where RQ is a job resource, the merged requirement is num1*{rusage[merge(R1,RQ)]} + num2*{rusage[R2]} |
affinity |
Job-level section overwrites application-level section, which overwrites queue-level section (if a given level is present) |
For internal load indices and duration, jobs are rejected if they specify resource reservation requirements at the job level or application level that exceed the requirements specified in the queue.
If RES_REQ is defined at the queue level and there are no load thresholds that are defined, the pending reasons for each individual load index will not be displayed by bjobs.
When LSF_STRICT_RESREQ=Y is configured in lsf.conf, resource requirement strings in select sections must conform to a more strict syntax. The strict resource requirement syntax only applies to the select section. It does not apply to the other resource requirement sections (order, rusage, same, span, or cu). When LSF_STRICT_RESREQ=Y in lsf.conf, LSF rejects resource requirement strings where an rusage section contains a non-consumable resource.
When the parameter RESRSV_LIMIT in lsb.queues is set, the merged application-level and job-level rusage consumable resource requirements must satisfy any limits set by RESRSV_LIMIT, or the job will be rejected.