diff --git a/cpu/cpu_darwin.go b/cpu/cpu_darwin.go index 7acb258d9..f645c8e20 100644 --- a/cpu/cpu_darwin.go +++ b/cpu/cpu_darwin.go @@ -8,6 +8,7 @@ import ( "strconv" "strings" + "github.com/shoenig/go-m1cpu" "github.com/tklauser/go-sysconf" "golang.org/x/sys/unix" ) @@ -85,11 +86,15 @@ func InfoWithContext(ctx context.Context) ([]InfoStat, error) { c.CacheSize = int32(cacheSize) c.VendorID, _ = unix.Sysctl("machdep.cpu.vendor") - // Use the rated frequency of the CPU. This is a static value and does not - // account for low power or Turbo Boost modes. - cpuFrequency, err := unix.SysctlUint64("hw.cpufrequency") - if err == nil { - c.Mhz = float64(cpuFrequency) / 1000000.0 + if m1cpu.IsAppleSilicon() { + c.Mhz = float64(m1cpu.PCoreHz()) + } else { + // Use the rated frequency of the CPU. This is a static value and does not + // account for low power or Turbo Boost modes. + cpuFrequency, err := unix.SysctlUint64("hw.cpufrequency") + if err == nil { + c.Mhz = float64(cpuFrequency) / 1000000.0 + } } return append(ret, c), nil diff --git a/cpu/cpu_test.go b/cpu/cpu_test.go index 91b8e8ad9..0c12708ae 100644 --- a/cpu/cpu_test.go +++ b/cpu/cpu_test.go @@ -9,6 +9,7 @@ import ( "time" "github.com/shirou/gopsutil/v3/internal/common" + "github.com/shoenig/go-m1cpu" "github.com/stretchr/testify/assert" ) @@ -123,6 +124,11 @@ func TestCpuInfo(t *testing.T) { if vv.ModelName == "" { t.Errorf("could not get CPU Info: %v", vv) } + if m1cpu.IsAppleSilicon() { + if vv.Mhz <= 0 { + t.Errorf("could not get frequency of: %s", m1cpu.ModelName()) + } + } } } diff --git a/go.mod b/go.mod index 208cdfbf4..da73e9b74 100644 --- a/go.mod +++ b/go.mod @@ -6,6 +6,7 @@ require ( github.com/google/go-cmp v0.5.9 github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0 github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c + github.com/shoenig/go-m1cpu v0.1.2 github.com/stretchr/testify v1.8.2 github.com/tklauser/go-sysconf v0.3.11 github.com/yusufpapurcu/wmi v1.2.2 diff --git a/go.sum b/go.sum index a1d5b790e..73433df9a 100644 --- a/go.sum +++ b/go.sum @@ -12,6 +12,10 @@ github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZb github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c h1:ncq/mPwQF4JjgDlrVEn3C11VoGHZN7m8qihwgMEtzYw= github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c/go.mod h1:OmDBASR4679mdNQnz2pUhc2G8CO2JrUAVFDRBDP/hJE= +github.com/shoenig/go-m1cpu v0.1.2 h1:LZoPWr2YorVLce3wrY5JQAnMvur1WWo5i7SvdoTYEw8= +github.com/shoenig/go-m1cpu v0.1.2/go.mod h1:Wwvst4LR89UxjeFtLRMrpgRiyY4xPsejnVZym39dbAQ= +github.com/shoenig/test v0.6.3 h1:GVXWJFk9PiOjN0KoJ7VrJGH6uLPnqxR7/fe3HUPfE0c= +github.com/shoenig/test v0.6.3/go.mod h1:byHiCGXqrVaflBLAMq/srcZIHynQPQgeyvkvXnjqq0k= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=