Frissítve: 2008. 04.03
Felmerült az igény egy csendesebb gépre. Egy ideje foglalkoztat a kérdés, hogyan lehet megoldani, hogy a cpu ventilátor a processzor hőmérsékletéhez alkalmazkodva dinamikusan állítsa a sebességét.
Ebben a bejegyzésben ezt a kérdés igyekszem körüljárni, remélve, hogy hasznos lesz az utókor számára.
2008. Március 7.
Rendszer:
Az alaplap, amivel dolgozok egy Abit KN8-ultra. Ebben van egy AMD Athlon 64 3500+ Processzor Venice magos.
Íme:
[oleg@localhost ~]$ cat /proc/cpuinfo
processor : 0
vendor_id : AuthenticAMD
cpu family : 15
model : 47
model name : AMD Athlon(tm) 64 Processor 3500+
stepping : 2
cpu MHz : 1000.000
cache size : 512 KB
fdiv_bug : no
hlt_bug : no
f00f_bug : no
coma_bug : no
fpu : yes
fpu_exception : yes
cpuid level : 1
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 syscall nx mmxext fxsr_opt lm 3dnowext 3dnow up pni lahf_lm ts fid vid ttp tm stc
bogomips : 2009.90
clflush size : 64
[oleg@localhost ~]$
Az Amd C'n'Q linuxos változata automatikusan dolgozik már évek és Fedóra kiadások óta a powernow-k8 személyében. Tessék:
[oleg@localhost ~]$ dmesg | grep power
powernow-k8: Found 1 AMD Athlon(tm) 64 Processor 3500+ processors (1 cpu cores) (version 2.20.00)
powernow-k8: 0 : fid 0xe (2200 MHz), vid 0x6
powernow-k8: 1 : fid 0xc (2000 MHz), vid 0x8
powernow-k8: 2 : fid 0xa (1800 MHz), vid 0xa
powernow-k8: 3 : fid 0x2 (1000 MHz), vid 0x12
[oleg@localhost ~]$
Ez a része OK a dolognak. Most kellene egy kijelző, ami megmondja hány fokosak az eszközök. Ehhez az lm_sensors és a GNOME Sensors Applet csomagokra volt szükségem. Jah acpi támogatás nem árt a dologhoz.
Most már van kijelző, de csak néhány értéket ír. Kis fórumozás után kiderült, hogy a
[root@localhost ~]# sensors-detect
Programot kell futtatni root joggal. Ez végignyálazza a kernel modulokat, és ha valamelyiket működőképesnek találja a rendszerrel, mindjárt be is veti. Jó windowsos reflexszel elég bólogatni a kérdéseire. (yes-yes-t tessék gyakorolni. )
A folyamat végén elmenti a beállításait a
/etc/sysconfig/lm_sensors
fájlba. Legalább is Fedorán. Más disztrókon máshova. De biztos, hogy a /etc könyvtárba lm_sensors néven.
sok szép érzékelő
A sensors-applet programmal beállíthatjuk, hogy mely értékeket jelezze, illetve, hogy milyen hőmérsékleten riasszon. Viszont a ventilátorok sebességét nem tudja szabályozni.
Bios:
Az alaplap biosában nézelődve találtam ezeket a beállítási lehetőségeket:
CPU FanEQ Speed Control 60% speed
Active temeperature 50 C
Az első értékkel lehet szabályozni, hogy milyen sebességgel pörögjön a ventilátor. Az alatta lévővel pedig azt, hogy milyen hőmérsékleten emelje ezt a sebességet a maximumra.
Ez nem az ami nekem kell, de egy dolgot bizonyít: az alaplap, és a ventilátor is alkalmas a dinamikus szabályozásra, mivel a fordulatszám növekedett ill. csökkent a beállítással és szemmel láthatóan változott a lapátok sebessége. Most már csak egy rendes hűtőventilátor kell és egy szoftveres megoldás Linux alá.
Megyek boldogítom a Léghűtés topik olvasóit.
Folyt köv...
Ahogy ígértem, most a ventilátor fordulatszámának szabályozását fogjuk beállítani.
Fancontrol
Figyelmeztetés! Program beállítása közben a processzor ventilátor leáll. Valamint helytelen beállítás esetén végig állva maradhat! Ezért csak körültekintően fogjunk hozzá a beállításhoz! A túlmelegedés a processzor károsodását okozhatja!
Lehetőleg ne 40 fokos melegben, kernel forgatás közben végezzük ezt a műveletet.
A ventilátor forgási sebességét a fancontrol program szabályozza. Ez az lm_sensors csomag része, így beszerzésével nem lesz gont. A program a processzor hőmérsékletéhez igazodva állítja a ventilátor fordulatszámát. Ehhez a
/etc/fancontrol
fájlból veszi ki az értékeket. Ennek beállításában segít a pwmconfig program. Ez egy konzolos program. Kissé fapados, de legalább interaktív. A kérdéseit mindenképpen érdemes alaposan elolvasni és értelmezni.
Indítás után a program leteszteli a kernel modulokat, valamint a kontrollálható ventilátorokat és azok eszközfájljait.
Modulok:
Found the following devices:
hwmon0/device is k8temp
hwmon1/device is w83627hf
Kontrollálható ventilátorok:
Found the following PWM controls:
hwmon1/device/pwm1
hwmon1/device/pwm2
Fordulatszám értékek:
Found the following fan sensors:
hwmon1/device/fan1_input current speed: 1875 RPM
hwmon1/device/fan2_input current speed: 0 ... skipping!
hwmon1/device/fan3_input current speed: 0 ... skipping!
Ezeket az elérési útvonalakat fogja használni a konfig fájlban. Érdemes tehát ezeket megjegyezni, mert később szükség lehet rájuk.
Ezután leteszteli a fordulatszám értékeket:
Would you like to generate a detailed correlation (y)? y
PWM 255 FAN 1962
PWM 240 FAN 1917
PWM 225 FAN 1962
PWM 210 FAN 1917
PWM 195 FAN 1917
PWM 180 FAN 1962
PWM 165 FAN 1834
PWM 150 FAN 1654
PWM 135 FAN 1480
PWM 120 FAN 1360
PWM 105 FAN 1222
PWM 90 FAN 1054
PWM 75 FAN 835
PWM 60 FAN 634
PWM 45 FAN 0
Fan Stopped at PWM = 45
Ezek szerint 45-ös pwm értéken kapcsol ki a ventilátor. 255-ös értéken pedig eléri a maximális 1962 rpm-es fordulatszámot. Ezeket az értékeket is érdemes megőrizni. Hogy mi a pwm, arról fogalmam sincs. Ez valamilyen energia érték, ami beállítja a fordulatszámot. FIXME
Ha elkészült elmenti a beállítást, majd egy egyszerű menüt kapunk:
Select fan output to configure, or other action:
1) hwmon1/device/pwm2 3) Change INTERVAL 5) Save and quit
2) hwmon1/device/pwm1 4) Just quit 6) Show configuration
select (1-n): 1
Értelem szerűen válasszunk. A lényeg, hogy az 1 és 2 opció a szabályozható ventilátort jelenti. Ezeket tudjuk konfigurálni. Figyeljünk oda, hogy a megfelelőt válasszuk!
A pontos konfigurálást itt is elvégezhetjük, de a konfig fájlt kézzel is szerkeszthetjük. Mindkét esetben ugyan azokra a kérdésekre kell választ adnunk.:
(A saját értékeimet is mutatom, hogy könnyebb legyen kiigazodni. Az interaktív beállítás esetén természetesen pontos leírást ad a program, hogy mit állítunk éppen.)
Milyen időközönként ellenőrizze a program a hőmérsékletet és a fordulatszámot. Másodpercben.
INTERVAL=10
Mely eszköz hőmérsékleti adatait használja fel.
FCTEMPS=hwmon1/device/pwm1=hwmon0/device/temp1_input
Mely ventilátort állítsa az előzőnek megfelelően.
FCFANS= hwmon1/device/pwm1=hwmon1/device/fan1_input
Minimális hőmérséklet, amin a minimális pwm értékre állítja a ventilátort. Beállítástól függően le is állítja, ha kell.
MINTEMP=hwmon1/device/pwm1=30
A processzor megengedett maximális hőmérséklete, amin a ventilátort maximális sebességre állítja.
MAXTEMP=hwmon1/device/pwm1=60
Az a minimális érték, amin a ventilátor pörögni kezd. Erre jó a korábban elvégzett teszt.
MINSTART=hwmon1/device/pwm1=45
Az az érték, amin a ventilátor biztosan leáll.
MINSTOP=hwmon1/device/pwm1=40
Az a minimális sebesség, amire a minimális hőmérséklet alatt a ventilátort állítja. (Nálam itt leállítja.)
MINPWM=hwmon1/device/pwm1=40
Az a maximális sebesség, amire a maximális hőmérsékletet elérve a ventilátort állítja. (Érdemes a maximális 255-ös értékre állítani.)
MAXPWM=hwmon1/device/pwm1=255
Lényegében ennyi! Természetesen ezt bármely ventilátorral és hőmérsékleti értékkel beállíthatjuk, amit szabályozhatónak talált a program. Tapasztalatom szerint van még egy kellemes tulajdonsága a programnak, mégpedig az, hogy a fordulatszámot dinamikusan állítja a hőmérsékletnek megfelelően. Erről nem kell külön gondoskodnunk. Tehát 32 c fokon 700 rpm-en forgatja a lapátokat, de 45 c fokon már felmegy 1200-ra.
Ezután lehet tesztelni a fancontrol parancs kiadásával. Ezt érdemes terminálban indítani és valami probléma esetén Ctrl-C billentyű kombinációval megszakítani a futását. Ekkor a ventilátor visszakapcsol a maximális sebességre és lehet elölről kezdeni a beállítást hiba után kutatva.
Ha minden prímán működik és a beállítások megtarthatók hosszú távon, akkor már csak a program automatikus indítását kell beállítani. De ezt csak legközelebb.
Folyt. köv...