Use case:
admins want to be able to configure the scheduler without having to modify one or more of the 4 root owned files and then need root permission to restart the scheduler or HUP it.
PBS managers want to be able to change the scheduler configuration without having to have root access
Gist of design proposal::
Move the scheduler configuration files into qmgr and allow pbs managers the ability to modify the settings
Design proposal mentioned below tends to address both these problem.
Below is the list of policies that reside in the policy attribute of scheduler.
Policy name | Type | Default value | example |
---|---|---|---|
round_robin | Boolean | round_robin=False | qmgr -c "s policy p1 round_robin=True" |
by_queue | Boolean | by_queue=True | qmgr -c "s policy p1 by_queue=True" |
strict_ordering | Boolean | strict_ordering=False | qmgr -c "s policy p1 strict_ordering=True" |
help_starving_jobs | Boolean | help_starving_jobs=True | qmgr -c "s policy p1 help_starving_jobs=True" |
max_starve | string | max_starve="24:00:00" | qmgr -c "s policy p1 max_starve=24:00:00" |
node_sort_key | array_string | node_sort_key = "sort_priority HIGH" | qmgr -c 's policy p1 node_sort_key="sort_priority HIGH, ncpus HIGH"' |
provision_policy | string | provision_policy="aggressive_provision" | qmgr -c "s policy p1 provision_policy="aggressive_provision" |
exclude_resources | array_string | NOT SET BY DEFAULT | qmgr -c 's policy p1 exclude_resources="vmem, color"' |
load_balancing | Boolean | load_balancing=False | qmgr -c "s policy p1 load_balancing=True" |
fairshare | Boolean | fairshare=False | qmgr -c "s policy p1 fairshare=True" |
fairshare_group | fs_group | NOT SET BY DEFAULT | qmgr -c "s policy p1 fairshare_group=fs_grp1" |
preemption | Boolean | preemption=True | qmgr -c "s policy p1 preemption=True" |
preempt_queue_prio | integer | preempt_queue_prio=150 | qmgr -c "s policy p1 preempt_queue_prio=190" |
preempt_prio | string | preempt_prio="express_queue, normal_jobs" | qmgr -c 's policy p1 preempt_prio="starving_jobs, normal_jobs, starving_jobs+fairshare"' |
preempt_order | string | preempt_order="SCR" | qmgr -c 's policy p1 preempt_order="SCR 70 SC 30"' |
preempt_sort | string | preempt_sort="min_time_since_start" | qmgr -c 's policy p1 preempt_sort="min_time_since_start"' |
peer_queue | array_string | NOT SET BY DEFAULT | qmgr -c 's policy p1 peer_queue=" workq workq@svr1" |
server_dyn_res | array_string | NOT SET BY DEFAULT | qmgr -c 's policy p1 server_dyn_res="mem !/bin/get_mem"' |
dedicated_queues | array_string | NOT_SET_BY_DEFAULT | qmgr -c 's policy p1 dedicated_queues="queue1,queue2"' |
log_event | integer | log_event=4607 | qmgr -c "s policy p1 log_event=255" |
job_sort_formula | string | NOT SET BY DEFAULT | qmgr -c 's policy p1 job_sort_formula="ncpus*walltime"' |
backfill_depth | integer | Set to 1 by default | qmgr -c 's policy p1 backfill_depth=1' |
job_sort_key | array_string | NOT_SET_BY_DEFAULT | qmgr -c 's policy p1 job_sort_key="ncpus HIGH, mem LOW"' |
time_window_spill (formerly prime_spill) | string | NOT_SET_BY_DEFAULT | qmgr -c 's policy p1 prime_spill="01:00:00"' |
prime_exempt_anytime_queues | Boolean | prime_exempt_anytime_queues=false | qmgr -c 's policy p1 prime_exempt_anytime_queues=false' |
backfill_prime | Boolean | backfill_prime=false | qmgr -c 's policy p1 backfill_prime=false' |
comment | string | NOT_SET_BY_DEFAULT | qmgr -c 's policy p1 comment="afterhours policy" |
Interface 2: New time_window object
Below is the list of attributes that reside in the time_window object.
Attribute | Type | Default | Example |
---|---|---|---|
rrule | string | NOT_SET_BY_DEFAULT | s t t1 rrule="RRULE:FREQ=WEEKLY;WKST=SU;BYDAY=MO,TU,WE,TH,FR" |
applies_on_holidays | Boolean | True | s t t1 applies_on_holidays = False |
start_time | time | NOT_SET_BY_DEFAULT | s t t1 start_time=06:00:00 |
end_time | time | NOT_SET_BY_DEFAULT | s t t1 end_time=09:00:00 |
type | string | standard | s t t1 type=dedicated |
comment | string | NOT_SET_BY_DEFAULT | s t t1 comment="nightly data processing" |
Interface 3: New non_work_days attribute
Example:
qmgr >> set server non_work_days = "FREQ=YEARLY;BYMONTH=1;BYMONTHDAY=1" (First of the year - Maybe we should allow 01/01 and we generate this rule)
qmgr >> set server non_work_days += "FREQ=YEARLY;BYDAY=MO;BYSETPOS=-1;BYMONTH=5"
qmgr >> set server non_work_days += "FREQ=WEEKLY;BYDAY=FR;INTERVAL=2"
Interface 4: New fs_group object
Example:
qmgr >> create fs_group f1
qmgr >> set fs_group f1 usage_formula = "cput*fs_factor"
qmgr >> set fs_group f1 decay_time=18:00:00
Below is the list of attributes that reside in the fs_group object.
Attribute | Type | Default | Example |
---|---|---|---|
tree_element | string_array | NOT_SET_BY_DEFAULT | set fs_group f1 tree_element = [ group01:root = 30 ] |
usage_formula | string | NOT_SET_BY_DEFAULT | set fs_group f1 usage_formula = "ncpus*walltime" |
entitiy | string | euser | set fs_group f1 entity = queue |
decay_time | duration | 24:00:00 | set fs_group f1 decay_time = 06:00:00 |
decay_factor | integer | .5 | set fs_group f1 decay_factor = .8 |
enforce_no_shares | Boolean | False | set fs_group f1 enforce_no_shares = True |
unknown_shares | integer | 10 | set fs_group f1 unknown_shares = 20 |
comment | string | NOT_SET_BY_DEFAULT | s fs_group f1 comment="Big data fair share settings" |
Interface 5: Changes to sched object
Interface 6: Changes to PBS server.
Interface 10: New ifl api to list all the policy objects.
Interface 11: New ifl api to list all the time_window objects.
Interface 12: New ifl api to list all the fs_group objects.