Merge pull request #74016 from ahadas/topology_cleanup

Cleanup in topology.go
This commit is contained in:
Kubernetes Prow Robot 2019-02-27 22:49:24 -08:00 committed by GitHub
commit 4b1282d925
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

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