After all N (backfill_depth=N) jobs have been added to the calendar, the equivalence classes will start being used.

This means if one job within the equivalence class can not run, the rest of the jobs within the class will not be considered in the cycle.


There is a new qmgr scheduler object attribute named 'equiv_class_enable' which will switch between the old and new behavior of this feature.

Usage: qmgr> s sched equiv_class_enable: True


Once equivalence classes are enabled, the scheduler will create a set of jobs that are equivalent.  An equivalence class is made up of jobs that have the same euser, egroup, project, select, place, and Resource_List resources.  Any undesired resources can be excluded by listing them in the 'equiv_class_exclude' sched attribute.  Any resource listed is excluded from both the Resource_List resources and the select resources.


The external behavior of this feature is seen in the following way in the scheduler logs:

Old:

...;Job Id;Considering job to run
...;Job Id;<Reason job can not run>
...;Job Id;Considering job to run
...

i.e. each job gets its own "Considering job to run line"

Example:

04/15/2015 16:01:18;1234.mars;Considering job to run
04/15/2015 16:01:18;1234.mars;Insufficient amount of resource: ncpus
04/15/2015 16:01:18;1235.mars;Considering job to run


New:

...;Job Id;Considering job to run
...;Job Id;<Reason job can not run>
<same line for rest of equivalence class


Example:

04/15/2015 16:01:18;1234.mars;Considering job to run
04/15/2015 16:01:18;1234.mars;Insufficient amount of resource: ncpus
04/15/2015 16:01:18;1235.mars;Insufficient amount of resource: ncpus
04/15/2015 16:01:18;1236.mars;Insufficient amount of resource: ncpus
04/15/2015 16:01:18;1237.mars;Insufficient amount of resource: ncpus