Skip to content

Commit d8b6d1f

Browse files
committed
WIP: incorporate usage in fair share
1 parent 847bc71 commit d8b6d1f

File tree

1 file changed

+25
-6
lines changed

1 file changed

+25
-6
lines changed

pkg/scheduler/plugins/proportion/resource_division/resource_division.go

Lines changed: 25 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -165,11 +165,15 @@ func divideUpToFairShare(totalResourceAmount, kValue float64, queues map[common_
165165
for {
166166
shouldRunAnotherRound := false
167167
amountToGiveInCurrentRound := totalResourceAmount
168-
totalWeights := getTotalWeightsForUnsatisfied(queues, resourceName)
168+
totalWeights, totalUsages := getTotalWeightsForUnsatisfied(queues, resourceName)
169169
if totalWeights == 0 {
170170
break
171171
}
172172

173+
if totalUsages == 0 {
174+
totalUsages = 1
175+
}
176+
173177
for _, queue := range queues {
174178
requested := getRemainingRequested(queue, resourceName)
175179
if requested == 0 {
@@ -190,7 +194,12 @@ func divideUpToFairShare(totalResourceAmount, kValue float64, queues map[common_
190194
log.InfraLogger.V(6).Infof("calculating %v resource fair share for %v: deserved: %v, "+
191195
"remaining requested: %v, fairShare: %v",
192196
resourceName, queue.Name, resourceShare.Deserved, requested, resourceShare.FairShare)
193-
fairShare := amountToGiveInCurrentRound * (overQuotaWeight / totalWeights)
197+
198+
// normalize values
199+
nWeight := overQuotaWeight / totalWeights
200+
nUsage := resourceShare.GetUsage() / totalUsages
201+
202+
fairShare := amountToGiveInCurrentRound * (nWeight + kValue*(nWeight-nUsage))
194203
resourceToGive := getResourceToGiveInCurrentRound(fairShare, requested, queue, remainingRequested)
195204
if resourceToGive == 0 {
196205
continue
@@ -255,14 +264,24 @@ func getResourceToGiveInCurrentRound(fairShare float64, requested float64, queue
255264
return resourcesToGive
256265
}
257266

258-
func getTotalWeightsForUnsatisfied(queues map[common_info.QueueID]*rs.QueueAttributes, resourceName rs.ResourceName) (totalOverQuotaWeights float64) {
267+
func getTotalWeightsForUnsatisfied(queues map[common_info.QueueID]*rs.QueueAttributes, resourceName rs.ResourceName) (totalOverQuotaWeights, totalUsages float64) {
259268
for _, queue := range queues {
260269
remainingRequested := getRemainingRequested(queue, resourceName)
261-
if remainingRequested > 0 {
262-
totalOverQuotaWeights += queue.ResourceShare(resourceName).OverQuotaWeight
270+
if remainingRequested <= 0 {
271+
continue
263272
}
273+
totalOverQuotaWeights += queue.ResourceShare(resourceName).OverQuotaWeight
274+
275+
queueUsage := queue.ResourceShare(resourceName).GetUsage()
276+
if queueUsage < 0 {
277+
log.InfraLogger.V(1).Warnf("queue <%v> has negative usage score of <%v> for resource <%v>, expected non-negative",
278+
queue.Name, queueUsage, resourceName)
279+
continue
280+
}
281+
282+
totalUsages += queueUsage
264283
}
265-
return totalOverQuotaWeights
284+
return totalOverQuotaWeights, totalUsages
266285
}
267286

268287
func getRemainingRequested(queue *rs.QueueAttributes, resourceName rs.ResourceName) float64 {

0 commit comments

Comments
 (0)