You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
The PredictUtilisation function does not respect the documentation:
Algorithm
2. Calculate the current pod's total CPU requests and overhead. Call it B.
... Bad Metrics
i. Short inter-arrival times of pods: In this case, we predict utilization for the recent pods that got scheduled on the node based on its request values and a multiplier, and add it to the current utilization. If the pods belong to best-effort QoS, i.e. don't have requests, we assume a number like 1 milicore which is configurable.
func PredictUtilisation(container *v1.Container) int64 {
if _, ok := container.Resources.Limits[v1.ResourceCPU]; ok {
return container.Resources.Limits.Cpu().MilliValue()
} else if _, ok := container.Resources.Requests[v1.ResourceCPU]; ok {
return int64(math.Round(float64(container.Resources.Requests.Cpu().MilliValue()) * requestsMultiplier))
}
return requestsMilliCores
}
Background:
"PredictUtilisation" uses the CPU limit and not the CPU request as the first alternative. This means that if pods have high CPU limits due to generic LimitRanges resources and there are short inter-arrival times of pods, the node almost always returns framework.MinNodeScore.
It would be good to add a flag that indicates which value to use, CPU request or CPU limit, the default being CPU limit to respect the current code.
With this change, what is in the plugin documentation would also be respected.
For example in pseudocode:
func PredictUtilisation(container *v1.Container) int64 {
if useResourcesLimitsCpu == true
if _, ok := container.Resources.Limits[v1.ResourceCPU]; ok {
return container.Resources.Limits.Cpu().MilliValue()
} else if _, ok := container.Resources.Requests[v1.ResourceCPU]; ok {
return int64(math.Round(float64(container.Resources.Requests.Cpu().MilliValue()) * requestsMultiplier))
}
else
if _, ok := container.Resources.Requests[v1.ResourceCPU]; ok {
return int64(math.Round(float64(container.Resources.Requests.Cpu().MilliValue()) * requestsMultiplier))
} else if _, ok := container.Resources.Limits[v1.ResourceCPU]; ok {
return container.Resources.Limits.Cpu().MilliValue()
}
endif
return requestsMilliCores
}
The text was updated successfully, but these errors were encountered:
Moscagus
changed the title
Trimaran TargetLoadPacking: PredictUtilisation based on requests
Trimaran TargetLoadPacking: PredictUtilisation based on CPU request
Nov 8, 2024
Moscagus
changed the title
Trimaran TargetLoadPacking: PredictUtilisation based on CPU request
Trimaran TargetLoadPacking: PredictUtilisation based on CPU requests
Nov 8, 2024
The PredictUtilisation function does not respect the documentation:
Function PredictUtilisation
https://github.com/kubernetes-sigs/scheduler-plugins/blob/master/pkg/trimaran/targetloadpacking/targetloadpacking.go#L199
Background:
"PredictUtilisation" uses the CPU limit and not the CPU request as the first alternative. This means that if pods have high CPU limits due to generic LimitRanges resources and there are short inter-arrival times of pods, the node almost always returns framework.MinNodeScore.
It would be good to add a flag that indicates which value to use, CPU request or CPU limit, the default being CPU limit to respect the current code.
With this change, what is in the plugin documentation would also be respected.
For example in pseudocode:
The text was updated successfully, but these errors were encountered: