Great! Will it work for both parallel and single core jobs?
If yes, is there such a load sensor available?
On 08/03/2012 12:58 PM, Reuti wrote:
Well, for single core jobs you can change the sort order to pack jobs on nodes.
But instead of the usual -slots you will need a special load sensor reporting
only the used slots owner queue and use this variable.
-- Reuti
Von meinem iPad gesendet
Am 03.08.2012 um 21:23 schrieb Joseph Farran<[email protected]>:
For others that are trying to pack jobs on nodes and using subordinate queues,
here is an example of why job-packing is so critical:
Consider the following scenario. We have two queues, "owner" and "free" with
"free" being the subordinate queue.
Our two compute nodes have 8 cores each.
We load up our free queue with 16 single core jobs:
job-ID prior name user state queue slots ja-task-ID
---------------------------------------------------------------------------
8560 0.55500 FREE testfree r free@compute-3-2 1
8561 0.55500 FREE testfree r free@compute-3-2 1
8562 0.55500 FREE testfree r free@compute-3-2 1
8563 0.55500 FREE testfree r free@compute-3-2 1
8564 0.55500 FREE testfree r free@compute-3-2 1
8565 0.55500 FREE testfree r free@compute-3-2 1
8566 0.55500 FREE testfree r free@compute-3-2 1
8567 0.55500 FREE testfree r free@compute-3-2 1
8568 0.55500 FREE testfree r free@compute-3-1 1
8569 0.55500 FREE testfree r free@compute-3-1 1
8570 0.55500 FREE testfree r free@compute-3-1 1
8571 0.55500 FREE testfree r free@compute-3-1 1
8572 0.55500 FREE testfree r free@compute-3-1 1
8573 0.55500 FREE testfree r free@compute-3-1 1
8574 0.55500 FREE testfree r free@compute-3-1 1
8575 0.55500 FREE testfree r free@compute-3-1 1
The owner now submits ONE single core job:
$ qstat
job-ID prior name user state queue slots ja-task-ID
---------------------------------------------------------------------------
8560 0.55500 FREE testfree S free@compute-3-2 1
8561 0.55500 FREE testfree S free@compute-3-2 1
8562 0.55500 FREE testfree S free@compute-3-2 1
8563 0.55500 FREE testfree S free@compute-3-2 1
8564 0.55500 FREE testfree S free@compute-3-2 1
8565 0.55500 FREE testfree S free@compute-3-2 1
8566 0.55500 FREE testfree S free@compute-3-2 1
8567 0.55500 FREE testfree S free@compute-3-2 1
8568 0.55500 FREE testfree r free@compute-3-1 1
8569 0.55500 FREE testfree r free@compute-3-1 1
8570 0.55500 FREE testfree r free@compute-3-1 1
8571 0.55500 FREE testfree r free@compute-3-1 1
8572 0.55500 FREE testfree r free@compute-3-1 1
8573 0.55500 FREE testfree r free@compute-3-1 1
8574 0.55500 FREE testfree r free@compute-3-1 1
8575 0.55500 FREE testfree r free@compute-3-1 1
8584 0.55500 OWNER testbio r owner@compute-3-2 1
All cores on compute-3-2 are suspended in order to run that one single core
owner job #8584.
Not the ideal or best setup, but we can live with this.
However, here is where it get's nasty.
The owner now submits another ONE core job. At this point, compute-3-2 has 7
free cores on which it could schedule this additional ONE core job, but no, GE
likes to spread jobs:
$ qstat
job-ID prior name user state queue slots ja-task-ID
---------------------------------------------------------------------------
8560 0.55500 FREE testfree S free@compute-3-2 1
8561 0.55500 FREE testfree S free@compute-3-2 1
8562 0.55500 FREE testfree S free@compute-3-2 1
8563 0.55500 FREE testfree S free@compute-3-2 1
8564 0.55500 FREE testfree S free@compute-3-2 1
8565 0.55500 FREE testfree S free@compute-3-2 1
8566 0.55500 FREE testfree S free@compute-3-2 1
8567 0.55500 FREE testfree S free@compute-3-2 1
8568 0.55500 FREE testfree S free@compute-3-1 1
8569 0.55500 FREE testfree S free@compute-3-1 1
8570 0.55500 FREE testfree S free@compute-3-1 1
8571 0.55500 FREE testfree S free@compute-3-1 1
8572 0.55500 FREE testfree S free@compute-3-1 1
8573 0.55500 FREE testfree S free@compute-3-1 1
8574 0.55500 FREE testfree S free@compute-3-1 1
8575 0.55500 FREE testfree S free@compute-3-1 1
8584 0.55500 OWNER testbio r owner@compute-3-2 1
8585 0.55500 OWNER testbio r owner@compute-3-1 1
The new single core job # 8585 starts on compute-3-1 instead of on compute-3-2
suspending another 7 cores.
If job-packing with subordinate queues were available, job #8585 would have
started compute-3-2 since it has cores available.
Two single ONE core jobs suspend 16 single core jobs. Nasty and wasteful!
On 08/03/2012 10:10 AM, Joseph Farran wrote:
On 08/03/2012 09:57 AM, Reuti wrote:
Am 03.08.2012 um 18:50 schrieb Joseph Farran:
On 08/03/2012 09:18 AM, Reuti wrote:
Am 03.08.2012 um 18:04 schrieb Joseph Farran:
I pack jobs unto nodes using the following GE setup:
# qconf -ssconf | egrep "queue|load"
queue_sort_method seqno
job_load_adjustments NONE
load_adjustment_decay_time 0
load_formula slots
I also set my nodes with the slots complex value:
# qconf -rattr exechost complex_values "slots=64" compute-2-1
Don't limit it here. Just define 64 in both queues for slots.
Yes, I tried that approached as well but then parallel jobs will not suspend
equal number of serial jobs.
So after I setup the above ( note my test queue and nodes have 8 cores and not
64 ):
# qconf -sq owner | egrep "slots"
slots 8
subordinate_list slots=8(free:0:sr)
# qconf -sq free | egrep "slots"
slots 8
[# qconf -se compute-3-1 | egrep complex
complex_values NONE
# qconf -se compute-3-2 | egrep complex
complex_values NONE
When I submit one 8 parallel job to owner, only one core in free is suspended
instead of 8:
Here is qstat listing:
job-ID prior name user state queue slots
--------------------------------------------------------------
8531 0.50500 FREE testfree r free@compute-3-1 1
8532 0.50500 FREE testfree r free@compute-3-1 1
8533 0.50500 FREE testfree r free@compute-3-1 1
8534 0.50500 FREE testfree r free@compute-3-1 1
8535 0.50500 FREE testfree r free@compute-3-1 1
8536 0.50500 FREE testfree r free@compute-3-1 1
8537 0.50500 FREE testfree r free@compute-3-1 1
8538 0.50500 FREE testfree S free@compute-3-1 1
8539 0.50500 FREE testfree r free@compute-3-2 1
8540 0.50500 FREE testfree r free@compute-3-2 1
8541 0.50500 FREE testfree r free@compute-3-2 1
8542 0.50500 FREE testfree r free@compute-3-2 1
8543 0.50500 FREE testfree r free@compute-3-2 1
8544 0.50500 FREE testfree r free@compute-3-2 1
8545 0.50500 FREE testfree r free@compute-3-2 1
8546 0.50500 FREE testfree r free@compute-3-2 1
8547 0.60500 Owner me r owner@compute-3-1 8
Job 8547 on owner queue starts just fine running with 8 cores on compute-3-1
*but* only one core in compute-3-1 from free queue is suspended instead of 8
cores.
AFAIR this is a known bug for parallel jobs.
So the answer to my original question is that no, it cannot be done.
Is there another open source GE flavor that has fixed this bug, or is this bug
across all open source GE flavors?
Serial jobs are all packed nicely unto a node until the node is full and then
it goes unto the next node.
The issue I am having is that my subordinate queue breaks when I have set my
nodes with the node complex value above.
I have two queues: The owner queue and the free queue:
# qconf -sq owner | egrep "subordinate|shell"
shell /bin/bash
shell_start_mode posix_compliant
subordinate_list free=1
subordinate_list slots=64(free)
# qconf -sq free | egrep "subordinate|shell"
shell /bin/bash
shell_start_mode posix_compliant
subordinate_list NONE
When I fill up the free queue with serial jobs and I then submit a job to the
owner queue, the owner job will not suspend the free job. Qstat scheduling
info says:
queue instance "[email protected]" dropped because it is full
queue instance "[email protected]" dropped because it is full
If I remove the "complex_values=" from my nodes, then jobs are correctly
suspended in free queue and the owner job runs just fine.
Yes, and what's the problem with this setup?
What is wrong with the above setup is that the 'owner' cannot run because free
jobs are not suspended.
They are not suspended in advance. The suspension is the result of an
additional job being started thereon. Not the other way round.
Right, but the idea of a subordinate queue ( job preemption ) is that when a
job *IS* scheduled, that the subordinate queue suspend jobs. I mean, that's
the whole idea.
-- Reuti
So how can I accomplish both items above?
*** By the way, here are some pre-answers to some questions I am going to be
asked:
Why pack jobs?: Because in any HPC environment that runs a mixture of serial
and parallel jobs, you really don't want to spread single core jobs across
multiple nodes, specially 64 cores nodes. You want to keep nodes whole for
parallel jobs ( this is HPC 101 ).
Depends on the application. E.g. Molcas is writing a lot to the local scratch
disk, so it's better to spread them in the cluster and use the remaining cores
in each exechost for jobs without or at least with less disk access.
Yes, there will always be exceptions. I should have said in most 99% of
circumstances.
-- Reuti
Suspended jobs will not free up resources: Yeap, but the jobs will *not* be
consuming CPU cycles which is what I want.
Thanks,
Joseph
_______________________________________________
users mailing list
[email protected]
https://gridengine.org/mailman/listinfo/users
_______________________________________________
users mailing list
[email protected]
https://gridengine.org/mailman/listinfo/users
_______________________________________________
users mailing list
[email protected]
https://gridengine.org/mailman/listinfo/users