Статьи

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

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

В ОС семейства Linux с ядром версии 4.17 и выше есть возможность управления разгоном видеокарт AMD встроенными в драйвер amdgpu средствами (технология OverDrive). К сожалению, эта функция по умолчанию отключена, но, как говорится, «стучите в двери, и Вам откроют…». Большим плюсом технологии OverDrive является поддержка видеокарт с ядром Navi (RX5xxx). Пока это единственная возможность полноценно работать с параметрами разгона и даунвольтинга с такими картами в Linux.

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

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

Например, поддержка опций оверклокинга в видеокартах с ядром Hawaii появилась только в ядре 4.20 с драйверами amdgpu. Отсутствие такой возможности в более ранних ядрах с успехом решалось перепрошивкой BIOS, но зачем делать лишние телодвижения, если все уже продумано и встроено в ядро? Кроме того, даже при прошивке всех значений оверклокинга и даунвольтинга в Биос карточки, лучше продублировать управление и контроль за ее состоянием на уровне операционной системы.

Проверить версию установленного в системе ядра можно командой:

uname -a

Просмотреть информацию о том, какие вообще версии ядра сохранены в системе можно командой:

sudo dpkg -l | grep linux-headers | grep ii | awk '{print $3}'

Примеры отображения информации о версии ядра по команде uname -a:

В ОС xubuntu 16.04 с ядром 4.15.0-72 (OverDrive не поддерживается):

В HiveOS  на начало 2020 года используется ядро 5.0.21:

В RaveOS в январе 2020 года используется ядро 5.2.5:

Как включить управление вольтажом, частотами ядра и памяти в ОС типа *Ubuntu?

Для полноценного управления и контроля за состоянием видеокарт АМД Polaris и Vega в операционках на базе дистрибутива Убунту с драйверами amdgpu нужно включить поддержку технологии Radeon OverDrive. Для видеокарт Navi поддержка OverDrive включена в Linux с kernel 5.5  и выше.

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

С точки зрения теории для включения OverDrive изменяют параметры ppfeaturemask в amdgpu драйвере. Благодаря этому появится полный контроль над состоянием видеокарт производства АМД, так как включатся следующие функции:

  • --showclkvolt;
  • --showvoltagerange;
  • --showvc;
  • --showsclkrange;
  • --showmclkrange;
  • --setslevel;
  • --setmlevel;
  • --setoverdrive;
  • --setpoweroverdrive;
  • --resetpoweroverdrive;
  • --setvc;
  • --setsrange;
  • --setmrange

На практике с этой целью в загрузчике ядра /etc/default/grub в строке GRUB_CMDLINE_LINUX_DEFAULT нужно прописать:

amdgpu.ppfeaturemask=0xfffd7fff

либо

amdgpu.ppfeaturemask=0xffffffff

Затем нужно не забыть обновить загрузчик ядра командой:

sudo update-grub

и перезагрузиться.

Для справки:

По умолчанию в драйверах используется значение 0xfffd3fff. Установка значения 0xffffffff изменяет следующие опции:

  • включается режим OverDrive;
  • включается патч gfxoff для уменьшения потребления энергии (функция power-saving);
  • включается режим энергосбережения Stutter при работе на низких p-state.

При установке значения 0xfffd7fff включается только режим OverDrive.

Установка значения 0xffffffff на видеокартах RX 470/570 может привести к появлению артефактов, поэтому для них лучше использовать режим 0xfffd7fff.

Затем нужно найти в системе файл, в котором прописаны частоты и вольтаж видеокарты. Это делается командой (например, для видеокарты 0):

readlink -f /sys/class/drm/card0/device

Исходя из информации на картинке, искомый файл находится по пути:

/sys/devices/pci0000:00/0000:00:1c.4/0000:0d:00.0

В этой директории имеется файл pp_od_clk_voltage, где содержится информация о состояниях P-state ядра/памяти и соответствующих им вольтажам:

OD_SCLK:

0: 300MHz 750mV

1: 600MHz 769mV

2: 900MHz 887mV

3: 1145MHz 1100mV

4: 1215MHz 1181mV

5: 1257MHz 1150mV

6: 1300MHz 1150mV

7: 1411MHz 1150mV

OD_MCLK:

0: 300MHz 750mV

1: 1000MHz 800mV

2: 1750MHz 950mV

OD_RANGE:

SCLK: 300MHz 2000MHz

MCLK: 300MHz 2250MHz

VDDC: 750mV 1200mV

Если в системе включена интегрированная в процессор видеокарта (обычно это нулевая или первая карта), то для  нее файла pp_od_clk_voltage создаваться не будет.

В Linux можно менять значения P-state для ядра и VRAM аналогично разгону в Windows с помощью OverdriveNTool. Для ручного изменения параметров разгона нужно сначала выполнить команду:

sudo echo "manual" > /sys/class/drm/card0/device/power_dpm_force_performance_level

Для изменения P-state для ядра и VRAM используют команду вида (в данном случае для изменения частоты и напряжения в P-state 7):

sudo sh -c "echo 's 7 1140 890' > /sys/devices/pci0000:00/0000:00:02.0/pp_od_clk_voltage"

Здесь значение «s» изменяет параметры ядра на седьмой P-state, 1140 – частота ядра в MHz, 890 – его вольтаж в mV.

В команде нужно прописать свой путь к файлу pp_od_clk_voltage.

Для изменения частоты и вольтажа видеопамяти используют команду:

sudo sh -c "echo 'm 2 2065 950' > /sys/devices/pci0000:00/0000:00:01.0/0000:01:00.0/pp_od_clk_voltage"

Здесь 2 – это второй стейт памяти, 2065 – частота в мегагерцах, 1150 –напряжение на контроллере памяти в мВ.

Для проверки внесения изменений выполняют:

cat /sys/devices/pci0000:00/0000:00:01.0/0000:01:00.0/pp_od_clk_voltage

команду и проверяют содержимое файла pp_od_clk_voltage с вольтажом и частотами.

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

echo "manual" > /sys/class/drm/card0/device/power_dpm_force_performance_level

Если все значения сохранены и проверены, то для их применения применяют команду:

sudo sh -c "echo 'c' > /sys/devices/pci0000:00/0000:00:01.0/0000:01:00.0/pp_od_clk_voltage"

Для автоматического применения этих команд после перезагрузки можно использовать скрипт, например, под названием overclock в директории /usr/bin/ или прописывать эти команды в начало скрипта майнера.

В скрипт вписывают указанные выше команды:

#!/bin/sh

sudo sh -c "echo 's 7 1450 1150' > /sys/devices/pci0000:00/0000:00:01.0/0000:01:00.0/pp_od_clk_voltage"

sudo sh -c "echo 'm 2 2065 950' > /sys/devices/pci0000:00/0000:00:01.0/0000:01:00.0/pp_od_clk_voltage"

sudo sh -c "echo 'c' > /sys/devices/pci0000:00/0000:00:01.0/0000:01:00.0/pp_od_clk_voltage"

Затем в папке /etc/systemd/system создают файл с расширением .service, например, overclock.service с таким содержимым:

[Unit]

Description=Change GPU core and memory clocks

[Service]

Type=oneshot

ExecStart=/usr/bin/overclock

RemainAfterExit=yes

[Install]

WantedBy=multi-user.target

Потом выполняют команду:

sudo systemctl enable overclock.service

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

Работоспособность автозагрузки скрипта можно проверить после перезагрузки командой:

cat /sys/devices/pci0000:00/0000:00:01.0/0000:01:00.0/pp_od_clk_voltage

Аналогичные операции можно сделать более простым путем с помощью утилит wolfamdctrl, AMDCOVC, или amdgpu-clocks, но это тема других статей.

 

6 комментариев

  • Павел

    Скажите, на xubuntu 18.04 с каким ядром и версией драйверов будет нормально работать регулировка частоты и вольтажа в майнере и 6 видеокарт?

  • cryptoprofi

    Как правило, наилучшие результаты показывает последняя официальная версия ядра. На практике результаты могут отличаться из-за различий в используемом железе, настройках системы. Видеокарты AMD ведут себя довольно капризно, поэтому иногда приходиться долго искать для них приемлемую конфигурацию. Из-за этого я сейчас использую Linux только для старых АМД R9 290 с пониженным напряжением, прописанным в BIOS, четверки RX у меня сейчас работают на Windows 8.1 Embedded с драйверами от Robinhood, пока проблем с Ethereum нет, хотя скоро придется и их переводить на Linux. Тогда поделюсь своим опытом их настройки для получения стабильного даунвольтинга и разгона, сравнимого с восьмеркой.

  • cryptoprofi

    Павел, спасибо за комментарий. Если не затруднит, был был бы рад прочесть Ваш способ разгона и даунвольтинга. Было бы интересно сравнить достигнутое потребление по измерителю мощности на Винде и Лине. Заранее спасибо.

  • Павел

    Дайте телегу туда все изложу.
    Две недели отмучался, с начала выяснил как прошивать Поларисы, чтобы дайнвольт работал при правке биоса (если нет параметра оффсета), потом этот метод был признан черезчур узкоспециализированным под ethash и было решено даунволтить на уровне Ос. Если бы я тогда знал сколько это мучений наверно не связывался бы.

  • cryptoprofi

    Согласен с вами, я потому и отказался от Linux для RX-ов, потому что на Windows 8.1 все летает, настройки минимальны, жор карт тоже.

Leave a Reply

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

Arabic AR English EN French FR German DE Russian RU Spanish ES