[slurm-users] Preemption not working as expected when using SelectType = select/cons_res
Joshua Sonstroem
jsonstro at ucsc.edu
Thu Mar 9 19:12:01 UTC 2023
Hi Folks,
I've got a medium size cluster running slurm 20.11.8 with a bunch of QoS,
Accounts and partitions configured and 3 tiers of priority which "float"
over the nodes which are also assigned to the lower tiers rather than
having specific nodes assigned to them.
The cluster wide preempt settings are:
PreemptMode = CANCEL
PreemptType = preempt/qos
I've also configured the weight of the qos to be the highest value factor
when determining what is preempted. Here are the priority settings:
PriorityParameters = (null)
PrioritySiteFactorParameters = (null)
PrioritySiteFactorPlugin = (null)
PriorityDecayHalfLife = 7-00:00:00
PriorityCalcPeriod = 00:05:00
PriorityFavorSmall = No
PriorityFlags = CALCULATE_RUNNING,NO_NORMAL_ALL
PriorityMaxAge = 7-00:00:00
PriorityUsageResetPeriod = NONE
PriorityType = priority/multifactor
PriorityWeightAge = 10000
PriorityWeightAssoc = 0
PriorityWeightFairShare = 0
PriorityWeightJobSize = 1000
PriorityWeightPartition = 10000
PriorityWeightQOS = 1000000
PriorityWeightTRES = (null)
These 3 QoS tiers (which each have an associated account and partition)
are:
1. windfall (no limits on nodes or jobs) which is preempted by the
2. cpuq and gpuq (limit 16 jobs/16 nodes per user per queue) which is
preempted by
3. 16 group-specific queues with custom limits (between 4-12 nodes per
group) which float either over the cpuq or gpuq and should instantly
preempt jobs on both windfall and cpuq/gpuq
Before we moved off select/linear the preemption was behaving as expected:
when a higher priority job on a higher QoS tier would be submitted it would
cancel the lower priority jobs as required and start running right away.
However, when I moved the cluster to using select/cons_res about a year ago
to enable users to run array jobs more effectively and to make the cluster
utilization more efficient we started seeing some different behavior where
higher priority jobs get "stranded" while awaiting resources.
As an example we have recently seen full node jobs come in on the highest
priority partitions and they don't immediately preempt the jobs on the cpuq
or gpuq despite having much higher priority. Rather these high-priority
jobs enter a state of "resources" (or "priority") and sit in the queue.
These high priority jobs are within the resource limits of the partition
and the qos so should not be held up by design.
Can anyone explain what is going on here? One thing I have noticed is that
the jobs which are running on the lower priority partition are usually NOT
using all the resources of the nodes to which they are assigned. In other
words those nodes show up as "mixed" rather than "allocated" in sinfo.
For instance, the last time this occurred there were 16 preemptable gpuq
jobs that were each running 1 to a node using 24 cores and all the RAM. The
system owner requested that this specific queue comp-astro be set to
user-exclusive (since their jobs are typically requiring full throughput of
the filesystem), and not sure how that factors in here. However, these
higher priority jobs did not kick the lower priority gpuq jobs out. Here is
an example of the lower priority sprio output of one of the lower priority
jobs
JOBID PARTITION PRIORITY SITE AGE JOBSIZE PARTITION
QOS
171411 gpuq 20010017 0 10 7 10000
20000000
and here for the higer priority job
JOBID PARTITION PRIORITY SITE AGE JOBSIZE PARTITION
QOS
171441 comp-astr 1000010011 0 2 9 10000
1000000000
What I am trying to understand is why this lead to a state like this in
squeue
Here is squeue:
$ squeue
JOBID PARTITION NAME USER ST TIME NODES
NODELIST(REASON)
171442 comp-astr jid1 user PD 0:00 1 (Priority)
171443 comp-astr jid2 user PD 0:00 1 (Priority)
171444 comp-astr jid3 user PD 0:00 1 (Priority)
171445 comp-astr jid4 user PD 0:00 1 (Priority)
171446 comp-astr jid5 user PD 0:00 1 (Priority)
171447 comp-astr jid6 user PD 0:00 1 (Priority)
171441 comp-astr jid7 user PD 0:00 1 (Resources)
171418 gpuq jig1 user2 R 7:23 1 gpu010
171417 gpuq jig2 juser2 R 7:33 1 gpu002
171416 gpuq jig3 user2 R 7:46 1 gpu021
171415 gpuq jig4 user2 R 7:47 1 gpu012
171414 gpuq jig5 user2 R 7:50 1 gpu019
171413 gpuq jig6 user2 R 7:54 1 gpu025
171412 gpuq jig7 user2 R 8:27 1 gpu027
171411 gpuq jig8 user2 R 8:28 1 gpu009
If it is indeed because of the open resources on the node that causes the
preemption to not take place is there a way we can force the jobs on the
gpuq to use all the resources so that it will work as expected? Do we need
to have gpuq use --exclusive so that its jobs will always be cancelled?
Thanks for your time,
Josh
--
*Josh Sonstroem*
*Sr. Platform Engineer*
Comm 33 / Information Technology Services
cell (831) 332-0096
desk (831) 459-1526
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.schedmd.com/pipermail/slurm-users/attachments/20230309/150f5dc8/attachment.htm>
More information about the slurm-users
mailing list