О кулере и Thinkfan

Недавно писал о проблемах с перегревающимся ноутом. Затеянный мониторинг показал, что да, температура ядер разу перед отключкой поднимается до 100°С, что, судя по всему, и приводит к ребутам. Непонятным оставался только момент с частотой вращения кулера — перед отключением она загадочным образом снижалась.

Первый подход

Тогда я посмотрел в сторону управления кулером. Оказалось, что для thinkpad'ов есть thinkfan:

sudo apt install thinkfan

Без небольшой ебли, разрешившейся, впрочем, простым ребутом, дело не кончилось.

Настраивается так:

sudo touch /etc/modprobe.d/thinkpad_acpi.conf
echo "options thinkpad_acpi fan_control=1" | sudo tee /etc/modprobe.d/thinkpad_acpi.conf
sudo reboot

В файле /etc/thinkfan.conf проверяем правильность указанных файлов и, если все ок, раскомменчиваем и задаем коррекцию данным температуры (я пока что поставил нулевую).

tp_fan /proc/acpi/ibm/fan
tp_thermal /proc/acpi/ibm/thermal (0, 0, 0, 0, 0, 0, 0, 0, 0, 0)

Файл /proc/acpi/ibm/fan управляем оборотами, а /proc/acpi/ibm/thermal отдает вектор температур (можно сравнить с выводов от sensors -A).

Проверка

Сама же программулина управляем кулером просто — в зависимости от температуры меняет степень охлаждения, записывая в файл /proc/acpi/ibm/fan цифирь от 0 (выкл.) до 7 (максимум). Но сперва проверим, работает ли вообще такой способ.

Запустим от рута перебор всех уровней и посмотрим, какое обороты будет выдавать датчик кулера:

for i in 0 1 2 3 4 5 6 7; do
echo "level $i" > /proc/acpi/ibm/fan
echo "level $i..."
sleep 5
cat /proc/acpi/ibm/fan | egrep "^speed"
echo
done
echo "level auto" > /proc/acpi/ibm/fan

И чем же я вижу? Вместо логичного увеличения оборотов как у других — хуйня какая-то (оба раза — одно и то же):

level 0... speed: 0
level 1... speed: 692
level 2... speed: 682
level 3... speed: 602
level 4... speed: 0
level 5... speed: 678
level 6... speed: 686
level 7... speed: 391

Наводит на мысли, что датчик оборотов выдает как бы не те цифры, что должен. Но сами уровни похоже работают, по крайней мере на 0, 1 и 7 слышны изменения работы.

Второй подход

Но это ещё не всё. Оказалось, что, судя по логам, thinkfan не может по какой-то причине нормально записать в /proc/acpi/ibm/fan, о чем даже есть два бага закрывшиеся по причине «Development is moving to the 1.0 version on github entirely, closing this as obsolete.».

Jun 22 01:25:50 tedge thinkfan: thinkfan 0.9.1 starting...
Jun 22 01:25:50 tedge thinkfan[5264]: Daemon PID: 5266
Jun 22 01:25:50 tedge systemd[1]: Started simple and lightweight fan control program.
Jun 22 01:26:15 tedge thinkfan: setfan_ibm: Error writing to /proc/acpi/ibm/fan: Invalid argument
Jun 22 01:26:15 tedge thinkfan: Cleaning up and resetting fan control.

Проект был перенесен на github, так что ставим оттуда (без помощи vkchk я бы не справился, так как написанное в Readme слегка не работало).

sudo apt-get install checkinstall # хуевина для сборки

git clone https://github.com/vmatare/thinkfan.git
cd ./thinkfan
mkdir build && cd build
sudo checkinstall

Теперь можно проверить, все ли работает:

sudo thinkfan -n

И если ок, то запустить демон.

sudo thinkfan


После испытаний выяснилось, что на любом из режимов, отличного от максимального (7), ноут может по непонятным причинам (дальше копать уже не буду) довольно быстро может перегреться и выключиться. Thinkfan же не успевает. А терпеть его постоянные переключения из 5 режима (сильно, но тихо) в 7 (максимум) раз в пять секунд мне надоело. Так что самое простое и действенное — добавить в /etc/rc.local строку

sudo echo level 7 | sudo tee /proc/acpi/ibm/fan