Как майнить Monero на CPU?

Тема в разделе "Мануалы", создана пользователем MoneroRus, 10 сен 2017.

  1. MoneroRus

    Команда форума Модератор Редактор

    Регистрация:
    30 ноя 2017
    Сообщения:
    172
    Симпатии:
    31
    В данной статье пойдет речь о возможных вариантах майнинга криптовалюты Monero (XMR) на различном оборудовании.

    Алгоритм
    Благодаря алгоритму Cryptonight используемого для хеширования, майнинг Monero можно осуществлять как на процессорах, так и на видеокартах и при определенных условиях - это будет выгодно.
    CryptoNight является частью протокола CryptoNote и реализует Proof of Work алгоритм.
    Задача алгоритма устранить разрыв производительности между CPU и GPU / FPGA / ASIC майнерами. Достигается это прямо пропорциональной(или близкой к ней) зависимостью между инвестициями и приростом мощности. В общем случае это означает - чем мощнее устройство, тем оно дороже в производстве(менее выгодно). Это реализация того же принципа, который закладывали в Bitcoin (но реализовать его не получилось): один CPU = "один голос".
    Алгоритм активно использует произвольный доступ к памяти (в то время как один процессор может быть значительно быстрее другого, разница в параметрах и объемах памяти менее контрастна между машинами), а также исключает внутренний параллелизм, т.е. один поток - один блок памяти. Размер блока памяти должен быть достаточно большим, чтобы его было выгоднее хранить чем вычислять.

    CryptoNight потребляет примерно 2Mb памяти(на поток) по следующим причинам:

    1. Это подходит для кеша L3 (на ядро) современных процессоров,
    2. Мегабайт внутренней памяти - это почти неприемлемый размер для современного ASIC,
    3. GPU могут запускать сотни одновременных экземпляров, но они ограничены другими способами (память GDDR5 медленнее, чем кеш процессора L3 и отличается большей пропускной способностью, а не скоростью произвольного доступа),
    4. Значительное увеличение блока памяти потребует увеличения итераций, что в свою очередь повлечет увеличение времени работы в целом. «Тяжелые» запросы в ненадежной сети p2p могут привести к серьезным уязвимостям, поскольку узлы обязаны проверять доказательство каждого нового блока. Если узел проводит значительное количество времени при каждой оценке хеша, легко устроить DDoS посылая поток поддельных объектов с произвольными рабочими данными (значения nonce). В связи с этим в Monero есть "наказание" майнеру за попытку отправить в сеть блок, который намного больше последних 100.

    Алгоритм формально не описан математически, а только в коде. Описание алгоритма часто апеллирует к scrypt, но с зависимостью нового блока от всех предыдущих и увеличенным размером блока памяти.

    Майнинг

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

    Варианты оборудования:
    1. CPU - майнинг на любом современном процессоре с x86 архитектурой.
    2. GPU - майнинг на видеокартах NVIDIA и AMD
    3. Облачный - покупка вычислительных мощностей. Например на nicehash

    Также различают соло майнинг и майнинг в пуле.
    Соло майнинг это когда одно устройство (нода) ищет блок для блокчейна. Достаточно долгая процедура и победить в гонке генерации блока сложно, это ведет к непредсказуемому доходу, поэтому майнеры объединяются в пулы. Посчитать среднее время нахождения блока в соло можно так: сложность (diff) / хешрейт (H/s) = секунд. Например для среднего хешрейта 200h\s и текущей сложности (на момент написания): 56000439029 / 200 = 280002195 секунд или почти 9 лет. Опять же это среднее время и за 9 лет ситуация явно изменится. Так что вам должно сильно повезти поймать блок с таким хешрейтом в соло. Но помните, что соло майнинг очень важен для децентрализации, поэтому если вы хотите помочь проекту Monero, но не обладаете техническими или медийными навыками, то соло майнинг может стать отличным вкладом в устойчивость сети.
    В пуле все устройства занимаются генерацией блока вместе, награда в случае победы пула
    делится среди майнеров пула, пропорционально объему произведенной работы. Принципы работы пулов отдельная большая тема, в том числе варианты начисления награды.
    Также можно объединить свои устройства в пул и заниматься соло майнингом, только
    с нескольких устройств. Это несколько увеличит шансы на победу, но не сильно. Пул для этого можно поднять свой, можно использовать сторонний (обычно при соло майнинге
    комиссия пула меньше). При соло майнинге ваши устройства напрямую будут работать с блокчейном.

    Примеры пулов для установки:
    https://github.com/sammy007/monero-stratum
    https://github.com/Snipa22/nodejs-pool
    https://github.com/zone117x/node-cryptonote-pool

    Похожая ситуация будет при использовании прокси, например:
    https://github.com/xmrig/xmrig-proxy
    https://github.com/Snipa22/xmr-node-proxy

    Настройка майнера для различных сценариев почти не отличается.
    Для соло используем адрес указанный на пуле для соло майнинга.
    При использовании прокси указываем адрес прокси в качестве пула, а в настройках прокси указываем адрес самого пула (настройки прокси выходят за рамки описываемой темы).
    При использовании с пулом, просто указываем адрес пула.

    Рекомендуется выбирать небольшой пул до 1MH\s. В долгосрочной перспективе разницы в доходе между крупными и маленькими пулами нет, но выбор маленького пула хорошо сказывается на децентрализации.

    Список общедоступных пулов: http://moneropools.com

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

    CPU
    Майнинг на CPU достаточно прост. Для этого вам потребуется:
    1. многоядерный процессор с большим L3 кэшем и поддержкой AES инструкций
    2. ПО, которое будет производить вычисления.
    Прежlе всего необходимо в BIOS отключить экономичные режимы и\или выбрать профиль максимальной производительности. Конкретные действия зависят от вашей версии BIOS.
    На данный момент среди ПО лидерами считаются xmr-stak и xmrig.
    Они несколько отличаются способом настройки, оба подходят новичкам, т.к. имеют автоматический анализатор начальной конфигурации под ваше железо.
    Также есть возможность майнинга используя официальный кошелек, точнее ту его часть, которая отвечает за обработку блокчейна (monerod). Если у вас кошелек настроен на использование удаленной ноды, этот вариант не подойдет.

    Штатный майнинг
    Полная нода Monero (monerod) поддерживает майнинг из коробки. Майнинг может быть запущен в двух режимах: высокого и низкого приоритета (smartmining).

    CLI

    Скачиваете консольный кошелек, запускаете monerod и ждете пока он синхронизирует блокчейн (может занять несколько дней). Затем выполняете команду:

    (--detach для фонового режима работы monerod, не путать с --bg-mining-enable, который включает smartmining)
    Либо из monero-wallet-cli выполняете команду start-mining ЧИСЛО_ПОТОКОВ
    Майнинг на удаленной ноде не поддерживается из коробки.

    GUI

    Снимок1.PNG
    Официальный кошелек поддерживает SmartMining - это режим в котором майнинг будет подстраиваться под работу таким образом, чтобы снизить негативные влияния майнинга, такие как перегрев, тормоза, расход батареи и т.д. Цель этого режима сделать майнинг ненавязчивым и постоянным. Такой майнинг не будет прибыльным, но очень хорош для децентрализации и обеспечения безопасности сети.

    Параметры управления майнингом:
    Чтобы объединить несколько штатных майнеров понадобится простейший пул. Например https://github.com/sammy007/monero-stratum

    Майнинг в браузере

    Существуют реализации майнеров на JavaScript и сервисы связанные с этим. Большинство владельцев сайтов используют этот вариант для майнинга на ПК посетителей сайта с целью замещения рекламы ну или просто с целью наживы. Этот вариант может быть использован самыми неискушенными пользователями ПК для майнинга Monero.
    Самый простой вариант, но и самый неэффективный это майнинг в браузере. Для этого вам потребуется адрес кошелька (на который будет поступать вознаграждение) и онлайн сервис майнинга. Например, этот пул предоставляет такую возможность, вписываете внизу страницы Dashboard адрес, жмете кнопку TRACK ADDRESS, далее среди прочих будет кнопка WEB MINING. Выбираете число потоков процессора и приступаете.
    Снимок.PNG
    Про сам пул, его надежность и стабильность, ничего не скажу, не пользовался. Подобный функционал наверняка есть и в других, иных местах, мне не известных.

    Владельцы сайтов могут встроить майнинг на сайт без использования сервисов. Используя прокси XMR WASP, который работает в том числе через веб сокеты.

    Имейте ввиду, что вебмайнеры могут детектироваться антивирусами как трояны и удаляться у пользователя сразу в фоновом режиме. Если используете вебмайнинг и он у вас не запускается, проверьте журнал антивируса или блокировщика java script в браузере.

    XMR-stack
    Xmr-stak универсальный майнер для CPU и GPU, а также под различные ОС.
    На днях в него добавлена поддержка L4 кеша процессоров Intel. Разработчики берут 2% пожертвований (каждые 2 минуты из 100 майнит на пул разработчиков), это заложено в коде и не конфигурируется. Если хотите изменить этот параметр, то потребуется самостоятельно собрать майнер из исходников. Также имеется возможность управлять объемом памяти на поток (до 10мб на поток). Имеет встроенный Web интерфейс, для просмотра статистики.
    Также разработчики собирают донат на реализацию графического майнера, с целью вытеснить графический майнер от minergate. Реализация ожидается в апреле 2018.

    Скачать xmr-stak.

    Настройка

    Майнер имеет интерактивный режим настройки (задает вопросы), в результате которого генерируются конфиги:
    CONFIG.TXT
    Настройки подключения:

    pool_address - адрес пула в формате "pool.supportxmr.com:3333". Поддерживаются только stratum пулы

    wallet_address - Адрес кошелька (в редких случаях логин на пуле)

    pool_password - Может быть пустым. Обычно используют для идентификации конкретного майнера при использовании нескольких устройств.

    use_nicehash - Совместимость с сервисом nicehash.com или прокси работающих по такому же принципу (xmrig-proxy)

    use_tls - Использовать TLS для соединения с пулом.

    tls_fingerprint - SHA256 отпечаток сервера. Если не пусто будет выполнена проверка сертификата сервера.

    pool_weight - Приоритет пула, это число сообщает майнеру насколько важен пул. Майнить будет на том пуле чей вес выше, пока пул не отвалится. Вес должен быть целым и больше 0.

    currency - какую монетку копать: 'monero' или 'aeon'

    Таймауты сети:
    Параметры соединения майнера и пула. Значения по умолчания подходят для большинства случаев. Более низкие таймауты лучше чем высокие

    call_timeout - Сколько секунд ждать ответа от сервера прежде чем считать его нерабочим и сбросить соединение.
    retry_time - Сколько секунд ждать перед открытием соединения к следующему пулу.
    giveup_limit - Сколько раз пробовать подключиться к пулу, прежде чем перейти к следующему пулу. Ноль значит бесконечно. Имейте ввиду, что stak майнер не майнит пока нет соединения, поэтому компьютер будет простаивать.

    Контроль вывода:
    Поскольку большинство использует постоянный вывод, он установлен по умолчанию. Это не оптимально, т.к. вы не увидите ошибок среди потока статистики производительности, поэтому есть внутренний монитор производительности, который является выжимкой данных вместо подробного отчета.
    Нажмите 'h' (хэшрейт), 'r' (результаты) или 'c' (соединение) для отчета.

    verbose_level -
    0 - Ничего не выводить.
    1 - Печать аннотации, событий соединения и разъединения
    2 - 1 + новые задания если сложность отличается от предыдущего задания.
    3 - 1 + все новые задания, результат принятия решения пулом.
    4 - 3 + автоматический отчет по хэшрейту

    print_motd - показывать сообщения от оператора пула в отчете по хэшрейту.

    h_print_time - Как часто, в секундах, печатать отчет, используется только если verbose_level = 4.

    aes_override - Некоторые VM (виртуальные машины) некорректно оповещают о поддержке AES. Вы можете установить данное значение в true для принудительного использования AES, установить false для отключения AES или null для автоматического выбора использования AES майнером
    Внимание: установка значения в true на CPU, который не поддерживает AES приведет к аварийной остановке работы майнера.

    use_slow_memory
    - режим работы с медленной памятью
    always - Даже не пытаться использовать large pages. Всегда использовать режим медленной памяти.
    warn - Попытаться использовать large pages, но использовать медленную память если не получится.
    no_mlck - Относится только к Linux, где возможно использовать large pages без блокировки памяти. Никогда не использовать медленную память, но также не будет пытаться блокировать память.
    never - Если не получится выделить large pages, печатаем ошибку и завершаем работу.
    Large pages должны быть корректно настроены в ОС. Это может показаться сложным, но оно того стоит - вы получите около 20% прироста производительности. Режим медленной памяти - это запасной вариант, вы не получите заоблачных результатов. По умолчанию майнер попытается выделить непрерывные страницы памяти. Это означает что вам необходимо запускать его с повышенными привилегиями ("Run As Administrator") в Windows.
    Для включения необходимо отредактировать групповые политики:
    1. Меню Пуск, нажмите Выполнить, введите gpedit.msc.
    2. В консоли Local Group Policy Editor раскройте Computer Configuration, а затем Windows Settings.
    3. Раскройте Security Settings, затем Local Policies.
    4. Выбирите User Rights Assignment папку.
    5. Политики будут отображены в панели подробностей.
    6. Двойной-клик Lock pages in memory.
    7. Local Security Setting – Lock pages in memory в диалоговом окне, кликните Add User or Group.
    8. Добавьте пользователя, от которого будете запускать майнер.
    9. Перезагрузите для применения
    GPedit.PNG
    Windows, как правило, сильно фрагментирует память. Если у вас в системе 4-8GB оперативной памяти, вам возможно необходимо отключить все приложения в автозагрузке и перезагрузить, для того чтобы освободить достаточно большой объем непрерывной памяти.

    В Linux для включения поддержки "sudo sysctl -w vm.nr_hugepages=128" и увеличить ulimit -l. Чтобы сделать это добавьте строки в /etc/security/limits.conf:
    "* soft memlock 262144"
    "* hard memlock 262144"
    Можно получить тот же результат в Windows-стиле, запустить от администратора, но это не рекомендуется по причинам безопасности.
    Memory locking означает, что ядро не будет сбрасывать эту память на диск (в swap)

    Если вам необходима реальная безопасность, убедитесь что tls_secure_algo включен (иначе MITM атака может снизить уровень шифрования до DES и MD5), и проверяйте отпечаток сервера по доверенным каналам.

    tls_secure_algo - использовать только безопасные алгоритмы.

    daemon_mode - фоновый режим

    flush_stdout - контроль буферизованного вывода. Установите значение в true для сброса буфера после каждой строчки вывода, чтобы они могли быть прочитаны мгновенно, например при вызове через конвейер.

    output_file - путь к файлу лога

    httpd_port - встроенный веб-сервер. Порты ниже 1024 в Linux потребуют прав root. 0, выключает сервер.

    http_login - логин для подключения к веб-серверу. Пустой отключает аутентификацию
    http_pass - пароль.

    prefer_ipv4 - IPv6 приоритет. Если хост поддерживает IPv4 и IPv6, который выбрать? Эта настройка потребуется только в 2020-х. Не беспокойтесь об этом сейчас, оставьте true.

    CPU.TXT

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

    low_power_mode - Значение может быть булево (true/false), или число от 1 до 5. Когда true, будет использован двойной кеш и удвоена эфективность одного потока. Будет меньшее потребление энергии (т.к. работает меньше ядер), но также в этом режиме выдаст около 80-85% от максимально возможной производительности. Когда установлено число N больше 1, кеши будут увеличены в N раз для одного потока.

    no_prefetch - Некоторые системы могут получить прирост до 5%, но иногда может это может ухудшить результат или никак не влиять.

    affine_to_cpu - Привязка потока к ядру. Может быть false или номером CPU ядра. Заметьте, что на системах с гипертрейдингом будет лучше назначить поток на физическое ядро. В Windows это обычно четные или не четные ядра. Для Linux это обычно первая половина, так для 4 физических ядер вы должны выбрать 0-3.

    Скриншоты:
    xmr-stak_intro.PNG
    Отчеты:
    xmr-stak_reports.PNG

    XMRIG

    Xmrig основан на cpuminer-multi, но с версии 1.0 переписан с ноля на С++. Имеет цветной консольный интерфейс. Донат указывается в настройках, но не меньше 1%, по умолчанию 5%.
    Автоматически настраивает параметры потоков. Настройка xmrig проще, лучше подойдет новичкам. Фактически все что требуется это указать реквизиты пула и установить нагрузку на процессор в процентах.
    По производительности не уступает xmr-stak (нет принципиального отличия, все сводится к частным случаям). Официальная поддержка Windows из коробки. Есть 64 и 32 битные версии.

    Скачать. Также есть отдельные версии майнера для видеокарт.

    Настройка
    Настраивается в файле config.json. Выглядит примерно так:
    algo - алгоритм cryptonight (по умолчанию) или cryptonight-lite (для aeon)

    av - варианты алгоритма, 0 авто выбор
    av=1 Для процессоров с поддержкой AES.
    av=2 Тоже как и 1 плюс удвоенный кеш.
    av=3 Программная реализация AES.
    av=4 Тоже как и 3 плюс удвоенный кеш..

    Совместно с --safe параметром вы не сможете выбрать вариант AES, если ваш процессор не поддерживает AES-NI, в этом случае будет выбран вариант с программным AES.

    background - фоновый режим

    colors - цветной вывод

    cpu-affinity - привязка к ядрам CPU, маска "0x3" для 0 и 1

    Принцип схож с маской подсети.
    Например есть 6 ядер, мы хотим привязаться к первым 4.
    ядра: 0-1-2-3-4-5
    маска: 1-1-1-1-0-0
    Маска задается числом в шестнадцатеричной(HEX) форме.
    В нашем примере необходимо перевести двоичное 111100 в шестнадцатеричный вид.
    111100=3C и записывается в конфиг в виде "0x3C"
    Для тех кто далек от систем счисления чтобы перевести одно число в другое достаточно воспользоваться калькулятором с расширенными возможностями. Например калькулятором windows (7+). Переводим его в программерский режим Alt+3, выбираем двоичный режим BIN, вводим необходимую нам маску, к каким ядрам привязаться, а затем просто переключаем в шестнадцатеричный режим HEX и получаем искомое число. Добавляем перед числом "0x" и записываем в конфиг.
    calc.PNG
    cpu-priority - приоритет процесса (0 простаивать, 2 средний 5 высший)

    donate-level - уровень пожертвований разработчикам, минимум 1%

    log-file - записать весь вывод в файл, например: "c:/some/path/xmrig.log"

    max-cpu-usage - максимальная нагрузка на процессор в автоматическом режиме, чаще всего ограничения наступают из-за размера кеша нежели от этой опции.

    print-time - вывод хэшрейта каждые N секунд

    retries - число попыток подключения прежде чем переключится на резервный пул.

    retry-pause - пауза между попытками (секунды)

    safe - true для безопасной настройки потоков и av параметров для текущего CPU. Ошибочные ручные настройки будут приведены к оптимальным.

    threads - число потоков майнера устанавливаемое вручную. Совместно с параметром --safe это число может быть автоматически уменьшено для достижения оптимального числа потоков.

    url - URL пула, порт (необязательно, зависит от пула)

    user - адрес кошелька (иногда логин на пуле)

    pass - идентификатор майнера, чтобы отличить один от другого в статистике пула (пароль если пул с регистрацией)

    keepalive - отправка специальных пакетов, чтобы предотвратить ложные таймауты (также необходима поддержка со стороны пула)

    nicehash - поддержка nicehash/xmrig-proxy

    api - параметры доступа к API. Если вы не знаете, что такое API, то оно вам не надо, а если знаете, подробности тут

    port - порт для API.

    access-token - ключ доступа к API

    worker-id - идентификатор "шахтёра" API

    Скриншоты:
    xmrig_intro.PNG

    Полезные ссылки:
    С чего начать - вводная статья о Monero
    Что такое Monero? - обзорная подробная статья о Monero
    Производительность и тесты на сайте CPU, GPU и в мире.
    Список пулов и их параметров.
    Центр управления майнингом XMRigCC
    Использование майнера Claymore.
    Ветки форума по Xmrig и Xmr-stak.

    Руководство пользователя кошелька Monero GUI Linux
    Руководство пользователя кошелька Monero GUI Windows
    Собираем майнер самостоятельно (англ)

    Автор:
    MoneroRus (@MoneroRus)
    Редактирование:
    Mr. Pickles (@v1docq47)
     
    #1 MoneroRus, 10 сен 2017
    Последнее редактирование: 20 мар 2018
    Irishka и TheFuzzStone нравится это.
  • О нас

    Наш сайт является одним из уникальных мест, где русскоязычное сообщество Monero может свободно общаться на темы, связанные с этой криптовалютой. Мы стараемся публиковать полезные мануалы и статьи (как собственные, так и переводы с английского) о криптовалюте Monero. Если вы хорошо владеете английским (или можете писать собственные статьи/мануалы) и хотите помочь в переводах и общем развитии Monero для русскоязычной аудитории - свяжитесь с одним из администраторов.