C++ Linux получает номинальную частоту процессора
Мне нужно получить номинальную частоту процессора под Linux в коде C++. Насколько я знаю, /proc/cpuinfo
содержит текущую частоту.
Является /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_max_freq
всегда надежен как номинальная частота в кГц?
Или есть лучший способ получить эту информацию из C++?
1 ответ
C++ не имеет никаких средств для доступа к этому значению, он даже не предполагает, что такое значение есть. Даже в вашем случае вы просто смотрите на один из процессоров, а не на все. Это означает, что вам придется делать что-то зависящее от ОС, что вы, вероятно, можете построить в C++.
Во всяком случае, вы знаете какой-либо инструмент, обеспечивающий этот номер? Получить его исходный код и посмотреть, как он это делает! Кроме этого, я бы посмотрел на /proc/cpuinfo и вывел среднее значение "CPU MHz". /proc
файловая система в основном является предшественником /sys
файловая система, но информация должна быть такой же.
Единого универсального способа считывания номинальной частоты не существует. Вы можете прочитать номинальную частоту из/sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_max_freq
(номинальная + 1 МГц) при использовании acpi-cpufreq
драйвер масштабирования, однако intel_pstate
устанавливает для содержимого этого файла максимальную частоту турбо. Тем не менее есть альтернативные решения. У ЦП Intel номинальная частота записывается как часть названия модели ЦП (читается с помощью инструкции CPUID при вводе EAX = 0x01 или из/proc/cpuinfo
) или вы можете прочитать MSR_PLATFORM_INFO (0xCE)
регистр.