Добрый день,
я небольшой специалист в программиоровани, но с помощью инета и друзей написал вот такой скрипт. запускаю его в автостарте и он удерживает температуру процессоров в пределенном диапазоне.
скрипт следит за любым количеством карт, нужно указать сколько. держит температуру в диапазоне 72-77 градусов. если температура выше 77 - увеличивает скорость вентиляторов. если ниже 72 - снижает. причем увеличивает быстро, снижает неторопливо, но скоростью можно управлять.
#----------------------------------------------------------------------
# Description: adaptive fan speed management for NVIDIA GPUs on Linux
# to maintain the given temperature
#----------------------------------------------------------------------
FSCTLLOG="/home/srgmnr/Mining/log/fsctl.log"
numberofgpu=2 #how many GPU do you have
polltime=3 # in seconds
remindevery=600 #seconds
targethi=77 # HI target GPU temperature
targetlow=72 # LOW target GPU temperature
fansmin=35 # minimum GPU fan speed
fansmax=90 # maximum GPU fan speed
faninit=35 # initial GPU fan speed
stepup=5 #increase step for fan speed
stepdown=1 #decrease step for fan speed
trap ctrl_c INT
ctrl_c() {
echo >> $FSCTLLOG
echo -n "Resetting GPU fan management: ">> $FSCTLLOG
for (( i=0; i<numberofgpu; i++)); do
nvidia-settings -a "[gpu:$i]/GPUFanControlState=0">> $FSCTLLOG
done
exit 0
}
setspeed()
{
echo "GPU $1 (temp=$4) fan speed changed from $2 to $3">> $FSCTLLOG
nvidia-settings -a "[fan:$1]/GPUTargetFanSpeed=$3" >> $FSCTLLOG
}
#start script
echo "Fan Speed Control script started" > $FSCTLLOG
date >> $FSCTLLOG
#export DISPLAY=:0
echo "Lets check all $numberofgpu yours GPU(s)..." >> $FSCTLLOG
for (( i=0; i<numberofgpu; i++)); do
result=`nvidia-settings -a [gpu:$i]/GPUFanControlState=1 | grep "assigned value 1"`
test -z "$result" && echo "Fan speed management is not supported on this GPU. Exiting">> $FSCTLLOG && exit 1
nvidia-settings -a "[gpu:$i]/GPUFanControlState=1" -a "[fan:$i]/GPUTargetFanSpeed=$faninit" >> $FSCTLLOG
done
#and than let's rock!
secondstoremind=0
while :; do
for (( i = 0; i < numberofgpu; i++ )); do
temp=`nvidia-settings -q [gpu:$i]/GPUCoreTemp -t | head -1`
fanspeed=`nvidia-settings -q [fan:$i]/GPUCurrentFanSpeed -t | head -1`
if [ $temp -lt $targetlow ]; then
fannewspeed=$(($fanspeed-$stepdown))
if [ $fannewspeed -lt $fansmin ]; then
fannewspeed=$fansmin
fi
fi
if [ $temp -gt $targethi ]; then
fannewspeed=$(($fanspeed+$stepup))
if [ $fannewspeed -gt $fansmax ]; then
fannewspeed=$fansmax
fi
fi
if [ $fannewspeed -ne $fanspeed ]; then
setspeed $i $fanspeed $fannewspeed $temp
fi
done
sleep $polltime
secondstoremind=$(($secondstoremind+$polltime))
if [ $secondstoremind -gt $remindevery ]; then
secondstoremind=0
echo>> $FSCTLLOG
echo "... another $remindevery seconds left">> $FSCTLLOG
nvidia-smi>> $FSCTLLOG
fi
done