LINUX.ORG.RU

PRIME на десктопном железе?

 , ,


8

5

Собираю систему на основе i7 4771 и какой-нибудь материнки с поддержкой VT-d. Имеется в наличии AMD HD 6870 которой со свободным драйвером под мои задачи более чем хватает.

Но вот стало интересно, а работает ли DRI PRIME на десктопном железе? А полноценный GPU offloading? Можно ли полностью отключить видеокарту чтобы не шумела?

Будет ли оно конфликтовать с пробросом видеокарты?

PS: Если кто-то использует PRIME или VT-d буду очень благодарен за конфиги железа


Ответ на: комментарий от val-amart

ручками это как?

Это решение из другого топика. Запустить её «в холостую» с vfio-pci вот так:

qemu-system-x86_64 \
-bios /usr/share/qemu/bios.bin \
-enable-kvm \
\
-m 512 \
-cpu host \
-smp 4,sockets=1,cores=4,threads=1 \
\
-M q35 \
\
-device ioh3420,bus=pcie.0,addr=1c.0,multifunction=on,port=1,chassis=1,id=root.1 \
-device vfio-pci,host=01:00.0,bus=root.1,addr=00.0,multifunction=on,x-vga=on \
-device vfio-pci,host=01:00.1,bus=root.1,addr=00.1

Насколько я понимаю это обеспечивает корректный ресет карты, т.к она раскручивает кулеры как при первичном старте.

qiomi
() автор топика
Ответ на: комментарий от qiomi

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

qiomi
() автор топика

Очередной апдейт, но в этот раз оффтопик в обоих смыслах ибо с работой видеокарты не связан вообще никак. Ранее я в виртуалке запускал только визуал студию и прочий вендософт, но с пробросом видеокарты захотелось позапускать игори и тут столкнулся с проблемой.

Установил PlanetSide 2 и начал пробовать играть. Обычно я для проброса мыши использовал Synergy и тут оказалось, что с играми оно не работает: судя по всему Synergy на оффтопике не эмулирует девайс ввода, из-за чего в игре это приводит к безумно быстрому вращению камеры и никакие настройки чувствительности не помогают.

Далее я запустил виртуалку с проброшеннми в неё usb девайсами: второй мышкой и клавиатурой. Все работало отличяно, но держать на столе по две мыши/клавиатуры не в моих планах.

Попробовал проверить захват ввода через окно qemu и вот с захватом ввода камера казалось бы работала корректно, как вдруг при передвижении начались адовые фризы: окно игры фризится, но через секунду опять работает. Я уж думал начать ругать кривую проприетарщину, но ведь только недавно игра работала корректно и поэтому методом научного тыка я выяснил, что как когда я жму «w» (вперёд) на клавиатуре и одновременно вращаю камеру мышкой начинаются лаги.

Сначала я думал, что проблема связана с пробросом видеокарты, т.к первый раз я стартовал игру через pci-assign, а не vfio-pci, но тесты показали что фризится и так и так. Через некоторое время я таки выяснил что проблема связана именно с захватом ввода через qemu.

В общем я пробовал гуглить и не нашел ничего об этой проблеме, но чуть позже я узнал, что по дефолту захват ввода через окно qemu отдаётся в виртуалку как PS/2 порт и опять же методом проб и ошибок я определил, что проблема фризов вызвана либо тем как qemu его эмулирует, либо как оффтопик этот ввод обрабатывает.

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

-usb \
-device usb-kbd \
-device usb-mouse \
С этими параметрами PlanetSide работает замечательно. Не имею ни малейшего можно ли встретить данную проблему в какой либо другой игре или софте, но мало ли.

qiomi
() автор топика

Итак, сейчас результаты промежуточного эксперимента в процессе поиска способа запускать дискретку на хосте поочерёдно с виртуалкой.

Насколько я понял идея с полной выгрузкой модуля очень плохая и работать не хочет совсем, поэтому я эксперементирую с bind/unbind. Текущий тест сделан интереса для вообще без виртуалок:

  • Запустил хост с «blacklist radeon» и pci-stub.
  • После загрузки в консоль и отрубил GUI (lightdm).
  • Отбиндил карту от pci-stub:
    echo 0000:01:00.0 > /sys/bus/pci/devices/0000:01:00.0/driver/unbind
  • Далее подгрузил модуль ядра вот так:
    modprobe radeon audio=0 dpm=1
  • Запустил GUI, вошел в сессию, PRIME работает как надо.
  • Вышел из сессии, в консоль и опять отключил GUI.
  • Отрубил видеокарту от драйвера radeon:
    echo 0000:01:00.0 > /sys/bus/pci/devices/0000:01:00.0/driver/unbind
  • Запустил GUI, потестил интеграшку и опять в консоль, отключил GUI.
  • Вернул дискретку radeon:
    echo -n 0000:01:00.0 > /sys/bus/pci/drivers/radeon/bind
  • Вернул её GUI и карта опять работает как надо.
  • Далее я тоже самое делал несколько раз подрят и ничего не ломалось.

Здесь небольшое отсутпление: есть подозрение, что i2c (юзается для сенсоров) не обрабатывает «переподключение» карты корректно, от чего проверка температуры вешает хост, но постепенно.

Второй тест который я сделал это отключение карты от radeon, запуск в виртуалке с vfio-pci и попытка карту вернуть. Это завершается фейлом вот с такими ошибками:

radeon 0000:01:00.0: Invalid ROM contents
radeon 0000:01:00.0: Invalid ROM contents
[drm:radeon_get_bios] *ERROR* Unable to locate a BIOS ROM
radeon 0000:01:00.0: Fatal error during GPU init
Сейчас буду эксперементировать с тем как заставить это дело корректно работать: проверю работает ли «runpm», ну и попробую задампать ROM карты перед отдачей её виртуалке, а потом его как-нибудь восстановить.

qiomi
() автор топика

Очередной апдейт. В общем во первых загрузка radeon с runpm=1 вызывает отключение монитора и сразу же крэш ядра, при этом я может чего не понимаю и моё железо данную фитчу не поддерживает. Если таки оно должно работать с десктопным железом, то вот тут похожий репорт: https://bugzilla.kernel.org/show_bug.cgi?id=73901 Логи я пока не пробовал доставать и сравнивать, но потом сделаю.

Далее я провёл простой эксперемент, чтобы убедиться как именно использование виртуалки влияет на возможность подгрузить модуль radeon:

  • Запуск хоста с «blacklist radeon» и pci-stub.
  • Запуск GUI и юзание дискретки через pci-assign.
  • Отключение виртуалки и GUI.
  • unbind дискретки от pci-stub.
  • Подгрузка модуля «modprobe radeon audio=0 dpm=1»

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

qiomi
() автор топика
Ответ на: комментарий от qiomi

Ещё хочу пояснить зачем мне вообще нужен runpm. По сути данная фитча должна почти полностью обесточивать видеокарту в моменты не активности.

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

qiomi
() автор топика
Ответ на: комментарий от val-amart

Да не вопрос. Я пока пытаюсь понять, можно ли как-то вернуть rom карты в состояние которое от него ждёт драйвер.

Вариант с runpm был бы вообще идеальным, т.к при отключении карты XRandR её не «теряет». С простым bind/unbind допустим вернуть карту драйверу можно и при работающих иксах, но тогда в выдаче «xrandr --listproviders» в дополнение к интелу появляется лишь «name:modesetting» и DRI_PRIME=1 не работает.

qiomi
() автор топика
Ответ на: комментарий от Novell-ch

Ув. Novell-ch, а можешь пожалуйста сказать, работает ли у тебя runpm=1? Вырубает ли дискретку?

Я так понимаю эта фитча все ещё выключена по дефолту даже в 3.14.

qiomi
() автор топика
Ответ на: комментарий от qiomi

у меня не работает, после зазрузки модуля с runpm=1 тупо тухнет экран на интеле и все, причем не сразу а секунд через 5

Novell-ch ★★★★★
()
Ответ на: комментарий от Novell-ch

Спасибо большое. Да вот у меня тоже самое, правда я так и не нашёл информации о том должно ли оно вообще работать на десктопном железе.

Вот кстати репорт об этой проблеме:
https://bugzilla.kernel.org/show_bug.cgi?id=73901
Было бы полезно, если ты сможешь зарепортить туда проблему. Как только достану лог тоже туда отвечу.

qiomi
() автор топика
Ответ на: комментарий от qiomi

В общем из ответов Alex Deucher я понял, что эта фитча только для поддерживаемого железа и судя по предыдущим его коммитам работать будет только для ноутбуков с поддержкой PowerXpress.

Все же покопаюсь позже в коде драйвера ибо интересно посмотреть как оно включает/отрубает видеокарту не ломая то как работает XRandR.

qiomi
() автор топика

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

Сейчас столкнулся с проблемой подъёма в виртуалке дуалбута: Проблема с дуалбутом в виртуалке Создал отдельный топик дабы не сильно оффтопить здесь. Буду благодарен если кто что подскажет.

qiomi
() автор топика
Ответ на: комментарий от qiomi

Я пока смотрю в сторону Asrock Z87 Extreme4

У меня такая - недавно купил специально для виртуализации + i5 4670. Уже прикупил вторую видео карту от AMD и второй монитор. приближаюсь к полевым испытаниям.
VT-d включается без проблем, а 3 PCI-E слота греют душу. Правда на Extreme9 они еще и все 16х.

void_ptr ★★★★
()
Ответ на: комментарий от void_ptr

Правда на Extreme9 они еще и все 16х.

Это совершенно не важно, у «дешевых» процессоров Intel только 16 линий PCI-e.

qiomi
() автор топика
Ответ на: комментарий от qiomi

Из обзора Extreme9:

Для сторонников конфигурации multi-GPU протестированная материнская плата предоставляет пять слотов PCIe x16 третьего поколения. Конечно, для подключения четырёх видеокарт 16 линий от CPU будет маловато. По этой причине на плату установлен коммутатор PEX8747 от PLX (он располагается на месте канувшего в лету северного моста - над верхним слотом PCIe 3.0), который превращает 16 линий CPU в 32 линии PCIe 3.0, которые затем распределяются по слотам x16. В режиме с одним или двумя GPU (две дискретные видеокарты) все видеокарты получают полные 16 линий. В случае установки трёх или четырёх видеокарт ситуация отличается. В конфигурациях 3-Way SLI / CrossFireX только верхняя карта получает полные 16 линий. Оставшиеся две видеокарты получают по восемь линий. Если вы захотите установить конфигурацию 4-way multi-GPU, то каждая видеокарта будет подключаться к системе восемью линиями.

void_ptr ★★★★
()
Последнее исправление: void_ptr (всего исправлений: 2)
Ответ на: комментарий от Novell-ch

собрал ядро 3.16-wip с ранпм теперь работает, только как карту вырубить не ясно.

Оно должно само вырубать. Там в эту фитчу добавили проверку «radeon_is_px», поэтому я прозреваю, что оно ничего тебе не вырубает.

qiomi
() автор топика
Ответ на: комментарий от void_ptr

Ну ты же понимаешь, что от этого коммуникатора количество линий PCIe у CPU никак не выростет? Очень сомневаюсь что это даст более чем 3-5% к производительности сабжа.

qiomi
() автор топика
Ответ на: комментарий от qiomi

Смотря для чего, если на нем приснопамятные биткоины щелкать, так и 1х хватит.
Ты лучше скажи что где-то будешь выкладывать результаты своих изысканий - очень бы пригодилось.

void_ptr ★★★★
()
Последнее исправление: void_ptr (всего исправлений: 1)
Ответ на: комментарий от void_ptr

Ты лучше скажи что где-то будешь выкладывать результаты своих изысканий - очень бы пригодилось.

Все есть в этом топике и далее будет здесь :)

qiomi
() автор топика
Ответ на: комментарий от void_ptr

Смотря для чего, если на нем приснопамятные биткоины щелкать, так и 1х хватит.

Ещё раз: эта фишка не увеличивает количества линий PCI-e процессора поэтому лажа это полная. Хочешь много видеокарт на максимальной эффективности - для этого есть дорогие процессоры.

qiomi
() автор топика

Небольшой апдейт с информацией которая может кому-то пригодится. По неведомым для меня причинам Windows 8.1 так и наровит сдохнуть и перестать загружаться, почему - загадка. Я сначала грешил на HDD который уже чуток убитый, но у стоящей рядом Ubuntu 12.04 таких проблем нет.

В общем после того как она слетела 4-ый раз мне это надоело и я решил попробовать установить Windows 7. Всё установилось нормально, но я столкнулся с тем, что при загрузке с виртуальной видеокартой дискретка работать отказывалась с такой ошибкой:

This device cannot find enough free resources that it can use. (Code 12).

При этом только с дискреткой ("-vga none") система работала корректно, но не работал проброс мыши и клавиатуры. Решением стало добавление "-device qxl" к конфигу виртуалки. Это заставляет проброс мыши и клавиатуры работает корректно, а вот гостевая система девайс игнорирует.

Текущий конфиг выглядит вот так:

qemu-system-x86_64 \
-name "vm_vfio_pci" \
\
-bios /usr/share/qemu/bios.bin \
-enable-kvm \
\
-M q35 \
\
-vga none \
-device qxl \
\
-m 5G \
\
-cpu host \
-smp 6,sockets=1,cores=6,threads=1 \
\
-net none \
\
-soundhw hda \
\
-usb \
-device usb-kbd \
-device usb-mouse \
\
-device ioh3420,bus=pcie.0,addr=1c.0,multifunction=on,port=1,chassis=1,id=root.1 \
-device vfio-pci,host=01:00.0,bus=root.1,addr=00.0,multifunction=on,x-vga=on \
-device vfio-pci,host=04:00.0,bus=pcie.0 \
-device vfio-pci,host=05:00.0,bus=pcie.0
Из опций которые никому кроме меня не нужны только "-net none". Я это сделал потому, что пробрасываю вторую сетевую карту и мне лишний адаптер с NAT сильно мешает.

qiomi
() автор топика
Ответ на: комментарий от qiomi

Synergy

Чтобы Synergy работала в играх нужно: Synergy - Настроить сервер - дополнительные настройки сервера - поставить галку «Использовать родные настройки курсора»

Потом в игре жмёте клавишу «Scroll lock».

anonymous
()
Ответ на: Synergy от anonymous

Чтобы Synergy работала в играх нужно: Synergy - Настроить сервер - дополнительные настройки сервера - поставить галку «Использовать родные настройки курсора»

Благодарю за совет дорогой анон! Как приду домой потестирую в играх.

qiomi
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.