diff --git a/pkg/kubelet/cm/cpumanager/topology/topology.go b/pkg/kubelet/cm/cpumanager/topology/topology.go index adb0aa7fc70..f19acac5fcb 100644 --- a/pkg/kubelet/cm/cpumanager/topology/topology.go +++ b/pkg/kubelet/cm/cpumanager/topology/topology.go @@ -18,7 +18,6 @@ package topology import ( "fmt" - "sort" cadvisorapi "github.com/google/cadvisor/info/v1" "k8s.io/klog" @@ -141,36 +140,33 @@ func (d CPUDetails) CPUsInCore(id int) cpuset.CPUSet { // Discover returns CPUTopology based on cadvisor node info func Discover(machineInfo *cadvisorapi.MachineInfo) (*CPUTopology, error) { - if machineInfo.NumCores == 0 { return nil, fmt.Errorf("could not detect number of cpus") } CPUDetails := CPUDetails{} - numCPUs := machineInfo.NumCores numPhysicalCores := 0 - var coreID int - var err error for _, socket := range machineInfo.Topology { numPhysicalCores += len(socket.Cores) for _, core := range socket.Cores { - if coreID, err = getUniqueCoreID(core.Threads); err != nil { + if coreID, err := getUniqueCoreID(core.Threads); err == nil { + for _, cpu := range core.Threads { + CPUDetails[cpu] = CPUInfo{ + CoreID: coreID, + SocketID: socket.Id, + } + } + } else { klog.Errorf("could not get unique coreID for socket: %d core %d threads: %v", socket.Id, core.Id, core.Threads) return nil, err } - for _, cpu := range core.Threads { - CPUDetails[cpu] = CPUInfo{ - CoreID: coreID, - SocketID: socket.Id, - } - } } } return &CPUTopology{ - NumCPUs: numCPUs, + NumCPUs: machineInfo.NumCores, NumSockets: len(machineInfo.Topology), NumCores: numPhysicalCores, CPUDetails: CPUDetails, @@ -181,7 +177,6 @@ func Discover(machineInfo *cadvisorapi.MachineInfo) (*CPUTopology, error) { // for a given Threads []int slice. This will assure that coreID's are // platform unique (opposite to what cAdvisor reports - socket unique) func getUniqueCoreID(threads []int) (coreID int, err error) { - err = nil if len(threads) == 0 { return 0, fmt.Errorf("no cpus provided") } @@ -190,8 +185,12 @@ func getUniqueCoreID(threads []int) (coreID int, err error) { return 0, fmt.Errorf("cpus provided are not unique") } - tmpThreads := make([]int, len(threads)) - copy(tmpThreads, threads) - sort.Ints(tmpThreads) - return tmpThreads[0], err + min := threads[0] + for _, thread := range threads[1:] { + if thread < min { + min = thread + } + } + + return min, nil }