diff options
author | OpenShift Merge Robot <openshift-merge-robot@users.noreply.github.com> | 2020-02-13 15:42:53 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-02-13 15:42:53 +0100 |
commit | cd9e6b4143c9b49c3a23f2ba3c1e1c4978c83134 (patch) | |
tree | 1a9b2c4d6630fee8ff40eba4666a0aa889a87b9b /pkg/cgroups/cpu.go | |
parent | f4b5e600a10f92335f46e004e011205d07ee146b (diff) | |
parent | 510fa4ebc8271f929753275428ae2b6047ecc8c7 (diff) | |
download | podman-cd9e6b4143c9b49c3a23f2ba3c1e1c4978c83134.tar.gz podman-cd9e6b4143c9b49c3a23f2ba3c1e1c4978c83134.tar.bz2 podman-cd9e6b4143c9b49c3a23f2ba3c1e1c4978c83134.zip |
Merge pull request #5172 from giuseppe/api-fix-cpu-stats
api: fix the CPU stats reported
Diffstat (limited to 'pkg/cgroups/cpu.go')
-rw-r--r-- | pkg/cgroups/cpu.go | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/pkg/cgroups/cpu.go b/pkg/cgroups/cpu.go index a43a76b22..5f0a18031 100644 --- a/pkg/cgroups/cpu.go +++ b/pkg/cgroups/cpu.go @@ -121,3 +121,42 @@ func (c *cpuHandler) Stat(ctr *CgroupControl, m *Metrics) error { m.CPU = CPUMetrics{Usage: usage} return nil } + +// GetSystemCPUUsage returns the system usage for all the cgroups +func GetSystemCPUUsage() (uint64, error) { + cgroupv2, err := IsCgroup2UnifiedMode() + if err != nil { + return 0, err + } + if !cgroupv2 { + p := filepath.Join(cgroupRoot, CPUAcct, "cpuacct.usage") + return readFileAsUint64(p) + } + + files, err := ioutil.ReadDir(cgroupRoot) + if err != nil { + return 0, errors.Wrapf(err, "read directory %q", cgroupRoot) + } + var total uint64 + for _, file := range files { + if !file.IsDir() { + continue + } + p := filepath.Join(cgroupRoot, file.Name(), "cpu.stat") + + values, err := readCgroup2MapPath(p) + if err != nil { + return 0, err + } + + if val, found := values["usage_usec"]; found { + v, err := strconv.ParseUint(cleanString(val[0]), 10, 0) + if err != nil { + return 0, err + } + total += v * 1000 + } + + } + return total, nil +} |