Commit 26e1c1ce authored by Arik Hadas's avatar Arik Hadas

kubelet/cm: code optimization for the static policy

Minor optimization in the code that attempts to assign whole sockets/cores in case the number of CPUs requested is higher than CPUs-per-socket/core: check if the number of requested CPUs is higher than CPUs-per-socket/core before retrieving and iterating the free sockets/cores, and break the loops when that is no longer the case. Signed-off-by: 's avatarArik Hadas <ahadas@redhat.com>
parent f8024ab0
...@@ -158,25 +158,31 @@ func takeByTopology(topo *topology.CPUTopology, availableCPUs cpuset.CPUSet, num ...@@ -158,25 +158,31 @@ func takeByTopology(topo *topology.CPUTopology, availableCPUs cpuset.CPUSet, num
// Algorithm: topology-aware best-fit // Algorithm: topology-aware best-fit
// 1. Acquire whole sockets, if available and the container requires at // 1. Acquire whole sockets, if available and the container requires at
// least a socket's-worth of CPUs. // least a socket's-worth of CPUs.
for _, s := range acc.freeSockets() { if acc.needs(acc.topo.CPUsPerSocket()) {
if acc.needs(acc.topo.CPUsPerSocket()) { for _, s := range acc.freeSockets() {
klog.V(4).Infof("[cpumanager] takeByTopology: claiming socket [%d]", s) klog.V(4).Infof("[cpumanager] takeByTopology: claiming socket [%d]", s)
acc.take(acc.details.CPUsInSocket(s)) acc.take(acc.details.CPUsInSocket(s))
if acc.isSatisfied() { if acc.isSatisfied() {
return acc.result, nil return acc.result, nil
} }
if !acc.needs(acc.topo.CPUsPerSocket()) {
break
}
} }
} }
// 2. Acquire whole cores, if available and the container requires at least // 2. Acquire whole cores, if available and the container requires at least
// a core's-worth of CPUs. // a core's-worth of CPUs.
for _, c := range acc.freeCores() { if acc.needs(acc.topo.CPUsPerCore()) {
if acc.needs(acc.topo.CPUsPerCore()) { for _, c := range acc.freeCores() {
klog.V(4).Infof("[cpumanager] takeByTopology: claiming core [%d]", c) klog.V(4).Infof("[cpumanager] takeByTopology: claiming core [%d]", c)
acc.take(acc.details.CPUsInCore(c)) acc.take(acc.details.CPUsInCore(c))
if acc.isSatisfied() { if acc.isSatisfied() {
return acc.result, nil return acc.result, nil
} }
if !acc.needs(acc.topo.CPUsPerCore()) {
break
}
} }
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment