Как мы разогнали DOGE ноду до 25мс — патч 500 пиров и Spiral Pool
Вот как выглядит наш Antminer L3+ подключённый к Spiral Pool. 0.38 TH/s, температура 46°C, BestShare уже перевалил за 1.99 миллиарда. Uptime 72 часа — нода и пул работают стабильно без единого перезапуска.
Blocks: 0 — да, блок ещё не найден. Но мы не торопимся — математика на нашей стороне. BestShare растёт, шары принимаются, всё работает как надо.
Когда ставишь ноду и подключаешь к ней майнер — кажется что всё готово. Нода синхронизировалась, майнер молотит, шары летят. Но если копнуть глубже и замерить задержки — картина неприятная.
Типичная история: нода Dogecoin из коробки подключается к 8-25 пирам. Это стандартное ограничение в коде — разработчики считают что большее число соединений будет нагружать ноду и замедлять её. Логика понятна — для обычного пользователя этого хватает.
Но для соло майнинга это катастрофа. Мало пиров = нода медленно узнаёт о новых блоках = ты продолжаешь майнить на устаревшем шаблоне = потраченный хешрейт впустую.
Bitcoin и все его форки (DOGE, LTC и другие) — это P2P сеть. Каждый новый блок распространяется по сети как волна — от ноды к ноде. Чем больше у тебя прямых соединений с другими нодами — тем быстрее ты получаешь информацию о новом блоке.
Представь: нашли блок где-то в Азии. Информация идёт по цепочке нод. Если у тебя 8 пиров — возможно что среди них нет никого кто стоит близко к источнику. Если у тебя 500 пиров — среди них наверняка есть кто-то кто уже получил информацию.
На практике — разница между 8 пирами и 500 пирами это примерно 2-5 секунд против 50-100 миллисекунд. На первый взгляд немного. Но если блоки находят каждую минуту — ты теряешь несколько секунд полезного хешрейта на каждом блоке.
В коде Dogecoin Core ограничение на исходящие соединения прописано константой MAX_OUTBOUND_FULL_RELAY_CONNECTIONS. По умолчанию стоит 8. Меняем на 500.
После запуска патченой ноды смотрим сколько пиров подключилось:
Половину дела сделали — нода быстро получает новые блоки. Но есть вторая проблема: пул должен максимально быстро отправить майнеру новый шаблон блока как только получил уведомление от ноды.
Стандартный Spiral Pool имеет встроенные задержки в коде — небольшие паузы между получением уведомления от ноды и отправкой шаблона майнеру. Убираем их:
ZMQ (ZeroMQ) — это система мгновенных уведомлений. Когда нода получает новый блок — она мгновенно отправляет ZMQ сообщение пулу. Пул моментально генерирует новый шаблон и отправляет майнеру. Без ZMQ пул узнавал о новом блоке через RPC polling с задержкой 1-5 секунд.
Итого что мы получили на нашем сервере Xeon E5-2683 v3 / 32GB RAM:
Крупные пулы имеют преимущество в суммарном хешрейте тысяч майнеров — это факт. Но по скорости реакции на новый блок наша конфигурация не уступает им. Каждый наш майнер получает новый шаблон за 25-30 миллисекунд — это уровень профессиональных пулов.
Это особенно важно при соло майнинге — каждая секунда потраченная на устаревшем шаблоне это потраченный хешрейт. Умножь на количество блоков в день — и получишь ощутимые потери.
[ Задай вопрос ]
Есть вопросы по патчу или настройке? Пиши — отвечаем из реального опыта.