podman
1//go:build !remote
2
3package libpod
4
5import (
6"fmt"
7"unsafe"
8
9"github.com/containers/podman/v5/libpod/define"
10"golang.org/x/sys/unix"
11)
12
13func (r *Runtime) setPlatformHostInfo(info *define.HostInfo) error {
14return nil
15}
16
17func timeToPercent(time uint64, total uint64) float64 {
18return 100.0 * float64(time) / float64(total)
19}
20
21// getCPUUtilization Returns a CPUUsage object that summarizes CPU
22// usage for userspace, system, and idle time.
23func getCPUUtilization() (*define.CPUUsage, error) {
24buf, err := unix.SysctlRaw("kern.cp_time")
25if err != nil {
26return nil, fmt.Errorf("reading sysctl kern.cp_time: %w", err)
27}
28
29var total uint64 = 0
30var times [unix.CPUSTATES]uint64
31
32for i := 0; i < unix.CPUSTATES; i++ {
33val := *(*uint64)(unsafe.Pointer(&buf[8*i]))
34times[i] = val
35total += val
36}
37return &define.CPUUsage{
38UserPercent: timeToPercent(times[unix.CP_USER], total),
39SystemPercent: timeToPercent(times[unix.CP_SYS], total),
40IdlePercent: timeToPercent(times[unix.CP_IDLE], total),
41}, nil
42}
43