C++Linux获得CPU标称频率

C++ Linux get CPU nominal frequency

本文关键字:频率 CPU 获得 C++Linux      更新时间:2023-10-16

我需要在C++代码中获得Linux下的CPU标称频率。据我所知,/proc/cpuinfo包含一个电流频率。

/sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_max_freq是否

总是可靠的标称频率(kHz)?

或者有更好的方法从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_pstate会将此文件的内容设置为最大turbo频率。尽管如此,还是有其他解决方案。Intel CPU的标称频率作为CPU型号名称的一部分写入(当输入EAX=0x01或来自/proc/cpuinfo时,可使用CPUID指令读取),也可以读取MSR_PLATFORM_INFO (0xCE)寄存器。

编辑:AMD处理器在/sys/devices/system/cpu/cpu*/cpufreq/cpuinfo_max_freq中提供标称频率,无需额外的1MHz

EDIT2:一些处理器可能有/sys/devices/system/cpu/cpu*/cpufreq/cpuinfo_nominal_freq文件,例如POWER9