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

У меня ноутбук 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 для). в моем случае (б) 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 работает, но я не могу подключить клиентов к серверу Pulse, я получаю сообщения об ошибках вроде ALSA lib pulse.c:243:(pulse_connect) PulseAudio: Unable to connect: Access denied,

3 ответа

Решение

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

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

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

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

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

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

Я могу ошибаться, но разве KVM в настоящее время не работает только с дискретными видеокартами (GT 750M - это карта Optimus)?

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

Одна вещь, которую вы не упомянули, что вам нужно сделать, это:

Зайдите в свой BIOS и включите опцию VT-d. VT-d требуется для передачи устройства PCI на виртуальную машину.

(И даже если это не решит проблему, вы все равно должны оставить ее включенной, потому что это будет частью решения.)

Другие вопросы по тегам