Статьи

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

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

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

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

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

Например, поддержка опций оверклокинга в видеокартах с ядром 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.

Для этого используют команду (в данном случае для изменения частоты и напряжения в 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, но это тема других статей.

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

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

English EN French FR German DE Russian RU Spanish ES