Майнинг

Разгон и даунвольтинг видеокарт AMD программами wolfamdctrl и amdmemorytweak в Ubuntu

Постепенное увеличение размера DAG у криптовалют на алгоритме Ethash сильно влияет на производительность видеокарт с малым объемом видеопамяти. Со второй половины 2020 года на видеокартах с объемом памяти 4 Гб можно будет майнить только на Linux-подобных системах. В отличие от Windows, настройка майнинга в таких системах еще не так подробно описана и разжевана, что усложняет настройку ригов обычными пользователями.

В данной статье рассматриваются способы разгона, даунвольтинга и работы с таймингами памяти видеокарт компании AMD в ОС типа Ubuntu программами wolfamdctrl/ohgodatool и amdmemorytweak.

Использование утилиты amdmemorytweak для тонкой настройки параметров работы с памятью видеокарт

Для увеличения хешрейта видеокарт amd желательно использовать утилиту amdmemorytweak, которая позволяет осуществлять тонкий тюнинг параметров памяти.

Ее можно самостоятельно скомпилировать из кода, взятого на GitHub следующими командами:

git clone https://github.com/Eliovp/amdmemorytweak

cd amdmemorytweak/linux

g++ AmdMemTweak.cpp -lpci -lresolv -o amdmemtweak

Исполняемый файл amdmemtweak gjzdbncz в директории amdmemorytweak/linux.

Для тюнинга видеокарт AMD RX4/5xx с памятью GDDR5 можно использовать такой скрипт для запуска amdmemorytweak:

#!/bin/bash

sleep 1

 sudo ./amdmemtweak --i 0,1,2,3,4 --REF 30

Установка параметра —REF 30 в скрипте/батнике запуска amdmemtweak эквивалентна использованию команды -rxboost 1 в Claymore Miner. Это увеличивает на несколько (3-5%) процентов хешрейт GPU фирмы AMD с памятью GDDR5 при майнинге на зависящих от памяти алгоритмах.

Для видеокарт AMD r9 290 с памятью Hynix работает скрипт с —REF 90:

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

Разгон и даунвольтинг видеокарт AMD по ядру и памяти с помощью утилиты wolfamdctrl

Для разгона, даунвольтинга и настройки скорости вращения вентиляторов видеокарт AMD применяют утилиту wolfamdctrl. Ее можно скачать с репозитория hiveos на Github.

Эта же программа под названием ohgodatool доступна здесь на Github или здесь (тоже Github).

wolfamdctrl/ohgodatool — это разработка программистки Kristy-Leigh Minehan, которая известна под псевдонимами ohgodagirl и wolf0. Она также создала известную всем «таблетку» для памяти gddr5x, серьезно повышающую хешрейт на GTX1080/1080Ti на Ethash.

Ohgodatool и wolfamdctrl первой версии – это одинаковые программы с небольшими отличиями в зависимости от версии.

Для настройки разгона/даунвольтинга с помощью утилиты wolfamdctrl нужно изучить заводские states (состояния) и соответствующие им значения вольтажа на установленных в риге видеокартах AMD.

Затем нужно будет подобрать и установить параметры разгона и downvolting в скрипте для запуска wolfamdctrl.

Изучить информацию о предустановках GPU можно встроенными в утилиту командами.

Команды, использующиеся в программе wolfamdctrl

При запуске программы wolfamdctrl v1.2.0 используют такой порядок команд:

sudo ./wolfamdctrl [-i номер_GPU | -f VBIOSFile] [Опции общего характера] [--core-state Номер_стейта] [--mem-state Номер_стейта] [--volt-state Номер_стейта] [Модифицированные опции для стейта]

Опции общего характера:

--set-fanspeed <в процентахt> - частота вращения вентиляторов видеокарты;

--set-tdp <W> - установка максимального теоретического тепловыделения (thermal design power), в ваттах. Показатель, связанный с максимальной рассеиваемой видеокартой мощностью и связанным с этим тепловыделением;

--set-tdc <W> - установка лимита thermal design consumption, в ваттах;

--set-max-power <W> - установка лимита максимальной потребляемой мощности, ватт;

--set-max-core-clock <Mhz> - лимит максимальной частоты ядра, МГц;

--set-max-mem-clock <Mhz> - лимит максимальной частоты памяти, МГц;

Опции, связанные с выбором состояния GPU (должны применяться до команд,, модифицирующих их значения):

--core-state <index> - состояние ядра;

--mem-state <index> - состояние памяти;

--volt-state <index> - состояние вольтажа (используется таблица со значениями для памяти и ядра) . Для памяти используется только первые два или три стейта, для ядра — вторая часть таблицы (данные о значениях voltage table entry, отображаемые по команде show-core).

Опции, модифицирующие числовые значения состояний видеокарты:

--mem-clock <Mhz> - частота памяти, МГц;

--core-clock <Mhz> - частота ядра, МГц;

--mem-vddc-idx <index> - модифицированный номер стейта, использующийся для установки вольтажа памяти (например, --mem-vddc-idx 1);

--core-vddc-idx <index>- модифицированный номер стейта для установки ближайшего желаемого вольтажа ядра (например, --core-vddc-idx 4);

--mvdd <mV> - напряжение на чипах памяти, мВ;

--vddci <mV> - напряжение на I/O bus между памятью и ядром, которое берется со слота PCI-Express (райзера), в мВ;

--core-vddc-off <mV> - изменение напряжения на ядре в мВ от штатного напряжения, соответствующего стейта (например, --core-vddc-off -96);

--vddc-gfx-off <mV> - изменение напряжения на памяти в мВ от штатного напряжения, соответствующего стейта (например, --vddc-gfx-off -96);

--vddc-table-set <mV> - принудительная установка значения напряжения на ядре (vddc) в мВ.

Опции для изучения состояния видеокарты (показывают выбранные states, если не выбран никакой, то все):

--show-mem – показывает частоты памяти;

--show-core – показывает частоты ядра;

--show-voltage – показывает вольтаж ядра;

--show-fanspeed – показывает частоту вращения вентиляторов видеокарты;

--show-temp – показывает температуру ядра.

При написании скрипта запуска wolfamdctrl нужно не забывать, что параметры core-state, mem-state и volt-state должны указываться в скрипте до модифицирующих их значений.

Анализ информации о предустановках вольтажа и частоты для разных states видеокарт AMD

Для проверки состояний памяти видеокарт в программе wolfamdctrl используют команду:

sudo ./wolfamdctrl -i 1 --show-mem

Цифра в «-i 1» обозначает номер тестирующейся карты (нумерация начинается с нуля).

Например, для видеокарты MSI RX462 программа показывает стейты памяти в таком виде:

Memory state 0:

VDDC: 800

VDDCI: 900

VDDC GFX offset: 0

MVDD: 1000

Memory clock: 300

Memory state 1:

VDDC: 850

VDDCI: 1000

VDDC GFX offset: 0

MVDD: 1000

Memory clock: 1750

Из этой информации в скрипте разгона/даунвольтинга нужно использовать номер максимального state по памяти (в данном случае Memory state 1), а также решить, как модифицировать вольтаж памяти VDDC, по умолчанию равный 850 мВ для максимальной производительности памяти, а также напряжение на шине I/O память-ядро VDDCI, равное 1000 мВ.

При разгоне/даунвольтинге значение VDDCI можно немного уменьшать для экономии электроэнергии (модифицируется в скрипте параметром vddci), а при разгоне памяти для увеличения стабильности можно немного увеличивать VDDC (параметр mvdd).

Штатные напряжения на ядре видеокарты можно посмотреть по команде:

sudo ./wolfamdctrl -i 1 --show-core

Она выдаст информацию такого вида:

DPM state 0:

VDDC: 800 (voltage table entry 0)

VDDC offset: 0

Core clock: 214

...

DPM state 5:

VDDC: 65286 (voltage table entry 11)

VDDC offset: 0

Core clock: 1147

DPM state 6:

VDDC: 65287 (voltage table entry 12)

VDDC offset: 0

Core clock: 1181

и так далее.

Для майнинга нужно выбрать DPM state с нужной частотй и выставлять для него напряжение параметром vddc-table-set. Так как видеокарта может сама переходить на более высокий стейт при большой нагрузке, то для всех стейтов выше выбранного нужно также установить нужное напряжение.

Чтобы узнать предустановки вольтажа для разных состояний видеокарты используют команду:

sudo ./wolfamdctrl -i 1 --show-voltage

Она выдаст информацию о Voltage state видеокарты (обычно их 14-15):

Voltage state 0:

VDD = 800

CACLow = 0

CACMid = 0

CACHigh = 0

Voltage state 1:

VDD = 850

CACLow = 0

CACMid = 0

CACHigh = 0

Voltage state 2:

VDD = 900

CACLow = 0

CACMid = 0

CACHigh = 0

Voltage state 3:

VDD = 950

CACLow = 0

CACMid = 0

CACHigh = 0

и так далее.

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

Настройка скрипта для запуска wolfamdctrl с нужными установками разгона и даунвольтинга

В скрипте запуска wolfamdctrl для каждой видеокарты проставляют нужные для майнинга Volt и Memory стейты, модернизированные для них частоты (mem-clock и core-clock), а также необходимые значения вольтажа для памяти (mvdd), контроллера памяти (vddci) и ядра видеокарты (vddc-table-set).

Нужно четко понимать, что установка/выбор (selection) опций core-state, volt-state и mem-state сама по себе не установит нужные значения разгона видеокарт. Эти состояния только дают возможность модифицировать числовые значения опцияими

 --mem-clock, --core-clock, --mvdd, --vddci и vddc-table-set.

Выпускаются видеокарты с тремя, а также с двумя стейтами памяти (0, 1, 2 и 0, 1 соответственно). Для майнинга Ethereum нужно проставлять в скрипт максимальную цифру состояния памяти (mem-state) и модифицировать соответствующие ей значения частоты (mem-clock).

Для выбранного уровня производительности памяти в script запуска вписывают числовое значение частоты памяти, например, так:

--mem-state 2 --mem-clock 2000

Выбор core-state привязывается к volt-state. Для разгона ядра на алгоритме Ethash используется частота порядка 1100-1167 МГц и напряжение 820-920 мВ (в зависимости от качества чипа).

Практическое использование скрипта для разгона и снижения потребления видеокарт AMD в wolfamdctrl

Пример скрипта wolfamdctrl v1.2.0 для разгона видеокарты AMD Radeon RX460 на 2 гигабайта для майнинга на алгоритме cn_saber:

#!/bin/sh

sleep 10

sudo ./wolfamdctrl -i 1 --set-fanspeed 55 --set-max-power 120 --core-state 7 --volt-state 7 --mem-state 1 --mem-clock 1750 --core-vddc-idx 9 --vddc-table-set 890 --core-clock 1140 --mvdd 850 --vddci 970

Для удобства анализа содержимого использующихся команд приведем информацию из файла pp_od_clk_voltage для этой карты:

OD_SCLK:

0: 214MHz 800mV

1: 481MHz 821mV

2: 766MHz 825mV

3: 1028MHz 900mV

4: 1111MHz 987mV

5: 1147MHz 1031mV

6: 1181MHz 1075mV

7: 1210MHz 1118mV

OD_MCLK:

0: 300MHz 800mV

1: 1750MHz 850mV

OD_RANGE:

SCLK: 214MHz 1800MHz

MCLK: 300MHz 2000MHz

VDDC: 800mV 1150mV

В приведенном для примера скрипте wolfamdctrl:

-i 1 – разгон и даунвольт применяются для первой карты (нулевая – это встроенная в процессор карта);
--set-fanspeed 55 — принудительная установка частоты вентиляторов на 55%;
--core-state 7 – используется третье состояние ядра с частотой, далее пониженной до 1140 МГц командой core-clock;
--volt-state 7 – используется третье состояние вольтажа карты;
--core-clock 1140 – устанавливается частота ядра 1140 MHz;
--core-vddc-idx 9 - модифицируется базовый вольтаж DPM state 7 на Voltage state 9 (65284 - это 900 мВ);
--vddc-table-set 890 – устанавливается значение вольтажа ядра в 890 мВ;
--mem-state 1 – устанавливается максимальный стейт 1 для памяти;
--mem-clock 1750 – устанавливается частота 1750 МГц для memory.
--mvdd 850 — устанавливается напряжение на памяти на 850 мВ;
--vddci 970 - устанавливается напряжение на шине между памятью и ядром на 970 мВ (вместо штатных 1000 при memory state 1).

Для каждой следующей видеокарты в скрипт добавляются такие же строки и соответствующий номер GPU в качестве аргумента для параметра –i.

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

Конечный скрипт в таком случае будет выглядеть так:

sudo ./wolfamdctrl -i 1 --set-fanspeed 55 --core-state 7 --volt-state 7 --mem-state 1 --mem-clock 1750 --core-vddc-idx 9 --vddc-table-set 890 --core-clock 1140 --mvdd 850 --vddci 950
sudo ./wolfamdctrl -i 1 --set-fanspeed 55 --core-state 6 --volt-state 6 --mem-state 1 --mem-clock 1750 --core-vddc-idx 9 --vddc-table-set 890 --core-clock 1140 --mvdd 850 --vddci 950
sudo ./wolfamdctrl -i 1 --set-fanspeed 55 --core-state 5 --volt-state 5 --mem-state 1 --mem-clock 1750 --core-vddc-idx 9 --vddc-table-set 890 --core-clock 1140 --mvdd 850 --vddci 950
sudo ./wolfamdctrl -i 1 --set-fanspeed 55 --core-state 4 --volt-state 4 --mem-state 1 --mem-clock 1750 --core-vddc-idx 9 --vddc-table-set 890 --core-clock 1140 --mvdd 850 --vddci 950

Проверка работоспособности разгона и даунвольтинга видеокарт АМД

Узнать текущие значения температуры, потребления памяти, частот ядра и памяти, скорость вращения вентиляторов, загрузку VRAM и GPU можно с помощью утилит rocm-smi и amdcovc.

rocm-smi устанавливают командами:

git clone https://github.com/RadeonOpenCompute/ROC-smi

cd ROC-smi

sudo apt install rocm-smi

Запускают утилиту в директории, где она находиться командой:

sudo ./rocm-smi

rocm-smi не будет отображать всей информации о состоянии видеокарт в случае отсутствия поддержки в системе технологии OverDrive. Вывод информации будет ограничен только температурой, частотами Core и Memory, а также частотами вентиляторов системы охлаждения видеокарт:

Вывод информации rocm-smi без включенного OverDrive:

Для полноценного контроля и управления видеокартами АМД в ядре Linux должна быть включена поддержка технологии OverDrive, реализуемая драйверами amdgpu. Если ее не включить, программа wolfamdctrl будет рисовать успешное применение настроек разгона и даунвольтинга, но на самом деле они применяться не будут (это можно проверить, замерив потребляемую мощность рига прибором или в программах rocm-smi и amdcovc).

Для включения технологии OverDrive в системах linux с ядром не ниже 4.17 редактируют загрузчик, выполняя команды:

sudo nano /etc/default/grub

затем в файл grub вносят правку:

GRUB_CMDLINE_LINUX_DEFAULT="amdgpu.ppfeaturemask=0xffffffff"

сохраняют изменения (CTRL+O, ввод, CTRL+X), обновляют загрузчик (sudo update-grub) и перезагружаются.

Вывод информации rocm-smi с включенным OverDrive и настройками разгона/даунвольтинга с помощью wolfamdctrl:

По команде:

rocm-smi --showvoltage

можно узнать напряжение на ядре видеокарты.

Проверить вольтаж на ядре видеокарты (и другие ее показатели) можно также с помощью программы программы amdcovc:

Проблемы, возникающие при использовании wolfamdctrl

Программу wolfamdctrl нужно запускать от имени админа с полным указанием в скрипте пути к исполняемому файлу.

В скрипте запуска wolfamdctrl нужно точно указывать и, соответственно, знать нумерациию GPU. Это особенно важно при включенной встроенной видеокарте или наличии других устройств, подключенных по PCI-E. Она сбивает привычную нумерацию и поэтому в скрипте wolfamdctrl должна использоваться последовательность, отличная от той, которая высвечивается в майнере.

При использовании программы wolfamdctrl на компьютере с работающей встроенной видеокартой вместе с GPU AMD может появится ошибка вида:

Error opening /sys/class/drm/card0/device/pp_table (are you root, and does it exist?)

В этом случае программа сообщает, что не может найти таблицу стейтов для видеокарты АМД под номером 0. Здесь нулевая видеокарта в системе существует – это intel-овская встройка, но она работает под своими драйверами и не имеет такой таблицы.

Номера видеокарт можно узнать командой:

ls -d /sys/class/drm/card[[:digit:]]/device/hwmon/hwmon? | sed 's/\/hwmon\/hwmon[0-9]*//g'

Она выдает информацию такого вида:

/sys/class/drm/card0/device 
/sys/class/drm/card2/device 
/sys/class/drm/card3/device 
/sys/class/drm/card4/device 
где 0, 2, 3, 4 - это номера дискретных видеокарт AMD, а пропущенная – это интегрированная видеокарта.

Для системы с одной интегрированной и одной дискретной картой выдача будет такой:

/sys/class/drm/card1/device

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

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

English EN French FR German DE Russian RU Spanish ES