LINUX.ORG.RU

подробно о пробросе видеокарты

 , ,


0

2

Здравствуйте! Года два назад с использованием virt-manager через pci-stub пробросил AMD Radeon HD-7850, наклонировал VM и меня устраивало.

После обновления HDD и установки на хосте Ubuntu 16.04.3 LTS восстановить что было прежним образом не смог. Прочел много о пробросе (видеокарт), к сожалению осталось много неясностей. Как по синтаксису команд, так и по взаимодействию элементов технологии проброса. Моя задача сейчас: для Supermicro MBD-X10SLH-F-B + xeon e-1245v3 + radeon RX-580 нужно средствами QEMU, vfio-pci, UEFI создать VM с диском типа qcow2 с проброшенной видеокартой и USB на выбор. Как мне представляется - это типичная задача.

О чем прошу: прокомментировать приведенные ниже фрагменты из постов наших одноклубников с объяснением каждого (кроме совсем очевидных) использованного в строке параметра (на что влияет, с чем соотносится). Если каждый из знающих внятно объяснит хотя бы по одной строке, то в одном месте появится целостная информация по теме, а не очередной обрывок=источник копи-паста.

пример lavos :

sudo QEMU_AUDIO_DRV=pa apulse qemu-system-x86_64 \

-nodefaults \

-nodefconfig \

-nographic \

-serial none \

-parallel none \

-name Windows10 \

-machine q35,accel=kvm \

-enable-kvm \

-cpu host,kvm=off,check \

-smp cpus=4,sockets=1,cores=4,threads=1 \

-m 8G \

-balloon virtio \

-rtc base=localtime,clock=host \

-drive if=pflash,format=raw,readonly,file=~/qemu/ovmf64/OVMF-pure-efi.fd \

-drive if=pflash,format=raw, file=~/qemu/ovmf64/OVMF_VARS-pure-efi.fd \

-soundhw hda \

-net nic,vlan=0,model=virtio -net tap,vlan=0,ifname=tap0,script=no,downscript=no \

-vga none \

-device vfio-pci,host=01:00.0,multifunction=on \

-device vfio-pci,host=01:00.1 \

-device vfio-pci,host=00:1d.0 \

-drive file=~/qemu/data/win10.img,if=virtio,format=raw,index=0,media=disk,cache=none,aio=native \

-boot order=c \

-monitor stdio \

«$@»

1) вопросы построчные:

2) как указать формат дискового образа QCOW2 и как передать драйверы virtio в VM при её создании/инсталляции ?

3) чем отличаются ovmf_code_x64.bin от ovmf_code.bin OVMF-pure-efi.fd ?

4) почему используют копию ovmf_var.fd и может ли эта копия одновременно использоваться несколькими VM?

5) что именно делает EFI в строке выше и с чем соотносится - с видеокартой или загрузкой операционной системы)?

6) -cpu host,hv_relaxed,hv_vapic,hv_time, hv_spinlocks=0x1000,kvm=off,+vmx // что бы это значило?

как могут соотноситься строки: device vfio-pci,host=02:00.0,multifunction=on,romfile=/path/to/uefi_romfile.rom,x-vga=on

и -drive if=pflash,format=raw,readonly,file=~/qemu/ovmf64/OVMF-pure-efi.fd \

-drive if=pflash,format=raw, file=~/qemu/ovmf64/OVMF_VARS-pure-efi.fd \

ссылка в статье https://wiki.archlinux.org/index.php/PCI_passthrough_via_OVMF о pure-efi - нерабочая. pure-efi - неактуален?

пример успеха от Rockon: здесь (ниже) должна быть какая-то связь с образом VM?

qemu-system-x86_64 -enable-kvm -m 1024 -cpu host,hv_relaxed,hv_vapic,hv_spinlocks=0x1000,kvm=off \

-machine q35,accel=kvm \

-smp 4,sockets=1,cores=4,threads=1 \

-drive if=pflash,format=raw,readonly,file=/path/to/OVMF-pure-efi.fd \

-drive if=pflash,format=raw,file=/path/to/OVMF_VARS-pure-efi.fd \

-device vfio-pci,host=02:00.0,multifunction=on,romfile=/path/to/bios6970_updGOP.rom,x-vga=on -device vfio-pci,host=02:00.1 \

-vga none

Поделитесь пожалуйста мудростью камрады, чесслово польза будет не только одному мне.



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

Кое в чем разобрался, НО! - вместо окна инсталляции Win попадаю в EFI-Shell

Команда которой я пытаюсь создать VM и инсталлировать ОС :

qemu-system-x86_64 -enable-kvm -m 4000 -name Win7_1 -machine q35,accel=kvm,usb=on \

-cpu host,hv_relaxed,hv_vapic,hv_time,hv_spinlocks=0x1000,kvm=off -smp 4,sockets=1,cores=4,threads=1 -rtc base=localtime,clock=host \

-device vfio-pci,host=01:00.0,multifunction=on,x-vga=on \

-device vfio-pci,host=01:00.1 \

-drive file=/var/lib/libvirt/images/Win7_1.qcow2,if=virtio,index=0,id=disk,format=qcow2,cache=none \

-drive file=/var/lib/libvirt/boot/W7Prof.iso,if=none,format=raw,readonly,id=isoWin7 \

-device driver=ide-cd,bus=ide.0,drive=isoWin7 \

-boot order=dc,menu=on \

-drive file=/var/lib/libvirt/boot/virtio-win-0.1.126.iso,format=raw,id=virtiocd126,if=none \

-drive file=/usr/share/OVMF/OVMF_CODE-pure-efi.fd,if=pflash,format=raw,readonly \

-drive file=/var/lib/libvirt/boot/OVMF_VARS-pure-efi.fd,if=pflash,format=raw \

-usb -usbdevice host:046d:c051 -usb -usbdevice host:046d:c333 -nographic -vga none

Вопрос, что не так я делаю, что все время натыкаюсь на EFI-Shell дальше которого пройти не получается? собственно проброс видеокарты и USB-портов удается, но кроме надоевшего Shell очень хочется увидеть ещё чего-нибудь.

Help me!!!

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

обственно проброс видеокарты и USB-портов удается

до успешной установки драйвера в винде об этом рано говорить.

но кроме надоевшего Shell очень хочется увидеть ещё чего-нибудь.

поставь

    -nodefaults \
и убери menu=on из boot
-boot order=dc
впрочем для установки -boot order тоже убери.

что все время натыкаюсь на EFI-Shell дальше которого пройти не получается?

ты в EFI-шелле можешь перейти на установочный образ и запустить установку винды (в случае win 7/8 это так).

Bruce_Lee ★★
()
Последнее исправление: Bruce_Lee (всего исправлений: 2)
Ответ на: комментарий от Bruce_Lee

предложенного не хватило

Bruce_Lee - спасибо!

-boot order=dc,menu=on \ - убрал, результата не вижу; -nodefaults \ - поставил, в результате на виндовой персоналке, с которой по ssh хожу на хост, перестало дублироваться окно (как на мониторе, подключенном к пробрасываемой видеокарте). Наблюдаю на мониторе что и раньше:

UEFI Interactive Shell v2.2

EDK II

UEFI v2.60 (EDK II, 0x00010000)

Mapping table

FS0: Alias(s):F0a65535a:;BLK2:

PciRoot(0x0)/Pci(0x1F,0x2)/Sata(0x0,0xFFFF,0x0)/VenMedia(C5BD4D42-1A76-4996-8956-73CDA326CD0A)

BLK3: Alias(s):

PciRoot(0x0)/Pci(0x4,0x0)

BLK0: Alias(s):

PciRoot(0x0)/Pci(0x1F,0x2)/Sata(0x0,0xFFFF,0x0)

BLK1: Alias(s):

PciRoot(0x0)/Pci(0x1F,0x2)/Sata(0x0,0xFFFF,0x0)/CDROM(0x0)

Press ESC in 1 seconds to skip startup.nsh or any other key to continue.

/************/ Не знаю, что с этим можно сделать. По команде exit попадаю в псевдографический режим a`la Setup, там в закладке Boot Manager стоит:

UEFI QEMU DVD-ROM QM00001

EFI Internal Shell

UEFI Misc Device

Команды «загружайся, сцуко» нет, есть Continue

Если выбрать Continue - попадаю в UEFI Interactive Shell v2.2 - что привел выше. Есть идеи?

valvolg
() автор топика
Ответ на: предложенного не хватило от valvolg

В шелле можно переходить по дискам/блочным устройствам, вон они указаны (FS0, BLK0, BLK1, BLK3 и т.п.), нужно найти то, где установщик винды, просто вводишь название устройства с двоеточием и нажимаешь Enter, например:

FS0:
Там работет комлит, просто нажимая Tab оно покажет (должно показать там, где есть загрузочный файл efi) директорию EFI, продолжаешь путь слешом: EFI\ опять нажимаешь Tab оно циклически будет показывать содержимое диры, тебе нужна директория Boot, т.е.:
EFI\Boot\
а дальше там есть какой-то *.efi файл, который и является запускаемым установщиком, нажимаешь энтер и начинает загружаться винда, ядро линукса или что угодно, к чему оно привязано.

Это обычный стандартный efi-шел как на любой UEFI-матплате (т.е. на 99% современных).

Bruce_Lee ★★
()
Последнее исправление: Bruce_Lee (всего исправлений: 1)
Ответ на: комментарий от Bruce_Lee

UEFI Interactive Shell v2.2

Bruce_Lee - спасибо!

До UEFI Shell как-то не доходило... посмотрел FS0:... состав каталогов, проч

попробовал запустить FS0:\efi\microsoft\boot\cdboot.efi ... подвис... прибил процесс... настрою на другой дистриб.

valvolg
() автор топика
Ответ на: UEFI Interactive Shell v2.2 от valvolg

Вроде не этот файл, у меня нет возможности проверить сейчас, прогугли этот момент, а еще лучше запускай оригинальный нативный установочный образ, впрочем я насчет 10-ки не в курсе, пробовал только 8.

Bruce_Lee ★★
()
Ответ на: UEFI Interactive Shell v2.2 от valvolg

Смотри, я только что скачал оригинальный образ десятки и накидал такой файл:

#!/bin/bash

QEMU="/usr/bin/qemu-system-x86_64"

${QEMU} \
    -enable-kvm \
    -m 4096 \
    -machine q35,accel=kvm \
    -cpu host,hv_relaxed,hv_vapic,hv_spinlocks=0x1000,hv_vendor_id=fucknvidia,kvm=off \
    -smp 4,sockets=1,cores=4,threads=1 \
    -realtime mlock=off -rtc base=localtime \
    -drive if=pflash,format=raw,readonly,file=/mnt/vm/OVMF-pure-efi.fd \
    -drive if=pflash,format=raw,file=/mnt/vm/OVMF_VARS-pure-efi.fd \
    -device virtio-scsi-pci,id=scsi \
    -drive file=/mnt/vm/windows10.iso,id=iso_install,if=none -device scsi-cd,drive=iso_install \
    -cdrom /mnt/vm/virtio.iso \

Где:

  • OVMF-pure-efi.fd + OVMF_VARS-pure-efi.fd — файлы чистого негибридного OVMF EFI ревизии 20161115.b2265 (выложить?)
  • windows10.iso — SW_DVD5_Win_Pro_Ent_Edu_N_10_1709_64BIT_English_MLF_X21-50143.ISO
  • virtio.iso — образ с драйверами

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

Я смотрю ты подставляешь не тот файл ovmf:

-drive file=/usr/share/OVMF/OVMF_CODE-pure-efi.fd,if=pflash,format=raw,readonly \

хотя в первом посте подставлял нужный:

-drive if=pflash,format=raw,readonly,file=~/qemu/ovmf64/OVMF-pure-efi.fd \

Bruce_Lee ★★
()
Последнее исправление: Bruce_Lee (всего исправлений: 1)
Ответ на: комментарий от Bruce_Lee

OVMF-pure-efi.fd - OVMF-CODE-pure-efi.fd

Bruce_Lee - спасибо! -> OVMF-pure-efi.fd <- я недоглядел. Но в первом посте код не мой, я его привел в качестве примера, чтобы разобрать на смысловые единицы.

вот например, каково назначение:

-device ioh3420,bus=pcie.0,addr=1c.0,multifunction=on,port=1,chassis=1,id=root.1 \

диапазоны значений переменных я знаю (позже выложу источники) - я не понимаю назначение команды в контексте: - ?

или, например в твоём коде:

-device virtio-scsi-pci,id=scsi \

virtio-scsi-pci - судя по всему драйвер, id=scsi - этот идентификатор должен где-то в другом месте использоваться? Я не вижу, где используется этот device.

Я в приведенном выше своём коде заменил OVMF-pure-efi.fd, но на инсталляцию двух разных образов Win-7 это не повлияло, а вот ubuntu-desktop-16.4 через «забор» UEFI перепрыгнул... поставился... но мне нужен гадюшник для Windows, и желательно именно 7.

так что пока учу матчасть... Каково соотношение между device != drive ?

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

Поделитесь пожалуйста мудростью камрады

Перестань пердолится с опциями QEMU и установи все через virt-manager.

o-
()
Ответ на: OVMF-pure-efi.fd - OVMF-CODE-pure-efi.fd от valvolg

И да. Если туго идет настройка установка, то нигде не используй никаких virtio / scsi, оставь дефолтные конфигурацию VM с SATA, так как в противном случае надо грузить драйвера до установки.

Когда поставишь винду сможешь в окошках установить драйвера через Legacy Devices и уже после этого поменять тип девайса на что твоей дуще угодно.

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

Перестань пердолится с опциями QEMU и установи все через virt-manager

Я так и делал до очередного обновления ОС. Как обновился, прежний подход не срабатывает.

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

оставь дефолтные конфигурацию VM с SATA

для I440fx, IDE и прочая по дефолту - все вроде просто - но достали «пустяки» - то не грузится ОС после установки драйверов видеокарты, то иные непонятные неприятности которые остается обходить «методом тыка». Когда вариантов слишком много - это делать неприятно. И это ещё не дошла очередь до вопросов производительности и прочего функционала.

Поэтому для себя я принял решение: Q-35, vfio-pci, virtio, UEFI и QEMU как способ записать то, что я хочу (и понимаю) без неясностей и умолчаний/изъятий. Если для этого необходимо разбираться - я ищу и задаю вопросы. Хотелось бы получить именно ответы,а не «направление»

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

Я видел это но очередь пока не дошла

export QEMU_AUDIO_DRV=alsa QEMU_AUDIO_TIMER_PERIOD=0

QEMU_AUDIO_DRV=pa apulse

ZenitharChampion ★★★★★ Для чего эти переменные?

valvolg
() автор топика
Ответ на: OVMF-pure-efi.fd - OVMF-CODE-pure-efi.fd от valvolg

-device ioh3420,bus=pcie.0,addr=1c.0,multifunction=on,port=1,chassis=1,id=root.1 \

зачем это? это чего проброс?

Я не вижу, где используется этот device.

здесь:

 -drive file=/mnt/vm/windows10.iso,id=iso_install,if=none -device scsi-cd,drive=iso_install \

Каково соотношение между device != drive ?

не понял вопрос.

Bruce_Lee ★★
()
Ответ на: оставь дефолтные конфигурацию VM с SATA от valvolg

Проблема в том, что ты «направление» не правильное выбрал. Цель libvirt / virt-manager как раз в том, чтобы запускать QEMU сразу с правильными опциями и чтобы конфигурация которая тебе нужна правильно переносилась между разными версиями ОС и хостами. И если у тебя с libvirt что-то сломалось, то в 99.9% случаев проблема не в libvirt.

При этом тебе никто не мешает уже после настройки посмотреть с какими опциями QEMU оно запускает твою виртуалку, но вот только это нафиг не надо.

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