Вопрос или проблема
Я уже давно использую conky
для сбора и отображения системной статистики. Более десяти лет назад я заметил, что “средняя” частота процессора в МГц просто копирует первый ядро, а не является средней для всех ядер. Команда для получения средней частоты процессора в conky: ${freq_g 0}
. Чтобы получить частоту для каждого ядра отдельно, просто используйте ${freq_g 1} - ${freq_g 12}
.
Другими словами, 0 должен означать среднюю частоту, а не первое ядро, а для отдельно каждого ядра начинается с 1 до количества имеющихся ядер. Но 0 и 1 всегда отображают одно и то же значение.
Проверяя в bash, я выполняю эту команду:
grep "cpu MHz" </proc/cpuinfo
Чтобы получить среднее значение,
grep "cpu MHz" /proc/cpuinfo | awk '{sum+=$4;} END{printf "%2.2f", (sum/12)/1000;}'
Это работает, и действительно отображает среднее значение из двенадцати строк, которые выводит команда grep. И, конечно, среднее значение отличается от значения первого ядра.
Хорошо, пока все нормально. Но у нас есть проблема: я также использую программу под названием corectrl
для управления режимом работы процессора и управления GPU.
Когда я устанавливаю процессор в “режим производительности”, частота процессора соответственно повышается – с низкого диапазона 2 ГГц до низкого диапазона 4 ГГц, как сообщает conky
. Но когда я проверяю вывод указанной выше команды grep
, все ядра показывают, что они работают в диапазоне от низкого до среднего значения 3 ГГц.
Я не ожидаю здесь точных чисел, просто приблизительных значений. Или, другими словами, я ожидаю точных чисел, но они изменяются так много раз в секунду, что я ожидаю, что они будут отображаться по-разному.
Самая большая проблема, с которой я сталкиваюсь, заключается в том, что моя команда grep
редко показывает, что частота процессора превышает 4 ГГц, в то время как conky
редко показывает ее ниже 4 ГГц – в режиме производительности. Должен ли я просто отображать выводы своей команды grep в conky и просто принять, что два вывода не будут совпадать?
У меня есть очень похожая проблема с встроенным измерением температуры процессора в conky
. Я могу отображать то, что встроенная функция conky
отчет, и результаты, используя sensors
и hwmon
. Встроенная функция conky
почти всегда показывает самую низкую температуру. Остальные два метода варьируются гораздо больше и обычно показывают более высокие температуры, чем встроенная функция conky
. И я имею в виду, что они могут показывать разницу в десять градусов или больше в течение длительного времени.
Вы усредняете по нескольким ядрам, и поэтому не видите ожидаемых вами чисел.
Вот простой скрипт, который показывает среднее и максимальное значения одновременно без использования grep:
cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_cur_freq | \
awk 'BEGIN{max=0;avr=0}
{for (i=1;i<=NF;i++) {if ($i>max) max=$i; avr+=$i}}
END{print avr/NF, max}'
Отображение среднего значения для новых процессоров Intel (ADL/RPL/ARL) не имеет большого смысла, к сожалению, потому что у них есть сочетание P и E ядер с очень разными максимальными частотами. Это можно было бы исправить, но это не ваш случай.
Ответ или решение
Ваши Задача:
Вы сталкиваетесь с проблемой, когда встроенные значения частоты ЦП и температуры в Conky не отображают ожидаемые показатели частоты и температуры ЦП. До настоящего момента вы использовали следующие команды:
-
Для получения средней частоты всех ядер ЦП:
grep "cpu MHz" /proc/cpuinfo | awk '{sum+=$4;} END{printf "%2.2f", (sum/12)/1000;}'
-
Для получения информации о текущей частоте каждого ядра ЦП:
cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_cur_freq | \ awk 'BEGIN{max=0;avr=0} {for (i=1;i<=NF;i++) {if ($i>max) max=$i; avr+=$i}} END{print avr/NF, max}'
Анализ:
-
Проблемы с оверклокингом и режимами энергосбережения: При использовании программы corectrl для смены режима производительности, разные программы могут показывать различные частоты ЦП. Часть этой разницы может быть связана с тем, что Conky берет данные по максимально допустимой частоте, тогда как реальные данные /proc/cpuinfo могут показывать усредненные значения.
-
Различия в температурах: Показатели температур, выводимые Conky, могут быть ниже из-за того, что эта программа использует другой метод вычисления или источники данных, нежели sensors и hwmon.
Решение:
-
Унификация отображаемой информации: Чтобы уменьшить взаимные расхождения и улучшить точность наблюдений, попробуйте перенести результаты из grep непосредственно в визуальное отображение Conky. Таким образом, вы сможете сравнивать показания с использованием одного и того же источника данных.
-
Настройка скрипта для мониторинга: Рассмотрите возможность создания скрипта, который будет периодически обновляться и выводить данные о средних и максимальных значениях частот и температур. Этот скрипт может использовать метод без применения
grep
для более точного определения текущего состояния системы.Пример скрипта:
(while true; do echo "Среднее и максимальное значения частоты ЦП:" cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_cur_freq | awk ' BEGIN{max=0; sum=0} {for (i=1;i<=NF;i++) {if ($i>max) max=$i; sum+=$i}} END{print "Среднее: ", sum/NF/1000, "ГГц", "Максимум: ", max/1000, "ГГц"}' echo "Температура ЦП:" sensors | awk '/Package id 0/ {print $4}' # Этот синтаксис может изменяться в зависимости от вашей конфигурации sleep 5 # Пауза перед повторным запуском done) > conky_output.txt
-
SEO и завершение: Для повышения эффективности и удобства работы с данной системой мониторинга рекомендуется оптимизировать ваш заголовок и контент на основе ключевых слов, таких как "мониторинг ЦП Conky", "управление частотой ЦП" и "текущая температура процессора". Это привлечет больше внимания к вашим усовершенствованиям и, возможно, предоставит полезные советы от сообщества.
В заключение, ваша цель — не просто выровнять данные между разными методами наблюдения, но и выбрать максимально точные и обновляемые источники данных для улучшения работы вашей конфигурации Conky.