6

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

3 ответа3

7

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

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

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

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

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

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

2

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

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

0

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

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

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .