Nvidia autofan script mod2|Автоуправление вентиляторами Nvidia mod 2

https://github.com/Steambot33/HiveOS-Nvidia-autofan-mod2
Новая модификация скрипта управления вентиляторами.
Алгоритм работы следующий:
скрипт пытается удержать температуру, заданную в параметрах MAX_TEMP (дельта 2 градуса), путем снижения либо увеличения оборотов вентилятора на 2%. Не рекомендую выставлять слишком низкую температуру, не соответствующую здравому смыслу, т.к. скрипт выкрутит вентиляторы на 100%.

In this modification, you must set the GPU temperature which you want (MAX_TEMP) and the script will try to keep it. Not recommend set very low GPU temperature.

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


if [ $FAN_SPEED -le $MIN_SPEED ]
		then
		        FAN_SPEED=$MIN_SPEED 
fi

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

добавлено в код

Предлагаю добавить еще одно условие которое возможно поможет при старте , если температура больше от заданой (MAX_TEMP) на N градусов (например 8) то скорость вентилятора поднять N процентов ( например 10). Когда выйдем на нужную температуру использовать основное правило по 2%. Так как при старте(рестарте) вентиляторы очень долго выходит на нужную скорость для поддержания температуры.

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


Новая версия. Проста в установке и дружественна пользователю)

Добавлено:

  • скрипт сам создает файл автозагрузки (если его нет) и прописывает необходимые команды
  • изменение настроек при запуске скрипта с ключем -s . настройки применяются сразу, перезапуск скрипта не требуется.
  • мониторинг температуры и вентиляторов при запуске с ключем -c
  • возможность запуска в невидимом режиме (как сервис) прямо из скрипта. ключ -g
  • возможность запуска в обычном режиме. ключ -r. при закрытии окна скрипт перестанет работать.
  • прекратить работу скрипта можно запуском с ключем -k
  • запуск без ключа проведет все необходимые настройки и спросит разрешения на запуск в режиме сервиса или в обычном экранном.

Для установки нужно только скачать файл autofan.sh, задать ему права на исполнение, запустить и следовать инструкциям на экране (ввести настройки и согласится на запуск скрипта в диалоге). Как проделать эти операции описано в readme на GitHub.

Попробуйте, Вам понравится!)))

1 Like

Спасибо! Нужная вещь. Как я понял реализовано некое подобие пропорционального регулирования (пока не понимаю линукс скрипты). И как по учебнику получается либо перерегулирование, недорегулирование и колебания т.е. вентиляторы то разгоняются то останавливаются. Понятно, что особо точное поддержание температуры ни кому не требуется, но вот постоянные разгон и остановка немного напрягают. Возможно это при моих не дефолтных установках. Вобщем по хорошему тут бы ПИД регулятор))) Не знаю на сколько сложно будет народу настроить коэффициенты. Но при наличии интегральной составляющей скорость вентиляторов должна застабилизироваться и не будет проблемы при старте. Ну и ещё мысль на будущее - управлять мощностью видеокарт когда вентилятор не справляется или достиг заданного значения.

Спасибо за отзыв!
Разгона и остановки нет (тем более в последней версии присутствует параметр минимальных оборотов), есть увеличение/снижение оборотов в зависимости от температуры на 2-4% (всё зависит от настроек). Ничего необычного для работы самой видеокарты в этом нет, т.к. биосом самой ВК вентиляторы же регулируются.

Настроить проблем нет, нужно только калькулятором по формуле посчитать значения либо методом подбора. Путем увеличения коэффициентов и снижения настроек температур можно, имхо, добиться приемлемого результата в конкретном случае. Нагрев ВК зависит как от конструкции рига, так и от конструкции СО самой ВК, поэтому и будут различия в результате. т.е. настройки, которые у меня отлично работают с палитом, не подходят для евга.
В планах есть модернизация логики управления. Будем думать)

Да подобрать коэффициенты можно но для конкретной ситуации внешней температуры и мощности. вот вчера вечером подобрал, макс температура 69 . сегодня с утра на картах температура 72. увеличиваешь коэффициент начинаются колебания оборотов. конечно особо критичного в этом ничего нет. это гораздо лучше чем руками дёргать. Но я бы всё же попробовал интегральное регулирование. Задаёшь температуру и через делэй если температура меньше убавляешь на 1% обороты если больше прибавляешь. В зависимости от делэя будет регулироваться и коэффициент.

будем работать в данном направлении. для начала попробуйте изменить настройки температур на MIN_TEMP=60 MAX_TEMP=65. или попробовать различные значения (55/65, 55/63, 57/63 и т.д.)
в графическом интерфейсе править кривую удобней, но там тоже на графике два параметра: обороты при заданной температуре. просто в скрипте эти параметры нужно ввести цифрами.

Обновление скрипта Autofan 2.0:

  • добавлен selfupdate при запуске с ключем -u с GitHub
  • опция остановки майнера при достижениии критической температуры (задается в настройках), майнер запускается снова после снижения температуры ВК
  • опция снижения ПЛ при достижении установленной пользователем критической температуры. ПЛ снижается только для той карты, которая перегрелась. ПЛ снижается до 120% от минимального ПЛ, заявленного видеокартой. Значение минимального ПЛ для каждой ВК можно увидеть в админке хайва. К прежнему значению можно вернуться, применив настройки оверклокинга из админки.

not starting after rig reboot :frowning:

on screen -r autofan script waiting for insert parameters - pls hlp

[quote=“anopak;3967”]not starting after rig reboot :frowning:

on screen -r autofan script waiting for insert parameters - pls hlp[/quote]
For new version 2.0 xinit.user.sh must contain:
screen -dmS autofan /home/user/autofan.sh -r

yes, I know. I’ve this, but not started.

But, I removed the xinit.user.sh file and started the installation again and works ok.

Приветствую.
Не совсем понятно условие:
elif [[ $GPU_TEMP > $MIN_TEMP ]] && [[ $GPU_TEMP < $MAX_TEMP ]]
then
FAN_SPEED=$(( $GPU_TEMP *(($GPU_TEMP - $MIN_TEMP) * 4 + $MIN_COEF)/100 ))
elif [ $GPU_TEMP -ge $MAX_TEMP ]
then
FAN_SPEED=$(( $GPU_TEMP *(($GPU_TEMP - $MAX_TEMP) * 4 + $MAX_COEF)/100 ))
Я вот тут немного посчитал приведенные уравнения в ‘excel’, и немного сомневаюсь в правильности условия elif [ $GPU_TEMP -ge $MAX_TEMP ] , поскольку при данных:
Min_speed 60
MIN_Temp 45
MAX_Temp 65
MIN_Coef 80
MAX_Coef 110
Crit_Temp 75

Вентили выкрутятся в 100% при достижении температуры карт 64 градуса по формуле FAN_SPEED=$(( $GPU_TEMP *(($GPU_TEMP - $MIN_TEMP) * 4 + $MIN_COEF)/100 )),
Однако, по условию и формуле
elif [ $GPU_TEMP -ge $MAX_TEMP ]
then
FAN_SPEED=$(( $GPU_TEMP *(($GPU_TEMP - $MAX_TEMP) * 4 + $MAX_COEF)/100 )) Скорость упадет до 75% в случае достижения 65 градусов, что приведет к более быстрому нагреву карт.

Либо я не правильно считаю, но мне кажется что условие с максимальной температурой лишнее, ведь вентили больше 100% крутиться не будут.
Вышли по формуле FAN_SPEED=$(( $GPU_TEMP *(($GPU_TEMP - $MIN_TEMP) * 4 + $MIN_COEF)/100 )) на 100% и хватит, пусть крутятся на 100 до достижения Critikal temp 75, где уже пойдет снижение PL и minerstop.

Прошу прощения, если я не прав, но почему сложилось именно впечатление что условие elif [ $GPU_TEMP -ge $MAX_TEMP ] тут лишнее.
Можно поиграться с подсчетами в файлике

ПС. Спасибо за скрипт, в любом случае, работает исправно на 6х1063.

Соглашусь с Vejtarn, но мне кажется алгоритм должен быть такой
GPU Temp < MIN_temp FAN_SPEED= Min_speed

GPU Temp > MIN_temp && GPU Temp < MAX_temp FAN_SPEED= некая линейная формула зависимости FAN_SPEED от GPU Temp, притом что при GPU Temp = MIN_temp+1 FAN_SPEED= Min_speed +1 , а при GPU Temp = MAX_temp-1 FAN_SPEED= 99%

GPU Temp > MAX_temp FAN_SPEED= 100%

и тогда можно будет упразднить коэффициенты MIN_Coef и MAX_Coef

[quote=“Vejtarn;3986”]Приветствую
ПС. Спасибо за скрипт, в любом случае, работает исправно на 6х1063.[/quote]

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

Файл расчетов ексель я скидывал в гугль докс.

п.с. выше 100% выставлять обороты не пробовал, но условие прописано (было предложено одним из пользователей), и никому вроде как не мешает жить) а так да, не должно крутиться выше.

[quote=“Deret;3991”]Соглашусь с Vejtarn, но мне кажется алгоритм должен быть такой
GPU Temp < MIN_temp FAN_SPEED= Min_speed
GPU Temp > MIN_temp && GPU Temp < MAX_temp FAN_SPEED= некая линейная формула зависимости FAN_SPEED от GPU Temp, притом что при GPU Temp = MIN_temp+1 FAN_SPEED= Min_speed +1 , а при GPU Temp = MAX_temp-1 FAN_SPEED= 99%
GPU Temp > MAX_temp FAN_SPEED= 100%
и тогда можно будет упразднить коэффициенты MIN_Coef и MAX_Coef
[/quote]

Я предоставил протестированный вариант с гибкими, как мне кажется, настройками. В случае, если все таки вам не удается получить желаемый результат, можете изменить формулы и условия, как вам нужно. Но для меня была цель именно уйти от линейности, а не перенастраивать каждый раз обороты. В противном случае можно просто выставить 75-80%.
задача скрипта не держать определённую температуту, как многие хотят сделать, а пытаться держать диапазон температур. потому что даже если я сейчас при жаре выставлю 100% на еквихеше вентили, до 45 градусов температура вряд ли опустится. нужно задавать настройки скрипта исходя из здравого смысла, ведь это всего лишь скрипт управления, а не кондиционер)
В любом случае будет следующая версия (уже в ToDo), в которой я хочу сделать более гибкое и интеллектуальное управление вентиляторами, алгоритм управления изменится. Если получиться конечно)

steambot, соглашусь, что привел в пример частный случай, и в моем случае игра со значениями Min и Max_coef поможет решить просадку по скорости оборотов в пике температуры по моим значениям.
Единственное, пришлось конечно помучиться с формулами в экселе, прежде чем я подобрал удовлетворяющие меня значения, но это в какой то мере тоже огромный плюс, поскольку можно подобрать именно тот температурный диапазон, который будет интересен.
И еще заметил то, что после старта скрипта поползла нагрузка на систему:
System load (1, 5, 15 min): 3.65 / 3.82 / 3.88
System load (1, 5, 15 min): 4.29 / 4.12 / 4
Никто не замечал?