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 контроллер", поэтому у меня есть вопросы:
будет ли i915 patch или ovmf поддерживать мою карту nvidia, которая указана как 3d контроллер?
- если нет, есть ли способ, чтобы карта nivida распознавалась как vga-совместимая?
ovmf работает так же просто, как настройка
-bios /usr/share/ovmf/OVMF.fd
?почему
-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 на виртуальную машину.
(И даже если это не решит проблему, вы все равно должны оставить ее включенной, потому что это будет частью решения.)