Ogranicz użycie procesora pod względem temperatury

8

Prowadzę rozproszone projekty komputerowe, które zwykle chcą wykorzystywać 100% procesora. Jak ograniczyć użycie procesora pod względem temperatury zamiast zużycia procentowego? Jaka jest maksymalna bezpieczna temperatura, aby utrzymać działanie procesora Intel i5 24/7? (Bez limitu procesora FahCore_a4 powoduje, że ta maszyna działa w temperaturze 82 stopni Celsjusza.)

jeffythedragonslayer
źródło

Odpowiedzi:

8

Na tej stronie znajduje się skrypt bash, który będzie próbował utrzymać twój procesor poniżej określonej temperatury. http://seperohacker.blogspot.com/2012/10/linux-keep-your-cpu-cool-with-frequency.html

Musisz tylko zapewnić żądaną maksymalną temperaturę, a dławisz procesory, starając się pozostać poniżej tej temperatury.

Bezwstydna wtyczka - napisałem i utrzymuję powyższy skrypt.

Sepero
źródło
2
Chociaż teoretycznie może to odpowiedzieć na pytanie, lepiej byłoby zawrzeć tutaj istotne części odpowiedzi i podać odnośnik.
fossfreedom
1
fajny scenariusz .. dobry pomysł :)
Superbiji
1
tutaj są niezbędne części: github.com/Sepero/temp-throttle
DmitrySandalov
3

Oto jak rozwiązałem to za pomocą bash. Jeśli ktoś wymyśli lepszego demona (lepiej utrzymującego się w pobliżu temperatury docelowej), opublikuj go.

#!/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
jeffythedragonslayer
źródło
0

Sam procesor ma mechanizm, który wyłącza się, jeśli robi się za gorąco. (może nie, jeśli wyłączysz przerwania SMI, nie jestem tego pewien).

Główną aplikacją przestrzeni użytkownika jest lm-sensorspakiet. Po zainstalowaniu uruchom go, sensors-detectaby go skonfigurować, jeśli twoje maszyny są takie same, możesz uruchomić to raz i korzystać z uzyskanych wyników wszędzie.

Częstotliwość procesora jest łatwo kontrolowana za pomocą podsystemu sterownika cpufreq. patrz https://wiki.archlinux.org/index.php/CPU_Frequency_Scaling

Możesz napisać demona, który używa czujników lm do sprawdzania temperatury, a jeśli jest zbyt gorący, zmniejsz częstotliwość procesora.

użytkownik72421
źródło
w jakim języku pisanie takiego demona byłoby najłatwiejsze? bash, python, awk?
jeffythedragonslayer
Powiedziałbym, że bash jest najprostszy. Oto przykład (spójrz na linie 55-66).
Adobe,
0

W ten sposób rozwiązałem moje problemy z przegrzewaniem, które nie zostały spowodowane przez określony proces, ale przez to, że mój laptop nie rozproszył ciepła spowodowanego pracą z dużym obciążeniem procesora przez dłuższy czas. Główną różnicą w stosunku do rozwiązania, które oferuje sam kod da monkey, jest to, że używam skalowania częstotliwości procesora, zamiast używać cpulimit w określonym procesie. Ponieważ i tak mam zainstalowany i działający Psensor, korzystam z Psensora. Sugerowany demon, taki jak małpa da da, powinien również działać, jednak wymagane są dwa progi (min. I maks.). W Psensorze (Preferencje czujnika-> Alarm) ustawiam alarm dla odpowiedniego czujnika, jeśli staje się wyższy niż górny próg (używam 85) lub niższy niż dolny próg (używam 80). W Preferencjach-> Czujniki-> Skrypt wykonywany po uruchomieniu alarmu nazywam mój skrypt heatcontrol.sh w następujący sposób:

/ALLUSER/heatcontrol.sh powersave ondemand 82

Pierwszym parametrem jest poprawny administrator_skalowania, który zmniejsza częstotliwość procesora, np. Powerave. Drugi parametr to domyślny scaling_governor - ondemand dla większości systemów. Trzeci parametr to temperatura między dolnym a górnym progiem (dokładna wartość nie jest ważna). Psensor dodaje dwa dodatkowe parametry: identyfikator czujnika i zgłaszaną temperaturę.

A to jest mój skrypt 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

Działa dobrze dla mnie (UBUNTU 14.04 LTS).

Jako nowicjusz w Linuksie i bash korzystałem z wielu zasobów, w tym:

https://wiki.archlinux.org/index.php/CPU_frequency_scaling

http://elinux.org/Jetson/Performance#Viewing_the_current_CPU_status

użytkownik369752
źródło