Jump to content
19alexrus71

WatchDog и Управление кулерами карт в одном флаконе. Nvidia под Linux

Recommended Posts

Решил поделиться самописанным скриптиком для контроля температуры карт и watchdog в одном флаконе для ферм на картах Nvidia под управлением любого linux
Для гуру линукса данный скрипт скорее всего будет неинтересен.
А вот новичкам - вполне может быть в тему. Кроме прямого назначения, возможно подтолкнет к пониманию создания скриптов на shell (что крайне полезно при использовании linux)
 
Предупреждаю сразу. Я не программист. Скрипт писал исключительно для себя. Возможно профессиональным кодерам он покажется оверстремным. Но тем не менее, работает у меня уже давно и исправно. Функции свои исполняет вполне уверенно. Поэтому ногами за корявый стиль программирования прошу не пинать.
 
Функционал контроля температуры:
Задается коридор температур (по умолчанию 58-60) в котором скрипт будет пытаться держать карты.
  • При снижении температуры ниже нижнего порога - происходит плавное снижение оборотов кулера.
  • При достижении верхнего порога - плавное увеличение оборотов.
  • При достижении второго порога (по умолчанию 65)- сразу включается турборежим кулера (по умолчанию 70), и после этого плавное увеличение вплоть до максимальных оборотов, пока температура не снизится.
  • При снижении оборотов ниже минимальных (по умолчанию 35) - происходит переключение на автоматическое управление кулерами. Полезно при зимнем балконном майнинге, чтобы не крутить вентиля, когда картам и так холодно. (на многих картах вентиля просто отключаются ниже определенной температуры)
 
Функционал WatchDog (можно отключить):
  • Считываются значения загрузки карт.
  • В случае ошибки получения данных (отвал карты). Или в случае снижения загрузки карты ниже установленного порога (не работает майнер), начинается обратный отсчет. Если по прошествии заданного количества циклов - загрузка карт не восстанавливается - происходит перезагрузка с одновременной записью  даты ребута и его причины в ~/watchdog.log
 

Входные переменные для настройки задаются в начале скрипта. В скрипте есть описание переменных. Запускать желательно в отдельном окне терминала.

Скрипт под спойлером

Скрытый текст

 

#!/bin/bash
#######################
#Script created by 19alexrus71
#For donate - LTC: LaeSwaV5mnXJb6DgccCdHiZNKUCvbfDMFT
#############################################################
 
 
 
#Температура при достижении которой обороты начинают плавно повышаться
high_level=60
 
#Температура при которой обороты начинают плавно понижаться
low_level=58
 
#Температура при которой обороты сразу повышаются до very_high_fan
very_high_level=65
 
#Скорость кулера при достижении very_high_level
very_high_fan=70
 
#Скорость кулера ниже которой обороты уже не регулируются и переключаются в авторежим
min_fan=35
 
#Максимальная скорость кулера
max_fan=100
 
#Пауза циклов проверки
PAUSE=10
 
#Минимальный порог загрузки карт. Если меньше - считается, что майнинг не работает
min_using=50
 
#Количество циклов с ошибкой (или низкой загрузкой карт), при достижении которого происходит reboot
error_level=10
 
#Включение/выключение watchdog. Отключить: watchdog=0. Мониторинг будет происходить, но перезагрузка отключена
watch_dog=1
 
 
 
#########################################################################
count=$(sudo nvidia-smi -i 1 --query-gpu=count --format=csv,noheader,nounits)
error_flag=0
error_count=0
 
while (true)
do
clear
 
    if [ $error_flag -ne 0 ]
    then
        error_count=$(( $error_count + 1 ))
    else
        error_count=0
    fi
 
    if [ $error_count -ne 0 ]
    then
        echo "WARNING!!! Lost Card or using Card low."
        if [ $watch_dog -eq 1 ]
        then
            remain_in_cicle=$(( $error_level - $error_count ))
            remain_in_sec=$(( $remain_in_cicle * $PAUSE ))
            if [ $remain_in_cicle -le 0 ]
                then
                    echo "Reboot NOW!"
                    echo $(date +%d-%m-%Y\ %H:%M:%S) $error_msg >> ~/watchdog.log
                    sudo reboot
                else   
                    echo "Reboot in "$remain_in_sec" sec!"
            fi
        else
            echo "WatchDog disabled"
        fi
    else
        if [ $watch_dog -eq 1 ]
        then
            echo "WatchDog enabled. All OK"
        else
            echo "WatchDog disabled"
        fi
    fi
 
error_flag=0
 
for (( i=0; i < $count; i++ ))
do
    echo
    res_req=0
    fan=$(sudo nvidia-smi -i $i --query-gpu=fan.speed --format=csv,noheader,nounits)
    res_req=$?
    if [ $res_req -ne 0 ]
    then
        echo "Error get data from card "$i
        error_flag=1
        error_msg="Error get data from card "$i
        continue
    fi
    res_req=0
    temp=$(sudo nvidia-smi -i $i --query-gpu=temperature.gpu --format=csv,noheader,nounits)
    res_req=$?
    if [ $res_req -ne 0 ]
    then
        echo "Error get data from card "$i
        error_flag=1
        error_msg="Error get data from card "$i
        continue
    fi
    res_req=0
    using=$(sudo nvidia-smi -i $i --query-gpu=utilization.gpu --format=csv,noheader,nounits)
 
    if [ $res_req -ne 0 ]
    then
        echo "Error get data from card "$i
        error_flag=1
        error_msg="Error get data from card "$i
        continue
    fi
    if [ $using -lt $min_using ]
    then
        error_flag=1
        error_msg="Using card "$using"%"
    fi
 
 
    echo "Using Card "$i": "$using"%."
    control=$(nvidia-settings -q "[gpu:"$i"]/GPUFanControlState" -t)
 
    if [ $temp -ge $high_level ]
    then
        if [ $fan -ge $max_fan ]
        then
            echo "Fan speed "$i": "$fan".Temperature "$i": "$temp" !!!!!!!"
            continue
        fi
        speed=$(( $fan + 2 ))
        if [ $speed -gt $max_fan ]
        then
            speed=$max_fan
        fi
 
        if [ $temp -ge $very_high_level ]
        then
            if [ $fan -lt $very_high_fan ]
            then
                speed=$very_high_fan
            fi
        fi
        echo "Fan "$i": "$fan"   Temperature "$i": "$temp ". Is very high! Increase fan speed to "$speed
        nvidia-settings -a "[gpu:"$i"]/GPUFanControlState=1" > /dev/null 2>&1
        nvidia-settings -a "[fan:"$i"]/GPUTargetFanSpeed="$speed > /dev/null 2>&1
        continue
    fi
 
    if [ $temp -lt $low_level ]
    then
        if [ $fan -le $min_fan ]
                then
            nvidia-settings -a "[gpu:"$i"]/GPUFanControlState=0" > /dev/null 2>&1
            echo "Fan "$i": "$fan"   Temperature "$i": "$temp
            continue
                else
            if [ $control -ne 0 ]
            then
                    speed=$(( $fan - 1 ))
                nvidia-settings -a "[gpu:"$i"]/GPUFanControlState=1" > /dev/null 2>&1
                    nvidia-settings -a "[fan:"$i"]/GPUTargetFanSpeed="$speed > /dev/null 2>&1
                    echo "Fan "$i": "$fan"   Temperature "$i": "$temp ". Is very low! Decrease fan speed to "$speed
                    continue
            fi
        fi
    fi
 
    echo "Fan "$i": "$fan"   Temperature "$i": "$temp
 
done
 
sleep $PAUSE
done

 

 

 

 

 
И вот как это выглядит вживую. На первом скрине - все в порядке. На втором - намеренно выключен майнер и скрипт запустил обратный отсчет до ребута
watch1.thumb.JPG.64d859a1bbdc1dd3577c95062421f8e6.JPGwatch2.thumb.JPG.b276de4c3686b03c0976953b51bcadf5.JPG
 
PS: Теоретически nvidia-smi и nvidia-setting должны работать и без sudo. Однако я делал через sudo, во избежании лишних вопросов со стороны линукса. Поэтому нужно добавить эти команды в файл sudoers
Edited by 19alexrus71

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Recently Browsing   0 members

    No registered users viewing this page.

  • Similar Topics

    • Даем деньги трейдерам в доверительное управление

      Проект NeoTraders ищет трейдеров, способных управлять капиталом компании. Мы предлагаем счета в управление от $1000 до $100’000.   Чтобы получить счет в управление, необходимо: 1. Зарегистрироваться на сайте neotraders.io; 2. Открыть новый демо-счет на $100’000 в любой брокерской компании; 3. Торговать две календарные недели и выполнить условия теста. Первая попытка пройти тест всем трейдерам предоставляется бесплатно. Для начинающих мы предлагаем бесплатное базовое обуч

      in Флейм

    • Внешнее ШИМ-управление 4-pin вентилятором

      Возникла необходимость сделать внешнее управление вентиляторами (4-х проводными). Идея состоит в том, что бы питание взять напрямую с бп, а шим управление с отдельного устройства. Нужен внешний шим генератор с крулилкой. Нашел много шим контроллеров, но они все с силовой частью, расчитанные на 2-х проводные вентиляторы, а нужно именно управляющий сигнал.

      in Вентиляция и охлаждение

    • [CMD] FarmWatchBot (Autorun/Watchdog) for Ewbf, Claymore, Dstm, CCminer, Bminer, Ethminer, CastXMR, Phoenix, T-Rex

      Версия 2.1.2 - 20.02.2021   Ewbf [Equihash] - Ewbfautorun.bat Dstm [Equihash] - Dstmautorun.bat Bminer [Equihash] - Bmnrautorun.bat Claymore [Equihash] - ClayZECautorun.bat Claymore [CryptoNote] - ClayXMRautorun.bat Claymore [NeoScrypt] - ClayNSautorun.bat Claymore [Ethash] - ClayETHautorun.bat Ethminer [Ethash] - Ethrautorun.bat Ccminer [Multialgo] - CCautorun.bat Cast XMR [CryptoNote] - Castautorun.bat Phoenix [Ethash] - Phnxautorun.bat T-Rex [Ethash] - Trexautorun.bat

      in Программы для майнинга

    • Удаленное управление асиками

      Всем Хорошего дня! Подскажите кто сталкивался, как настроить удаленный доступ к асикам с мобильного либо же что бы на мобильный приходило уведомление в случае отвала асика? Благодарю за ответ.

      in ASIC/FPGA майнеры

    • Простое управление и мониторинг

      Бесплатное решение обеспечивающие надежную работу и полный контроль, как одного, так и сотен одновременно работающих майнеров. В чем сервис может помочь: Детальная статистика Оптимизация доходов Автоматизация Разгон оборудования Безопасность Asic Boost Уведомления Защита оборудования. Как это работает Создай учетную запись на сайте, подтвердив данные по e-mail Добавь и настрой майнер Просто скачай и

      in Мониторинг

×
×
  • Create New...