Simplify logic in devicemanager TopologyHint generation

This commit is contained in:
Kevin Klues 2020-07-18 19:06:20 +00:00
parent 9f5f401d60
commit 74fe9364c3

View File

@ -20,6 +20,7 @@ import (
"k8s.io/api/core/v1" "k8s.io/api/core/v1"
"k8s.io/apimachinery/pkg/util/sets" "k8s.io/apimachinery/pkg/util/sets"
"k8s.io/klog/v2" "k8s.io/klog/v2"
pluginapi "k8s.io/kubelet/pkg/apis/deviceplugin/v1beta1"
"k8s.io/kubernetes/pkg/kubelet/cm/topologymanager" "k8s.io/kubernetes/pkg/kubelet/cm/topologymanager"
"k8s.io/kubernetes/pkg/kubelet/cm/topologymanager/bitmask" "k8s.io/kubernetes/pkg/kubelet/cm/topologymanager/bitmask"
) )
@ -103,14 +104,8 @@ func (m *ManagerImpl) generateDeviceTopologyHints(resource string, devices sets.
// First, update minAffinitySize for the current request size. // First, update minAffinitySize for the current request size.
devicesInMask := 0 devicesInMask := 0
for _, device := range m.allDevices[resource] { for _, device := range m.allDevices[resource] {
if device.Topology == nil { if mask.AnySet(m.getNUMANodeIds(device.Topology)) {
continue
}
for _, node := range device.Topology.Nodes {
if mask.IsSet(int(node.ID)) {
devicesInMask++ devicesInMask++
break
}
} }
} }
if devicesInMask >= request && mask.Count() < minAffinitySize { if devicesInMask >= request && mask.Count() < minAffinitySize {
@ -121,14 +116,8 @@ func (m *ManagerImpl) generateDeviceTopologyHints(resource string, devices sets.
// NUMA Node combination to satisfy the device request. // NUMA Node combination to satisfy the device request.
numMatching := 0 numMatching := 0
for d := range devices { for d := range devices {
if m.allDevices[resource][d].Topology == nil { if mask.AnySet(m.getNUMANodeIds(m.allDevices[resource][d].Topology)) {
continue
}
for _, node := range m.allDevices[resource][d].Topology.Nodes {
if mask.IsSet(int(node.ID)) {
numMatching++ numMatching++
break
}
} }
} }
@ -158,3 +147,14 @@ func (m *ManagerImpl) generateDeviceTopologyHints(resource string, devices sets.
return hints return hints
} }
func (m *ManagerImpl) getNUMANodeIds(topology *pluginapi.TopologyInfo) []int {
if topology == nil {
return nil
}
var ids []int
for _, n := range topology.Nodes {
ids = append(ids, int(n.ID))
}
return ids
}