В статье описывается подход к организации контроля работы большого количества ферм по добычи криптовалюты. Рассмотрен процесс анализа данных и принятия решений о текущей работоспособности системы. Показан пример взаимодействия между компонентами и управляющим контроллером.
Добыча криптовалюты (майнинг) — деятельность по поддержанию распределенной платформы и созданию новых блоков с возможностью получить вознаграждение в форме новых единиц и комиссионных сборов в различных криптовалютах.
В 2017 году большую популярность получил способ добычи криптовалюты с использованием GPU (видеокарты). Графическая карта компьютера прекрасно подошла из-за специфики алгоритмов криптовалют (за один такт выполняется больше инструкций чем в CPU). Сама майнинг-ферма представляет из себя ничто иное, как обычный компьютер, единственное отличие — комплектация несколькими видеокартами вместо одной.
Проблема, которая решается в данной статье — нестабильность работы майнинг ферм. Связано это с большой нагрузкой на аппаратную часть компьютера и, как следствие, с аппаратными ошибками, зависаниями и сбоями.
Рис. 1. Схема подключения нескольких майнинг ферм к контроллеру
Внедрение контроллера, специально разработанного программного сервера, работающего на миниатюрном одноплатном компьютере размером с банковскую карту, позволяет производить сбор и анализ данных о работе подключенных к нему ферм. Подключение производится по сети Ethernet. Дополнительно, Ground и Power контакты материнских плат всех ферм подключены к GPIO (general-purpose input/output) и Ground портам на Raspberry Pi.
Рассмотрим процесс инициализации и старта майнинга криптовалюты на примере Ether (обменные единицы в сети Ethereum, платформы для создания децентрализованных онлайн-сервисов на базе блокчейна). Непосредственный запуск ферм осуществляется через контроллер, а именно через WEB интерфейс контроллера. WEB интерфейс представляет из себя обычный WEB сервис, запущенный на Raspberry Pi и доступный внутри сети по протоколу HTTP.
Сразу послу запуска, ферма отправляет запрос на сервер контроллера. Основной смысл данного запроса — получить от контроллера настройки, предназначенные непосредственно для этой фермы.
Рис. 2. Ответ контроллера на запрос инициализации в формате JSON
На Рис. 2. Представлен пример ответа, полученного от контроллера в момент инициализации. Основным параметром здесь является Etherium адрес, необходимый для запуска процесса майнинга.
Одновременно с инициализацией, на стороне контроллера запускает таймер, необходимый для мониторинга активности фермы. Каждый раз, когда ферма присылает отчет о текущей работе, таймер перезапускается. Однако, если долгое время контроллер не получает отчет от какой-либо фермы, по истечению этого таймера выполняется процесс перезапуска рига.
Рис. 3. Отчет о работе майнинг фермы в формате JSON
Запущенная ферма, каждые 15 секунд сообщает контроллеру следующую информацию (Рис. 3):
– totalSpeed — Общий хэшрейт фермы.
– gpu.name — Имя видеокарты, включая её порядковый номер.
– gpu.speed — Хэшрейт видеокарты.
– gpu.temperature — Температура графического ядра в градусах Цельсия.
– gpu.fanSpeed — Скорость вращения вентиляторов видеокарты в процентах от максимальной скорости.
По полученным данным, контроллер может диагностировать правильность работы всех подключенных ферм. В случае если температура какой-либо из видеокарт приближается к заранее сконфигурированному пороговому значению, контроллер дает ферме команду увеличить скорость вращения вентиляторов для этой видеокарты. Аналогично температуре, происходит мониторинг хешрейта ферм, это важный параметр, именно он показывает эффективность добычи криптовалюты. Весь риг может быть перезагружен если общих хэшрейт падает ниже определенного значения.
Рис. 4. WEB интерфейс контроллера
Для удобного наблюдения и настроек всей системы был разработан графический WEB интерфейс, показанный на Рис. 4. Он предоставляет возможность удаленного управления всей системой, а именно:
- Добавлять / Модифицировать настройки / Удалять фермы, подключенные к контроллеру.
- Выполнять Выключение / Включение / Перезагрузку ферм.
- Отслеживать состояние всех ферм на одном экране в режиме реального времени.
На Рис. 5 показан процесс конфигурирования фермы, настраиваемыми параметрами являются:
– Name — Имя фермы для отображения в контрольной панели.
– IP Address — Адрес фермы в локальной сети. Именно он используется для идентификации в момент инициализации.
– Power PIN — Номер GPIO контакта на Raspberry Pi, используемый для управлением питанием.
– Status — Текущее состояние фермы. “Запущена” или “Остановлена”.
– ETH Address — Etherium адрес, используемый для процесса майнинга.
– Min rate — Минимальный хэшрейт фермы ниже которого она будет принудительно перезагружена.
– Fan speed (%) — Скорость вращения вентиляторов на видеокартах фермы.
Рис. 5. Процесс настройки одной фермы через контроллер
Рассмотренные в статье подход позволяет свести к минимуму и сильно упростить процесс поддержания работы большого количества майнинг ферм. Как следствие, увеличивается время нормальной работы и сокращается время простоя и ошибок, что непосредственно влияет на качество добычи криптовалюты.
Исходный код проекта доступен публично на GitHub:
– Mining Controller on NodeJS — https://github.com/bushev/mining-controller
– Mining Rig Runner on NodeJS — https://github.com/bushev/mining-rig-runner
Литература:
- Майнинг. // Википедия. URL: https://ru.wikipedia.org/wiki/Майнинг (дата обращения: 11.10.2017).
- Overclocking RX cards on Linux // Reddit. URL: https://www.reddit.com/r/MoneroMining/comments/5wdduz/overclocking_rx_cards_on_linux/ (дата обращения: 11.10.2017)