我需要在C++代码中在Linux系统下获取CPU名义频率。据我所知,/proc/cpuinfo
中包含当前频率。
/sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_max_freq
始终可靠作为名义频率(单位:千赫兹)吗?
还是有更好的从C++获取这些信息的方法吗?
我需要在C++代码中在Linux系统下获取CPU名义频率。据我所知,/proc/cpuinfo
中包含当前频率。
/sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_max_freq
始终可靠作为名义频率(单位:千赫兹)吗?
还是有更好的从C++获取这些信息的方法吗?
C++没有任何方法来访问这个值,它甚至不假设存在这样的值。即使在您的情况下,您只是查看其中一个CPU,而不是所有CPU。这意味着您将必须执行一些依赖于操作系统的操作,这可能可以使用C++构建。
无论如何,您知道提供该数字的任何工具吗?获取其源代码并查看其如何执行!除此之外,我会查看/proc/cpuinfo并构建“cpu MHz”值的平均值。 /proc
文件系统基本上是/sys
文件系统的前身,但信息应该是相同的。
acpi-cpufreq
缩放驱动程序,您可以从/sys/devices/system/cpu/cpu*/cpufreq/cpuinfo_max_freq
(名义+1 MHz)中读取Intel处理器的名义频率,但是intel_pstate
将此文件的内容设置为最大涡轮频率。不过,还有替代方案。Intel CPU的名义频率写在CPU型号名称中(当输入EAX = 0x01时,可使用CPUID指令读取,或者从/proc/cpuinfo
读取),或者您可以读取MSR_PLATFORM_INFO (0xCE)
寄存器。/sys/devices/system/cpu/cpu*/cpufreq/cpuinfo_max_freq
中提供名义频率,无需额外的1 MHz。/sys/devices/system/cpu/cpu*/cpufreq/cpuinfo_nominal_freq
文件,例如POWER9。