Майнинг,  Статьи

Поддержка больших страниц памяти и ее влияние на майнинг

При майнинге криптовалюты Monero и ряда других монет на процессорах можно добиться серьезного увеличения хешрейта при включении поддержки адресации больших страниц памяти (huge pages в Linux или large pages в Windows).

Опция закрепления страниц в памяти отдает приоритет хранению данных приложения в быстродействующей оперативной физической памяти. Благодаря этому сокращается количество операций постраничного разбиения данных и количество операций запись/чтение в виртуальной памяти (более медленной) на диске (в файл подкачки).

На алгоритме RandomX при майнинге Monero (XMR) закрепление страниц в памяти (huge/large pages) дает увеличение хешрейта порядка 30%, а в некоторых случаях и больше (50-60%).

Скриншот майнера xmrig с работающей адресацией huge pages в OS Windows:

Нужно понимать, что назначение всей свободной физической памяти одному или нескольким процессам может отобрать большую часть доступного ОЗУ в ущерб другим процессам.

В случае одновременного использования рига для майнинга на CPU и GPU это может спровоцировать замедление майнинга на видеокартах, отказы/зависания.

Для предотвращения проблем нужно верно расходовать ресурсы: не злоупотреблять большим количеством потоков майнинга на CPU (использовать один поток на каждые 2 Мб кеша L2), оставлять ресурсы для работы ОС и майнеров на GPU, периодически отслеживать производительность компьютера (например, в диспетчере задач).

.

В операционной системе Windows включение закрепления страниц в памяти делается довольно просто с помощью политики безопасности «Блокировка страниц в памяти».

В ОС типа Ubuntu для включения этой полезной опции нужно проделать ряд дополнительных телодвижений.

Зачем нужно включать поддержку huge pages в Ubuntu?

ОС Ubuntu заточена на экономное расходование ресурсов, а «пожирание» памяти майнером не является таковым. Поэтому для выделения майнеру ресурсов нужно «немного поработать напильником». Но это стоит затраченных усилий и времени.

Например, на древнем (2008 год) процессоре Xeon X3330 (2,6 ГГц), не умеющем вычислять по инструкциям AES, при майнинге Монеро на Random X хешрейт без huge pages равен 200-210 h/s (на двух потоках). При их включении скорость вычислений возрастает до порядка 270 h/s (выигрыш на 25-30%).

На более современных процессорах разница может быть еще более существенной.

Скриншот майнера xmrig, работающего без включения huge pages:

Рассмотрим подробнее, как проверить включена ли поддержка huge pages в Linux-подобных системах и как их задействовать для майнинга (на примере XUBUNTU 16.04).

Проверка ОС Ubuntu на предмет включения huge pages

Прежде всего, нужно проверить, имеется ли поддержка hugepages на уровне железа. Это делается с помощью команды:

cat /sys/kernel/mm/transparent_hugepage/enabled

В строке ответа системы в значении, заключенном в квадратные скобки, отображается наличие поддержки hugepages. Если высвечивается значение madvise, то в данной системе имеется поддержка huge pages . Если отображается значение [never], то данная система не имеет поддержки hugepages и стоит задуматься об апгрейде…

При наличии поддержки huge pages на аппаратном уровне нужно проверить, задействованы ли они и сколько страниц памяти зарезервировано. Для этого в терминале Ubuntu вводят команду:

sudo cat /proc/sys/vm/nr_hugepages

Эта команда показывает число страниц памяти, которые ядро системы (kernel) выделяет (резервирует) на нужды пользователя.

Скриншот терминала, отображающего информацию о включении и числе выделенных hugepages:

Для включения, а также изменения количества выделенной физической памяти на постоянной основе используется изменение параметров ядра Ubuntu через файл конфигурации sysctl.conf.

Включение поддержки адресации huge pages в Ubuntu

В версии xmrig 5.2.0 и выше есть возможность включения поддержки huge pages на лету, но это требует рут-привилегий для программы-майнера.

Эту же операции для текущей сессии (до перезагрузки системы) можно сделать (с привилегиями root) командой:

sysctl -w vm.nr_hugepages=1280, где 1280 – количество выделяемых больших страниц памяти.

Более разумно обеспечить работоспособность больших страниц памяти на этапе загрузки ядра с помощью конфигурационного файла sysctl.conf.

Это делается командой:

sudo echo "vm.nr_hugepages=1280" >> /etc/sysctl.conf $ sudo sysctl -p $ sudo reboot

где 1280 – это число зарезервированных страниц памяти.

Можно сделать аналогичную операцию с помощью утилиты nano и команды:

sudo nano /etc/sysctl.conf

В появившемся окне терминала нужно пролистать sysctl.conf до конца и вписать в него:

# enable huge/large pages for Monero mining

vm.nr_hugepages=1280

Затем нужно сохранить изменения (клавиши ctrl+O), нажать Enter, Ctrl+x и перезагрузить компьютер (sudo reboot).

Как подсчитать количество huge pages для выдления ядром системы Ubuntu?

Если зарезервировать слишком мало страниц, то майнер не будет работать в полную силу. Например, при резервировании 128 страниц xmrig показывает, что имеется всего 11% от необходимых 1168 страниц:

Исходя из информации в майнере, для его работы нужно 1168 страниц больших страниц памяти:

Майнер xmrig на RandomX с 1168 страницами памяти показывает вроде бы достаточное количество страниц, но все равно не использует их:

По рекомендациям разработчиков xmrig, для майнинга на алгоритмах типа RandomX нужно 1280 страниц на одну ноду NUMA и 128 страниц – для других алгоритмов.

Это совпадает с практикой, что видно на скрине майнера компьютера с выделенными 1280 hugepages:

Использование 1280 зарезервированных страниц означает, что в системе станет меньше на не менее 1280х2=2560 Мб доступной памяти (при стандартном размере страницы памяти в 2MB ).

Поэтому при ограниченном ОЗУ использование huge pages может привести к обратному эффекту – снижению хешрейта из-за нехватки физической памяти для нужд системы.

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *

English EN French FR German DE Russian RU Spanish ES