[Решено, документировано] Gigabyte Radeon RX 560 и поддержка функции "остановка вентиляторов в простое" на Gentoo Linux

Собственно, имею Gigabyte Radeon RX 560, где заявлена эта функция. И на оффтопике вентиляторы охладителя вполне себе останавливаются. Ваш покорный слуга, как обладающий инженерным мышлением и соображающий, что мало шума не бывает, решил начать поиски метода воплотить эту функцию и у нас.
Насколько я понимаю, при загрузке amdgpu родной биос видеокарты заменяется (?) поставляемым с firmware. Возможно, все это через драйвер и настраивается? Я нашел метод настройки через демон fancontrol. Аналогичным образом, кстати, можно настроить и для процессора.

В общем, To Do:
1) Посмотреть режимы производительности драйвера Выполнено.
2) Поискать информацию в интернете. Выполнено.
3) Посмотреть acpi Нет необходимости?
4) Поэкспериментировать с fan-control Выполнено, итоговая реализация основана на нем.

Отмечу: похоже, режимы dpm не оказывают прямого влияния на скорость вентиляторов.
Обновление 2: Пока настроил схему с помощью демона fancontrol, поставляемого в комплекте с lm_sensors

$ eix lm_sensors
[I] sys-apps/lm_sensors
     Доступные версии:      3.3.4-r1 3.3.5 ~3.4.0 3.4.0_p20160725(0/4.4.0) {sensord static-libs ABI_MIPS="n32 n64 o32" ABI_PPC="32 64" ABI_S390="32 64" ABI_X86="32 64 x32"}
     Установленные версии:  3.4.0_p20160725(19:39:10 06/11/17)(sensord -static-libs ABI_MIPS="-n32 -n64 -o32" ABI_PPC="-32 -64" ABI_S390="-32 -64" ABI_X86="32 64 -x32")
     Домашняя страница:     http://www.lm-sensors.org/ https://github.com/groeck/lm-sensors
     Описание:              Hardware Monitoring user-space utilities

По придуманному мной алгоритму
1) Находим минимум ШИМ, при котором останавливаются вентиляторы

echo ПЕРЕБИРАЕМ_ЗНАЧЕНИЕ_от_0_до_255 > /sys/class/hwmon/hwmon0/device/hwmon/hwmon0/pwm1
Путь до датчика может отличаться, см
Следить за оборотами можно # watch sensors

2) Находим минимум ШИМ, при котором запускаются вентиляторы (величины конструкционно различны!)

echo ПЕРЕБИРАЕМ_ЗНАЧЕНИЕ_от_255_до_0 > /sys/class/hwmon/hwmon0/device/hwmon/hwmon0/pwm1

3) # man fancontrol
Или по вышеупомянутому руководству арчвики
4) Привожу свой пример настройки для видеокарты

# cat /etc/fancontrol
# Edited by rarogcmex
INTERVAL=2
DEVPATH=hwmon0=devices/pci0000:00/0000:00:01.0/0000:01:00.0
DEVNAME=hwmon0=amdgpu
FCTEMPS=hwmon0/pwm1=hwmon0/temp1_input
FCFANS= hwmon0/pwm1=
MINTEMP=hwmon0/pwm1=57 
MAXTEMP=hwmon0/pwm1=82
MINSTART=hwmon0/pwm1=77
MINSTOP=hwmon0/pwm1=68
MINPWM=hwmon0/pwm1=67
MAXPWM=hwmon0/pwm1=250

Далее нам нужно, что бы демон fancontrol умирал только при потере компьютером питания, а не отключался как другие демоны, ведь в противном случае будет шум самолета при отключении. Ведь наша система автоматически прибивает все демоны при выключении, без управляющего демона обороты вентилятора автоматически становятся 255 из 255 для защиты оборудования!
Сделать это можно, если 1) Остановить демон контролируемо. 2) Сразу после этого сообщить видеокарте скорость оборотов вручную таким же методом, каким мы искали значения запуска вентилятора.
Для этого воспользуемся демоном local. Инструкция по настройке тут

# cat /etc/local.d/README
This directory should contain programs or scripts which are to be run
when the local service is started or stopped.

If a file in this directory is executable and it has a .start extension,
it will be run when the local service is started. If a file is
executable and it has a .stop extension, it will be run when the local
service is stopped.

All files are processed in lexical order.

Keep in mind that files in this directory are processed sequentially,
and the local service is not considered started or stopped until
everything is processed, so if you have a process which takes a long
time to run, it can delay your boot or shutdown processing.

Создаем здесь скрипт

# cat /etc/local.d/gpu_pwm_when_poweroff.stop
#!/bin/bash
rc-service fancontrol stop #Останавливаем fancontrol
echo 80 > /sys/class/hwmon/hwmon0/pwm1 #Сообщаем вентилятору, с какой скоростью он должен крутиться при выключении. Напоминаю, что этот путь может отличаться на вашем устройстве.

Добавляем local в автозапуск, если его там нет.

# rc-update add local default

Если не хватает того, что

Если не хватает того, что есть в /sys/class/drm/card0/device то на помощь приходит radeontool

Посмотрел. Radeontool вентили

Посмотрел. Radeontool вентили не трогает.

Surprize! :)

Surprize! :) Карта вышла в мае 2017, а последний релиз этих тулзов - январь 2016!

Посмотри тут, - это не прямое управление вентиляторами, а через питание. Может это даст некоторые идеи, поскольку очень просто в реализации.

Ух ты, спасибо! Не

Ух ты, спасибо! То, что нужно для повседневных нужд.
Только вот я уже экспериментально выяснил: управление питанием видеокарты ограничивает только производительность этой самой карты, а вентиляторы крутит какой-то другой алгоритм, зависящий от температуры.

Нашел способ вручную управлять вентилятором через fancontrol демон lm_sensors.Первые результаты есть - вентиль удалось раскрутить до 4200 оборотов в минуту, а затем и остановить. Нужно продолжать экпериментировать.

На sourceforge.net есть!

На sourceforge.net есть парочка интересных проектов:
- консольный: https://sourceforge.net/projects/overdrive5/
- графический: https://sourceforge.net/projects/amdovdrvctrl/

Они относительно живые и, похоже, то, что ты ищешь...

Обновление 2: Пока настроил

Обновление 2: Пока настроил схему с помощью демона fancontrol, поставляемого в комплекте с lm_sensors

$ eix lm_sensors
[I] sys-apps/lm_sensors
     Доступные версии:      3.3.4-r1 3.3.5 ~3.4.0 3.4.0_p20160725(0/4.4.0) {sensord static-libs ABI_MIPS="n32 n64 o32" ABI_PPC="32 64" ABI_S390="32 64" ABI_X86="32 64 x32"}
     Установленные версии:  3.4.0_p20160725(19:39:10 06/11/17)(sensord -static-libs ABI_MIPS="-n32 -n64 -o32" ABI_PPC="-32 -64" ABI_S390="-32 -64" ABI_X86="32 64 -x32")
     Домашняя страница:     http://www.lm-sensors.org/ https://github.com/groeck/lm-sensors
     Описание:              Hardware Monitoring user-space utilities

По придуманному мной алгоритму
1) Находим минимум ШИМ, при котором останавливаются вентиляторы

echo ПЕРЕБИРАЕМ_ЗНАЧЕНИЕ_от_0_до_255 > /sys/class/hwmon/hwmon0/device/hwmon/hwmon0/pwm1
Путь до датчика может отличаться, см
Следить за оборотами можно # watch sensors

2) Находим минимум ШИМ, при котором запускаются вентиляторы (величины конструкционно различны!)

echo ПЕРЕБИРАЕМ_ЗНАЧЕНИЕ_от_255_до_0 > /sys/class/hwmon/hwmon0/device/hwmon/hwmon0/pwm1

3) # man fancontrol
Или по вышеупомянутому руководству арчвики
4) Привожу свой пример настройки для видеокарты

# cat /etc/fancontrol
# Edited by rarogcmex
INTERVAL=2
DEVPATH=hwmon0=devices/pci0000:00/0000:00:01.0/0000:01:00.0
DEVNAME=hwmon0=amdgpu
FCTEMPS=hwmon0/pwm1=hwmon0/temp1_input
FCFANS= hwmon0/pwm1=
MINTEMP=hwmon0/pwm1=57 
MAXTEMP=hwmon0/pwm1=82
MINSTART=hwmon0/pwm1=77
MINSTOP=hwmon0/pwm1=68
MINPWM=hwmon0/pwm1=67
MAXPWM=hwmon0/pwm1=250

только один вопрос

Камрадам только один вопрос: как добавить демон fancontrol в исключения killprocs? Этот демон прибивает первого, и... правильно! Вентиляторы раскручиваются до максимальных оборотов, поскольку это по дефолту для "безопасности". В итоге ночью компьютер хоть не выключай: при poweroff видеокарта на 5 секунд "превращается в пылесос"

#rc-update show
...
           fancontrol |      default                           
... 
            killprocs |                        shutdown        

может переместить его из

может переместить его из default в boot и shutdown?

Нужно продолжить эксперименты

В boot перемещать не пробовал, а вот в shutdown да - убивающий все и вся демон отрабатывает позже. Хотя, если fancontrol будет представлен как важный фраймворк...

Сейчас в связи с ремонтом дома не имею доступа к своему оборудованию.

Переместил из Default в Boot

Переместил из Default в Boot. Без пользы.

В boot он будет разве что

В boot он будет разве что стартовать раньше. А в shutdown не помогло?

Нашел и реализовал решение

Нашел и реализовал решение проблемы -теперь работает как часы - еще месяц назад, но документировать пока времени нет в связи с сильной занятостью. После Нового Года опишу.

Дописал.

Дописал.

Настройки просмотра комментариев

Выберите нужный метод показа комментариев и нажмите "Сохранить установки".