Я управляю проектами распределенных вычислений, которые обычно хотят использовать 100% ЦП. Как ограничить использование ЦП с точки зрения температуры, а не процента использования? Кроме того, какова максимальная безопасная температура, чтобы Intel i5 работал 24/7? (Без ограничения CPU FahCore_a4 заставляет эту машину работать при 82 градусах Цельсия.)
На этой веб-странице есть скрипт bash, который будет пытаться поддерживать ваш процессор ниже указанной температуры. http://seperohacker.blogspot.com/2012/10/linux-keep-your-cpu-cool-with-frequency.html
Вам просто нужно предоставить желаемое максимальная температура, и она будет задавливать ваш процессор (ы), чтобы оставаться ниже этой температуры.
Бесстыдный плагин - я написал и поддерживаю приведенный выше скрипт.
Вот как я решил это, используя bash. Если кто-то придумает лучшего демона (лучше держится ближе к целевой температуре), пожалуйста, опубликуйте его.
#!/bin/bash
while true; do
val=$(sensors | awk '/Core 0/ {print $3}')
max="+60.0"
if [[ "$val" < "$max" ]]
then
killall cpulimit
sleep .1
else
cpulimit -e FahCore_a4 -l 99 &
sleep 1
fi
clear
sensors
done
Так я решил свои проблемы с перегревом, вызванные не определенным процессом, а неспособностью моего ноутбука рассеивать тепло, вызванное высокой нагрузкой на процессор в течение более длительных периодов времени. Основное отличие от решения, предлагаемого самим da code monkey, заключается в том, что я использую масштабирование частоты процессора вместо использования cpulimit в конкретном процессе. Так как у меня установлен и работает Psensor, я использую Psensor. Демон, подобный предложенной обезьяной кода, также должен работать, однако требуются два порога (мин. И макс.). В Psensor (Настройки датчика-> Тревога) я устанавливаю сигнал тревоги для соответствующего датчика, если он становится выше, чем верхний порог (я использую 85), или ниже, чем нижний порог (я использую 80). В Preferences-> Sensors-> Script, выполняемом при возникновении тревоги, я называю мой скрипт heatcontrol.sh следующим образом:
/ALLUSER/heatcontrol.sh powersave ondemand 82
Первый параметр - это действительный scaling_governor, который уменьшает частоту процессора, например энергосбережение. Второй параметр по умолчанию - scaling_governor - ondemand для большинства систем. Третий параметр - это температура между нижним и верхним порогом (точное значение не имеет значения). Psensor добавляет еще два параметра: идентификатор датчика и сообщаемую температуру.
А это мой сценарий heatcontrol.sh:
#!/bin/bash
# TempNZ is temperature reported by Psensor; strip of trailing °C
TempNZ=$5
bnum=`expr index "$TempNZ" "°"`
if (( bnum < 2 )); then
echo "ERROR"
fi
TempNZ=${TempNZ:0:$(($bnum-1))}
STR=$1
# Is this a low threshold alarm?
if [ "$TempNZ" -le "$3" ]; then
STR=$2
fi
sudo sh -c "echo '$STR' > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor"
# echo new scaling_governor
sudo cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
# play sound - audio feedback - optional
paplay /usr/share/sounds/ubuntu/stereo/message-new-instant.ogg
У меня отлично работает (UBUNTU 14.04 LTS).
Будучи новичком в Linux и bash, я использовал ряд ресурсов, в том числе:
https://wiki.archlinux.org/index.php/CPU_frequency_scaling
http://elinux.org/Jetson/Performance#Viewing_the_current_CPU_status
Сам процессор имеет механизм, который отключает его, если он становится слишком горячим. (возможно, нет, если вы отключите прерывания SMI, я не уверен в этом.)
Основным приложением пользовательского пространства является пакет lm-sensors
. После установки запустите sensors-detect
, чтобы настроить его, если ваши машины одинаковые, вы можете запустить его один раз и использовать полученные результаты везде.
Частота процессора легко контролируется через подсистему драйвера cpufreq. см. https://wiki.archlinux.org/index.php/CPU_Frequency_Scaling
. Вы можете написать демон, который использует lm-сенсоры для опроса температуры и, если он слишком горячий, выключите частота процессора.
Максимально безопасная температура процессора обычно указывается в его технических характеристиках от производителя. Максимум 100°C довольно распространен. Вы можете оставить температуру на несколько °C ниже этого значения, чтобы иметь некоторый запас (безопасность и, возможно, долговечность компонента).
Кроме того, нагрев ЦП будет передавать часть своего тепла другим, физически близким компонентам вашего компьютера. Вы можете провести некоторые тесты и контролировать их температуру, когда ваш процессор работает на 100%, чтобы проверить, не слишком ли вы приблизитесь к их пределам в долгосрочной перспективе. Лучше проверить это в жаркий день.:)
Тогда вы можете установить thermald
, которая представляет собой программу, предназначенную для контроля и ограничения температуры процессора с использованием различных методов.
Наконец, процессоры Intel Core, например, имеют внутренний механизм ограничения температуры, который можно настроить ниже 100°C, упомянутых выше, выбрав предел в °C.
Дополнительную информацию см. в этом ответе.