From a047e8aa1b705bb7e5be881fb63cf90a218b60d0 Mon Sep 17 00:00:00 2001 From: Alexey Perevalov Date: Sun, 10 May 2020 19:14:48 +0300 Subject: [PATCH] move to cadvisor.MachineInfo This patch removes GetNUMANodeInfo, cadvisor.MachineInfo will be used instead of it. GetNUMANodeInfo was introduced due to difference of meaning of MachineInfo.Topology. On the arm it was NUMA nodes, but on the x86 it represents sockets (since reading from /proc/cpuinfo). Now it unified and MachineInfo.Topology represents NUMA node. Signed-off-by: Alexey Perevalov --- pkg/kubelet/cm/BUILD | 2 - pkg/kubelet/cm/container_manager_linux.go | 13 +-- pkg/kubelet/cm/cpumanager/cpu_manager.go | 4 +- pkg/kubelet/cm/cpumanager/cpu_manager_test.go | 2 +- pkg/kubelet/cm/cpumanager/topology/BUILD | 5 +- .../cm/cpumanager/topology/topology.go | 68 ++------------- .../cm/cpumanager/topology/topology_test.go | 82 ++++++++----------- .../cm/cpumanager/topology_hints_test.go | 19 ++--- pkg/kubelet/cm/devicemanager/BUILD | 2 +- pkg/kubelet/cm/devicemanager/manager.go | 12 +-- pkg/kubelet/cm/topologymanager/BUILD | 2 +- .../cm/topologymanager/topology_manager.go | 8 +- 12 files changed, 65 insertions(+), 154 deletions(-) diff --git a/pkg/kubelet/cm/BUILD b/pkg/kubelet/cm/BUILD index b1fd5530a27..70e41087f74 100644 --- a/pkg/kubelet/cm/BUILD +++ b/pkg/kubelet/cm/BUILD @@ -51,7 +51,6 @@ go_library( "//pkg/apis/core/v1/helper/qos:go_default_library", "//pkg/kubelet/cadvisor:go_default_library", "//pkg/kubelet/cm/containermap:go_default_library", - "//pkg/kubelet/cm/cpumanager/topology:go_default_library", "//pkg/kubelet/cm/devicemanager:go_default_library", "//pkg/kubelet/cm/util:go_default_library", "//pkg/kubelet/events:go_default_library", @@ -103,7 +102,6 @@ go_library( "//pkg/apis/core/v1/helper/qos:go_default_library", "//pkg/kubelet/cadvisor:go_default_library", "//pkg/kubelet/cm/containermap:go_default_library", - "//pkg/kubelet/cm/cpumanager/topology:go_default_library", "//pkg/kubelet/cm/devicemanager:go_default_library", "//pkg/kubelet/cm/util:go_default_library", "//pkg/kubelet/events:go_default_library", diff --git a/pkg/kubelet/cm/container_manager_linux.go b/pkg/kubelet/cm/container_manager_linux.go index 57110ed7745..72d960879e8 100644 --- a/pkg/kubelet/cm/container_manager_linux.go +++ b/pkg/kubelet/cm/container_manager_linux.go @@ -52,7 +52,6 @@ import ( "k8s.io/kubernetes/pkg/kubelet/cadvisor" "k8s.io/kubernetes/pkg/kubelet/cm/containermap" "k8s.io/kubernetes/pkg/kubelet/cm/cpumanager" - cputopology "k8s.io/kubernetes/pkg/kubelet/cm/cpumanager/topology" "k8s.io/kubernetes/pkg/kubelet/cm/devicemanager" "k8s.io/kubernetes/pkg/kubelet/cm/topologymanager" cmutil "k8s.io/kubernetes/pkg/kubelet/cm/util" @@ -238,13 +237,6 @@ func NewContainerManager(mountUtil mount.Interface, cadvisorInterface cadvisor.I if err != nil { return nil, err } - // Correct NUMA information is currently missing from cadvisor's - // MachineInfo struct, so we use the CPUManager's internal logic for - // gathering NUMANodeInfo to pass to components that care about it. - numaNodeInfo, err := cputopology.GetNUMANodeInfo() - if err != nil { - return nil, err - } capacity := cadvisor.CapacityFromMachineInfo(machineInfo) for k, v := range capacity { internalCapacity[k] = v @@ -300,7 +292,7 @@ func NewContainerManager(mountUtil mount.Interface, cadvisorInterface cadvisor.I if utilfeature.DefaultFeatureGate.Enabled(kubefeatures.TopologyManager) { cm.topologyManager, err = topologymanager.NewManager( - numaNodeInfo, + machineInfo.Topology, nodeConfig.ExperimentalTopologyManagerPolicy, ) @@ -315,7 +307,7 @@ func NewContainerManager(mountUtil mount.Interface, cadvisorInterface cadvisor.I klog.Infof("Creating device plugin manager: %t", devicePluginEnabled) if devicePluginEnabled { - cm.deviceManager, err = devicemanager.NewManagerImpl(numaNodeInfo, cm.topologyManager) + cm.deviceManager, err = devicemanager.NewManagerImpl(machineInfo.Topology, cm.topologyManager) cm.topologyManager.AddHintProvider(cm.deviceManager) } else { cm.deviceManager, err = devicemanager.NewManagerStub() @@ -330,7 +322,6 @@ func NewContainerManager(mountUtil mount.Interface, cadvisorInterface cadvisor.I nodeConfig.ExperimentalCPUManagerPolicy, nodeConfig.ExperimentalCPUManagerReconcilePeriod, machineInfo, - numaNodeInfo, nodeConfig.NodeAllocatableConfig.ReservedSystemCPUs, cm.GetNodeAllocatableReservation(), nodeConfig.KubeletRootDir, diff --git a/pkg/kubelet/cm/cpumanager/cpu_manager.go b/pkg/kubelet/cm/cpumanager/cpu_manager.go index 6acd8ebc660..1e6cc936d82 100644 --- a/pkg/kubelet/cm/cpumanager/cpu_manager.go +++ b/pkg/kubelet/cm/cpumanager/cpu_manager.go @@ -126,7 +126,7 @@ func (s *sourcesReadyStub) AddSource(source string) {} func (s *sourcesReadyStub) AllReady() bool { return true } // NewManager creates new cpu manager based on provided policy -func NewManager(cpuPolicyName string, reconcilePeriod time.Duration, machineInfo *cadvisorapi.MachineInfo, numaNodeInfo topology.NUMANodeInfo, specificCPUs cpuset.CPUSet, nodeAllocatableReservation v1.ResourceList, stateFileDirectory string, affinity topologymanager.Store) (Manager, error) { +func NewManager(cpuPolicyName string, reconcilePeriod time.Duration, machineInfo *cadvisorapi.MachineInfo, specificCPUs cpuset.CPUSet, nodeAllocatableReservation v1.ResourceList, stateFileDirectory string, affinity topologymanager.Store) (Manager, error) { var topo *topology.CPUTopology var policy Policy @@ -137,7 +137,7 @@ func NewManager(cpuPolicyName string, reconcilePeriod time.Duration, machineInfo case PolicyStatic: var err error - topo, err = topology.Discover(machineInfo, numaNodeInfo) + topo, err = topology.Discover(machineInfo) if err != nil { return nil, err } diff --git a/pkg/kubelet/cm/cpumanager/cpu_manager_test.go b/pkg/kubelet/cm/cpumanager/cpu_manager_test.go index b209bddaabf..dc0d756f07c 100644 --- a/pkg/kubelet/cm/cpumanager/cpu_manager_test.go +++ b/pkg/kubelet/cm/cpumanager/cpu_manager_test.go @@ -629,7 +629,7 @@ func TestCPUManagerGenerate(t *testing.T) { } defer os.RemoveAll(sDir) - mgr, err := NewManager(testCase.cpuPolicyName, 5*time.Second, machineInfo, nil, cpuset.NewCPUSet(), testCase.nodeAllocatableReservation, sDir, topologymanager.NewFakeManager()) + mgr, err := NewManager(testCase.cpuPolicyName, 5*time.Second, machineInfo, cpuset.NewCPUSet(), testCase.nodeAllocatableReservation, sDir, topologymanager.NewFakeManager()) if testCase.expectedError != nil { if !strings.Contains(err.Error(), testCase.expectedError.Error()) { t.Errorf("Unexpected error message. Have: %s wants %s", err.Error(), testCase.expectedError.Error()) diff --git a/pkg/kubelet/cm/cpumanager/topology/BUILD b/pkg/kubelet/cm/cpumanager/topology/BUILD index a54c6ad95ee..bd387ad1d3f 100644 --- a/pkg/kubelet/cm/cpumanager/topology/BUILD +++ b/pkg/kubelet/cm/cpumanager/topology/BUILD @@ -33,8 +33,5 @@ go_test( name = "go_default_test", srcs = ["topology_test.go"], embed = [":go_default_library"], - deps = [ - "//pkg/kubelet/cm/cpuset:go_default_library", - "//vendor/github.com/google/cadvisor/info/v1:go_default_library", - ], + deps = ["//vendor/github.com/google/cadvisor/info/v1:go_default_library"], ) diff --git a/pkg/kubelet/cm/cpumanager/topology/topology.go b/pkg/kubelet/cm/cpumanager/topology/topology.go index cd2646afb84..ac733001070 100644 --- a/pkg/kubelet/cm/cpumanager/topology/topology.go +++ b/pkg/kubelet/cm/cpumanager/topology/topology.go @@ -18,8 +18,6 @@ package topology import ( "fmt" - "io/ioutil" - "strings" cadvisorapi "github.com/google/cadvisor/info/v1" "k8s.io/klog/v2" @@ -218,7 +216,7 @@ func (d CPUDetails) CPUsInCores(ids ...int) cpuset.CPUSet { } // Discover returns CPUTopology based on cadvisor node info -func Discover(machineInfo *cadvisorapi.MachineInfo, numaNodeInfo NUMANodeInfo) (*CPUTopology, error) { +func Discover(machineInfo *cadvisorapi.MachineInfo) (*CPUTopology, error) { if machineInfo.NumCores == 0 { return nil, fmt.Errorf("could not detect number of cpus") } @@ -226,26 +224,20 @@ func Discover(machineInfo *cadvisorapi.MachineInfo, numaNodeInfo NUMANodeInfo) ( CPUDetails := CPUDetails{} numPhysicalCores := 0 - for _, socket := range machineInfo.Topology { - numPhysicalCores += len(socket.Cores) - for _, core := range socket.Cores { + for _, node := range machineInfo.Topology { + numPhysicalCores += len(node.Cores) + for _, core := range node.Cores { if coreID, err := getUniqueCoreID(core.Threads); err == nil { for _, cpu := range core.Threads { - numaNodeID := 0 - for id, cset := range numaNodeInfo { - if cset.Contains(cpu) { - numaNodeID = id - } - } CPUDetails[cpu] = CPUInfo{ CoreID: coreID, - SocketID: socket.Id, - NUMANodeID: numaNodeID, + SocketID: core.SocketID, + NUMANodeID: node.Id, } } } else { klog.Errorf("could not get unique coreID for socket: %d core %d threads: %v", - socket.Id, core.Id, core.Threads) + core.SocketID, core.Id, core.Threads) return nil, err } } @@ -280,49 +272,3 @@ func getUniqueCoreID(threads []int) (coreID int, err error) { return min, nil } - -// GetNUMANodeInfo uses sysfs to return a map of NUMANode id to the list of -// CPUs associated with that NUMANode. -// -// TODO: This is a temporary workaround until cadvisor provides this -// information directly in machineInfo. We should remove this once this -// information is available from cadvisor. -func GetNUMANodeInfo() (NUMANodeInfo, error) { - // Get the possible NUMA nodes on this machine. If reading this file - // is not possible, this is not an error. Instead, we just return a - // nil NUMANodeInfo, indicating that no NUMA information is available - // on this machine. This should implicitly be interpreted as having a - // single NUMA node with id 0 for all CPUs. - nodelist, err := ioutil.ReadFile("/sys/devices/system/node/online") - if err != nil { - return nil, nil - } - - // Parse the nodelist into a set of Node IDs - nodes, err := cpuset.Parse(strings.TrimSpace(string(nodelist))) - if err != nil { - return nil, err - } - - info := make(NUMANodeInfo) - - // For each node... - for _, node := range nodes.ToSlice() { - // Read the 'cpulist' of the NUMA node from sysfs. - path := fmt.Sprintf("/sys/devices/system/node/node%d/cpulist", node) - cpulist, err := ioutil.ReadFile(path) - if err != nil { - return nil, err - } - - // Convert the 'cpulist' into a set of CPUs. - cpus, err := cpuset.Parse(strings.TrimSpace(string(cpulist))) - if err != nil { - return nil, err - } - - info[node] = cpus - } - - return info, nil -} diff --git a/pkg/kubelet/cm/cpumanager/topology/topology_test.go b/pkg/kubelet/cm/cpumanager/topology/topology_test.go index 59be5e02861..fe9375e4153 100644 --- a/pkg/kubelet/cm/cpumanager/topology/topology_test.go +++ b/pkg/kubelet/cm/cpumanager/topology/topology_test.go @@ -21,26 +21,23 @@ import ( "testing" cadvisorapi "github.com/google/cadvisor/info/v1" - "k8s.io/kubernetes/pkg/kubelet/cm/cpuset" ) func Test_Discover(t *testing.T) { tests := []struct { - name string - machineInfo cadvisorapi.MachineInfo - numaNodeInfo NUMANodeInfo - want *CPUTopology - wantErr bool + name string + machineInfo cadvisorapi.MachineInfo + want *CPUTopology + wantErr bool }{ { name: "FailNumCores", machineInfo: cadvisorapi.MachineInfo{ NumCores: 0, }, - numaNodeInfo: NUMANodeInfo{}, - want: &CPUTopology{}, - wantErr: true, + want: &CPUTopology{}, + wantErr: true, }, { name: "OneSocketHT", @@ -49,17 +46,14 @@ func Test_Discover(t *testing.T) { Topology: []cadvisorapi.Node{ {Id: 0, Cores: []cadvisorapi.Core{ - {Id: 0, Threads: []int{0, 4}}, - {Id: 1, Threads: []int{1, 5}}, - {Id: 2, Threads: []int{2, 6}}, - {Id: 3, Threads: []int{3, 7}}, + {SocketID: 0, Id: 0, Threads: []int{0, 4}}, + {SocketID: 0, Id: 1, Threads: []int{1, 5}}, + {SocketID: 0, Id: 2, Threads: []int{2, 6}}, + {SocketID: 0, Id: 3, Threads: []int{3, 7}}, }, }, }, }, - numaNodeInfo: NUMANodeInfo{ - 0: cpuset.NewCPUSet(0, 1, 2, 3, 4, 5, 6, 7), - }, want: &CPUTopology{ NumCPUs: 8, NumSockets: 1, @@ -84,22 +78,18 @@ func Test_Discover(t *testing.T) { Topology: []cadvisorapi.Node{ {Id: 0, Cores: []cadvisorapi.Core{ - {Id: 0, Threads: []int{0}}, - {Id: 2, Threads: []int{2}}, + {SocketID: 0, Id: 0, Threads: []int{0}}, + {SocketID: 0, Id: 2, Threads: []int{2}}, }, }, {Id: 1, Cores: []cadvisorapi.Core{ - {Id: 1, Threads: []int{1}}, - {Id: 3, Threads: []int{3}}, + {SocketID: 1, Id: 1, Threads: []int{1}}, + {SocketID: 1, Id: 3, Threads: []int{3}}, }, }, }, }, - numaNodeInfo: NUMANodeInfo{ - 0: cpuset.NewCPUSet(0, 2), - 1: cpuset.NewCPUSet(1, 3), - }, want: &CPUTopology{ NumCPUs: 4, NumSockets: 2, @@ -120,24 +110,20 @@ func Test_Discover(t *testing.T) { Topology: []cadvisorapi.Node{ {Id: 0, Cores: []cadvisorapi.Core{ - {Id: 0, Threads: []int{0, 6}}, - {Id: 1, Threads: []int{1, 7}}, - {Id: 2, Threads: []int{2, 8}}, + {SocketID: 0, Id: 0, Threads: []int{0, 6}}, + {SocketID: 0, Id: 1, Threads: []int{1, 7}}, + {SocketID: 0, Id: 2, Threads: []int{2, 8}}, }, }, {Id: 1, Cores: []cadvisorapi.Core{ - {Id: 0, Threads: []int{3, 9}}, - {Id: 1, Threads: []int{4, 10}}, - {Id: 2, Threads: []int{5, 11}}, + {SocketID: 1, Id: 0, Threads: []int{3, 9}}, + {SocketID: 1, Id: 1, Threads: []int{4, 10}}, + {SocketID: 1, Id: 2, Threads: []int{5, 11}}, }, }, }, }, - numaNodeInfo: NUMANodeInfo{ - 0: cpuset.NewCPUSet(0, 6, 1, 7, 2, 8), - 1: cpuset.NewCPUSet(3, 9, 4, 10, 5, 11), - }, want: &CPUTopology{ NumCPUs: 12, NumSockets: 2, @@ -166,17 +152,16 @@ func Test_Discover(t *testing.T) { Topology: []cadvisorapi.Node{ {Id: 0, Cores: []cadvisorapi.Core{ - {Id: 0, Threads: []int{0, 4}}, - {Id: 1, Threads: []int{1, 5}}, - {Id: 2, Threads: []int{2, 2}}, // Wrong case - should fail here - {Id: 3, Threads: []int{3, 7}}, + {SocketID: 0, Id: 0, Threads: []int{0, 4}}, + {SocketID: 0, Id: 1, Threads: []int{1, 5}}, + {SocketID: 0, Id: 2, Threads: []int{2, 2}}, // Wrong case - should fail here + {SocketID: 0, Id: 3, Threads: []int{3, 7}}, }, }, }, }, - numaNodeInfo: NUMANodeInfo{}, - want: &CPUTopology{}, - wantErr: true, + want: &CPUTopology{}, + wantErr: true, }, { name: "OneSocketHT fail", @@ -185,22 +170,21 @@ func Test_Discover(t *testing.T) { Topology: []cadvisorapi.Node{ {Id: 0, Cores: []cadvisorapi.Core{ - {Id: 0, Threads: []int{0, 4}}, - {Id: 1, Threads: []int{1, 5}}, - {Id: 2, Threads: []int{2, 6}}, - {Id: 3, Threads: []int{}}, // Wrong case - should fail here + {SocketID: 0, Id: 0, Threads: []int{0, 4}}, + {SocketID: 0, Id: 1, Threads: []int{1, 5}}, + {SocketID: 0, Id: 2, Threads: []int{2, 6}}, + {SocketID: 0, Id: 3, Threads: []int{}}, // Wrong case - should fail here }, }, }, }, - numaNodeInfo: NUMANodeInfo{}, - want: &CPUTopology{}, - wantErr: true, + want: &CPUTopology{}, + wantErr: true, }, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - got, err := Discover(&tt.machineInfo, tt.numaNodeInfo) + got, err := Discover(&tt.machineInfo) if err != nil { if tt.wantErr { t.Logf("Discover() expected error = %v", err) diff --git a/pkg/kubelet/cm/cpumanager/topology_hints_test.go b/pkg/kubelet/cm/cpumanager/topology_hints_test.go index 16761157aaf..68f18334454 100644 --- a/pkg/kubelet/cm/cpumanager/topology_hints_test.go +++ b/pkg/kubelet/cm/cpumanager/topology_hints_test.go @@ -50,26 +50,21 @@ func TestGetTopologyHints(t *testing.T) { Topology: []cadvisorapi.Node{ {Id: 0, Cores: []cadvisorapi.Core{ - {Id: 0, Threads: []int{0, 6}}, - {Id: 1, Threads: []int{1, 7}}, - {Id: 2, Threads: []int{2, 8}}, + {SocketID: 0, Id: 0, Threads: []int{0, 6}}, + {SocketID: 0, Id: 1, Threads: []int{1, 7}}, + {SocketID: 0, Id: 2, Threads: []int{2, 8}}, }, }, {Id: 1, Cores: []cadvisorapi.Core{ - {Id: 0, Threads: []int{3, 9}}, - {Id: 1, Threads: []int{4, 10}}, - {Id: 2, Threads: []int{5, 11}}, + {SocketID: 1, Id: 0, Threads: []int{3, 9}}, + {SocketID: 1, Id: 1, Threads: []int{4, 10}}, + {SocketID: 1, Id: 2, Threads: []int{5, 11}}, }, }, }, } - numaNodeInfo := topology.NUMANodeInfo{ - 0: cpuset.NewCPUSet(0, 6, 1, 7, 2, 8), - 1: cpuset.NewCPUSet(3, 9, 4, 10, 5, 11), - } - tcases := []struct { name string pod v1.Pod @@ -237,7 +232,7 @@ func TestGetTopologyHints(t *testing.T) { }, } for _, tc := range tcases { - topology, _ := topology.Discover(&machineInfo, numaNodeInfo) + topology, _ := topology.Discover(&machineInfo) var activePods []*v1.Pod for p := range tc.assignments { diff --git a/pkg/kubelet/cm/devicemanager/BUILD b/pkg/kubelet/cm/devicemanager/BUILD index daa43895eed..d79d88f9d09 100644 --- a/pkg/kubelet/cm/devicemanager/BUILD +++ b/pkg/kubelet/cm/devicemanager/BUILD @@ -19,7 +19,6 @@ go_library( "//pkg/kubelet/apis/podresources/v1alpha1:go_default_library", "//pkg/kubelet/checkpointmanager:go_default_library", "//pkg/kubelet/checkpointmanager/errors:go_default_library", - "//pkg/kubelet/cm/cpumanager/topology:go_default_library", "//pkg/kubelet/cm/devicemanager/checkpoint:go_default_library", "//pkg/kubelet/cm/topologymanager:go_default_library", "//pkg/kubelet/cm/topologymanager/bitmask:go_default_library", @@ -37,6 +36,7 @@ go_library( "//staging/src/k8s.io/apiserver/pkg/util/feature:go_default_library", "//staging/src/k8s.io/kubelet/pkg/apis/deviceplugin/v1beta1:go_default_library", "//staging/src/k8s.io/kubelet/pkg/apis/pluginregistration/v1:go_default_library", + "//vendor/github.com/google/cadvisor/info/v1:go_default_library", "//vendor/google.golang.org/grpc:go_default_library", "//vendor/k8s.io/klog/v2:go_default_library", ], diff --git a/pkg/kubelet/cm/devicemanager/manager.go b/pkg/kubelet/cm/devicemanager/manager.go index 5d1925f9458..f531795cb83 100644 --- a/pkg/kubelet/cm/devicemanager/manager.go +++ b/pkg/kubelet/cm/devicemanager/manager.go @@ -26,6 +26,7 @@ import ( "sync" "time" + cadvisorapi "github.com/google/cadvisor/info/v1" "google.golang.org/grpc" "k8s.io/klog/v2" @@ -40,7 +41,6 @@ import ( podresourcesapi "k8s.io/kubernetes/pkg/kubelet/apis/podresources/v1alpha1" "k8s.io/kubernetes/pkg/kubelet/checkpointmanager" "k8s.io/kubernetes/pkg/kubelet/checkpointmanager/errors" - cputopology "k8s.io/kubernetes/pkg/kubelet/cm/cpumanager/topology" "k8s.io/kubernetes/pkg/kubelet/cm/devicemanager/checkpoint" "k8s.io/kubernetes/pkg/kubelet/cm/topologymanager" "k8s.io/kubernetes/pkg/kubelet/config" @@ -124,11 +124,11 @@ func (s *sourcesReadyStub) AddSource(source string) {} func (s *sourcesReadyStub) AllReady() bool { return true } // NewManagerImpl creates a new manager. -func NewManagerImpl(numaNodeInfo cputopology.NUMANodeInfo, topologyAffinityStore topologymanager.Store) (*ManagerImpl, error) { - return newManagerImpl(pluginapi.KubeletSocket, numaNodeInfo, topologyAffinityStore) +func NewManagerImpl(topology []cadvisorapi.Node, topologyAffinityStore topologymanager.Store) (*ManagerImpl, error) { + return newManagerImpl(pluginapi.KubeletSocket, topology, topologyAffinityStore) } -func newManagerImpl(socketPath string, numaNodeInfo cputopology.NUMANodeInfo, topologyAffinityStore topologymanager.Store) (*ManagerImpl, error) { +func newManagerImpl(socketPath string, topology []cadvisorapi.Node, topologyAffinityStore topologymanager.Store) (*ManagerImpl, error) { klog.V(2).Infof("Creating Device Plugin manager at %s", socketPath) if socketPath == "" || !filepath.IsAbs(socketPath) { @@ -136,8 +136,8 @@ func newManagerImpl(socketPath string, numaNodeInfo cputopology.NUMANodeInfo, to } var numaNodes []int - for node := range numaNodeInfo { - numaNodes = append(numaNodes, node) + for _, node := range topology { + numaNodes = append(numaNodes, node.Id) } dir, file := filepath.Split(socketPath) diff --git a/pkg/kubelet/cm/topologymanager/BUILD b/pkg/kubelet/cm/topologymanager/BUILD index deb00046ac7..fe4be1113af 100644 --- a/pkg/kubelet/cm/topologymanager/BUILD +++ b/pkg/kubelet/cm/topologymanager/BUILD @@ -14,10 +14,10 @@ go_library( importpath = "k8s.io/kubernetes/pkg/kubelet/cm/topologymanager", visibility = ["//visibility:public"], deps = [ - "//pkg/kubelet/cm/cpumanager/topology:go_default_library", "//pkg/kubelet/cm/topologymanager/bitmask:go_default_library", "//pkg/kubelet/lifecycle:go_default_library", "//staging/src/k8s.io/api/core/v1:go_default_library", + "//vendor/github.com/google/cadvisor/info/v1:go_default_library", "//vendor/k8s.io/klog/v2:go_default_library", ], ) diff --git a/pkg/kubelet/cm/topologymanager/topology_manager.go b/pkg/kubelet/cm/topologymanager/topology_manager.go index 04f0d0ecbdc..8124753d405 100644 --- a/pkg/kubelet/cm/topologymanager/topology_manager.go +++ b/pkg/kubelet/cm/topologymanager/topology_manager.go @@ -20,9 +20,9 @@ import ( "fmt" "sync" + cadvisorapi "github.com/google/cadvisor/info/v1" "k8s.io/api/core/v1" "k8s.io/klog/v2" - cputopology "k8s.io/kubernetes/pkg/kubelet/cm/cpumanager/topology" "k8s.io/kubernetes/pkg/kubelet/cm/topologymanager/bitmask" "k8s.io/kubernetes/pkg/kubelet/lifecycle" ) @@ -122,12 +122,12 @@ func (th *TopologyHint) LessThan(other TopologyHint) bool { var _ Manager = &manager{} //NewManager creates a new TopologyManager based on provided policy -func NewManager(numaNodeInfo cputopology.NUMANodeInfo, topologyPolicyName string) (Manager, error) { +func NewManager(topology []cadvisorapi.Node, topologyPolicyName string) (Manager, error) { klog.Infof("[topologymanager] Creating topology manager with %s policy", topologyPolicyName) var numaNodes []int - for node := range numaNodeInfo { - numaNodes = append(numaNodes, node) + for _, node := range topology { + numaNodes = append(numaNodes, node.Id) } if topologyPolicyName != PolicyNone && len(numaNodes) > maxAllowableNUMANodes {