Leiserer Laptop: CPU-Lüfter automatisiert herunterregeln

Leiserer Laptop: CPU-Lüfter automatisiert herunterregeln

Der Lüfter meines Asus UX360UA Chromebooks machte ständig mit einem leicht pfeifenden Geräusch auf sich aufmerksam. Dabei handelte es sich um keinen Defekt: Er läuft schlichtweg permanent auf einer relativ hohen Drehzahl. Dabei ist dies zur Kühlung des Systemes gar nicht notwendig. Bei wenig rechenintensiven Aufgaben stört dies vor allem in ruhigeren Umgebungen. Das Werkzeug fancontrol schaffte Abhilfe. Allerdings war hierfür eine manuelle Konfiguration notwendig.

Folgender Artikel zeigt, wie man den CPU-Lüfter unter Xubuntu 19 automatisiert drosseln kann. Er dürfte in analoger bzw. ähnlicher Form auch in anderen Distributionen funktionieren.

Analyse des Problemes

Zunächst habe ich mir die Daten aller Sensoren ausgeben lassen. Hierzu ist das Paket lm-sensors notwendig:

sudo -i
apt install lm-sensors
sensors-detect
sensors

Hier erscheint der Lüfter mit 3400-3500 Umdrehungen pro Sekunde. Während der Messung befand sich das System mit einem Load von 0,4 im Leerlauf. Dennoch ist der Lüfter in ruhiger Umgebung deutlich wahrnehmbar. Die CPU-Temperatur liegt zwischen 40 und 44 Grad.

asus-isa-0000
Adapter: ISA adapter
cpu_fan:     3500 RPM
temp1:        +41.0°C

Vorbereitung: PWM-Ermittlung

Da sich jeder Lüfter akustisch anders verhält, habe ich zunächst den passenden PWM-Wert für einen angenehmen lautlosen Betrieb ermittelt. PWM ermöglicht das Ansteuern der Motordrehzahl. Dadurch kann diese einfacher und gezielter reguliert werden. Früher konnte dies nur über eine Anpassung der Betriebsspannung geschehen. Die Skala bei PWM liegt bei 0 (aus) bis 255 (Vollast). Nach dem Aktivieren von PWM tastete ich mich an einen akzeptablen Wert heran.

echo 1 | sudo tee /sys/class/hwmon/hwmon4/pwm1_enable
echo 100 | sudo tee /sys/class/hwmon/hwmon4/pwm1

Hinweis: Durch die Aktivierung wird der Lüfter nicht mehr automatisch geregelt! Es empfiehlt sich daher, währenddessen keine Anwendungen mit hohem Leistungsbedarf zu betreiben. Ein paralleler Blick auf die Temperatur ist dagegen kein Fehler.

100 stellt sich bereits als deutlich lauter heraus, als vom normalen Betrieb her gewohnt. Beim Maximalwert von 255 wirkte der Laptop wie kurz vor dem Abheben. Derart laut habe ich den Lüfter im alltäglichen Betrieb noch nie erlebt. 60 ist nahezu nicht mehr wahrnehmbar. Bei 50 hört man auch in leisen Umgebungen nichts mehr.

Automatisierung mit fancontrol

Wie zuvor erwähnt, wird die Geschwindigkeit hart gesetzt. Bei hoher Prozessorlast erhöht der Lüfter seine Kühlleistung somit nicht mehr. Hier hilft fancontrol: Es fragt regelmäßig einen beliebigen Temperatursensor ab. Je nach festgelegten Schwellwerten wird der Lüfter hoch- oder runtergeregelt.

Im Regelfall versucht das Programm, beim ersten Start die Lüfter automatisch zu erkennen. Hierfür wird jeder Lüfter nacheinander für 5 Sekunden angehalten. Leider funktionierte das bei meinem Asus-Gerät nicht:

$ sudo apt install fancontrol
$ sudo pwmconfig
[...]
Found the following PWM controls:
   hwmon4/pwm1           current value: 50

Giving the fans some time to reach full speed...
Found the following fan sensors:
   hwmon4/fan1_input     current speed: 0 ... skipping!

There are no working fan sensors, all readings are 0.
Make sure you have a 3-wire fan connected.
You may also need to increase the fan divisors.
See doc/fan-divisors for more information.

Anschließend lief mein Lüfter konstant auf voller Leistung.

Lösung: Manuelle Konfiguration

Anhand der Dokumentation und Beispielen habe ich mir eine passende /etc/fancontrol selbst erstellt. Dies würde normalerweise beim ersten Start automatisch geschehen.

/etc/fancontrol
INTERVAL=10
FCTEMPS=/sys/class/hwmon/hwmon4/pwm1=/sys/devices/platform/coretemp.0/hwmon/hwmon6/temp1_input
FCFANS=/sys/class/hwmon/hwmon4/pwm1=/sys/class/hwmon/hwmon4/fan1_input
MINTEMP=/sys/class/hwmon/hwmon4/pwm1=55 
MAXTEMP=/sys/class/hwmon/hwmon4/pwm1=75
MINSTART=/sys/class/hwmon/hwmon4/pwm1=50
MINSTOP=/sys/class/hwmon/hwmon4/pwm1=55

Sie verbindet den PWM-Lüfter mit der Prozessortemperatur. Außerdem wird festgelegt, dass der Lüfter erst bei 55 Grad hochfährt. Der PWM-Wert liegt hierbei im Bereich 50-55. Alle 10 Sekunden findet eine Abfrage der Temperatur statt.

Um fancontrol zu starten, genügt das händische Starten des Dienstes:

sudo systemctl start fancontrol

Wichtig: Die Konfiguration ist Systemspezifisch! Sie darf nicht 1:1 kopiert werden ohne sicherzustellen, dass diese zu euren Sensoren/Komponenten passt!

Die Temperatur ist im normalen Betrieb nur minimal gestiegen – ungefähr 5 bis 10 °C. Dafür hört man den Lüfter großteils überhaupt nicht mehr. Dies ist nur der Fall, wenn entsprechend viel CPU-Leistung benötigt wird.

Hilfestellung bei der Sensor-Ermittlung

Einen ersten Überblick erhält man über sensors, wie bereits zu Beginn der Artikels beschrieben. Es kann auch nützlich sein, sich die Bezeichnungen ausgeben zu lassen. So lassen sich Sensor und Dateisystem-Pfad zuordnen:

$ grep "" /sys/devices/platform/coretemp.?/hwmon/hwmon?/temp?_label
/sys/devices/platform/coretemp.0/hwmon/hwmon6/temp1_label:Package id 0
/sys/devices/platform/coretemp.0/hwmon/hwmon6/temp2_label:Core 0
/sys/devices/platform/coretemp.0/hwmon/hwmon6/temp3_label:Core 1

Oder die Angaben mit denen von sensors Vergleichen:

$ grep "" /sys/devices/platform/coretemp.0/hwmon/hwmon6/temp1_*
/sys/devices/platform/coretemp.0/hwmon/hwmon6/temp1_crit:100000
/sys/devices/platform/coretemp.0/hwmon/hwmon6/temp1_crit_alarm:0
/sys/devices/platform/coretemp.0/hwmon/hwmon6/temp1_input:46000
/sys/devices/platform/coretemp.0/hwmon/hwmon6/temp1_label:Package id 0
/sys/devices/platform/coretemp.0/hwmon/hwmon6/temp1_max:100000
$ sensors
coretemp-isa-0000
Adapter: ISA adapter
Package id 0:  +46.0°C  (high = +100.0°C, crit = +100.0°C)

Die Temperaturangabe 46000 entspricht hierbei 46°C.

Leave a Reply