diff --git a/src/scheduler_fair.go b/src/scheduler_fair.go index 35194c7..e05f43e 100644 --- a/src/scheduler_fair.go +++ b/src/scheduler_fair.go @@ -396,7 +396,9 @@ func (scheduler *SchedulerFair) UpdateQuota() { availableCPU -= (requests[queue].CPU * base) / requests[queue].NumberGPU quota.Memory += ((requests[queue].Memory * base) / requests[queue].NumberGPU) / 1000 } - if availableGPU > 0 { + /* left more and more resource */ + if availableGPU > 0 && availableGPU < per { + flag := false for _, queue := range candidates { if quota, ok := scheduler.queuesQuota[queue]; ok && quota.NumberGPU >= requests[queue].NumberGPU*1000 { continue @@ -405,8 +407,19 @@ func (scheduler *SchedulerFair) UpdateQuota() { quota.NumberGPU += availableGPU quota.CPU += (requests[queue].CPU * availableGPU) / requests[queue].NumberGPU quota.Memory += ((requests[queue].Memory * availableGPU) / requests[queue].NumberGPU) / 1000 + flag = true break } + if !flag { /* make sure no resource is waste */ + for _, queue := range candidates { + quota := scheduler.queuesQuota[queue] + quota.NumberGPU += availableGPU + quota.CPU += (requests[queue].CPU * availableGPU) / requests[queue].NumberGPU + quota.Memory += ((requests[queue].Memory * availableGPU) / requests[queue].NumberGPU) / 1000 + flag = true + break + } + } } log.Info("After ") for queue, quota := range scheduler.queuesQuota {