func GetNodeRequestsAndLimits()

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,
	}
}