LINUX.ORG.RU

Помогите нарулить VGA passthrough

 


0

1

Привет, гуру! Нужна помощ ибо встрял. Надоели всякие wine, дуалбут и дуалПС - пора по взрослому юзать две ОС на одном ПК разом =)
Моя конфигурация:
Core i5-6600k
Radeon RX480 для гостя
IGD или gt610 для хоста
MSI Z170A SLI PLUS
xubuntu* 17.04 x64 в режиме UEFI

Для начала я попробовал XENServer 7, так как passthrough там обещают из коробки. Так и оказалось, у меня всё завелось. Однако в самом гипервизоре нет графической среды, нужно ставить ещё и linux-гостя, но я бы хотел что бы основной моей рабочей средой был именно гипервизор с графическим окружением**. К тому же XENServer не очень удобен в управлении***
Потом я попробовал XEN из репозиториев своего дистрибутива, при таком подходе ставится модифицированное ядро. Однако на нём, у меня плохо работает хостовая видеокарта (IGD), особенно сильно тупит chrom при прокрутке, а если запустить виртуальную машину, то хост вообще лучше не трогать, часто виснет. К тому же видео в гостя пробросить мне не удалось. Симптомов уже не помню, так как забил на этот способ и обратился к следующему гипервизору.
Им стал KVM, он работает на дефолтном ядре, это плюс, всё оборудование гипервизора работает корректно, даже после запуска ВМ нет никаких проблем, однако не могу успешно пробросить в ВМ видяху. Я нашёл следующую инструкцию, повторил её (на xubuntu 17.04), но не завелось. Как я предполагаю, у меня проблема и использованием pci-stub

$ dmesg | grep pci-stub
[    2.538178] pci-stub: add 1002:6938 sub=FFFFFFFF:FFFFFFFF cls=00000000/00000000
[    2.538181] pci-stub: add 1002:AAD8 sub=FFFFFFFF:FFFFFFFF cls=00000000/00000000
[    2.538188] pci-stub 0000:01:00.1: claimed by stub
Вроде как не ставиться заглушка на видяху (или вместо, я тонкости технологии не понимаю ещё). Я пробовал через файл /etc/initramfs-tools/modules и через параметры ядра передаваемые grub'ом. В общем тупик не понимаю что дальше сделать.

- - - - - - - - - - - - - - - - - - - -
*люблю начинать строить с него, хардкор вроде генты ненужно:)
**Основная причина в том чтобы иметь возможность работать с переферией без плясок: тоесть сижу вот я в инторнете, и тут у меня на столе появляется HDD с которым надо поработать (бекап, восстановление, просто узнать что там), Сейчас я просто втыкаю его спереди в мобилрек и бац, он у меня в моей среде. Хочу чтобы осталось так же.

***
-При установке не даёт разметить диск по своему
-Я конечно консоль уважаю и люблю, но рулить из консоли тем к чему обращаешься раз в 10 лет... подходишь ты так к своему упавшему шлюзу на любимой FreeBSD и половину команд вспомнить не можешь.
-Нельзя вот в xencenter просто так взять и указать iso из файловой системы гипервизора, или выбрать SSD на который ставим нужную нам ось... нужны пляски с хранилищами, сетевыми притом. В общем он ниразу не интуитивный.



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

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

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

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

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

PS Может быть, ещё потребуется добавить в параметры загрузки ядра intel_iommu=igfx_off

PPS И ещё может понадобиться наложить патч acs override. Я со встроенной графикой не работал, в каких случаях этот патч нужен я не вникал, но народу он помогал.

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

Чтобы обойти гипотетические глюки с IGD, я воткнул для гипервизора карту Nvidia GT610.Пробовал заблокировать драйверы внеся в файл etc/modprobe.d/blacklist.conf строки

blacklist fglrx
blacklist radeon
Не уверен что это правильно. Непомогло

попробовал команды из мануала выполнить прямо в терминале, дабы увидеть подробные ошибки, однако там не густо:

sudo echo "1002 6938" > /sys/bus/pci/drivers/pci-stub/new_id
bash: /sys/bus/pci/drivers/pci-stub/new_id: Отказано в доступе
sudo echo 0000:02:00.0 > /sys/bus/pci/devices/0000\:02\:00.0/driver/unbind
bash: /sys/bus/pci/devices/0000:02:00.0/driver/unbind: Отказано в доступе
Осталось только попробовать изменить порядок загрузки pci-stub, пока разбираюсь как это сделать.

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

pci-stub

зачем? Сейчас для этого vfio

Может подскажите какой мануал? Я гуглю passthrough vfio и нахожу разные статейки, и везде там присутствуют операции с pci-stub. Или может например в федоре попробовать, там не из коробки всё это?

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

В арчевики неплохо описано
https://wiki.archlinux.org/index.php/PCI_passthrough_via_OVMF
Про pci-stub тоже написано, но как «legacy method, pre-4.1 kernels»

в федоре

afaik, в федоре вообще это всё из коробки, просто ставишь virt-manager и настраиваешь через гуишку

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

Это потому что у вас от судо только первая часть команды выполняется. Сделайте из под рута. Но pci-stub не нужен, это уже верно заметили.

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

Сделайте из под рута

Действительно, команда стала проходить. Правда хост зависает намертво... попробую наверное сейчас федору, прикипел я уже к deb-дистрибутивам.

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

Для твоей карточки ещё нужно заблеклистить amdgpu.

Суть в том, что если «нагорячую» отвязывать родной драйвер от видеокарточки, то, скорее всего, это приведёт к ошибке, а то и краху ядра. Поэтому, при старте нужно повесить заглушку на видеокарточку, чтобы её не подхватил родной драйвер. Сделаешь ли ты это через pci-stub или vfio-pci роли не играет. Virt-manager при запуске виртуалки забиндит её на vfio-pci или pci-stub (зависит от конфигурации), главное, чтобы в момент пуска родной драйвер не держал карточку, иначе, смотри выше.

PS Проблема со встроенкой в том, что она может не работать через dmar, это если я всё правильно понял. Параметр intel_iommu=igfx_off как раз отключает такое поведение для встроенной карточки. Это не зависит от производителя или модели дискретной карточки. И поищи ещё обсуждение на acs override патч, может в твоём случае он необходим.

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

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

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

Поставил федору 25. Вообще приятно удивился. Среда по умолчанию, конечно, спорная, но вот чекер образа при загрузке порадовал, вывод утилиты dnf хороший, информативный. Много приятного в мелочах. Появилось желание остаться на федоре)

Проброс из коробки не заработал, хотя в глубине души я на это надеялся. Нашел очень подробное руководство, с разбивкой на 5 этапов. Вынес из него что моя интегрированная карта, и обе дискретные находятся в первой IOMMU группе, то есть патч override мне необходим. Так?

Еще смутно в комментариях понял что это в принципе работает но некрасиво, плохо и ай-ай-ай, и в мейнстрим не попадет.

Написано, что лучший вариант сразу строить с подходящего железа с поддержкой acs, и это якобы все ксеоны кроме линейки 1200(как раз под мой сокет 1151). Тоесть если взять какой нибудь xeon e3 на 2011-3 сокете и мать под него, вот на нем заведётся почти из коробки? Нужно будет заблокировать драйвер видео, активировать нужные модули для работы vfio и бац, все полетит?

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

Это как повезёт. На своей asus X99-pro первой ревизии я вдоволь натрахался с настройками: пробрасывалась только видео без hdmi-аудио и только первичным адаптером, иначе чёрный экран. Примерно полгода всё работало с виртуалкой на чипсете q35. Потом прилетело обновление qemu, после чего стала глючить карточка 7970, пока не накрылась, а в логах стали сыпаться ошибки qemu. Поменял её на 6970, которая неделю проработала и также накрылась. Была куплена rx480 и снова в логах ошибки. Я ковырялся с моделями процессора, опциями загрузки ядра и модулей в надежде победить ошибки в логах и глюки видео, в результате виртуалка стала показывать чёрный экран при загрузке драйвера видео даже при тех настройках виртуалки, на которых до этого всё работало. Чистая установка винды успеха не приносила. Перелез с федоры на дебьян тестинг - та же хрень. В общем, победил проброс и ошибки в логе заменой чипсета виртуалки на i440fx и загрузкой через uefi.

Сейчас всё работает и, можно сказать, из коробки - включить в биосе vt-d и vt-x, добавить опцию в строку загрузки ядра, загрузить заглушку до модуля видео и в virt-manager создать виртуалку с нужным чипсетом и добавить пробрасываемые девайсы. В принципе, это всё. Дальше уже были мелочи - настроить dhcp и dns для гостя, запустить pulseaudio как пользовательский сервис, для работы микрофона в госте отредактировать конфиг виртуалки и выставить переменные окружения, чтобы работала через альсу, а не пульсу из-за косяка в qemu.

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

Ну да, это можно считать из коробки. А что за проц, физический, в материнке?
В вышеупонянутой статейке как раз и рекомендуют ставить i440fx и загрузку uefi, которую из гуя вообще сменить можно только при первом конфигурировании, не забыв зайти в детальные настройки

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

А что за проц, физический, в материнке?

i7-5820K

anonymous
()

Пойду таки простым путём. Соберу новый ПК на 2011-3. Мать от ASUS'а (у них самый вменяемый биос. Недавно обновил биос на Gigabyte , матерь божья...) Проц выбираю между Xeon E5-1630V4 и Core i7-6800K. В целом они одинаковы, высокочастотные, из явных отличий у ксеона 4 ядра и 40 линий PCI, у корика 6 ядер и 28 линий. Частоты у ксеона повыше, базовая 3,7GHz, вполне достаточно. Склоняюсь к Ксеону. Опасаюсь только проблем совместимости, на многих материнках 2011-3 указана поддержка лишь i7.

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

Говорят, самые беспроблемные в плане проброса - asrock. А асус любит что-то у себя ломать в биосе. По-хорошему, лучше найти историю успеха с конкретной материнкой и зацепить такую же.

Моя плата мне совсем не понравилась, да, в конечном итоге заработало, но нервов я потратил непозволительно много. Xen на ней, кстати, мне запустить так и не удалось. После amd, где у меня на 2-х разных материнках работал и xen и kvm и проброс в разных конфигурациях, я такого от штеуда не ожидал.

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

А есть уверенность, что на новом железе всё окажется как надо? Тем более, что в xenserver на текущем оборудовании всё заработало.

В биосе нет настройки acs control или похожей? Может быть, опции ядра типа intel_iommu=igfx_off помогут? На совсем крайний случай можно и патч наложить.

Если в одной группе iommu оказались несколько устройств и пробрасывается только одно из них, то нужно последующие (или все в этой группе?) тоже повесить на vfio, даже если их не собираешься пробрасывать. Что-то такое смутно припоминается. Можно попробовать повесить две дискретные карточки на vfio и одну из них прокинуть.

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

попробовал команды из мануала выполнить
sudo echo «1002 6938» > /sys/bus/pci/drivers/pci-stub/new_id

Палю годноту:

echo "1002 6938" | sudo tee /sys/bus/pci/drivers/pci-stub/new_id

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

Ещё умы, ку! XenServer заработал, это конечно показатель, но что там за магия...=) Смена железа в моей ситуации дело нередкое и бескровное, уже есть куда пристроить мой комп =) С патчем не хочу связываться, лишняя точка контроля, мне ещё китайский учить.
Опции acs в биосе поискал, нету. Ничего близкого тоже. Сейчас поставлю снова федору и попробую новые советы применить.

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

Ура, мужики!

Всё! Хоть и не самым кошерным путём (не из того что было под рукой), но всё же победа! Всем спасибо.
Завёл на
Intel Xeon E5-1630v4 -> ASUS X99-A II
Nvidia GT640 в первом слоте PCI для хоста (Fedora 25)
Nvidia GTX 1070 в третьем слоте для гостя
На данной материнке обе видеокарты висят в собственных IOMMU-группах, так же имеется USB3.1 контроллер, на шине PCI, в своей собственной группе, он тоже прекрасно прокинулся. В настройках биоса материнки я сразу при первом запуске увидел пункт ACS и включил его, ещё не пробовал какая будет картина если его выключить.

Порядок действий для меня оказался таков:
-Ставим федору 25 (уже есть 26, но я послушал совета ставить более-менее протестированную массами)
-Добавляем через GRUB параметры intel_iommu=on iommu=pt pci-stub.ids=...
(у меня пока не заработало без PCI-Stub)
-в virt-manager создаём машину в режиме UEFI (при создании нужно обязательно зайти в дополнительные настройки, чтобы выбрать UEFI)
-через virsh правим конфиг машины, добавляя в него опцию для скрытия от гостя факта выполнения в виртуальной среде (требуется только для карт NVIDIA). Рекомендуют это сделать до установки гостевой ОС, то есть после завершения настройки нужно запустить машину и сразу её выключить, конфиг будет создан и его можно будет править.
Всё, после этого ставим гостя, ставим дрова на видеокарту и писаем кипятком =)
Вот ещё раз оченама подробная статья по всем тонкостям: vfio.blogspot. Хороша она в первую очередь тем, что автор практически после каждого действия предлагает способ проверки того, что вы только что сделали, и не приходится гадать где же ошибка и с какого места начинать.

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