1
0
mirror of https://github.com/newnius/YAO-scheduler.git synced 2025-06-07 22:31:55 +00:00

update fair

This commit is contained in:
Newnius 2020-05-31 11:08:16 +08:00
parent 6681a2ae00
commit 14d33bb67c

View File

@ -79,26 +79,42 @@ func (scheduler *SchedulerFair) Start() {
bestQueue := "" bestQueue := ""
maxNumberGPU := math.MaxInt64 maxNumberGPU := math.MaxInt64
maxNumberCPU := math.MaxInt64 maxNumberCPU := math.MaxInt64
/* drf of yarn/kube-batch */
if scheduler.drfyarn {
least := math.MaxInt32
for queue, allocate := range scheduler.resourceAllocations {
if jobs, ok := scheduler.queues[queue]; ok && len(jobs) > 0 {
if bestQueue == "" || allocate.NumberGPU < least {
bestQueue = queue
least = allocate.NumberGPU
}
}
}
}
/* phase 1: execute jobs using self quota */ /* phase 1: execute jobs using self quota */
for queue, jobs := range scheduler.queues { if bestQueue == "" {
/* find largest job */ for queue, jobs := range scheduler.queues {
if len(jobs) > 0 { /* find largest job */
/* calculate resource request of head job */ if len(jobs) > 0 {
numberGPUtmp := 0 /* calculate resource request of head job */
numberCPUtmp := 0 numberGPUtmp := 0
for _, task := range jobs[0].Tasks { numberCPUtmp := 0
numberGPUtmp += task.NumberGPU for _, task := range jobs[0].Tasks {
numberCPUtmp += task.NumberCPU numberGPUtmp += task.NumberGPU
} numberCPUtmp += task.NumberCPU
/* if queue quota cannot satisfy, skip */ }
if quota, ok := scheduler.queuesQuota[queue]; !ok || quota.NumberGPU/1000 < numberGPUtmp { /* if queue quota cannot satisfy, skip */
continue if quota, ok := scheduler.queuesQuota[queue]; !ok || quota.NumberGPU/1000 < numberGPUtmp {
} continue
/* the more, the better */ }
if bestQueue == "" || numberGPUtmp > maxNumberGPU || (numberGPUtmp == maxNumberGPU && numberCPUtmp > maxNumberCPU) { /* the more, the better */
bestQueue = queue if bestQueue == "" || numberGPUtmp > maxNumberGPU || (numberGPUtmp == maxNumberGPU && numberCPUtmp > maxNumberCPU) {
maxNumberGPU = numberGPUtmp bestQueue = queue
maxNumberCPU = numberCPUtmp maxNumberGPU = numberGPUtmp
maxNumberCPU = numberCPUtmp
}
} }
} }
} }
@ -214,19 +230,6 @@ func (scheduler *SchedulerFair) Start() {
} }
} }
/* drf of yarn/kube-batch */
if bestQueue == "" && scheduler.drfyarn {
least := math.MaxInt32
for queue, allocate := range scheduler.resourceAllocations {
if jobs, ok := scheduler.queues[queue]; ok && len(jobs) > 0 {
if bestQueue == "" || allocate.NumberGPU < least {
bestQueue = queue
least = allocate.NumberGPU
}
}
}
}
/* launch that job */ /* launch that job */
if bestQueue != "" { if bestQueue != "" {
numberGPUtmp := 0 numberGPUtmp := 0