如何在 arm64 和 x86 上的 macOS 中获得 CPU idle residency

How can I get CPU idle residency in macOS on arm64 and x86

我正在尝试获取 CPU 在 macOS 中的空闲驻留(x86 上的 C-State C0 驻留在 arm64 上不确定)。我知道您可以在终端中通过 运行 之类的 sudo powermetrics -i1 -n1 -s cpu_power | grep residency 找到此信息,但我需要一种使用 C、C++、Objective-C 甚至汇编来提取此信息的方法。 .尤其是不需要管理员权限的方式。

关于这个话题,我能找到的只有:Time each CPU core spends in C0 power state,但答案并不是最清楚的。请帮忙!

Powermetrics 工具使用私有 API 来执行此操作:IOReportStateGetResidency

您可以尝试导入它并自己也进行一些反向使用:

https://github.com/samdmarshall/OSXPrivateSDK/blob/master/PrivateSDK10.10.sparse.sdk/usr/local/include/IOReport.h

https://opensource.apple.com/source/PowerManagement/PowerManagement-637.1.2/pmset/pmset.c

除此之外,还有一个直接使用mwait asm的例子,但它是针对内核模式的(你需要写一个kext才能在macos上尝试运行):

https://rayanfam.com/topics/using-intels-streaming-simd-extensions-3-monitormwait-as-a-kernel-debugging-trick/

我不知道是否可以在没有 root 的情况下执行此操作,并且由于 API 是私有的 - 这供您研究。