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

Как побороть ошибку failed to allocate RandomX dataset using 1GB pages?

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

Можно получить дополнительный прирост хешрейта (на несколько процентов), если задействовать 1GB страницы памяти. Эта функция доступна на практически любом современном процессоре в операционной системе на ядре Linux (включая ubuntu/HiveOS).

Для использования одногигабайтных страниц памяти на компьютере должно быть установлено достаточное количество оперативной памяти (3GB+ RAM для 1GB страницы/node), процессор должен поддерживать работу с 1GB pages.

Как узнать, поддерживаются ли 1GB страницы памяти процессором?

Для работы с обычными, 2MB страницами памяти, CPU использует набор инструкций (флаг) PSE cpuinfo, а для 1GB страниц — PDPE1GB.

Флаги, поддерживаемые процессором, можно изучить по команде

grep pdpe1gb /proc/cpuinfo | uniq

или

lscpu | grep -w "pse\|pdpe1gb"

Пример вывода доступных флагов для процессора Intel i7-8700K (при использовании команды lscpu флаги, нужные для майнинга на CPU выделяются красным):

flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc art arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc cpuid aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch cpuid_fault invpcid_single ssbd ibrs ibpb stibp tpr_shadow vnmi flexpriority ept vpid ept_ad fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid mpx rdseed adx smap clflushopt intel_pt xsaveopt xsavec xgetbv1 xsaves dtherm ida arat pln pts hwp hwp_notify hwp_act_window hwp_epp md_clear flush_l1d arch_capabilities

Для успешной работы больших и 1 GB страниц памяти в перечисленном наборе должны быть активны флаги pse и pdpe1gb соответственно.

Для изучения параметров операционной системы относительно поддержки больших страниц памяти стоит инсталлировать утилиту hugeadm:

sudo apt install libhugetlbfs-bin

По команде

hugeadm --pool-list

отображается информация относительно поддержки больших страниц памяти и их размере.

Поддержка больших страниц памяти (2 MB) включена, если утилита hugeadm показывает размер пула 2097152, а 1 GB — 1073741824. При одновременной поддержке и 2 MB и 1 GB страниц памяти отображаются обе строки, например, так:

hugeadm --pool-list
Size Minimum Current Maximum Default
2097152 5 5 5 *
1073741824 3 3 3

Команда

ls -Al /sys/devices/system/node/node*/hugepages/*1048*/

отображает три файла с атрибутами доступа:

rw-r--r-- root root nr_hugepages
r--r--r-- root root free_hugepages
r--r--r-- root root surplus_hugepages

где файл free_hugepages с правами r/w для root связан с поддержкой 1GB hugepages для NUMA node (узел Non-Unifrom memory access архитектуры для работы CPU с памятью).

Диагностику также можно провести, запустив майнинг в программе xmrig.

При работающей поддержке 1GB PAGES в одноименной строке появится значение supported:

В ОС семейства Windows такая опция недоступна, поэтому в строке 1GB PAGES появится значение unavailable.

Как включить поддержку 1GB страниц памяти в Linux?

Для включения 1ГБ-ускорения в скрипт запуска майнера добавляется опция randomx-1gb-pages.

Пример скрипта для запуска майнинга на алгоритме RandomXmonero на Nicehash:

sudo ./xmrig -a randomx -o randomxmonero.eu.nicehash.com:3380 -u account.worker -p x -k --asm=intel --cpu-priority 0 -t 5 --keepalive --randomx-mode=fast --nicehash --randomx-1gb-pages

Включение параметра randomx-1gb-pages увеличивает хешрейт на 1-3%.

Например, процессор Intel i7-8700K 3.70GHz при использовании 5 потоков без использования гигабайтных страниц памяти на алгоритме randomx выдает примерно 3800-3860 H/s, а при включении гигабайтных страниц памяти — порядка 3900-3960 H/s:

Иногда при попытке задействовать гигабайтные страницы памяти возникает проблема, проявляющаяся в виде ошибки «failed to allocate RandomX dataset using 1GB pages»:

Она свидетельствует о том, что поддержка одногигабайтных страниц памяти не активирована.

Как избавиться от ошибки failed to allocate RandomX dataset using 1GB pages?

Для включения поддержки randomx-1gb-pages в ОС Linux нужно прописать в Grub (файл /etc/default/grub) значения hugepagesz=1gb hugepages=3.

Числовое значение параметра hugepages=X обозначает объем памяти, выделенный для 1 ГБ страниц памяти.

3 GB RAM — это минимальное значение, необходимое для работы xmrig, на практике лучше использовать 5-6 GB для одной NUMA-ноды.

Для конфигурирования параметров запуска системы используем текстовый редактор с правами sudo, например:

sudo nano /etc/default/grub

затем прописываем

GRUB_CMDLINE_LINUX="hugepagesz=1GB hugepages=3"

или, лучше

GRUB_CMDLINE_LINUX="hugepagesz=1GB hugepages=6"

Сохраняем конфигурационный файл Grub и применяем сделанные изменения:

Crrl+O Enter
Ctrl+X
sudo update-grub
sudo reboot

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

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

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