Статьи

Решение проблем с доступом к памяти старых видеокарт при майнинге в Linux

Прапорщик приказывает солдату: Товарищ солдат! Вот эту гору досок выкрасить и выбросить!

Солдат: Товарищ прапорщик, а зачем их выбрасывать? 

Прапорщик: А зачем нам крашеные доски?

Солдат: Так зачем же их тогда красить?

Прапорщик: Так ведь краску куда-то надо девать!

Иногда при запуске майнинга на относительно старых видеокартах в операционных системах с ядром linux, например, xubuntu, возникает ошибка, проявляющаяся сообщением о нехватке видеопамяти при запуске программы-майнера.

Например, майнер xmrig в подобном случае выдает следующую информацию об ошибке:

opencl error CL_OUT_OF_HOST_MEMORY when calling clCreateCommandQueueWithProperties

opencl thread #0 failed with error CL_OUT_OF_HOST_MEMORY

opencl thread #0 self-test failed

Segmentation fault

Анадогичная проблема проявляется и другими ошибками, например, OpenCL open error -6 (CL_OUT_OF_HOST_MEMORY), Couldn’t create OpenCL command queue (error: -6), OpenCL shutdown complete, initialize_ocl returned error, OCL context null и т.д.

Обычно такая проблема “лечится” путем добавления в скрипт запуска майнера переменных, обеспечивающих доступ ко всему массиву VRAM:

export GPU_FORCE_64BIT_PTR=1

export GPU_USE_SYNC_OBJECTS=1

export GPU_MAX_ALLOC_PERCENT=100

export GPU_SINGLE_ALLOC_PERCENT=100

export GPU_MAX_HEAP_SIZE=100

К сожалению, в некоторых случаях манипуляция, заключающаяся в установке значений GPU_FORCE_64BIT_PTR=1, GPU_USE_SYNC_OBJECTS=1,, GPU_MAX_ALLOC_PERCENT=100, GPU_SINGLE_ALLOC_PERCENT=100 и GPU_MAX_HEAP_SIZE=100, оказывается бесполезной.

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

Что делать, если не помогает добавление в командную строку переменных, конфигурирующих работу драйвера amd в Linux?

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

Для этого можно использовать программы, выдающую информацию о состоянии имеющихся OpenCL устройств и платформ. Одной из таких программ является clinfo. При ее запуске можно получить более подробную информацию о памяти видеокарты, в том числе увидеть некоторые ошибки взаимодействия системы с hardware.

Если утилита не установлена в системе, то ее можно инсталлировать командами:

sudo apt update

sudo apt install ocl-icd-opencl-dev clinfo

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

sudo clinfo

В массиве информации, выдаваемой clinfo нужно отыскать строку Global free memory (AMD). При отсутствии проблем с доступом к VRAM в ней не должно быть ошибок.

При наличии нерешенных проблем с доступом к памяти видеокарт в этой строке появляется сообщение об ошибке со своим кодом, например, error -33:

Global memory size 2118946816 (1.973GiB)

Global free memory (AMD) <printDeviceInfo:68: get number of CL_DEVICE_GLOBAL_FREE_MEMORY_AMD : error -33>

Нормально работающая видеокарта при этом показывает наличие свободной памяти даже при майнинге криптовалюты.

Например, при майнинге монет ERGO (алгоритм autolykos2) на видеокарте AMD Radeon R9 290 (4 GB VRAM), по данным clinfo имеется целых 1.75GB свободной памяти или 1.637GiB (исходя из соотношения 1 ГБ = 1.073741824 ГиБ):

Global free memory (AMD) 1716660 (1.637GiB)

Для справки:

Связь величин измерения объема информации в GiB и GB:



Некоторая информация о соотношении GiB/GB можно прочитать в статье О плоттинге (plotting) при майнинге (фарминге) CHIA и подобных криптовалют.

Онлайн-калькуляторы перевода величины GiB в GB и наоборот есть в интернете, например, сервис gbmb.





Проблема, приводящая к появлению ошибки get number of CL_DEVICE_GLOBAL_FREE_MEMORY_AMD : error -33 обычно связана с некорректной работой AMDGPU-Pro driver и использующейся версии ядра операционной системы со старыми видеокартами.

Например, драйвер AMDGPU-PRO версии amdgpu-pro-17.40-514569 поддерживает версию OpenCL 1.2, видеокарты поколения AMD Radeon R7 450, а также им подобные поддерживают на аппаратном уровне OpenCL 1.2. Тем не менее, операционная система xubuntu 16.04 с ядром 4.15.0-142-generic некорректно работает с этими видеокартами в такой конфигурации. При этом видеокарты AMD Radeon R9 290 (поддерживают OpenCL 2.0) в этой же конфигурации прекрасно работают, выдавая при майнинге на алгоритме autolykos2 (монета ERG) более 50 MH/s. Установка более старой версии драйверов 17.40-492261 плюс AMD SDK 3.0.130.136-GA-linux64 с GitHub проблемы не решает. Откат на более старое ядро системы, например, версии 4.10.0-28, полная переустановка драйверов может исправить ситуацию.

Старое ядро можно установить командой

sudo apt-get install linux-image-4.10.0-28-generic linux-headers-4.10.0-28-generic

Загрузиться в него можно штатными средствами или с помощью программы Grub Customizer.

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

Иногда одна и та же конфигурация операционной системы и драйверов прекрасно работает на одном железе и отказывается работать на другом. В этом случае стоит задуматься о старой военной шутке, говорящей, что нужно покрасить ненужную вещь в зеленый цвет, а потом выбросить…

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

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

English English Русский Русский