Již brzy po koupi počítače jsem nainstaloval i2c a lm_sensors, jak doporučuje tento článek na Rootu. Ale sledování víceméně stálé teploty uvnitř počítače mne brzy omrzelo.
Zjistil jsem, že senzorový obvod na mé základní desce umí ovládat i rychlost větráků. Není v tom žádnou výjimkou – zhruba polovina základních desek umí ovládat rychlost 1–4 větráků, jiné umí větráky alespoň vypnout (u některých obvodů je ovšem tento vypínač na stejném drátě jako vstup tachometru a u některých desek končí vývod kdesi ve vzduchu).
Protože kontrola teploty a regulace větráků nepatří mezi životně důležité funkce počítače a Linux zrovna není hlavním podporovaným systémem, zjistit skutečnou funkci senzorového systému vyžaduje trochu experimentování.
Po instalaci lm_sensors se pustíme do editace souboru /etc/sensors.conf. Vybereme si sekci pro náš obvod (ostatní můžeme vymazat) a jako první správně nastavíme popisky. Pro popisky teplot a otáček větráků si můžeme vzít na pomoc BIOS. Pokud máme otevřený počítač, můžeme opatrně přidržet větrák za středovou část a pak zjistit, co ukazují měřidla (pozor, i malý větrák dokáže svými lopatkami nepříjemně poranit prsty). Pokud daný větrák nemá tachometr (ty s tachometrem mají tři dráty) nebo senzor není zapojen, použijeme položku ignore. Pro správné měření teploty musíme odvodit použitý typ měřidla. Pro měření napětí musíme zjistit správné hodnoty jednotlivých napětí (v mém případě např. referenční napětí VID ukazovalo hodnotu nepoužitelnou pro další výpočty, a tak bylo nutné místo ní dosadit hodnotu správnou).
Dělitel větráků
První, na co téměř jistě narazíte, je skutečnost, že velké větráky hlásí nulové otáčky (často i v BIOSu), přestože mají tachometr (a tedy tři dráty). Je to proto, že senzorové obvody měří jen v určitém rozsahu, daném dělitelem měřené hodnoty. Správné nastavení dělitele je takové, aby minimum měřitelného rozsahu bylo zhruba v polovině otáček větráku. Klíčové slovo pro jeho nastavení je fančíslo_div a jeho nastavení popisuje dokument fan-divisors z dokumentace lm_sensors. Pokud se chystáte větráky regulovat, pamatujte na větší rezervu u nižších otáček.
Zvukové a jiné alarmy
Senzorové obvody toho umí mnohem více. Zajímavou funkcí je zvukový alarm. Klíčová slova pro jeho nastavení jsou set beep_enable 1 a set beeps číslo. Poněkud nepraktické mi přišlo, že program sensors sice umí zobrazit, které alarmy jsou zapnuté, ale pro vlastní nastavení je nutné používat číslo, zadávající šestnáctibitovou masku. K jejímu výpočtu můžeme nahlednout do dokumentace, a nebo experimentovat s hodnotami v řadě 1, 2, 4, 8, 16… a poté sečíst hodnoty, které zapnuly některý z žádaných alarmů. Výsledek experimentu můžeme použít i pro nastavení textového alarmu pomocí set alarms číslo
(ten se projeví pouze řetězcem ALARM na výstupu, případně aktivací jakéhosi obskurního přerušení). Aby vše správně fungovalo, je třeba nastavit vhodné minimální otáčky všech větráků, maximální teploty a hystereze a vhodnou toleranci všech napětí (v mém případě ji bylo nutné zvětšit, protože jinak na mne počítač občas povrkával). Aby se konfigurace kompletně aktivovala, je třeba při každém spuštění počítače provést příkaz sensors -s. Já ovšem používám složitější sekvenci, která, na rozdíl od té jednoduché, na mém počítači při spuštění nezahouká:
( /usr/bin/fgrep -v "beeps" /etc/sensors.conf | \ /usr/bin/sensors -s -c - sleep 3 /usr/bin/sensors >/dev/null sleep 3 exec /usr/bin/sensors -s ) &
Na rozdíl od softwarových alarmů je tento alarm hardwarový, a proto hlídá teplotu a větráky i tehdy, je-li počítač zrovna uspaný a CPU neběží.
Funkce PWM pro řízení větráků
Pokud v adresáři /proc/sys/dev/sensors/* najdeme soubory s názvem začínajícím pwm, máme skoro vyhráno. Jedná se o pulse width modulation fan control a na základní desce je čip, který umí větráky ovládat. Teď ještě zbývá zjistit, kam tyto dráty vedou (doufejme, že ne do vzduchu). Nejjednodušší metodou je zapsání hodnoty 0 (příkazem echo) postupně do všech těchto souborů. Pokaždé sledujeme, který větrák počítače se zastaví.
Při této příležitosti ještě můžeme experimentálně zjistit minimální bezpečnou hodnotu PWM. Je to hodnota, která, pošleme-li ji po hodnotě 0 a úplném zastavení větráku, větrák bezpečně roztočí. U mých větráků se pohybovala kolem 20 Pozor – u velmi malých hodnot se větrák někdy netočí, ale pouze chvěje. Takový větrák nevětrá, ale na tachometr dává vysoké hodnoty otáček!
Ihned po těchto experimentech větrák opět spustíme hodnotou 255 nebo menší, jinak bychom mohli „upéci“ procesor.
V mém případě byl výsledek takový, že jeden regulátor reguluje větráky na CPU a ve zdroji, zatímco systémový větrák má samostatný regulátor.
Za počítač tišší
Větráky dokáží nadělat velký hluk. Ten lze výrazně omezit snížením otáček a někdy paradoxně i přidáním dalšího velkého větráku (tzv. systémový větrák, nasávající vzduch spodním otvorem v čelním nebo zadním panelu nebo 5,25" slotem). Velké pomaloběžné větráky větrající do prostoru jsou poměrně tiché a zajišťují lepší cirkulaci vzduchu, zatímco malé vnitřní větráky s vysokými otáčkami foukající přímo na nějaký čip jsou z hlediska hlučnosti opravdovou pohromou, navíc teplý vzduch pouze rozfukují po kejsu a zahřívají tak okolí. Větráky s kvalitními kuličkovými ložisky („ball“) bývají tišší než ty s kluznými.
Větráky lze odhlučňovat čistě mechanickými postupy. Někdy pomůže postavit větrák na distanční sloupky a usměrnit tok vzduchu trubicí – pro velké větráky se osvědčila seříznutá PET láhev (trubice ukončená nad chazeným objektem převede část turbulentního proudění na tišší laminární, neboť v chlazeném místě se pohybuje pomaleji větší masa vzduchu). Přenosu vyšších kmitočtů z (hlavně malých) větráků zabrání přilepení větráků na podstavce z pěnové pryže namísto šroubů; je však třeba zajistit, aby taková podložka nezpůsobila rezonance na nízkých kmitočtech a aby se z ní větrák neodlepil.
Nyní můžeme přistoupit k regulaci otáček. Nejjednodušší metodou je prosté snížení otáček. Nastavení doporučuji ověřit programem cpuburn (zaseklý file-roller dokázal procesor zahřát velmi podobně).
Inteligentnější metodou je dynamická regulace. Na síti jsem k tomuto účelu nenašel žádný program (kromě několika jednoúčelových), a proto jsem se pustil do experimentování. První verze napsaná v AWKu chodí celkem obstojně (najdete ji na mých stránkách na Penguinu). Chceme-li tišší počítač, je vhodnější nastavit vyšší relativní otáčky pro velké větráky (systém, zdroj) a menší pro malé (CPU) – efekt větrání je stejný, ale hluk menší. Softwarovou regulaci je vhodné zabezpečit nějakou hardwarovou pojistkou proti zhroucení systému, při kterém by mohlo dojít k výpadku regulace a zároveň vysokému zatížení procesoru. Takovou možností je nastavení kritické teploty v BIOSu, takže počítač se v případě takové havárie vypne nebo bude uspán.
Další metodou je hardwarová regulace. Nejjednodušší, ale také nejméně účinná je regulace pomocí termistoru na některých typech větráku. Druhou, podstatně dražší možností je použití speciálních regulačních desek (u nás je vyrábí např. Mironet, ovšem zatím bez podpory Linuxu). Někteří výrobci uvažují o přidání regulačních obvodů přímo do svých čipových sad.
Pokud chceme se ztišením postoupit dále, musíme se poohlédnout po vyložení kejsu zvukově izolační hmotou, zvukové izolaci pevného disku, případně CD/DVD. Větráku na CPU se lze zbavit i vodním chlazením (zaměníme-li vodu za kapalný dusík, můžeme procesor taktovat až na 4 GHz, jak předváděl na veletrhu Intel). Počítač lze též odstěhovat do vedlejší místnosti (obzvlášť vhodné, máme-li na stole X-Server) nebo zazdít do odděleného prostoru (vhodné pro server).
Ukázka odladěné konfigurace
# OSBuilder: /etc/sensors.conf # Customized for: MSI K7T266 Pro (MS-6380) # (ISA-style access, audible alarm, standard case and fans, # 3 monitored fans, case intrusion not monitored) # # Configuration of sensors to be used by sensors(1) and libsensors(3). # For more see sensors.conf(5) and /etc/sensors.conf.eg. # Written by Stanislav Brabec <utx@penguin.cz>. # # @(#) $Id$ # chip "w83627hf-*" label in0 "VCore" label in1 "VTT" label in2 "VIO" label in3 "+5.0V" label in4 "+12.0V" label in5 "-12.0V" label in6 "-5.0V" label in7 "+5V SB" label in8 "Battery" label temp1 "System" label temp2 "CPU" label fan1 "System" label fan2 "Power" label fan3 "CPU" label alarms "Alarm" label beep_enable "Beep" ignore temp3 # HSB: 7: global, 6: 0, 5: temp3, 4: case # 3: fan3, 2: -5V, 1: -12V, 0: +12V # LSB: 7: fan2, 6: fan1, 5: temp2, 4: temp1 # 3: +5V, 2: +3.3V, 1: VCoreB,0: VCoreA set beep_enable 1 set beeps 8191 ignore vid compute in3 ((6.8/10)+1)*@ , @/((6.8/10)+1) compute in4 ((28/10)+1)*@ , @/((28/10)+1) compute in5 (5.14 * @) - 14.91 , (@ + 14.91) / 5.14 compute in6 (3.14 * @) - 7.71 , (@ + 7.71) / 3.14 compute in7 ((6.8/10)+1)*@ , @/((6.8/10)+1) set fan1_div 8 set fan2_div 8 set fan3_div 4 set fan1_min 300 set fan2_min 750 set fan3_min 1500 # limits are set with respect to short voltage peeks # to prevent short audible alarms set in0_min 1.775*0.95 set in0_max 1.775*1.05 set in1_min 1.26*0.85 set in1_max 1.26*1.15 set in2_min 3.3 * 0.95 set in2_max 3.3 * 1.05 set in3_min 5.0 * 0.92 set in3_max 5.0 * 1.08 set in4_min 12 * 0.85 set in4_max 12 * 1.15 set in5_max -12 * 0.85 set in5_min -12 * 1.15 set in6_min -5 * 1.15 set in6_max -5 * 0.85 set in7_min 5 * 0.9 set in7_max 5 * 1.1 set in8_min 3.0 * 0.80 set in8_max 3.0 * 1.20 # examples for temperature limits set temp1_over 52 set temp1_hyst 50 set temp2_over 67 set temp2_hyst 64