根据温度限制CPU使用率

我运行分布式计算项目,通常希望使用100%的CPU。 如何根据温度而不是使用百分比来限制CPU使用率? 此外,保持英特尔i5全天候运行的最高安全温度是多少? (没有CPU限制FahCore_a4导致此机器在82摄氏度下运行。)

在这个网页上有一个bash脚本,它会尝试将CPU保持在指定温度以下。 http://seperohacker.blogspot.com/2012/10/linux-keep-your-cpu-cool-with-frequency.html

您只需要提供所需的最高温度,它就会限制您的CPU以保持低于该温度。

无耻的插件 – 我编写并维护上述脚本。

这是我用bash解决它的方法。 如果有人想出一个更好的守护进程(更好地保持在目标温度附近),请发布它。

#!/bin/bash while true; do val=$(sensors | awk '/Core 0/ {print $3}') max=$(echo "+60.0") if [[ "$val" < "$max" ]] then killall cpulimit sleep .1 else cpulimit -e FahCore_a4 -l 99 & sleep 1 fi clear sensors done exit 0 

CPU本身有一种机制,如果它变得太热,它就会自动关闭它。 (如果禁用SMI中断,可能不会,我不确定。)

主用户空间应用程序是lm-sensors包。 安装后运行sensors-detect进行设置,如果你的机器是相同的,你可以运行一次,并在任何地方使用得到的结果。

通过cpufreq驱动程序子系统可以轻松控制CPU频率。 请参阅https://wiki.archlinux.org/index.php/CPU_Frequency_Scaling

您可以编写一个守护程序,它使用lm-sensors来轮询temp,如果它太热,则会调低cpu频率。

这就是我如何解决我的过热问题,这些问题不是由特定的过程引起的,而是由于我的笔记本电脑无法消除因长时间高负载运行而导致的热量。 da code monkey本身提供的解决方案的主要区别在于我使用cpu频率缩放,而不是在特定进程上使用cpulimit。 因为无论如何我已经安装并运行了Psensor,我还是背着Psensor。 像da code monkey建议的守护进程也应该工作,但是需要两个阈值(最小和最大)。 在Psensor(传感器首选项 – >警报)中,如果高于高阈值(我使用85)或低于低阈值(我使用80),我会为相关传感器设置警报。 在Preferences-> Sensors->在发出警报时执行的脚本我调用我的脚本heatcontrol.sh,如下所示:

/ALLUSER/heatcontrol.sh powersave ondemand 82

第一个参数是有效的scaling_governor,它可以降低CPU频率,例如powersave。 第二个参数是默认的scaling_governor – 大多数系统的ondemand。 第三个参数是低阈值和高阈值之间的温度(确切的值并不重要)。 Psensor增加了两个参数:传感器ID和报告的温度。

这是我的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