Перейти к содержимому


Фотография

Управление частотами и напряжением RX470/480 в Linux

Linux

Сообщений в теме: 32

#1 Komonec

Komonec

    Пользователь

  • Пользователи
  • PipPip
  • 112 сообщений
  • ГородМосква

Отправлено 21 February 2017 - 11:20

Добрый день.

 

Подскажите, есть ли возможность управлять частотами и напряжением RX470/480 в Linux (Ubuntu, Debian)?

 

Знаю, что можно менять значения в /sys/class/drm/card*/device/

 

Например, чтобы изменить частоту чипа, нужно сделать echo 7 > /sys/class/drm/card0/device/pp_dpm_sclk

0: 300Mhz

1: 466Mhz
2: 644Mhz
3: 950Mhz
4: 1130Mhz
5: 1150Mhz
6: 1175Mhz
7: 1200Mhz*

 

Что не очень удобно. Как управлять напряжением - я не нашел.

Пробовал управлять частотами в майнер от Клаймора, но значения не менялись.


Сообщение отредактировал Komonec: 21 February 2017 - 12:01

  • 3

http://25btc.ru/ - мой блог о майнинге.

http://t.me/miningmafia - группа в телеграм.

http://strap.mining-mafia.ru/ - оптимизация таймингов для видеокарт RX470/480/570/580.


#2 Roiltoj8

Roiltoj8

    Пользователь

  • Пользователи
  • PipPip
  • 133 сообщений

Отправлено 21 February 2017 - 19:30

Рискую быть заминусованным, но отвечу.
Возможность есть (парсите pp_table и будет вам счастье), публично доступного, халявного тулза для этого нет.
  • 2

#3 r9380

r9380

    Пользователь

  • Пользователи
  • PipPip
  • 125 сообщений

Отправлено 22 February 2017 - 15:44

Добрый день.

 

Подскажите, есть ли возможность управлять частотами и напряжением RX470/480 в Linux (Ubuntu, Debian)?

 

Знаю, что можно менять значения в /sys/class/drm/card*/device/

 

Например, чтобы изменить частоту чипа, нужно сделать echo 7 > /sys/class/drm/card0/device/pp_dpm_sclk

0: 300Mhz

1: 466Mhz
2: 644Mhz
3: 950Mhz
4: 1130Mhz
5: 1150Mhz
6: 1175Mhz
7: 1200Mhz*

 

Что не очень удобно. Как управлять напряжением - я не нашел.

Пробовал управлять частотами в майнер от Клаймора, но значения не менялись.

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

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


  • 2

#4 Roiltoj8

Roiltoj8

    Пользователь

  • Пользователи
  • PipPip
  • 133 сообщений

Отправлено 22 February 2017 - 16:22

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

Весь функионал в дровах уже есть, через pp_table все прекрасно даунвольтится.
Единственное для чего в линуксе нужно шить биос это тайминги.
  • 1

#5 booz

booz

    Продвинутый пользователь

  • Пользователи
  • PipPipPip
  • 1036 сообщений

Отправлено 22 February 2017 - 16:29

есть пример рабочий? :)
  • 0

Обработка и изготовление комплектов проводов для блоков, бытовой и космической техники. До 1000шт/час. телеграм @OboozO


#6 arceny

arceny

    Пользователь

  • Пользователи
  • PipPip
  • 273 сообщений

Отправлено 22 February 2017 - 16:43

Вот из EthOS wolfamdctrl (бинарное что-то) для управления частотами.

# ./wolfamdctrl -h
wolfamdctrl v0.1.0
Usage: ./wolfamdctrl [-i GPUIdx] [-m Mode] [--core-state State index] [--mem-state State index] [Modification options]
Mode is either 'r' for reading, or 'w' for writing.
Modification options are only valid when using write mode:
	--mem-clock Memory Mhz
	--core-clock Core Mhz
When reading, the state index parameter is optional - omitting it will show all states.
Obviously, when using write mode, the core or memory (or both) state indices and a modification option are required.


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

У меня некоторое время назад даже при прошивке в биос напряжения в линуксе выставлялось свое, автоматическое. Вы замеры делали ваттметром?


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

А можно поделиться скриптом для вентиляторов?

Прикрепленные файлы

  • Прикрепленный файл  wolfamdctrl.zip   4.38К   163 Количество загрузок:

  • 1

#7 Roiltoj8

Roiltoj8

    Пользователь

  • Пользователи
  • PipPip
  • 133 сообщений

Отправлено 22 February 2017 - 17:34

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

Это да. Некоторое время назад (незнаю как сейчас ибо пофиг) линукс категорически игнорил значения напряжений в биосе.
Но он никогда не игнорил уровень dpm и напряжение на контроллере памяти забитое через pp_table.
Он вероятно не игнорит напряжения и на ядре, но мне в настоящий момент пофиг (ибо и через dpm все работает).

Вы замеры делали ваттметром?

Розеткой EDIMAX SP2101W. Имхо ваттметры отстой ибо ими статистику нормально не собрать.

PS: Заранее прошу меня извинить относительно орфографических и других ошибок. У меня день рождения и я сижу пьянствую.
  • 2

#8 arceny

arceny

    Пользователь

  • Пользователи
  • PipPip
  • 273 сообщений

Отправлено 22 February 2017 - 17:40

Это да. Некоторое время назад (незнаю как сейчас ибо пофиг) линукс категорически игнорил значения напряжений в биосе.
Но он никогда не игнорил уровень dpm и напряжение на контроллере памяти забитое через pp_table.

Можно пример скрипта, которым вы выставляете значения?


  • 0

#9 Roiltoj8

Roiltoj8

    Пользователь

  • Пользователи
  • PipPip
  • 133 сообщений

Отправлено 22 February 2017 - 17:45

Можно пример скрипта, которым вы выставляете значения?

Нельзя (в прошлый раз за это заминусили).
  • 0

#10 r9380

r9380

    Пользователь

  • Пользователи
  • PipPip
  • 125 сообщений

Отправлено 22 February 2017 - 19:30

А можно поделиться скриптом для вентиляторов?

http://pastebin.com/Npw6zD5x

запускать нужно из под рута, или юзера с разрешением писать в sysfs

максимальную/минимальную температуру и задержку можно прописать в начале скрипта, на максимальной температуре вентили на 100% на минимальной 0%, средние значения подбираются пропорционально, дефолтные значения 70/50 °С, 5 sec

один нюанс, заметил позже, не было времени переписывать:

скрипт пишет значение от 0 до 255 в файл /sys/class/drm/cardX/device/hwmon/hwmoX/pwm1

как бы логично предположить что  255 это вентили на 100%, а 0 - вентили отключены

но по факту вентили запускаются при значении ~60, если вам надо чтоб вентили включались скажем при 50 градусах, то минимальную температуру нужно указать чуть ниже

скрипт откатан на десятке ферм, за 5 месяцев "не было ни единого разрыва" )

 


  • 2

#11 r9380

r9380

    Пользователь

  • Пользователи
  • PipPip
  • 125 сообщений

Отправлено 22 February 2017 - 19:37

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

Игралься с pp_table 5 месяцев назад, у меня тогда не получилось (
Да и сейчас вот так сходу мануалов нагуглить не удалось. Может вы подскажите где искать?

разве что wolfamdctrl нашёл (сверху вот тоже скидывали), но это сторонний бинарник, по отзывам - есть нюансы, одни пишут что неработает даунвольт, другие что работает, как всегда нужно проверять самому) но хотелось бы напрямую, без непонятных скомпилированых прокладок
 


  • 0

#12 Roiltoj8

Roiltoj8

    Пользователь

  • Пользователи
  • PipPip
  • 133 сообщений

Отправлено 22 February 2017 - 21:58

Игралься с pp_table 5 месяцев назад, у меня тогда не получилось (
Да и сейчас вот так сходу мануалов нагуглить не удалось. Может вы подскажите где искать?

А их и нет и никогда не было.
Структуру powerplaytable можно посмотреть в исходниках polaris bios editor (она такая же).
Повторюсь.
Чтобы даунвольтить ядро можно его не даунвольтить, а загнать его на высоких частотах на низкий dpm.
Это работает на всех разумных версиях ядра linux в ubuntu 16.04.

Сообщение отредактировал Roiltoj8: 22 February 2017 - 23:24

  • 1

#13 r9380

r9380

    Пользователь

  • Пользователи
  • PipPip
  • 125 сообщений

Отправлено 23 February 2017 - 15:04

А их и нет и никогда не было.
Структуру powerplaytable можно посмотреть в исходниках polaris bios editor (она такая же).
Повторюсь.
Чтобы даунвольтить ядро можно его не даунвольтить, а загнать его на высоких частотах на низкий dpm.
Это работает на всех разумных версиях ядра linux в ubuntu 16.04.

 

Вообще наш разговор начался с вашей фразы:
 

 

Весь функионал в дровах уже есть, через pp_table все прекрасно даунвольтится.

 

Возможно мы по разному понимаем слово "прекрасно", но то что вы описали, как по мне ни разу не "прекрасно", а настоящий гемор и изврат.


Сообщение отредактировал r9380: 23 February 2017 - 15:05

  • 1

#14 Roiltoj8

Roiltoj8

    Пользователь

  • Пользователи
  • PipPip
  • 133 сообщений

Отправлено 23 February 2017 - 18:20

Возможно мы по разному понимаем слово "прекрасно", но то что вы описали, как по мне ни разу не "прекрасно", а настоящий гемор и изврат.

Для меня слово "прекрасно" означает "прекрасно работает для меня".
Правкой pp_table работает все, но это "гемор и изврат" и не везде.
Частично правкой pp_table и dpm тоже "гемор и изврат", но менее точно, существенно проще в реализации и везде.
При большой ферме затраты на "гемор и изврат" окупаются, ситуация малых ферм волнует потенциальных кодеров ровно никак
(за подобное утверждение меня тоже в прошлый раз заминусили).
Кому надо тот себе тул сделал (знаю пару человек кроме Wolf0).
  • 0

#15 kan5300

kan5300

    Новичок

  • Пользователи
  • Pip
  • 12 сообщений

Отправлено 05 March 2017 - 01:03

http://pastebin.com/Npw6zD5x

запускать нужно из под рута, или юзера с разрешением писать в sysfs

максимальную/минимальную температуру и задержку можно прописать в начале скрипта, на максимальной температуре вентили на 100% на минимальной 0%, средние значения подбираются пропорционально, дефолтные значения 70/50 °С, 5 sec

один нюанс, заметил позже, не было времени переписывать:

скрипт пишет значение от 0 до 255 в файл /sys/class/drm/cardX/device/hwmon/hwmoX/pwm1

как бы логично предположить что  255 это вентили на 100%, а 0 - вентили отключены

но по факту вентили запускаются при значении ~60, если вам надо чтоб вентили включались скажем при 50 градусах, то минимальную температуру нужно указать чуть ниже

скрипт откатан на десятке ферм, за 5 месяцев "не было ни единого разрыва" )

 

Спасибо за код. То что доктор прописал. Вот только не вник пока что в логику cpu_coef. Открылы cpuinfo и нашли там интел. Переписали дефолтное значение с нуля на единицу. В результате при попытке установить обороты скрипт лезет в каталог которого нет, а именно:

/sys/class/drm/card0/device/hwmon/hwmon1

Подозреваю что это особенность моей системы.

 

processor       : 0
vendor_id       : GenuineIntel
cpu family      : 15
model           : 4
model name      : Intel(R) Pentium(R) 4 CPU 2.80GHz
stepping        : 9
cpu MHz         : 350.000
cache size      : 1024 KB
physical id     : 0
siblings        : 1
core id         : 0
cpu cores       : 1
apicid          : 0
initial apicid  : 0
fpu             : yes
fpu_exception   : yes
cpuid level     : 5
wp              : yes
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 lm constant_tsc pebs bts nopl eagerfpu pni dtes64 monitor ds_cpl cid cx16 xtpr
bugs            :
bogomips        : 5599.89
clflush size    : 64
cache_alignment : 128
address sizes   : 36 bits physical, 48 bits virtual
power management:
2017-03-05 01:00:47
Traceback (most recent call last):
  File "./amd_gpu_fan_ctrl.py.py", line 70, in <module>
    gpu_temp = temp(num)
  File "./amd_gpu_fan_ctrl.py.py", line 31, in temp
    with open('/sys/class/drm/card{0}/device/hwmon/hwmon{1}/temp1_input'.format(card_num, card_num + cpu_coef)) as f:
FileNotFoundError: [Errno 2] No such file or directory: '/sys/class/drm/card0/device/hwmon/hwmon1/temp1_input'
 
During handling of the above exception, another exception occurred:
 
Traceback (most recent call last):
  File "./amd_gpu_fan_ctrl.py.py", line 75, in <module>
    pwm1_enable(num)
  File "./amd_gpu_fan_ctrl.py.py", line 60, in pwm1_enable
    with open('/sys/class/drm/card{0}/device/hwmon/hwmon{1}/pwm1_enable'.format(card_num, card_num + cpu_coef), 'w') as f:
FileNotFoundError: [Errno 2] No such file or directory: '/sys/class/drm/card0/device/hwmon/hwmon1/pwm1_enable'
 
Покажите cpuinfo и ls /sys/class/drm/card0/device/hwmon/ на системе где скрипт работает из коробки. Я закомментил строки 13-16 пока.
 
UPD: да и вот ещё, наткнулся на башевскую реализацию для amdgpu-pro: https://github.com/D...gpu-pro-fans.sh

Сообщение отредактировал kan5300: 05 March 2017 - 07:36

  • 1

#16 Roiltoj8

Roiltoj8

    Пользователь

  • Пользователи
  • PipPip
  • 133 сообщений

Отправлено 06 March 2017 - 02:16

Спасибо за код. То что доктор прописал. Вот только не вник пока что в логику cpu_coef. Открылы cpuinfo и нашли там интел. Переписали дефолтное значение с нуля на единицу. В результате при попытке установить обороты скрипт лезет в каталог которого нет, а именно:
/sys/class/drm/card0/device/hwmon/hwmon1
Подозреваю что это особенность моей системы.


И не только вашей (хотя у меня свой контроллер для вентилей). Это например с Asrock B85 с установленным G1840.
# ls -d /sys/class/drm/card?/device/hwmon/hwmon?
/sys/class/drm/card0/device/hwmon/hwmon0
/sys/class/drm/card1/device/hwmon/hwmon1
/sys/class/drm/card2/device/hwmon/hwmon2
/sys/class/drm/card3/device/hwmon/hwmon3
/sys/class/drm/card4/device/hwmon/hwmon4
/sys/class/drm/card5/device/hwmon/hwmon5

# ls /sys/class/hwmon
hwmon0  hwmon1  hwmon2  hwmon3  hwmon4  hwmon5  hwmon6

Вообще по хорошему номер hwmon может быть любым, то что он совпадает с номером карты или отличается от него на 1 это счасливое совпадение.
Более правильно видимо будет вычислить директорию hwmon как
hwmon_dir=glob.glob('/sys/class/drm/card'+card_id+'/device/hwmon/hwmon*')[0]
(карт с раздельным управлением вентиляторами я пока не видел, карты без вентилей нам не интересны).

Сообщение отредактировал Roiltoj8: 06 March 2017 - 02:19

  • 0

#17 alexanderbondikov

alexanderbondikov

    Новичок

  • Пользователи
  • Pip
  • 5 сообщений

Отправлено 06 March 2017 - 09:50

Добрый день, люди добрые!

 

По определенным причинам пришлось перенести карточки Sapphire RX 470 4G OC на комп с линухой. (Ubuntu 16.04, дрова amdgpu-pro 16.40).

Все завелось, скорости такие как под виндой без разгона.

Пробовал изменять параметры через /sys/class/drm/card0/device/, скорость не менялась.

Пробовал через wolfamdctrl, выставлял частоты как под виндой, но скорость падала до 7 Мх/с.

Осталась надежда на AMDOverdriveCtrl, но он выдает  ошибку "Fatal Error: Mismatch between the program and library build versions detected." Вот с ним сейчас и вожусь.

Подскажите как под линухой разогнать карточки до заветных цифр или хотя бы направьте, куда еще копать?

 

С большим к Вам уважением!


  • 0

#18 kan5300

kan5300

    Новичок

  • Пользователи
  • Pip
  • 12 сообщений

Отправлено 06 March 2017 - 22:18

Добрый день, люди добрые!

 

По определенным причинам пришлось перенести карточки Sapphire RX 470 4G OC на комп с линухой. (Ubuntu 16.04, дрова amdgpu-pro 16.40).

Все завелось, скорости такие как под виндой без разгона.

Пробовал изменять параметры через /sys/class/drm/card0/device/, скорость не менялась.

Пробовал через wolfamdctrl, выставлял частоты как под виндой, но скорость падала до 7 Мх/с.

Осталась надежда на AMDOverdriveCtrl, но он выдает  ошибку "Fatal Error: Mismatch between the program and library build versions detected." Вот с ним сейчас и вожусь.

Подскажите как под линухой разогнать карточки до заветных цифр или хотя бы направьте, куда еще копать?

 

С большим к Вам уважением!

sudo ./wolfamdctrl -i 0 -m r

в студию. И скрипт запуска майнера (или строку запуска с параметрами).


  • 0

#19 alexanderbondikov

alexanderbondikov

    Новичок

  • Пользователи
  • Pip
  • 5 сообщений

Отправлено 07 March 2017 - 07:36

sudo ./wolfamdctrl -i 0 -m r

в студию. И скрипт запуска майнера (или строку запуска с параметрами).

 

sudo ./wolfamdctrl -i 0 -m r

выдает пустую строчку.

 

 

майнер запускаю со стандартными параметрами через screen:

#!/bin/sh
screen -d -m -A -S eth sudo /usr/local/ethdcrminer/start.bash

содержимое start.bash

#!/bin/sh
cd /usr/local/ethdcrminer
./ethdcrminer64 -epool eth-ru.dwarfpool.com:8008 -ewal 0x11cbc537cf13445e7ce048b54551426903123125 -epsw x -eworker comp1

  • 0

#20 kan5300

kan5300

    Новичок

  • Пользователи
  • Pip
  • 12 сообщений

Отправлено 07 March 2017 - 23:24

Надо находиться либо в томже каталоге где лежит бинарник вулфктл либо прописывать полный путь например sudo /home/user/temp/wolfamdctl -i 0 -m t


  • 0





Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных