MCPcopy Create free account
hub / github.com/containers/common / Stat

Method Stat

pkg/cgroups/cpu.go:74–122  ·  view source on GitHub ↗

Stat fills a metrics structure with usage stats for the controller

(ctr *CgroupControl, m *Metrics)

Source from the content-addressed store, hash-verified

72
73// Stat fills a metrics structure with usage stats for the controller
74func (c *cpuHandler) Stat(ctr *CgroupControl, m *Metrics) error {
75 var err error
76 usage := CPUUsage{}
77 if ctr.cgroup2 {
78 values, err := readCgroup2MapFile(ctr, "cpu.stat")
79 if err != nil {
80 return err
81 }
82 if val, found := values["usage_usec"]; found {
83 usage.Total, err = strconv.ParseUint(cleanString(val[0]), 10, 64)
84 if err != nil {
85 return err
86 }
87 usage.Kernel *= 1000
88 }
89 if val, found := values["system_usec"]; found {
90 usage.Kernel, err = strconv.ParseUint(cleanString(val[0]), 10, 64)
91 if err != nil {
92 return err
93 }
94 usage.Total *= 1000
95 }
96 // FIXME: How to read usage.PerCPU?
97 } else {
98 usage.Total, err = readAcct(ctr, "cpuacct.usage")
99 if err != nil {
100 if !os.IsNotExist(errors.Cause(err)) {
101 return err
102 }
103 usage.Total = 0
104 }
105 usage.Kernel, err = readAcct(ctr, "cpuacct.usage_sys")
106 if err != nil {
107 if !os.IsNotExist(errors.Cause(err)) {
108 return err
109 }
110 usage.Kernel = 0
111 }
112 usage.PerCPU, err = readAcctList(ctr, "cpuacct.usage_percpu")
113 if err != nil {
114 if !os.IsNotExist(errors.Cause(err)) {
115 return err
116 }
117 usage.PerCPU = nil
118 }
119 }
120 m.CPU = CPUMetrics{Usage: usage}
121 return nil
122}
123
124// GetSystemCPUUsage returns the system usage for all the cgroups
125func GetSystemCPUUsage() (uint64, error) {

Callers

nothing calls this directly

Calls 4

readCgroup2MapFileFunction · 0.85
cleanStringFunction · 0.85
readAcctFunction · 0.85
readAcctListFunction · 0.85

Tested by

no test coverage detected