vga-passthrough с kvm / qemu на ноутбуке с поддержкой Optimus

10735
erp

у меня есть ноутбук asus n550jv со следующим выводом из lspci -nn | grep "VGA|3D":

00:02.0 VGA compatible controller [0300]: Intel Corporation 4th Gen Core Processor Integrated Graphics Controller [8086:0416] (rev 06) 01:00.0 3D controller [0302]: NVIDIA Corporation GK107M [GeForce GT 750M] [10de:0fe4] (rev ff) 

Я хочу запустить Windows 8.1 VM с VGA-passthrough, поэтому мне не нужно двойной загрузки. Я читал, что вам нужна карта с выделенным выходным портом, но я не понял, почему, и на форумах было несколько сообщений, указывающих, что она может еще работать.

я пытаюсь запустить виртуальную машину с этой командой:

qemu-system-x86_64 -enable-kvm -M q35 -m 4096 -cpu host \ -smp 4,sockets=1,cores=4,threads=2 \ -bios /usr/share/ovmf/OVMF.fd \ -usb -usbdevice tablet \ -soundhw hda \ -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,x-vga=on \ -drive file=/home/duke/windows.img,id=disk,format=raw -device ide-hd,bus=ide.0,drive=disk \ -drive file=/home/duke/Downloads/windows.iso,id=isocd -device ide-cd,bus=ide.1,drive=isocd \ -vga vmware \ -boot menu=on 

я хочу использовать vga-passthrough, но я продолжаю получать ошибки о x-vga:

qemu-system-x86_64: -device vfio-pci,host=01:00.0,bus=root.1,addr=00.0,x-vga=on: vfio: Device does not support requested feature x-vga qemu-system-x86_64: -device vfio-pci,host=01:00.0,bus=root.1,addr=00.0,x-vga=on: vfio: failed to get device 0000:01:00.0 qemu-system-x86_64: -device vfio-pci,host=01:00.0,bus=root.1,addr=00.0,x-vga=on: Device initialization failed. qemu-system-x86_64: -device vfio-pci,host=01:00.0,bus=root.1,addr=00.0,x-vga=on: Device 'vfio-pci' could not be initialized 

я нашел на арке vga-passthrough тему этой информации :

Это означает, что либо а) ваше ядро ​​не поддерживает CONFIG_VFIO_PCI_VGA, либо б) устройство не является устройством VGA. Чтобы проверить а):

$ grep CONFIG_VFIO_PCI_VGA / boot / config-uname -r

Для проверки б):

$ lspci -s 2: 00.0 | grep VGA

Если у вас есть графическая карта Intel, вам все еще нужен патч i915 для вашего ядра. Если вы используете видеокарту Radeon, вам понадобится другой патч VGA-арбитра. Обе они упоминались на последних нескольких страницах IIRC.

я получаю CONFIG_VFIO_PCI_VGA=yза (а). в моем случае (b) lspci -s 1:00.0 | grep VGAничего не выводится, поскольку моя карта nvidia указана как «3d контроллер», поэтому у меня есть вопросы:

  1. будет ли i915 patch или ovmf поддерживать мою карту nvidia, которая указана как 3d контроллер?

    • если нет, есть ли способ, чтобы карта nivida распознавалась как vga-совместимая?
  2. ovmf работает так же просто, как установка -bios /usr/share/ovmf/OVMF.fd?

  3. почему -vga=noneтребуется для VGA назначения?

    • если -vga=noneдействительно требуется, то есть ли другой способ реально увидеть экран? например, можно ли перенаправить карту nvidia на порт hdmi или карта nvidia полностью захватит экран ноутбука?

я также получаю ошибки для Alsa / Pulse, куча из них выкладывают, которые обычно следуют

alsa: Could not initialize ADCk alsa: Failed to open `default': alsa: Reason: Connection refused Home directory not accessible: Permission denied ALSA lib pulse.c:243:(pulse_connect) PulseAudio: Unable to connect: Connection refused 

я знаю, что это потому, что root не имеет доступа к импульсу пользовательского уровня, но я не хочу запускать импульс на системном уровне, есть ли способ для работы pulseaudio без необходимости запуска его в системном режиме? если нет, то у меня возникают проблемы с включением системного режима в любом случае. Там есть объяснение здесь и pulseaudio --systemработает, но я не могу подключать клиентов к серверу импульсов, я продолжаю получать ошибки как ALSA lib pulse.c:243:(pulse_connect) PulseAudio: Unable to connect: Access denied.

6

3 ответа на вопрос

7
wvdschel

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

VT-d ограничивает доступ хоста / отображение памяти в графическую память напрямую.

Обычно модифицированный драйвер (Nvidia Optimus или Bumblebee в Linux) представляет результаты работы окна на карте Nvidia в качестве текстуры для графики Intel, которая затем смешивает ее с вашей средой рабочего стола.

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

Благодаря выделенному выходному порту, карта, назначенная виртуальной машине, может не знать об этой виртуализации mumbo-jumbo, и могут использоваться обычные драйверы, которые отображают вывод на физическом выходном порту, так же, как при работе на голом металл.

Выделенный выходной порт, насколько я видел их в дикой природе, доступен только на настольных компьютерах или Lenovo ThinkPad с двойной графикой (последний из которых подключает некоторые выходные порты непосредственно к Nvidia, что портит поддержку Bumblebee в Linux в процессе).

спасибо, это имеет смысл. слишком плохо, хотя erp 8 лет назад 0
Разве не было бы относительно легко создать ложный монитор для карты nvidia, чтобы виртуальная машина работала правильно, а затем перенаправить видео обратно в хост-систему, передав его через ffmpeg или что-то подобное (что-то вроде steam in home? потоковый) Cestarian 8 лет назад 0
Возможно, я опоздаю к игре, у меня есть ASUS N550JK (это модель-преемник N550JV, разница только в 750M против 850M). Карта nVidia действительно подключена к выделенному выходному порту, а именно к DisplayPort. Карта Intel подключена к порту HDMI и внутреннему дисплею LVDS. (По этой же причине DisplayPort не работает в Linux, если вы не запускаете второй X-сервер с помощью карты nVidia). yjwong 8 лет назад 0
@yjwong, я могу использовать displayport без второго X-сервера, поэтому я думаю, что они подключены по-разному .. erp 7 лет назад 0
2
AlwaysLearning

I could be mistaken but doesn't KVM currently only work with discrete video cards (the GT 750M is an Optimus card)?

REF: http://www.linux-kvm.org/wiki/images/b/b3/01x09b-VFIOandYou-small.pdf

У меня сложилось впечатление, что карты с поддержкой Optimus _are_ дискретны: http://en.wikipedia.org/wiki/Nvidia_Optimus, если я не ошибаюсь ... erp 9 лет назад 0
Ссылки не работают Robert Munteanu 8 лет назад 1
0
Michael Hampton

One thing that you didn't mention that you need to do is:

Go into your BIOS and enable the VT-d option. VT-d is required to passthrough a PCI device to a virtual machine.

http://kmpic.asus.com/images/2014/12/29/6bd4ef8d-62a3-4b0c-9674-5a2b0fa53c79.jpg

(And even if this doesn't solve the issue, you should still leave it enabled, because it will be part of the solution.)

спасибо, я забыл упомянуть, но я сделал эту часть тоже. erp 9 лет назад 0