PROCRYPTO REPOST: Заметки по майнингу Эфира

Старая и давно неактуальная статья, но тоже перенесу.


В общем, суть: есть проект Ethereum, на данный момент еще майнится с PoW. Протокол – Dagger-Hashimoto. Весьма отличается от того, что майнилось нами ранее. Майнер по-большей части один, хотя есть и появляются разные форки с доработками. Основная ветка развивается мало, куча багов и проблем, но уж что есть. Существующие проблемы стараюсь вытягивать скриптами, получается с переменным успехом.

Итак, GPU/CPU майнер – ethminer. Собирается из линуксовых под Убунту и, как ни странно, Арч. Пробовал собирать под Дебиан. Даже преодолев ад с версиями нужных либ, в итоге завяз где-то на середине компиляции из-за ошибок. В итоге использую бинарь и либы из Убунты, указывая недостающие либы через LD_LIBRARY_PATH; остальное (всякие там libboost’ы) оно берет из системы.

По работе майнера. Майнер не имеет внятной системы ошибок, каких-либо настроек железа; любит падать на каждый чих и в целом недоработан – например, весьма сложно заставить его майнить на избранных картах, проще их переставить местами и задать число тредов майнера (у меня так работает один риг, где есть пара гиговых карт).

По алгоритму. Алгоритм предполагает каждые 30000 блоков генерацию нового блока данных – это так называемые DAG-файлы. DAG-файл имеет размер на данный момент около 1,3 ГБ. Хранится на винте, вычитывается при старте майнера, всасывается в видеопамять каждой карты (отсюда и требования к картам с 2 и выше гиг) и дальше майнер с этим работает. Кроме того, после запуска он пишет этот же файл обратно на диск (причем, вычитка делается весьма агрессивно и вешала мне сеть, когда я пытался тянуть данные через NFS). Кроме того, как одно из требований – это должен быть непрерывный кусок памяти (есть любительские майнеры, которые умеют работать с фрагментированными DAG’ами). DAG растет где-то на 8 МБ за эпоху – не в смысле в процессе майнинга, а просто каждый следующий файл будет больше. Отсюда следствие – при таком росте карты с 2 ГБ памяти на Эфире отомрут где-то через год. Но есть и другие валюты на Dagger.

По DAG’у. Майнер в один момент времени работает с одним DAG-файлом. Второй он создает в фоне, это ресурсоемкая в плане процессора процедура. Есть опция –no-precompute, которая позволяет не создавать новый файл в фоне – обычно ее не рекомендуют, так как это будет вызывать лаг сети в момент смены эпохи. Итого из актуальных есть 2 файла: рабочий и следующий. Рабочий становится устаревшим в момент смены эпохи и может быть удален; следующий становится рабочим, а майнер начинает в фоне генерить новый DAG.

По хранилищу DAG’ов. Системы у меня на флешках, места там не особо, поэтому пробовал разные варианты решения проблемы с хранением DAG’ов. Когда запускал майнер на ноуте – оно активно насиловало винт (т.е., вычитка идет в много потоков). Когда пробовал запускать все через сеть – клал сеть (плюс я тогда еще не знал, что нужно в таком случае держать один майнер как главный, а остальные с –no-precompute, иначе все начнут писать в один файл). Пробовал держать все в tmpfs, но приходится выделять уже больше 2,5 гиг и становится тесно. Плюс запуск майнера в таком случае занимает около 14 минут – то время, за которое Athlon 250 сгенерирует DAG. Не говоря уж о более слабых процах. Итог – докупание новых флешек и/или использование свободного места на существующих. Плюс активно использую кэширование в оперативной памяти – вычитка файла до старта майнера (пока запускаются иксы и все остальное), агрессивное кэширование при записи после вычитки – DAG скидывается в оперативку, майнер майнит, кэши сбрасываются уже после начала майнинга. Вылезла проблема с кэшированием – есть тред на ЛОРе. Суть stable pages – вычитанный кэшированный файл не может быть записан в те же страницы; в итоге кэш сначала сбрасывается на диск и толку с него ноль, ибо до сброса кэша (т.е., записи 1,3 ГБ данных на медленную флешку) майнер не работает. Обошел проблему костылем: на разделе лежит файлик, файлик примонтирован как loop, в нем уже DAG’и. В таком случае все работает так, как мне надо.

По майнингу. Майню на dwarfpool.com, там регистрация не требуется. Вывод – на poloniex.com. Т.е., регишься на Полониксе, создаешь кошелек на ввод, дальше используешь его как адрес на пуле.

По управлению железом. Использую пока sgminer, но планирую написать что-то свое. Вылезла проблема – всякие там X11/X13 и так далее требовательны к памяти, в итоге ethminer со своим DAG’ом + sgminer с X11, хоть и не майнящий, но уже не влазят в память. Пока использую костыль – у меня на каждом риге есть Tahiti, к которой цепляется sgminer – ему лишь бы запуститься. После запуска sgminer’а через его API гасятся все карты и дальше он просто рулит частотами и вентиляторами. Там, где Tahiti нет – можно использовать алгоритм Keccak, он простой и требует всего несколько метров памяти. Так как ethminer требует непрерывный кусок памяти, то sgminer запускаю после ethminer. В процессе смены эпох вскрылась еще одна проблема (это до того, как начал биндить sgminer на Таити) – при определенном потреблении памяти ethminer’ом запущенный sgminer начинает выжирать память.

По картам. Из-за требований к памяти хорошо себя показывают карты с небольшим числом шейдер-процессоров и с низколатентной памятью. Хорошо себя показывают, например, 7870. Дальше с ростом мощности прирост хэшрейта становится не таким значительным.

По системе. Проц, в целом, не сильно используется – основная нагрузка на проц идет при запуске майнера. Генерация DAG’ов в нормальном режиме идет в фоне, так что сгенерируется он за 10 минут или за 2 часа – не так важно. Под хранилище DAG’ов идеально иметь SSD’шку, но если нет – то свою систему я описал выше. Как следствие всей этой организации на ригах у меня требования к памяти – минимум 4 гига. Да и в любом случае 4 гига пригодится, так как при работе ethminer занимает памяти на размер DAG’а (при этом почти вся – shared). При генерации нового DAG’а – соответственно, становится по размеру двух DAG’ов. Т.е., только на сам майнер сейчас может уйти до 2,6 ГБ. Плюс система, иксы и так далее – в общем, в любом случае стоит поставить хотя бы 4 ГБ.

Добавить комментарий