Jak regulować obroty wentylatora w Ubuntu Server 16?

Z Podręcznik Administratora by OPZ SGU
Przejdź do nawigacji Przejdź do wyszukiwania

Jeżeli przeszkadza nam hałas wentylatora w naszym komputerze, to najprawdopodobniej odpowiadają za to wiatraki w nim zainstalowane. Można wymienić je na cichsze, albo zmniejszyć ich prędkość obrotową, o ile nie wpłynie to negatywnie na temperatury podzespołów. W nowszych konstrukcjach producent płyty głównej oferuje nam regulację prędkości obrotowej wentylatorów. Poniższy artykuł dotyczy kontroli wentylatorów za pomocą funkcji PWM, dostępnej w wiatrakach z wtyczką czteropinową. Czarny i czerwony odpowiadają za dostarczenie prądu do silniczka, żółty za zliczanie obrotów, a niebieski za przerwania, które spowodują obniżenie prędkości obrotów. Dla wtyczek trzy i dwupinowych istnieją rozwiązania regulacji napięcia podawanego na wentylator, za pomocą układów na płycie głównej, bądź dodatkowego modułu.

Na mojej płycie głównej można ustawić tylko prędkość wiatraka (poziomy: 1-9), po przekroczeniu wskazanej temperatury (minimum 45°C). Wyłączamy podobne ustawienia, ponieważ po zakończonej konfiguracji, prędkością obrotów w zależności od temperatury będzie sterował nasz system. Wentylator musi być wyposażony we wtyk czteropinowy.

Instalujemy lm-sensors, który pozwoli nam odczytywać wartości sensorów na płycie głównej, a także fancontrol, którego będziemy używać do sterowania prędkością wentylatorów.

apt-get install lm-sensors fancontrol

Uruchamiany program do wyszukiwania sensorów dostępnych w naszym komputerze. Postępujemy zgodnie z instrukcjami, zgadzając się na kolejne testy.

sensors-detect
Now follows a summary of the probes I have just done.
Just press ENTER to continue:

Driver `w83627ehf':
  * ISA bus, address 0x290
    Chip `Winbond W83627DHG-P/W83527HG Super IO Sensors' (confidence: 9)

Driver `k8temp' (autoloaded):
  * Chip `AMD K8 thermal sensors' (confidence: 9)

To load everything that is needed, add this to /etc/modules:
#----cut here----
# Chip drivers
w83627ehf
#----cut here----
If you have some drivers built into your kernel, the list above will
contain too many modules. Skip the appropriate ones!

Do you want to add these lines automatically to /etc/modules? (yes/NO)y
Successful!

Zgodnie z sugestią uruchamiamy usługę.

/etc/init.d/kmod start

Jeżeli nie ma żadnych odczytów, to najlepiej uruchomić system ponownie

reboot


Teraz już możemy uruchomić odczyt z sensorów

sensors

Po uruchomieniu programu sensors naszym oczom powinien ukazać się podobny obrazek

w83627dhg-isa-0290
Adapter: ISA adapter
Vcore:        +1.42 V  (min =  +0.00 V, max =  +1.74 V)
in1:          +1.82 V  (min =  +0.53 V, max =  +1.28 V)  ALARM
AVCC:         +3.46 V  (min =  +2.98 V, max =  +3.63 V)
+3.3V:        +3.46 V  (min =  +2.98 V, max =  +3.63 V)
in4:          +1.73 V  (min =  +0.58 V, max =  +1.66 V)  ALARM
in5:          +1.75 V  (min =  +1.70 V, max =  +1.03 V)  ALARM
in6:          +1.89 V  (min =  +0.11 V, max =  +1.74 V)  ALARM
3VSB:         +3.54 V  (min =  +2.98 V, max =  +3.63 V)
Vbat:         +3.14 V  (min =  +2.70 V, max =  +3.63 V)
fan1:           0 RPM  (min =  981 RPM, div = 32)  ALARM
fan2:        3013 RPM  (min = 2033 RPM, div = 8)
fan3:           0 RPM  (min = 8437 RPM, div = 32)  ALARM
fan4:           0 RPM  (min = 1240 RPM, div = 32)  ALARM
fan5:           0 RPM  (min = 1205 RPM, div = 32)  ALARM
temp1:        +27.0°C  (high =  +6.0°C, hyst = +125.0°C)  sensor = thermistor
temp2:        +28.5°C  (high = +80.0°C, hyst = +75.0°C)  sensor = thermistor
temp3:        +34.5°C  (high = +80.0°C, hyst = +75.0°C)  sensor = thermistor
cpu0_vid:    +1.400 V
intrusion0:  ALARM

k8temp-pci-00c3
Adapter: PCI adapter
Core0 Temp:   +26.0°C
Core1 Temp:   +26.0°C

W tym przypadku fan2, to wartość, która mnie najbardziej interesuje. Ukazuje ona prędkość wentylatora na procesorze, który kręci się zbyt szybko w stosunku do jego temperatury, przez co generuje zbyt duży hałas. temp1, 2 i 3 są to czujniki temperatury na płycie głównej. Najprawdopodobniej odpowiadają one za odczyt temperatury pod procesorem (temp1), temperaturę mostka południowego (temp2) oraz temperaturę mostka północnego (temp3). Co ciekawe czujniki zamontowane na procesorze (Core0 1) wskazują temperatury dla dwóch rdzeni, mimo że ten procesor... jest jednordzeniowy. Wynika to zapewne z faktu, żę AMD w tym czasie wypuszczało na jednej, wspólnej płytce procesory jedno i dwurdzeniowe, stąd w obydwu przypadkach są dwa czujniki temperatury.

Kolejnym programem, który trzeba uruchomić jest pwmconfig (dostarczone wraz z pakietem fancontrol). Służy on do wyszukania wentylatorów i stworzenia ich profili. Postępujemy zgodnie z instrukcjami, zgadzając się na kolejne testy. Jeżeli urządzenia nie zostaną wykryte w trybie automatycznym, to uruchamiamy program jeszcze raz, lecz tym razem nakazując ręczne kontrolowanie ustawień.

pwmconfig

W trakcie testów PWM, program powinien wykryć zmiany obrotów wentylatora i zaproponować nam zbudowanie korelacji, na co się zgadzamy.

Testing pwm control hwmon1/device/pwm2 ...
  hwmon1/device/fan2_input ... speed was 3125 now 969
    It appears that fan hwmon1/device/fan2_input
    is controlled by pwm hwmon1/device/pwm2
Would you like to generate a detailed correlation (y)? y
    PWM 255 FAN 3125
    PWM 240 FAN 3125
    PWM 225 FAN 2960
    PWM 210 FAN 2960
    PWM 195 FAN 2860
    PWM 180 FAN 2636
    PWM 165 FAN 2481
    PWM 150 FAN 2481
    PWM 135 FAN 2220
    PWM 120 FAN 2083
    PWM 105 FAN 2083
    PWM 90 FAN 1814
    PWM 75 FAN 1638
    PWM 60 FAN 1638
    PWM 45 FAN 1383
    PWM 30 FAN 1188
    PWM 28 FAN 1188
    PWM 26 FAN 1155
    PWM 24 FAN 1125
    PWM 22 FAN 1110
    PWM 20 FAN 1110
    PWM 18 FAN 1074
    PWM 16 FAN 1068
    PWM 14 FAN 1068
    PWM 12 FAN 1035
    PWM 10 FAN 1022
    PWM 8 FAN 1022
    PWM 6 FAN 992
    PWM 4 FAN 986
    PWM 2 FAN 986
    PWM 0 FAN 964

Po zakończeniu testów dostajemy propozycję zapisania konfiguracji, a po zaakceptowaniu ukazuje nam się menu

Select fan output to configure, or other action:
1) hwmon1/device/pwm2  3) Just quit           5) Show configuration
2) Change INTERVAL     4) Save and quit
select (1-n):

Wybieramy opcję pierwszą, żeby skonfigurować ustawienia dla naszego wentylatora. Zostaniemy zapytani o wybór czujnika temperatury.

Devices:
hwmon0 is nouveau
hwmon1/device is w83627dhg
hwmon2/device is k8temp

Current temperature readings are as follows:
hwmon1/device/temp1_input       32
hwmon1/device/temp2_input       33
hwmon1/device/temp3_input       33
hwmon2/device/temp1_input       32
hwmon2/device/temp3_input       32

Select a temperature sensor as source for hwmon1/device/pwm2:
1) hwmon1/device/temp1_input
2) hwmon1/device/temp2_input
3) hwmon1/device/temp3_input
4) hwmon2/device/temp1_input
5) hwmon2/device/temp3_input
6) None (Do not affect this PWM output)
select (1-n):

Wybieramy czujnik odpowiadający za temperaturę procesora. W moim wypadku jest to dowolony z dwóch, ostatnich czujników. Kolejne etapy przechodziłem na domyślnych ustawieniach, które w większości wypadków są zadowalające.

Enter the low temperature (degree C)
below which the fan should spin at minimum speed (20):

Enter the high temperature (degree C)
over which the fan should spin at maximum speed (60):

Enter the PWM value (0-255) to use when the temperature
is over the high temperature limit (255):

Po zakończeniu konfiguracji ponownie trafiamy do menu, gdzie tym razem zapisujemy konfiguracje i opuszczamy program (5). Ostatnim etapem jest uruchomienie usługi, by wystartowała.

service fancontrol start

Powinniśmy usłyszeć obniżony hałas powodowany przez wentylator. Na koniec możemy sprawdzić jaką obecnie prędkość ma nasz wentylator, ponownie wpisując komendę "sensors". Mój wynik jest taki:

fan2:        1854 RPM  (min = 2033 RPM, div = 8)  ALARM