From 20c85d3460189b1466bc73c7865a871fbb30772c Mon Sep 17 00:00:00 2001 From: Lorenz Brun Date: Mon, 13 May 2019 01:16:46 +0200 Subject: [PATCH] Replace use of cgo for getting number of online CPUs --- container/libcontainer/handler.go | 20 +++++--------------- 1 file changed, 5 insertions(+), 15 deletions(-) diff --git a/container/libcontainer/handler.go b/container/libcontainer/handler.go index 1951a1d6..df380c1d 100644 --- a/container/libcontainer/handler.go +++ b/container/libcontainer/handler.go @@ -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 -*/ -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) {