LINUX.ORG.RU

Проброс графики в kvm

 , , ,


0

1

Доброго дня! Столкнулся с проблемой и который день не удается ее решить. Нуждаюсь в помощи.

На машину поставил CentOS 7. На ней установил KVM. Гостевые машины работают, все отлично. Подключаюсь по VNC. Видеокарта на хосте только одна - AMD Radeon RX Vega 64. Стоит задача пробросить ее в гостевую машину. Действую по официальной документации: https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html.... В итоге монитор хостовой машины отключается, в гостевой появляется видеокарта (lspci |grep VGA). Из документации понятно, что основной картой должна оставаться виртуальная самого kvm. На проброшенной планируется делать расчеты. При попытке в виртуалке поставить драйвер amdgpu-pro, после перезагрузки не стартуют иксы. Ошибка - Oh no, something has gone wrong. A problem has occurred and the system can't recover. В логах ошибки вроде нет. Вывод lspci -v:

00:08.0 VGA compatible controller: Advanced Micro Devices, Inc. [AMD/ATI] Device 687f (rev c0) (prog-if 00 [VGA controller])
Subsystem: Advanced Micro Devices, Inc. [AMD/ATI] Device 0b36
Physical Slot: 8
Flags: fast devsel, IRQ 11
Memory at e0000000 (64-bit, prefetchable) [size=256M]
Memory at f2000000 (64-bit, prefetchable) [size=2M]
I/O ports at c000 [size=256]
Memory at feb00000 (32-bit, non-prefetchable) [size=512K]
Expansion ROM at febc0000 [disabled] [size=128K]
Capabilities: [48] Vendor Specific Information: Len=08 <?>
Capabilities: [50] Power Management version 3
Capabilities: [64] Express Legacy Endpoint, MSI 00
Capabilities: [a0] MSI: Enable- Count=1/1 Maskable- 64bit+
Kernel modules: amdgpu

----------------------------------------------------------------

00:02.0 VGA compatible controller: Cirrus Logic GD 5446 (prog-if 00 [VGA co ntroller])
Subsystem: Red Hat, Inc QEMU Virtual Machine
Physical Slot: 2
Flags: fast devsel
Memory at f0000000 (32-bit, prefetchable) [size=32M]
Memory at febf0000 (32-bit, non-prefetchable) [size=4K]
Expansion ROM at febe0000 [disabled] [size=64K]
Kernel driver in use: cirrus
Kernel modules: cirrus

Не могу понять, то ли это связано с KVM, то ли с иксами самой гостевой ОС. Что я делаю не так?
Я правильно понимаю что видеокарта проброшена, но неправильно настроена?



Последнее исправление: oktavpua (всего исправлений: 7)

Ответ на: комментарий от Deleted

Если бы у него была интеграшка, то всё сложилось бы иначе.

King_Carlo ★★★★★
()

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

хотя, я не уверен в успехе и при таком раскладе.

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

хотя, я не уверен в успехе и при таком раскладе.

Если мать десктопная, то придётся собрать ядро с ACS override patch, иначе обе видеокарты будут в одной iommu-группе.

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

Так не получится.

Почему? У него на хосте изображения не будет после проброса, да и все. О чем он написал в старт посте.

anonymous
()
Ответ на: комментарий от King_Carlo

Если мать десктопная, то придётся собрать ядро с ACS override >patch, иначе обе видеокарты будут в одной iommu-группе.

В той же статье есть пример отключения ненужного устройства, которое оказалось в одной iommu-группе с пробрасываемой картой, командой virsh nodedev-detach. Разве это не более простое решение?

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

Так не получится.

Т.е пробросить единственную карту на хосте в принципе нельзя? Только в kvm или в любом гипервизоре? (нигде не видел примера с подобным случаем, везде две gpu)

У меня сложилось впечатление, что карта пробросилась («монитор хостовой машины отключается, в гостевой появляется видеокарта») и проблема именно в том, чтобы подружить ее с виртуальной картой kvm. Т.е проблема не с пробросом и виртуализацией, а в использовании одновременно двух видеокарт. Если просто пробросить карту, то все работает в штатом режиме, а ломается только после установки amdgpu и последующей перезагрузки. <br> И еще кое что. В ходе экспериментов с настройками, был случай, когда на удаленной машине в vnc был черный экран, но при этом внезапно включился экран хостовой машины с графической оболочкой. И если двигать в черном окне vnc удаленной машины курсором, то он двигался на мониторе хостовой машины. Как будто виртуальная машина получила в свой доступ хостовой монитор, при этом разрешение было высокое, его мог дать только amdgpu. Не знаю насколько это важно, но это показывало что видеокарта пробросилась и успешно работает.

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

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

Пробрасывается то всё равно вся группа.

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

Т.е пробросить единственную карту на хосте в принципе нельзя?

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

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

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

Мне и не нужно видеть его, ssh вполне достаточно

или как в твоём мануале через pci-stub (устаревшая технология, сейчас лучше использовать vfio-pci).

Если гостевая машина не запущена, то в lspci -v у пробрасываемой карты можно увидеть Kernel driver in use: pci-stub. После запуска гостевой машины, строчка меняется на Kernel driver in use: vfio-pci.

Если подытожить, то такая ситуация возникает из того что gpu одна?

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

Мне и не нужно видеть его, ssh вполне достаточно

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

Если гостевая машина не запущена, то в lspci -v у пробрасываемой карты можно увидеть Kernel driver in use: pci-stub. После запуска гостевой машины, строчка меняется на Kernel driver in use: vfio-pci.

У меня дискретное видео для проброса отключено через /etc/modprobe.d/blacklist.conf. Если виртуалка не запущена, то строки «Kernel driver in use» по понятным причинам нет. При запущенной виртуалке «Kernel driver in use: vfio-pci».

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

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

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

У меня дискретное видео для проброса отключено через /etc/modprobe.d/blacklist.conf. Если виртуалка не запущена, то строки «Kernel driver in use» по понятным причинам нет. При запущенной виртуалке «Kernel driver in use: vfio-pci».

У меня amdgpu также в черном списке. И поставлена заглушка pci-stub в /etc/systemd/grub. В моем понимании до запуска вм он говорит о том, что эта видеокарта не используется(т.к стоит pci-stub), а после запуска вм он работает через vfio-pci, чтобы отдать ее виртуальной машине.

В общем похоже дело действительно в иксах, а не в kvm. Если подключиться к гостевой машине через ssh, и от рута выполнить startx, то оболочка в vnc запускается. Если делать это через непривелегированного пользователя, то выдает ошибку PAM authentication failed, cannot start X server. Поиск по ней решения не дал, если есть идеи, буду рад выслушать.

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