in pkg/trimaran/resourcestats.go [164:226]
func GetNodeRequestsAndLimits(podInfosOnNode []*framework.PodInfo, node *v1.Node, pod *v1.Pod,
podRequests *framework.Resource, podLimits *framework.Resource) *NodeRequestsAndLimits {
// initialization
nodeRequest := &framework.Resource{}
nodeLimit := &framework.Resource{}
nodeRequestMinusPod := &framework.Resource{}
nodeLimitMinusPod := &framework.Resource{}
// set capacities
nodeCapacity := &framework.Resource{}
allocatableResources := node.Status.Allocatable
amCpu := allocatableResources[v1.ResourceCPU]
capCpu := amCpu.MilliValue()
amMem := allocatableResources[v1.ResourceMemory]
capMem := amMem.Value()
nodeCapacity.MilliCPU = capCpu
nodeCapacity.Memory = capMem
// get requests and limits for all pods
podsOnNode := make([]*v1.Pod, len(podInfosOnNode))
for i, pf := range podInfosOnNode {
podsOnNode[i] = pf.Pod
}
for _, p := range append(podsOnNode, pod) {
var requested *framework.Resource
var limits *framework.Resource
// pending pod is last in sequence
if p == pod {
*nodeRequestMinusPod = *nodeRequest
*nodeLimitMinusPod = *nodeLimit
requested = podRequests
limits = podLimits
} else {
// get requests and limits for pod
requested = GetResourceRequested(p)
limits = GetResourceLimits(p)
// make sure limits not less than requests
SetMaxLimits(requested, limits)
}
// accumulate
nodeRequest.MilliCPU += requested.MilliCPU
nodeRequest.Memory += requested.Memory
nodeLimit.MilliCPU += limits.MilliCPU
nodeLimit.Memory += limits.Memory
}
// cap requests by node capacity
setMin(&nodeRequest.MilliCPU, capCpu)
setMin(&nodeRequest.Memory, capMem)
setMin(&nodeRequestMinusPod.MilliCPU, capCpu)
setMin(&nodeRequestMinusPod.Memory, capMem)
klog.V(6).InfoS("Total node resources:", "node", klog.KObj(node),
"CPU-req", nodeRequest.MilliCPU, "Memory-req", nodeRequest.Memory,
"CPU-limit", nodeLimit.MilliCPU, "Memory-limit", nodeLimit.Memory,
"CPU-cap", nodeCapacity.MilliCPU, "Memory-cap", nodeCapacity.Memory)
return &NodeRequestsAndLimits{
NodeRequest: nodeRequest,
NodeLimit: nodeLimit,
NodeRequestMinusPod: nodeRequestMinusPod,
NodeLimitMinusPod: nodeLimitMinusPod,
Nodecapacity: nodeCapacity,
}
}