Replace use of cgo for getting number of online CPUs

This commit is contained in:
Lorenz Brun 2019-05-13 01:16:46 +02:00
parent 1493d8af7d
commit 20c85d3460

View File

@ -27,18 +27,15 @@ import (
"github.com/google/cadvisor/container"
info "github.com/google/cadvisor/info/v1"
"golang.org/x/sys/unix"
"bytes"
"github.com/opencontainers/runc/libcontainer"
"github.com/opencontainers/runc/libcontainer/cgroups"
"k8s.io/klog"
)
/*
#include <unistd.h>
*/
import "C"
type Handler struct {
cgroupManager cgroups.Manager
rootFs string
@ -514,19 +511,12 @@ func setCpuStats(s *cgroups.Stats, ret *info.ContainerStats, withPerCPU bool) {
}
// Copied from
// https://github.com/moby/moby/blob/8b1adf55c2af329a4334f21d9444d6a169000c81/daemon/stats/collector_unix.go#L73
// Apache 2.0, Copyright Docker, Inc.
func getNumberOnlineCPUs() (uint32, error) {
i, err := C.sysconf(C._SC_NPROCESSORS_ONLN)
// According to POSIX - errno is undefined after successful
// sysconf, and can be non-zero in several cases, so look for
// error in returned value not in errno.
// (https://sourceware.org/bugzilla/show_bug.cgi?id=21536)
if i == -1 {
var availableCPUs unix.CPUSet
if err := unix.SchedGetaffinity(0, &availableCPUs); err != nil {
return 0, err
}
return uint32(i), nil
return uint32(availableCPUs.Count()), nil
}
func setDiskIoStats(s *cgroups.Stats, ret *info.ContainerStats) {