Пример настройки thinkfan

Материал из Linux Wiki
Версия от 19:06, 19 декабря 2009; Rain (обсуждение | вклад)
(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к навигацииПерейти к поиску

thinkfan - небольшой демон, позволяющий управлять вентилятором в системном блоке. Демон читает информацию о температуре с одного или нескольких датчиков и управляет указанным вентилятором. Ниже приводится описание настройки в Debian Linux на примере моего десктопа.

Разбираемся с датчиками

В моей системе оказалось 2 интерфейса для мониторинга железа - датчик в процессоре Athlon 64 и чип, работающий с модулем it87 (оба находятся командой sensors-detect). Вот вывод команды sensors:

sensors                                                                                                   
it8716-isa-0290
Adapter: ISA adapter
in0:         +1.36 V  (min =  +0.00 V, max =  +4.08 V)   
in1:         +1.81 V  (min =  +0.00 V, max =  +4.08 V)   
in2:         +3.28 V  (min =  +0.00 V, max =  +4.08 V)   
in3:         +2.99 V  (min =  +0.00 V, max =  +4.08 V)   
in4:         +3.02 V  (min =  +0.00 V, max =  +4.08 V)   
in5:         +0.05 V  (min =  +0.00 V, max =  +4.08 V)   
in6:         +0.00 V  (min =  +0.00 V, max =  +4.08 V)   ALARM
in7:         +2.99 V  (min =  +0.00 V, max =  +4.08 V)   
Vbat:        +3.02 V
fan1:          0 RPM  (min =    0 RPM)
fan2:       1767 RPM  (min =   10 RPM)
fan3:       2288 RPM  (min =   10 RPM)
temp1:       +26.0°C  (low  = +127.0°C, high = +127.0°C)  sensor = thermistor
temp2:        -9.0°C  (low  = +127.0°C, high = +127.0°C)  sensor = thermistor
temp3:       +40.0°C  (low  = +127.0°C, high = +70.0°C)  sensor = thermal diode
cpu0_vid:   +1.350 V

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

В sysfs тоже 2 отдельных каталога, соответствующих этим интерфейсам:

root@mws64:~# ls -l /sys/class/hwmon/
итого 0
lrwxrwxrwx 1 root root 0 Дек 19  2009 hwmon0 -> ../../devices/platform/it87.656/hwmon/hwmon0
lrwxrwxrwx 1 root root 0 Дек 19  2009 hwmon1 -> ../../devices/pci0000:00/0000:00:18.3/hwmon/hwmon1

Если заглянуть в /sys/class/hwmon/hwmon0/device/, то можно увидеть множество различных файлов - это датчики и интерфейсы управления для it87. В /sys/class/hwmon/hwmon1/device/ файлов поменьше, из них интересны только temp*_input - в них содержится информация о текущей температуре процессора:

root@mws64:~# cat /sys/class/hwmon/hwmon1/device/temp1_input 
52000
root@mws64:~# cat /sys/class/hwmon/hwmon1/device/temp3_input 
56000

От it87 нам нужно только управление вентиляторами, делается это через файлы pwmN, где N - число, соответствующее своему вентилятору. Значение в файле определяет частоту вращения вентилятора: 0 соответствует выключенному, а 255 - работающему на максимальных оборотах. В моем случае единственным управляемым вентилятором оказался процессорный, ему соответствовал файл /sys/class/hwmon/hwmon0/device/pwm1. Небольшой скрипт ниже поможет определить стартовое значение для данного конкретного вентилятора (кстати, подобная процедура делается в некоторых BIOS'ах):


echo 0 > /sys/class/hwmon/hwmon0/device/pwm1
sleep 5
for i in {0..255}
	do
	if [ "$(sensors | grep fan1 | awk '{print $2}')" == '0' ]
		then
		echo $i > /sys/class/hwmon/hwmon0/device/pwm1
	else
		echo $i - запуск
		break
	fi
sleep .2
done

У меня стартовое значение оказалось равным 63. Для круглого счета и надежности запуска возьмем 65.

С интерфейсами разобрались, переходим к настройке демона.

/etc/thinkfan.conf

В файле /etc/thinkfan.conf по умолчанию не прописаны пути к датчикам и вентилятору, а в качестве интерфейса управления вентилятором используется так называемый IBM-way. Комментируем его, раскомментируем sysfs-way и добавляем определенные выше пути.

Теперь необходимо подправить таблицу значений температур процессора и частот вращений вентилятора. В моем случае она получилась такая:

(0,     0,  50)
(65,    45, 52)
(80,    50, 54)
(120,   52, 56)
(150,   54, 58)
(180,   56, 60)
(210,   58, 62)
(255,   60, 64)

Первое значение является значением в файле pwmN, второе - температура возврата на предыдущую ступень, третье - температура перехода на следующую ступень. Первая строка соответствует полностью выключенному вентилятору, вторая - начальному запуску (обратите внимание на значение 65 в первой колонке - это его мы определяли скриптом), последняя - полностью работающему вентилятору. Остальные строки являются промежуточными и их может быть любое необходимое количество.

По логике работы вентилятор будет выключен до температуры 50 градусов, после чего запустится на минимальных оборотах. При достижении 52 градусов вентилятор увеличит частоту вращения и так далее до достижения максимальных оборотов. При охлаждении вентилятор переключится на минимальные обороты при температуре ниже 50 градусов и отключится полностью при достижении температуры ниже 45 градусов.

Очевидно, что значение температуры охлаждения должно быть меньше температуры перехода на более высокую ступень предыдущей строки. Иначе говоря, последовательность

(65,    45, 52)
(80,    53, 55)

является неправильной - температура опустится до 53 градусов, вентилятор перейдет на нижнюю ступень и тут же вернется на более высокую, так как 53>52.

Финальный конфиг у меня выглядел так:

sensor /sys/class/hwmon/hwmon1/device/temp1_input
sensor /sys/class/hwmon/hwmon1/device/temp3_input

fan /sys/class/hwmon/hwmon0/device/pwm1

(0,     0,      50)
(65,    45,     52)
(80,    50,     54)
(120,   52,     56)
(150,   54,     58)
(180,   56,     60)
(210,   58,     62)
(255,   60,     64)

Запуск

Для запуска демона в Debian меняем в /etc/default/thinkfan значение параметра START с no на yes, сохраняем файл и перезапускаем демон командой /etc/init.d/thinkfan restart, после чего проверяем корректную работу, наблюдая параметры командой sensors.