LINUX.ORG.RU

Новичек пытается пробросить GTX 970 на qemu-kvm

 , , ,


8

6

Всем ГУРУ линукса, Доброго дня Вам! :)

Я всю жизнь жил в WINDOWS, последние лет 7 в 7 )))

На прошлой неделе поставил Debian, актуальная версия с сайта.

уже узнал что такое терминал, как установить qemu-kvm, virt-manager и прочее что писали в разных статьях...

В общем я удачно смог запустить виртуальную машину через virt-manager и пробросить через «Add Device» оба устройства. Система на ВМ на момент проброса уже была установлена, гостевая винда увидела новое устройство, аудио стало сразу, на gpu скачал драйвера, все встало но после перезагрузки ВМ - синий экран...

Соответственно в проце есть своя vga, которую я использую на хосте, а pci карту пробрасываю в ВМ. Соответственно grub и bios настроены, аппаратная виртуализация в целом работает. У меня: Intel core i7 4x3.6GGz GT, Asus Strix GTX 970

Подумал, что проблема в самой настройке ВМ. На форумах узнал что NVidia на уровне драйверов блокирует запуск на kvm, если видит данный параметр.

После чего нашел отличную статью с бенчмарком: http://www.fassen.net/video/v1cFWrKtWis/ Там все вроде понятно написано, но я не понимаю как эти параметры воткнуть в конфигурацию ВМ?

Я уже изучил virt-inst, но застрял на том, что нет каталога vfio-pci, да и вообще vfio терминал не понимает, а там надо объединить графику и звук, видимо, это описано много где, например здесь: https://wiki.debian.org/VGAPassthrough

Далее куда надо прописать параметры, которые указаны для запуска?

DEVICE1="03:00.0" ( The GTX970 address in my system )
DEVICE2="03:00.1"

./vfio-bind 0000:$DEVICE1 0000:$DEVICE2

QEMU_PA_SAMPLES=6144 QEMU_AUDIO_DRV=pa \
qemu-system-x86_64 -enable-kvm -m 8192 -cpu host,kvm=off \
-smp 4,sockets=1,cores=4,threads=1 \
-machine q35,accel=kvm \
-soundhw hda \
-device ioh3420,bus=pcie.0,addr=1c.0,multifunction=on,port=1,chassis=1,id=root.1 \
-device vfio-pci,host=$DEVICE1,bus=root.1,addr=00.0,multifunction=on,x-vga=on \
-device vfio-pci,host=$DEVICE2,bus=root.1,addr=00.1 \
-vga none \
-bios /usr/share/seabios/bios.bin \
-device virtio-net-pci,netdev=user.0,mac=52:54:00:03:02:01 \
-netdev user,id=user.0 \
-drive file=win7-x64_system.qcow2,if=none,id=drive-virtio-disk0,format=qcow2 \
-device virtio-blk-pci,scsi=off,addr=0x7,drive=drive-virtio-disk0,id=virtio-disk0,bootindex=1 \
-drive file=win7-games.qcow2,if=none,id=drive-virtio-disk1,format=qcow2 \
-device virtio-blk-pci,scsi=off,addr=0x8,drive=drive-virtio-disk1,id=virtio-disk1 \
-rtc base=localtime,driftfix=slew \
-device qxl \
-device usb-kbd \
-usbdevice host:1e7d:2d51 (USB Mouse)

В общем я понимаю, что у меня есть грамотные куски информации, но в силу моей зелености в Linux'ах, мне не хватает опыта, чтобы свести эту информацию воедино. Я посмотрел конфиги xml виртмашины, которую создал virt-manager, но не могу найти инструкции, как его править, все статьи создают машины только через команды.

Люди добрые, подскажите, по шагам, как мне сделать ВМ с пробросом моей карты?

Может где есть полная статья под debian, от того какие компоненты и как надо установить, до того, как запустить ВМ с аналогичными командами (Куда их прописать?), тогда я подставлю эти команды с поправкой на адреса моей карты и вуаля?...

В общем я пытался найти всю информацию сам, но понял, что без помощи я здесь не разберусь :)

Для включения проброса надо добавить в /etc/default/grub:

GRUB_CMDLINE_LINUX_DEFAULT="... intel_iommu=on ..."
И сделать update-grub2.

Создать файл /etc/modprobe.d/pci-stub.conf следующего содержания:

options pci-stub ids=1002:6718,1002:aa80

Где 1002:6718 и 1002:aa80 заменить на свои значения, соответствующие видео карточке и её звуку (lspci -n). Этот шаг не обязателен, если у тебя в системе нет двух карточек, использующих один и тот же драйвер, и одну из них ты хочешь пробросить в виртуалку. В противном случае проще запретить загрузку драйвера для свой видео карточки, создав файл /etc/modprobe.d/<драйвер>.conf:

blacklist <драйвер>
Название файла не принципиально, главное, чтоб имел расширение conf.

Создать файл /usr/sbin/vfio-bind:

#!/bin/sh

for dev in $@; do
  vendor=$(cat /sys/bus/pci/devices/$dev/vendor)
  device=$(cat /sys/bus/pci/devices/$dev/device)
  if [ -e /sys/bus/pci/devices/$dev/driver ]; then
    echo $dev > /sys/bus/pci/devices/$dev/driver/unbind
  fi
  echo $vendor $device > /sys/bus/pci/drivers/vfio-pci/new_id
done
И сделать его исполняемым:
chmod 755 /usr/sbin/vfio-bind

Создать файл /etc/systemd/system/vfio-bind.service:

[Unit]
Description=Binds devices to vfio-pci
ConditionPathExists=!/proc/xen
After=syslog.target

[Service]
Environment="DEVICES=0000:03:00.0 0000:03:00.1"
Type=oneshot
RemainAfterExit=yes
ExecStartPre=/sbin/modprobe vfio-pci
ExecStart=/usr/sbin/vfio-bind $DEVICES

[Install]
WantedBy=multi-user.target
Выполнить systemctl enable vfio-bind.service

Если ты нигде не накосячил, если смог загрузиться, если твоя система поддерживает проброс, то в каталоге /dev/vfio у тебя должен появиться файлик с именем «XX», где XX - какие-то цифры (у меня они - 26). Если используешь virt-manager, то в файле /etc/libvirt/qemu.conf найти параметр cgroup_device_acl и изменить его примерно таким образом:

cgroup_device_acl = [
    "/dev/null", "/dev/full", "/dev/zero",
    "/dev/random", "/dev/urandom",
    "/dev/ptmx", "/dev/kvm", "/dev/kqemu",
    "/dev/rtc","/dev/hpet", "/dev/vfio/vfio",
    "/dev/vfio/XX"
]
где XX - твои циферки. Перезапустить сервис командой systemctl restart libvirtd.service. После чего можно пробовать запустить виртуалку через virt-manager.

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

Конфиг моей машины выглядит примерно следующим образом:

virsh edit windows-8

<domain type='kvm' xmlns:qemu='http://libvirt.org/schemas/domain/qemu/1.0'>
  <name>windows-8</name>
  <uuid>1fbde3ae-b9b9-4207-b66c-74841d145507</uuid>
  <memory unit='KiB'>8388608</memory>
  <currentMemory unit='KiB'>8388608</currentMemory>
  <vcpu placement='static'>8</vcpu>
  <cputune>
    <vcpupin vcpu='0' cpuset='0,6'/>
    <vcpupin vcpu='1' cpuset='1,7'/>
    <vcpupin vcpu='2' cpuset='2,8'/>
    <vcpupin vcpu='3' cpuset='3,9'/>
  </cputune>
  <os>
    <type arch='x86_64' machine='pc-q35-2.1'>hvm</type>
    <bootmenu enable='no'/>
  </os>
  <features>
    <acpi/>
    <apic/>
    <pae/>
  </features>
  <cpu mode='host-passthrough'>
    <topology sockets='1' cores='4' threads='2'/>
  </cpu>
  <clock offset='localtime'>
    <timer name='rtc' tickpolicy='catchup'/>
    <timer name='pit' tickpolicy='delay'/>
    <timer name='hpet' present='no'/>
  </clock>
  <on_poweroff>destroy</on_poweroff>
  <on_reboot>restart</on_reboot>
  <on_crash>restart</on_crash>
  <pm>
    <suspend-to-mem enabled='no'/>
    <suspend-to-disk enabled='no'/>
  </pm>
  <devices>
    <emulator>/usr/bin/qemu-system-x86_64</emulator>
    <disk type='block' device='lun'>
      <driver name='qemu' type='raw' cache='none' io='native'/>
      <source dev='/dev/sdc'/>
      <target dev='vda' bus='virtio'/>
      <boot order='1'/>
      <address type='pci' domain='0x0000' bus='0x02' slot='0x05' function='0x0'/>
    </disk>
    <disk type='file' device='disk'>
      <driver name='qemu' type='qcow2'/>
      <source file='/var/lib/libvirt/images/windows-8.img'/>
      <target dev='vdb' bus='virtio'/>
      <address type='pci' domain='0x0000' bus='0x02' slot='0x07' function='0x0'/>
    </disk>
    <disk type='block' device='cdrom'>
      <driver name='qemu' type='raw'/>
      <target dev='sda' bus='sata'/>
      <readonly/>
      <address type='drive' controller='0' bus='0' target='0' unit='0'/>
    </disk>
    <disk type='block' device='cdrom'>
      <driver name='qemu' type='raw'/>
      <target dev='sdb' bus='sata'/>
      <readonly/>
      <address type='drive' controller='0' bus='0' target='0' unit='1'/>
    </disk>
    <controller type='usb' index='0' model='ich9-ehci1'>
      <address type='pci' domain='0x0000' bus='0x02' slot='0x03' function='0x7'/>
    </controller>
    <controller type='usb' index='0' model='ich9-uhci1'>
      <master startport='0'/>
      <address type='pci' domain='0x0000' bus='0x02' slot='0x03' function='0x0' multifunction='on'/>
    </controller>
    <controller type='usb' index='0' model='ich9-uhci2'>
      <master startport='2'/>
      <address type='pci' domain='0x0000' bus='0x02' slot='0x03' function='0x1'/>
    </controller>
    <controller type='usb' index='0' model='ich9-uhci3'>
      <master startport='4'/>
      <address type='pci' domain='0x0000' bus='0x02' slot='0x03' function='0x2'/>
    </controller>
    <controller type='sata' index='0'>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x1f' function='0x2'/>
    </controller>
    <controller type='pci' index='0' model='pcie-root'/>
    <controller type='pci' index='1' model='dmi-to-pci-bridge'>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x1e' function='0x0'/>
    </controller>

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

Продолжение

    <controller type='pci' index='2' model='pci-bridge'>
      <address type='pci' domain='0x0000' bus='0x01' slot='0x01' function='0x0'/>
    </controller>
    <controller type='virtio-serial' index='0'>
      <address type='pci' domain='0x0000' bus='0x02' slot='0x04' function='0x0'/>
    </controller>
    <interface type='bridge'>
      <mac address='52:54:00:27:1f:e0'/>
      <source bridge='br0'/>
      <model type='virtio'/>
      <address type='pci' domain='0x0000' bus='0x02' slot='0x01' function='0x0'/>
    </interface>
    <serial type='pty'>
      <target port='0'/>
    </serial>
    <console type='pty'>
      <target type='serial' port='0'/>
    </console>
    <channel type='spicevmc'>
      <target type='virtio' name='com.redhat.spice.0'/>
      <address type='virtio-serial' controller='0' bus='0' port='1'/>
    </channel>
    <input type='tablet' bus='usb'/>
    <input type='mouse' bus='ps2'/>
    <input type='keyboard' bus='ps2'/>
    <graphics type='spice' autoport='yes'/>
    <sound model='ich6'>
    <codec type='micro'/>
      <address type='pci' domain='0x0000' bus='0x02' slot='0x02' function='0x0'/>
    </sound>
    <video>
      <model type='qxl' ram='65536' vram='65536' heads='1'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x0'/>
    </video>
    <hostdev mode='subsystem' type='usb' managed='yes'>
      <source>
        <vendor id='0x046d'/>
        <product id='0xc24a'/>
      </source>
    </hostdev>
    <hostdev mode='subsystem' type='usb' managed='yes'>
      <source>
        <vendor id='0x046d'/>
        <product id='0xc21c'/>
      </source>
    </hostdev>
    <redirdev bus='usb' type='spicevmc'>
    </redirdev>
    <redirdev bus='usb' type='spicevmc'>
    </redirdev>
    <memballoon model='virtio'>
      <address type='pci' domain='0x0000' bus='0x02' slot='0x06' function='0x0'/>
    </memballoon>
  </devices>
  <qemu:commandline>
    <qemu:arg value='-device'/>
    <qemu:arg value='ioh3420,bus=pcie.0,addr=1c.0,multifunction=on,port=1,chassis=1,id=root.1'/>
    <qemu:arg value='-device'/>
    <qemu:arg value='vfio-pci,host=03:00.0,bus=root.1,addr=00.0,multifunction=on'/>
    <qemu:arg value='-device'/>
    <qemu:arg value='vfio-pci,host=03:00.1,bus=root.1,addr=00.1'/
  </qemu:commandline>

Для nvidia в раздел features надо добавить строчки:

<kvm>
   <hidden state='on'/>
</kvm>

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

Спасибо за инструкцию!

Но опять синий экран.

Все сработало без косяков. Оба PCI пробросил через «Добавить устройство» в virt-manager. Через virsh edit добавил kvm hidden=on как написано в инструкции) После установки VGA с сайта NVIDIA драйверов на ВМ - экран смерти. Запустил восстановление, винда заработала)

Я заметил что у меня нет тега commandline, мне его тоже надо скопировать?

Также не могу пробросить USB HDD или подключить какую-нить папку для обмена файлами между хостом и гостем. при пробросе USB не встают дрова на винде, а filesystem вообще винда не видит...

Что не так?

<domain type='kvm'>
  <name>win7x64</name>
  <uuid>565883f3-5da8-4754-a681-dff69b689782</uuid>
  <memory unit='KiB'>6291456</memory>
  <currentMemory unit='KiB'>6291456</currentMemory>
  <vcpu placement='static'>4</vcpu>
  <os>
    <type arch='x86_64' machine='pc-i440fx-2.1'>hvm</type>
    <boot dev='hd'/>
  </os>
  <features>
    <acpi/>
    <apic/>
    <pae/>
    <kvm>
      <hidden state='on'/>
    </kvm>
  </features>
  <cpu mode='custom' match='exact'>
    <model fallback='allow'>SandyBridge</model>
  </cpu>
  <clock offset='localtime'>
    <timer name='rtc' tickpolicy='catchup'/>
    <timer name='pit' tickpolicy='delay'/>
    <timer name='hpet' present='no'/>
  </clock>
  <on_poweroff>destroy</on_poweroff>
  <on_reboot>restart</on_reboot>
  <on_crash>restart</on_crash>
  <pm>
    <suspend-to-mem enabled='no'/>
    <suspend-to-disk enabled='no'/>
  </pm>
  <devices>
    <emulator>/usr/bin/kvm</emulator>
    <disk type='file' device='disk'>
      <driver name='qemu' type='qcow2' cache='none'/>
      <source file='/home/vetrintsev/Документы/vmWin7x64.qcow2'/>
      <target dev='hda' bus='ide'/>
      <address type='drive' controller='0' bus='0' target='0' unit='0'/>
    </disk>
    <disk type='block' device='cdrom'>
      <driver name='qemu' type='raw'/>
      <source dev='/dev/sr0'/>
      <target dev='hdb' bus='ide'/>
      <readonly/>
      <address type='drive' controller='0' bus='0' target='0' unit='1'/>
    </disk>
    <disk type='file' device='cdrom'>
      <driver name='qemu' type='raw'/>
      <source file='/home/vetrintsev/Документы/Windows 7 SP1 x86-x64 Ru 9in1 Orig Upd 05.2015 by OVGorskiy.iso'/>
      <target dev='hdc' bus='ide'/>
      <readonly/>
      <address type='drive' controller='0' bus='1' target='0' unit='0'/>
    </disk>
    <controller type='usb' index='0' model='ich9-ehci1'>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x7'/>
    </controller>
    <controller type='usb' index='0' model='ich9-uhci1'>
      <master startport='0'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0' multifunction='on'/>
    </controller>
    <controller type='usb' index='0' model='ich9-uhci2'>
      <master startport='2'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x1'/>
    </controller>
    <controller type='usb' index='0' model='ich9-uhci3'>
      <master startport='4'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x2'/>
<controller type='pci' index='0' model='pci-root'/>
    <controller type='ide' index='0'>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/>
    </controller>
    <controller type='virtio-serial' index='0'>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/>
    </controller>
    <interface type='network'>
      <mac address='52:54:00:6f:a7:a8'/>
      <source network='default'/>
      <model type='rtl8139'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
    </interface>
    <serial type='pty'>
      <target port='0'/>
    </serial>
    <serial type='pty'>
      <target port='1'/>
    </serial>
    <console type='pty'>
      <target type='serial' port='0'/>
    </console>
    <channel type='spicevmc'>
      <target type='virtio' name='com.redhat.spice.0'/>
      <address type='virtio-serial' controller='0' bus='0' port='1'/>
    </channel>
    <input type='tablet' bus='usb'/>
    <input type='mouse' bus='ps2'/>
    <input type='keyboard' bus='ps2'/>
    <graphics type='spice' autoport='yes'/>
    <sound model='ich6'>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>
    </sound>
    <video>
      <model type='qxl' ram='65536' vram='65536' heads='1'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
    </video>
    <hostdev mode='subsystem' type='pci' managed='yes'>
      <source>
        <address domain='0x0000' bus='0x01' slot='0x00' function='0x0'/>
      </source>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x0'/>
    </hostdev>
    <hostdev mode='subsystem' type='pci' managed='yes'>
      <source>
        <address domain='0x0000' bus='0x01' slot='0x00' function='0x1'/>
      </source>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x08' function='0x0'/>
    </hostdev>
    <redirdev bus='usb' type='spicevmc'>
    </redirdev>
    <redirdev bus='usb' type='spicevmc'>
    </redirdev>
    <redirdev bus='usb' type='spicevmc'>
    </redirdev>
    <redirdev bus='usb' type='spicevmc'>
    </redirdev>
    <memballoon model='virtio'>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x09' function='0x0'/>
    </memballoon>
  </devices>
</domain>
Vetrintsev
() автор топика
Ответ на: комментарий от Vetrintsev

Поменяй тип машины pc-i440fx-2.1 на pc-q35-2.1 - это должно убрать проблемы с пробросом usb и должно помочь с пробросом видео. Тэг commandline по умолчанию не присутствует, его надо добавлять ручками и обязательно должна присутствовать в шапке строчка xmlns:qemu='http://libvirt.org/schemas/domain/qemu/1.0'. Если добавить секцию <commandline> без этой строчки, то virsh при сохранении просто выбросит эту секцию. Также, если добавить эту строчку без секции <commandline>, то virsh при сохранении выбросит и эту строчку. В общем, секция <commandline> используется для прямой передачи параметров в qemu, в случае, если эти параметры ещё не реализованы в libvirt.

Видеокарточку не надо добавлять через диалог virt-manager - скорее всего работать не будет. Лучше делать это через virsh. Для этого в конфиге виртуалки должны присутствовать следующие строчки:

<domain type='kvm' xmlns:qemu='http://libvirt.org/schemas/domain/qemu/1.0'>
...
<qemu:commandline>
    <qemu:arg value='-device'/>
    <qemu:arg value='ioh3420,bus=pcie.0,addr=1c.0,multifunction=on,port=1,chassis=1,id=root.1'/>
    <qemu:arg value='-device'/>
    <qemu:arg value='vfio-pci,host=03:00.0,bus=root.1,addr=00.0,multifunction=on'/>
    <qemu:arg value='-device'/>
    <qemu:arg value='vfio-pci,host=03:00.1,bus=root.1,addr=00.1'/
  </qemu:commandline>
</domain>

Чтобы проверить работоспособность карточки в виртуалке, можно сделать следующее: отключить эмуляцию видео. Если карточка работает, то ты сразу увидишь на экране загрузку виртуалки, начиная с биоса. Для этого надо отредактировать конфигурацию вм следующим образом:

<domain type='kvm' xmlns:qemu='http://libvirt.org/schemas/domain/qemu/1.0'>
...
<qemu:commandline>
    <qemu:arg value='-device'/>
    <qemu:arg value='ioh3420,bus=pcie.0,addr=1c.0,multifunction=on,port=1,chassis=1,id=root.1'/>
    <qemu:arg value='-device'/>
    <qemu:arg value='vfio-pci,host=03:00.0,bus=root.1,addr=00.0,multifunction=on,x-vga=on'/>
    <qemu:arg value='-device'/>
    <qemu:arg value='vfio-pci,host=03:00.1,bus=root.1,addr=00.1'/
  </qemu:commandline>
</domain>
Плюс надо удалить из конфига секции <video> и <channel>. В данной конфигурации придётся отдельно настраивать звук от вм (редактировать конфиги pulseaudio) и что-то думать насчёт клавиатуры в вм (я использовал synergy). Но лучше запустить вм с эмулированной карточкой (добавить секцию <video> через virt-manager и убрать из конфига x-vga=on), тогда и звук заработает по умолчанию и клава будет работать без дополнительных телодвижений. В общем, попробуй для начала запустить вм в таком конфиге. Если видео будет работать хотя бы до загрузки винды, то проброс состоялся.

Ещё попробуй пробросить только видео, без hdmi-audio. Но его всё равно надо будет забиндить на vfio, даже если в виртуалку его не будешь пробрасывать. У меня на интеле вм категорически отказывается работать, если я пробросил hdmi-audio. Хотя, на амд с этой же карточкой всё работало без всяких проблем в любых конфигурациях.

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

Кстати, на амд у меня работал проброс видео и аудио через добавление устройств в virt-manager. Для этого даже не требовалось биндить видео к vfio, а достаточно было только добавить pci-stub.conf. А материнка под интел в этом плане оказалась на редкость капризной, причём, винда 8 и 10 работают с эмулированной карточкой, а 7 в той же конфигурации ни в какую.

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

Вывалилась ошибка:

Ошибка запуска : internal error: early end of file from monitor: possible problem:
2016-03-22T17:38:47.867293Z qemu-system-x86_64: -device vfio-pci,host=01:00.0,bus=root.1,addr=00.0,multifunction=on: Bus 'root.1' not found


Traceback (most recent call last):
  File "/usr/share/virt-manager/virtManager/asyncjob.py", line 91, in cb_wrapper
    callback(asyncjob, *args, **kwargs)
  File "/usr/share/virt-manager/virtManager/asyncjob.py", line 127, in tmpcb
    callback(*args, **kwargs)
  File "/usr/share/virt-manager/virtManager/domain.py", line 1355, in startup
    self._backend.create()
  File "/usr/lib/python2.7/dist-packages/libvirt.py", line 999, in create
    if ret == -1: raise libvirtError ('virDomainCreate() failed', dom=self)
libvirtError: internal error: early end of file from monitor: possible problem:
2016-03-22T17:38:47.867293Z qemu-system-x86_64: -device vfio-pci,host=01:00.0,bus=root.1,addr=00.0,multifunction=on: Bus 'root.1' not found

А еще я не могу поменять тип машины pc-i440fx-2.1 на pc-q35-2.1, пишет что что то не найдено (

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

Еще одна ошибка

Обнаружил что у тебя PCI по индексом 0 = pciE-root а у меня pci-root, исправил commandline pcie.0 на pci.0, вышла новая ошибка:

Ошибка запуска : internal error: early end of file from monitor: possible problem:
2016-03-22T18:12:41.982875Z qemu-system-x86_64: -device vfio-pci,bus=root.1,host=01:00.0,addr=00.0,multifunction=on: vfio: error opening /dev/vfio/1: Permission denied
2016-03-22T18:12:41.982905Z qemu-system-x86_64: -device vfio-pci,bus=root.1,host=01:00.0,addr=00.0,multifunction=on: vfio: failed to get group 1
2016-03-22T18:12:41.982917Z qemu-system-x86_64: -device vfio-pci,bus=root.1,host=01:00.0,addr=00.0,multifunction=on: Device initialization failed.
2016-03-22T18:12:41.982936Z qemu-system-x86_64: -device vfio-pci,bus=root.1,host=01:00.0,addr=00.0,multifunction=on: Device 'vfio-pci' could not be initialized
Vetrintsev
() автор топика
Ответ на: комментарий от ionanahin

Как запустить это?)))

Я установил винд на образ .qcow2 и поставил там teamviewer

Могу же я теперь запустить ВМ с этого образа напрямую из командной строки?

Так как это сделано в вашей ссылке?

Но я не понимаю как применить то, что там написано...

Мне надо написать sh файл с кодом?

Я хочу запустить вот это скрипт, который уже сработал на одной похожей системе:

QEMU_PA_SAMPLES=6144 QEMU_AUDIO_DRV=pa \
qemu-system-x86_64 -enable-kvm -m 8192 -cpu host,kvm=off \
-smp 4,sockets=1,cores=4,threads=1 \
-machine q35,accel=kvm \
-soundhw hda \
-device ioh3420,bus=pcie.0,addr=1c.0,multifunction=on,port=1,chassis=1,id=root.1 \
-device vfio-pci,host=$DEVICE1,bus=root.1,addr=00.0,multifunction=on,x-vga=on \
-device vfio-pci,host=$DEVICE2,bus=root.1,addr=00.1 \
-vga none \
-bios /usr/share/seabios/bios.bin \
-device virtio-net-pci,netdev=user.0,mac=52:54:00:03:02:01 \
-netdev user,id=user.0 \
-drive file=win7-x64_system.qcow2,if=none,id=drive-virtio-disk0,format=qcow2 \
-device virtio-blk-pci,scsi=off,addr=0x7,drive=drive-virtio-disk0,id=virtio-disk0,bootindex=1 \
-drive file=win7-games.qcow2,if=none,id=drive-virtio-disk1,format=qcow2 \
-device virtio-blk-pci,scsi=off,addr=0x8,drive=drive-virtio-disk1,id=virtio-disk1 \
-rtc base=localtime,driftfix=slew \
-device qxl \
-device usb-kbd \

у меня тоже интел и модель vga карты один в один.

Как мне подключить свой образ HDD, вот его путь: /home/vetrintsev/Документы/w7x64.qcow2

и что мне надо сделать чтобы эта конфигурация запустилась? Какие строки добавить?

При этом в vfio я уже все вроде привязал, отдельное спасибо за это анониму :)

графический монитор мне не нужен, если винда стартанет... да если и не стартанет, то переключу монитор на эту карту карте (пока не купил кабель HDMI - телик рядом стоит, хочу ВМ с картой на него вывести, потом джойстики пробросить, и комп работает и ВМ для простеньких компанейских игр))).

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

Непонятно, почему у тебя устройство изменилось на 01:00.0, когда было 03:00.0?

Тип машины надо обязательно изменить на q35, иначе данная секция <commandline> не сработает. В ней используется шина pcie, которой просто нет в 440-м чипсете. Попробуй просто вбить q35, без всяких pc. virsh сам подставит нужный вариант при сохранении. Либо, я так подозреваю, ты одновременно что-то ещё поменял и это что-то вызвало ошибку. Внимательно читай, что пишется при сохранении.

Для начала просто создай машину без всяких пробросов и измени её тип на q35. Если при сохранении возникнут ошибки, можно просто удалить все строчки вида <address .../> и, скорее всего, секции <controller>, либо просто возьми мой конфиг и удали из него всё ненужное - проброшенные usb-устройства и даже жесткий диск, оставив один cd-rom. Тогда можно в virt-manager указать образ cd и попробовать с него загрузиться.

anonymous
()
Ответ на: Еще одна ошибка от Vetrintsev

Забыл. В файле /etc/libvirt/qemu.conf раскомментируй строчку user=root и, возможно, строчку с capabilities - я не помню точное название параметра, но в описание к нему сказано, что параметр заставляет сбрасывать привилегии. Возможно, надо будет запретить этот сброс. После этого либо перезапусти сервис libvirtd, либо просто перегрузись.

И, всё-таки, почему ты пытаешься пробросить устройство 01:00.0? Вроде бы, на этой шине висит первичный видеоадаптер?

anonymous
()
Ответ на: Как запустить это?))) от Vetrintsev

Если через скрипт, то просто от рута выполни. Путь к образу диска указывается параметром -drive file=win7-x64_system.qcow2. Вместо win7... укажи полный путь к своему образу -drive file=/home/.../win.qcow2. Не факт, что в таком варианте заработает сеть и т.п.

В libvirt образ диска указывается так:

<disk type='file' device='disk'>
      <driver name='qemu' type='qcow2'/>
      <source file='/var/lib/libvirt/images/windows-8.img'/>
      <target dev='vdb' bus='virtio'/>
      <address type='pci' domain='0x0000' bus='0x02' slot='0x07' function='0x0'/>
</disk>

<source file='полный путь к образу диска'/>

<taget dev='vdb' bus='virtio' /> vdb - второй диск в вм, можно менять на vdX,sdX,hdX, где X - a,b,c и т.д. Для sdX шину меняй на sata, для hda на иде. Проще добавить через virt-manager, а потом через virsh указать путь к своему файлу. И не задавай строчку <address../>, virsh сам её воткнёт при сохранении, иначе, если её задашь, то может возникнуть конфликт с адресами и virsh не даст сохранить тебе файл.

anonymous
()

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

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

В ином случаи я винду переставлял. Сделай «чистый» образ винды, без спроброшенной видяхи, а потом делай его копии и в них эксперементируй

matrixd
()
Ответ на: комментарий от anonymous

у меня он и есть первичный.

у меня есть еще одна VGA встроенная в проц и выведенная через мать... к ней подключен хост, а на этой шине (01:00.0/1) висит NVidia ее я хочу вывести на гостя

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

Да как сказать. Вот в ядрах 4.2 и 4.3 сломали проброс на моей системе. А исправили только в 4.4. Но оно пока в backports не прилетело.

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

Скопировал твою машину

Удалось сохранить конфиг с помощью virsh edit

Вот такая теперь ошибка:

Ошибка запуска : internal error: early end of file from monitor: possible problem:
2016-03-24T19:06:59.710888Z qemu-system-x86_64: -device vfio-pci,host=01:00.0,bus=root.1,addr=00.0,multifunction=on: vfio_dma_map(0x7f9371768d00, 0x0, 0x80000000, 0x7f91b4000000) = -12 (Cannot allocate memory)
2016-03-24T19:06:59.711065Z qemu-system-x86_64: -device vfio-pci,host=01:00.0,bus=root.1,addr=00.0,multifunction=on: vfio_dma_map(0x7f9371768d00, 0x100000000, 0x100000000, 0x7f9234000000) = -12 (Cannot allocate memory)
2016-03-24T19:06:59.711077Z qemu-system-x86_64: -device vfio-pci,host=01:00.0,bus=root.1,addr=00.0,multifunction=on: vfio: memory listener initialization failed for container
2016-03-24T19:06:59.711086Z qemu-system-x86_64: -device vfio-pci,host=01:00.0,bus=root.1,addr=00.0,multifunction=on: vfio: failed to setup container for group 1
2016-03-24T19:06:59.711118Z qemu-system-x86_64: -device vfio-pci,host=01:00.0,bus=root.1,addr=00.0,multifunction=on: vfio: failed to get group 1
2016-03-24T19:06:59.711130Z qemu-system-x86_64: -device vfio-p

Вот конфиг гостя

<domain type='kvm' xmlns:qemu='http://libvirt.org/schemas/domain/qemu/1.0'>
  <name>win7x64</name>
  <uuid>0a9d31db-e5fe-41c5-adf9-0c5634f91f86</uuid>
  <memory unit='KiB'>6291456</memory>
  <currentMemory unit='KiB'>6291456</currentMemory>
  <vcpu placement='static'>8</vcpu>
  <os>
    <type arch='x86_64' machine='pc-q35-2.1'>hvm</type>
    <boot dev='hd'/>
    <bootmenu enable='no'/>
  </os>
  <features>
    <acpi/>
    <apic/>
    <pae/>
    <kvm>
      <hidden state='on'/>
    </kvm>
  </features>
  <cpu mode='host-passthrough'>
    <topology sockets='1' cores='4' threads='2'/>
  </cpu>
  <clock offset='localtime'>
    <timer name='rtc' tickpolicy='catchup'/>
    <timer name='pit' tickpolicy='delay'/>
    <timer name='hpet' present='no'/>
  </clock>
  <on_poweroff>destroy</on_poweroff>
  <on_reboot>restart</on_reboot>
  <on_crash>restart</on_crash>
  <pm>
    <suspend-to-mem enabled='no'/>
    <suspend-to-disk enabled='no'/>
  </pm>
  <devices>
    <emulator>/usr/bin/qemu-system-x86_64</emulator>
    <disk type='file' device='disk'>
      <driver name='qemu' type='qcow2' cache='none'/>
      <source file='/home/vetrintsev/Документы/w7x64.qcow2'/>
      <target dev='hda' bus='ide'/>
      <address type='drive' controller='0' bus='0' target='0' unit='0'/>
    </disk>
    <disk type='file' device='cdrom'>
      <driver name='qemu' type='raw'/>
      <source file='/home/vetrintsev/Документы/win7updtater2.iso'/>
      <target dev='hdc' bus='ide'/>
      <readonly/>
      <address type='drive' controller='0' bus='1' target='0' unit='0'/>
    </disk>
    <controller type='usb' index='0' model='ich9-ehci1'>
      <address type='pci' domain='0x0000' bus='0x02' slot='0x03' function='0x7'/>
    </controller>
    <controller type='usb' index='0' model='ich9-uhci1'>
      <master startport='0'/>
      <address type='pci' domain='0x0000' bus='0x02' slot='0x03' function='0x0' multifunction='on'/>
    </controller>
    <controller type='usb' index='0' model='ich9-uhci2'>
      <master startport='2'/>
      <address type='pci' domain='0x0000' bus='0x02' slot='0x03' function='0x1'/>
    </controller>
    <controller type='usb' index='0' model='ich9-uhci3'>
      <master startport='4'/>
      <address type='pci' domain='0x0000' bus='0x02' slot='0x03' function='0x2'/>
    </controller>
    <controller type='sata' index='0'>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x1f' function='0x2'/>
    </controller>
    <controller type='pci' index='0' model='pcie-root'/>
    <controller type='pci' index='1' model='dmi-to-pci-bridge'>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x1e' function='0x0'/>
    </controller>
    <controller type='pci' index='2' model='pci-bridge'>
      <address type='pci' domain='0x0000' bus='0x01' slot='0x01' function='0x0'/>
    </controller>
    <controller type='virtio-serial' index='0'>
      <address type='pci' domain='0x0000' bus='0x02' slot='0x04' function='0x0'/>
    </controller>
    <controller type='ide' index='0'/>
    <interface type='network'>
      <mac address='52:54:00:d9:10:aa'/>
      <source network='default'/>
      <model type='rtl8139'/>
      <address type='pci' domain='0x0000' bus='0x02' slot='0x01' function='0x0'/>
    </interface>
    <serial type='pty'>
      <target port='0'/>
    </serial>
    <console type='pty'>
      <target type='serial' port='0'/>
    </console>
    <channel type='spicevmc'>
      <target type='virtio' name='com.redhat.spice.0'/>
      <address type='virtio-serial' controller='0' bus='0' port='1'/>
    </channel>
    <input type='tablet' bus='usb'/>
    <input type='mouse' bus='ps2'/>
    <input type='keyboard' bus='ps2'/>
    <graphics type='spice' autoport='yes'/>
    <sound model='ich6'>
      <codec type='micro'/>
      <address type='pci' domain='0x0000' bus='0x02' slot='0x02' function='0x0'/>
    </sound>
    <video>
      <model type='qxl' ram='65536' vram='65536' heads='1'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x0'/>
    </video>
    <redirdev bus='usb' type='spicevmc'>
    </redirdev>
    <redirdev bus='usb' type='spicevmc'>
    </redirdev>
    <memballoon model='virtio'>
      <address type='pci' domain='0x0000' bus='0x02' slot='0x06' function='0x0'/>
    </memballoon>
  </devices>
  <qemu:commandline>
    <qemu:arg value='-device'/>
    <qemu:arg value='ioh3420,bus=pcie.0,addr=1c.0,multifunction=on,port=1,chassis=1,id=root.1'/>
    <qemu:arg value='-device'/>
    <qemu:arg value='vfio-pci,host=01:00.0,bus=root.1,addr=00.0,multifunction=on'/>
    <qemu:arg value='-device'/>
    <qemu:arg value='vfio-pci,host=01:00.1,bus=root.1,addr=00.1'/>
  </qemu:commandline>
</domain>
Vetrintsev
() автор топика
Ответ на: комментарий от anonymous

Раскомментируй строчку user=root

Раскоментировал

Vetrintsev
() автор топика
Ответ на: Скопировал твою машину от Vetrintsev

Да, у меня возникает такая же ошибка, если в файле /etc/libvirt/qemu.conf опция clear_emulator_capabilities установлена в 1 или закомментирована. Раскомментируй и установи её в 0. Не забудь перезапустить сервис libvirtd.service.

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

Не устанавливается винда

Машина стартует, все вроде круто.

Но не могу на нее поставить винду (Windows 7 x64 Ultimate): Все параметры ввел, виснет на этапе «Копирование файлов Windows (0%)...» Точки перебирает, а с диска инфу не читает, висит бесконечно.

Этот трабл я замечал уже, кода повторно пытался установить винду в прошлый раз на ту же ВМ. Не встает. Когда я создаю ВМ и в этот момент запускаю установку (virt-manager по другому не дает) то установка проходит без сучка и задоринки. Но повторная установки не получается, восит именно на этом этапе.

Может проблема с виртуальным жестким диском? Кто нибудь с этим сталкивался?

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

Прогресс!

Драйвера на карту встали. сохраню здесь конфиг системы на котором все заработало (commandline я добавил после установки винды)

Теперь надо седалать проброшенную карту основной и отключить виртуальную.

<domain type='kvm' xmlns:qemu='http://libvirt.org/schemas/domain/qemu/1.0'>
  <name>win7x64</name>
  <uuid>0a9d31db-e5fe-41c5-adf9-0c5634f91f86</uuid>
  <memory unit='KiB'>6291456</memory>
  <currentMemory unit='KiB'>6291456</currentMemory>
  <vcpu placement='static'>8</vcpu>
  <os>
    <type arch='x86_64' machine='pc-q35-2.1'>hvm</type>
    <bootmenu enable='no'/>
  </os>
  <features>
    <acpi/>
    <apic/>
    <pae/>
    <kvm>
      <hidden state='on'/>
    </kvm>
  </features>
  <cpu mode='host-passthrough'>
    <topology sockets='1' cores='4' threads='2'/>
  </cpu>
  <clock offset='localtime'>
    <timer name='rtc' tickpolicy='catchup'/>
    <timer name='pit' tickpolicy='delay'/>
    <timer name='hpet' present='no'/>
  </clock>
  <on_poweroff>destroy</on_poweroff>
  <on_reboot>restart</on_reboot>
  <on_crash>restart</on_crash>
  <pm>
    <suspend-to-mem enabled='no'/>
    <suspend-to-disk enabled='no'/>
  </pm>
  <devices>
    <emulator>/usr/bin/qemu-system-x86_64</emulator>
    <disk type='file' device='disk'>
      <driver name='qemu' type='raw'/>
      <source file='/home/vetrintsev/Документы/w7x64.img'/>
      <target dev='hda' bus='ide'/>
      <boot order='2'/>
      <address type='drive' controller='0' bus='0' target='0' unit='0'/>
    </disk>
    <disk type='file' device='cdrom'>
      <driver name='qemu' type='raw'/>
      <source file='/home/vetrintsev/Документы/Windows 7 SP1 x86-x64 Ru 9in1 Orig Upd 05.2015 by OVGorskiy.iso'/>
      <target dev='hdd' bus='ide'/>
      <readonly/>
      <boot order='1'/>
      <address type='drive' controller='0' bus='1' target='0' unit='0'/>
    </disk>
    <controller type='usb' index='0' model='ich9-ehci1'>
      <address type='pci' domain='0x0000' bus='0x02' slot='0x03' function='0x7'/>
    </controller>
    <controller type='usb' index='0' model='ich9-uhci1'>
      <master startport='0'/>
      <address type='pci' domain='0x0000' bus='0x02' slot='0x03' function='0x0' multifunction='on'/>
    </controller>
    <controller type='usb' index='0' model='ich9-uhci2'>
      <master startport='2'/>
      <address type='pci' domain='0x0000' bus='0x02' slot='0x03' function='0x1'/>
    </controller>
    <controller type='usb' index='0' model='ich9-uhci3'>
      <master startport='4'/>
      <address type='pci' domain='0x0000' bus='0x02' slot='0x03' function='0x2'/>
    </controller>
    <controller type='sata' index='0'>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x1f' function='0x2'/>
    </controller>
    <controller type='pci' index='0' model='pcie-root'/>
    <controller type='pci' index='1' model='dmi-to-pci-bridge'>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x1e' function='0x0'/>
    </controller>
    <controller type='pci' index='2' model='pci-bridge'>
      <address type='pci' domain='0x0000' bus='0x01' slot='0x01' function='0x0'/>
    </controller>
    <controller type='virtio-serial' index='0'>
      <address type='pci' domain='0x0000' bus='0x02' slot='0x04' function='0x0'/>
    </controller>
    <controller type='ide' index='0'/>
    <interface type='network'>
      <mac address='52:54:00:d9:10:aa'/>
      <source network='default'/>
      <model type='rtl8139'/>
      <address type='pci' domain='0x0000' bus='0x02' slot='0x01' function='0x0'/>
    </interface>
    <serial type='pty'>
      <target port='0'/>
    </serial>
    <console type='pty'>
      <target type='serial' port='0'/>
    </console>
    <channel type='spicevmc'>
      <target type='virtio' name='com.redhat.spice.0'/>
      <address type='virtio-serial' controller='0' bus='0' port='1'/>
    </channel>
    <input type='tablet' bus='usb'/>
    <input type='mouse' bus='ps2'/>
    <input type='keyboard' bus='ps2'/>
    <graphics type='spice' autoport='yes'/>
    <sound model='ich6'>
      <codec type='micro'/>
      <address type='pci' domain='0x0000' bus='0x02' slot='0x02' function='0x0'/>
    </sound>
    <video>
      <model type='qxl' ram='65536' vram='65536' heads='1'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x0'/>
    </video>
    <redirdev bus='usb' type='spicevmc'>
    </redirdev>
    <redirdev bus='usb' type='spicevmc'>
    </redirdev>
    <memballoon model='virtio'>
      <address type='pci' domain='0x0000' bus='0x02' slot='0x06' function='0x0'/>
    </memballoon>
  </devices>
  <qemu:commandline>
    <qemu:arg value='-device'/>
    <qemu:arg value='ioh3420,bus=pcie.0,addr=1c.0,multifunction=on,port=1,chassis=1,id=root.1'/>
    <qemu:arg value='-device'/>
    <qemu:arg value='vfio-pci,host=01:00.0,bus=root.1,addr=00.0,multifunction=on'/>
    <qemu:arg value='-device'/>
    <qemu:arg value='vfio-pci,host=01:00.1,bus=root.1,addr=00.1'/>
  </qemu:commandline>
</domain>

Vetrintsev
() автор топика
Ответ на: Прогресс! от Vetrintsev

Если отключишь виртуальную карту, то отдельно придётся со звуком разбираться и думать, как клавиатуру и мышь пробрасывать в виртуалку, чтобы одновременно можно было ими пользоваться на хосте и в госте. Я использовал synergy, но тогда мышь себя странно ведёт в играх, да и некоторые игры(привет, иннова) блокируют клаву. Хотя, мышь и через vnc/spice себя ведёт странно, поэтому у меня 2 мыши и одна из них прокинута в виртуалку. Я обновил 7-ю винду до 10-ки, потому что семёрка на моей системе не работала с виртуальным адаптером, а 8-ка и 10-ка работали, и мне лень было в очередной раз писать конфиги, чтобы запустить пульсу как системный демон.

Чтобы сделать проброшенную карту основной, надо удалить секции <video> и <graphics> и изменить одну строчку в <commandline> на следующую:

<qemu:arg value='vfio-pci,host=01:00.0,bus=root.1,addr=00.0,multifunction=on,x-vga=on'/>

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

Подключил телек по HDMI

Карта пробросилась, винда без родных драйверов на Nvidia пока грузится...

Экран приветствия вижу.

Загрузилась!

Пробую ставить дрова)

Vetrintsev
() автор топика
Ответ на: Подключил телек по HDMI от Vetrintsev

Пишу с ВМ )))

Дрова встали!

Вот скрин оценки производительности https://cloud.mail.ru/public/Cnzq/WDwhpAstV

Вроде все встало. Клава с мышью у меня есть еще - проброшу.

Сейчас хочу пробросить два юсб порта напрямую в ВМ.

ниже выложу текущий конфиг.

Vetrintsev
() автор топика
Ответ на: Пишу с ВМ ))) от Vetrintsev

Конфиг с проброшенной картой

<domain type='kvm' xmlns:qemu='http://libvirt.org/schemas/domain/qemu/1.0'>
  <name>win7x64</name>
  <uuid>0a9d31db-e5fe-41c5-adf9-0c5634f91f86</uuid>
  <memory unit='KiB'>6291456</memory>
  <currentMemory unit='KiB'>6291456</currentMemory>
  <vcpu placement='static'>8</vcpu>
  <os>
    <type arch='x86_64' machine='pc-q35-2.1'>hvm</type>
    <bootmenu enable='no'/>
  </os>
  <features>
    <acpi/>
    <apic/>
    <pae/>
    <kvm>
      <hidden state='on'/>
    </kvm>
  </features>
  <cpu mode='host-passthrough'>
    <topology sockets='1' cores='4' threads='2'/>
  </cpu>
  <clock offset='localtime'>
    <timer name='rtc' tickpolicy='catchup'/>
    <timer name='pit' tickpolicy='delay'/>
    <timer name='hpet' present='no'/>
  </clock>
  <on_poweroff>destroy</on_poweroff>
  <on_reboot>restart</on_reboot>
  <on_crash>restart</on_crash>
  <pm>
    <suspend-to-mem enabled='no'/>
    <suspend-to-disk enabled='no'/>
  </pm>
  <devices>
    <emulator>/usr/bin/qemu-system-x86_64</emulator>
    <disk type='file' device='disk'>
      <driver name='qemu' type='raw'/>
      <source file='/home/vetrintsev/Документы/w7x64.img'/>
      <target dev='hda' bus='ide'/>
      <address type='drive' controller='0' bus='0' target='0' unit='0'/>
    </disk>
    <disk type='file' device='cdrom'>
      <driver name='qemu' type='raw'/>
      <source file='/home/vetrintsev/Документы/Windows 7 SP1 x86-x64 Ru 9in1 Orig Upd 05.2015 by OVGorskiy.iso'/>
      <target dev='hdd' bus='ide'/>
      <readonly/>
      <boot order='1'/>
      <address type='drive' controller='0' bus='1' target='0' unit='0'/>
    </disk>
    <controller type='usb' index='0' model='ich9-ehci1'>
      <address type='pci' domain='0x0000' bus='0x02' slot='0x03' function='0x7'/>
    </controller>
    <controller type='usb' index='0' model='ich9-uhci1'>
      <master startport='0'/>
      <address type='pci' domain='0x0000' bus='0x02' slot='0x03' function='0x0' multifunction='on'/>
    </controller>
    <controller type='usb' index='0' model='ich9-uhci2'>
      <master startport='2'/>
      <address type='pci' domain='0x0000' bus='0x02' slot='0x03' function='0x1'/>
    </controller>
    <controller type='usb' index='0' model='ich9-uhci3'>
      <master startport='4'/>
      <address type='pci' domain='0x0000' bus='0x02' slot='0x03' function='0x2'/>
    </controller>
    <controller type='sata' index='0'>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x1f' function='0x2'/>
    </controller>
    <controller type='pci' index='0' model='pcie-root'/>
    <controller type='pci' index='1' model='dmi-to-pci-bridge'>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x1e' function='0x0'/>
    </controller>
    <controller type='pci' index='2' model='pci-bridge'>
      <address type='pci' domain='0x0000' bus='0x01' slot='0x01' function='0x0'/>
    </controller>
    <controller type='virtio-serial' index='0'>
      <address type='pci' domain='0x0000' bus='0x02' slot='0x04' function='0x0'/>
    </controller>
    <controller type='ide' index='0'/>
    <interface type='network'>
      <mac address='52:54:00:d9:10:aa'/>
      <source network='default'/>
      <model type='rtl8139'/>
      <address type='pci' domain='0x0000' bus='0x02' slot='0x01' function='0x0'/>
    </interface>
    <serial type='pty'>
      <target port='0'/>
    </serial>
    <console type='pty'>
      <target type='serial' port='0'/>
    </console>
    <channel type='spicevmc'>
      <target type='virtio' name='com.redhat.spice.0'/>
      <address type='virtio-serial' controller='0' bus='0' port='1'/>
    </channel>
    <input type='tablet' bus='usb'/>
    <redirdev bus='usb' type='spicevmc'>
    </redirdev>
    <redirdev bus='usb' type='spicevmc'>
    </redirdev>
    <memballoon model='virtio'>
      <address type='pci' domain='0x0000' bus='0x02' slot='0x06' function='0x0'/>
    </memballoon>
  </devices>
  <qemu:commandline>
    <qemu:arg value='-device'/>
    <qemu:arg value='ioh3420,bus=pcie.0,addr=1c.0,multifunction=on,port=1,chassis=1,id=root.1'/>
    <qemu:arg value='-device'/>
    <qemu:arg value='vfio-pci,host=01:00.0,bus=root.1,addr=00.0,multifunction=on,x-vga=on'/>
    <qemu:arg value='-device'/>
    <qemu:arg value='vfio-pci,host=01:00.1,bus=root.1,addr=00.1'/>
  </qemu:commandline>
</domain>
Vetrintsev
() автор топика
Ответ на: комментарий от anonymous

Как пробросить usb порты

Хочу теперь пробросить два порта USB чтобы устройства напрямую валились в гостя.

В твоем конфиге нашел вот это:

    <hostdev mode='subsystem' type='usb' managed='yes'>
      <source>
        <vendor id='0x046d'/>
        <product id='0xc24a'/>
      </source>
    </hostdev>
    <hostdev mode='subsystem' type='usb' managed='yes'>
      <source>
        <vendor id='0x046d'/>
        <product id='0xc21c'/>
      </source>
    </hostdev>

Я так понимаю эти строчки как раз делаю то, что мне надо.

Как мне определить id шники конкретных портов? Я вставлю туда HDD, смогу ли узнать на каком порту висит этот HDD и выявить его vendor/product ids?

Vetrintsev
() автор топика
Ответ на: Как пробросить usb порты от Vetrintsev

Нет, это я пробрасываю отдельные usb-устройства, а именно, клавиатуру G13 и мышь G600 (они в вм полноценно работают, дрова на них встали и родной софт logitech имеет к ним полный доступ - макросы, запись в память устройства и т.д.). Чтобы пробросить именно порт, нужно пробросить полностью контроллер, к которому цепляется этот порт. Естественно, остальные порты, висящие на этом контроллере, станут недоступны на хосте. То есть с помощью lspci найти usb контроллеры, присутствующие в системе, а дальше с помощью метода тыка прокидывать по одному в виртуалку (я делал так, возможно, это можно сделать не наугад, но я просто не знаю как).

Прокинуть отдельные usb-устройства проще всего через virt-manager (добавить оборудование -> USB Host Device). Прокинуть контроллер usb можно тоже через virt-manager (добавить оборудование -> PCI Host Device), но такой метод может не сработать, тогда надо действовать так же, как с видео картой: забиндить сначала на pci-stub (это для debian с ядром 3.16), потом на vfio-pci, потом в конфиге вм в секцию <commandline> добавить нужные строчки. Но здесь я уже не подскажу, ибо было это давно, когда у меня был amd, на котором у меня не работал проброс контроллера через virt-manager и приходилось пробрасывать его через ручное редактирование конфига вм. Сейчас я пробрасываю отдельные usb-девайсы и они тупо работают в госте без всяких заморочек.

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

Синий экран

После второй перезагрузки без других изменений вылетел синий экран, значек винды только начал проявляться и синий экран (((

Обнадежило меня вчера...

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

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

Еще прочитал что свежие дрова Nvidia обходят kvm=off, а значит это не лечит: http://lime-technology.com/forum/index.php?topic=38664.0

Вот у него: http://www.fassen.net/video/v1cFWrKtWis/ Все заработало... Как мне повторить его опыт, CPU и GPU у одинаковые, должно же заработать? не могу все же понять как это запустить

Vetrintsev
() автор топика
6 августа 2016 г.
Ответ на: комментарий от anonymous

Проброс двух gtx970

Подниму тему, нужна помощь)

Подскажите как корректно поднять этот сервис:

[Unit]
Description=Binds devices to vfio-pci
ConditionPathExists=!/proc/xen
After=syslog.target

[Service]
Environment="DEVICES=0000:03:00.0 0000:03:00.1"
Type=oneshot
RemainAfterExit=yes
ExecStartPre=/sbin/modprobe vfio-pci
ExecStart=/usr/sbin/vfio-bind $DEVICES

[Install]
WantedBy=multi-user.target

Для двух gtx970 со следующими dev:

0000:01:00.0 0000:01:00.1
0000:02:00.0 0000:02:00.1

Чтобы потом их пробросить в две VM?

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

Ошибка vfio-bind.service

У меня поменялась конфигурация системы.

В прошлый раз мне удалось все запустить, проблемой была операционная система - поставил windows 8.1 и все заработало, рубился в gta iv.

Теперь пошел дальше. Ту систему я слил, оставил только gtx970

и сейчас у меня другая конфигурация:

intel core i7 6700

gtx970 gygabyte gtx970 asus

мать: asus z170 pro gaming

Хочу запустить две виртуалки, чтоб у каждой была своя gtx970.

виртуализацию и VDt включил в биосе.

но не могу запустить debian после автозапуска vfio-bind.service

сделал все по твоей инструкции:

lspci:

...
01:00.0 VGA compatible controller: NVIDIA Corporation Device 13c2 (rev a1)
01:00.1 Audio device: NVIDIA Corporation Device 0fbb (rev a1)
02:00.0 VGA compatible controller: NVIDIA Corporation Device 13c2 (rev a1)
02:00.1 Audio device: NVIDIA Corporation Device 0fbb (rev a1)
04:00.0 USB controller: ASMedia Technology Inc. Device 1242
05:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller (rev 06)

lspci -n:

...
01:00.0 0300: 10de:13c2 (rev a1)
01:00.1 0403: 10de:0fbb (rev a1)
02:00.0 0300: 10de:13c2 (rev a1)
02:00.1 0403: 10de:0fbb (rev a1)
04:00.0 0c03: 1b21:1242
05:00.0 0200: 10ec:8168 (rev 06)

grub:

GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on"

update-grub2 выполнил.

pci-stub.conf:

options pci-stub ids=10de:13c2,10de:0fbb

/usr/sbin/vfio-bind:

#!/bin/sh

for dev in $@; do
  vendor=$(cat /sys/bus/pci/devices/$dev/vendor)
  device=$(cat /sys/bus/pci/devices/$dev/device)
  if [ -e /sys/bus/pci/devices/$dev/driver ]; then
    echo $dev > /sys/bus/pci/devices/$dev/driver/unbind
  fi
  echo $vendor $device > /sys/bus/pci/drivers/vfio-pci/new_id
done

chmod 755 /usr/sbin/vfio-bind выполнено.

/etc/systemd/system/vfio-bind.service:

[Unit]
Description=Binds devices to vfio-pci
ConditionPathExists=!/proc/xen
After=syslog.target

[Service]
Environment="DEVICES=0000:01:00.0 0000:01:00.1"
Type=oneshot
RemainAfterExit=yes
ExecStartPre=/sbin/modprobe vfio-pci
ExecStart=/usr/sbin/vfio-bind $DEVICES

[Install]
WantedBy=multi-user.target

Далее выполняю systemctl enable vfio-bind.service

Перезагружаюсь и фсе. Летят ошибки.

Что я не так сделал?

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

убрал, проблема сохранилась.

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

При загрузке вываливает много ошибок и в конце пишет:

Fixing recursive fault but reboot is needed

Что не так? На прошлой конфигурации этот шаг прошел без ошибок, а здесь такая хрень...

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

Попробовал стартануть сервис на запущенной системе.

в dev/vfio/ появился файл 1

создаю Вирт машину (пока через вирт манагер) вываливает ошибку:

Ошибка запуска : internal error: early end of file from monitor: possible problem:
2016-08-06T23:24:55.800673Z qemu-system-x86_64: -device vfio-pci,host=02:00.0,id=hostdev0,bus=pci.0,addr=0x8: vfio: error, group 1 is not viable, please ensure all devices within the iommu_group are bound to their vfio bus driver.
2016-08-06T23:24:55.800697Z qemu-system-x86_64: -device vfio-pci,host=02:00.0,id=hostdev0,bus=pci.0,addr=0x8: vfio: failed to get group 1
2016-08-06T23:24:55.800707Z qemu-system-x86_64: -device vfio-pci,host=02:00.0,id=hostdev0,bus=pci.0,addr=0x8: Device initialization failed.
2016-08-06T23:24:55.800718Z qemu-system-x86_64: -device vfio-pci,host=02:00.0,id=hostdev0,bus=pci.0,addr=0x8: Device 'vfio-pci' could not be initialized

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

Вот следующая ошибка.

Решил попробовать сделать все по инструкции, за исключением запуска сервиса vfio-bind.service, его стартую вручную после отображения рабочего стола.

Создал конфиг виртмашины как в самом последнем варианте (он был 100% рабочий)

Поправил qemu.conf.

перезапустил libvirt

Запускаю виртмашину и вижу ту же ошибку: «group 1 is not viable»

Перевод мне сказал «Группа 1 не жиснеспособна» :)

Может быть проблема в том, что я не ставил ни какие драйвера на debian? Может хотя бы на мать их надо все же поставить?

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

Странно

про iommu groups оказалось у меня следующее:

/sys/kernel/iommu_groups/1/devices/0000:00:01.0 /sys/kernel/iommu_groups/1/devices/0000:00:01.1 /sys/kernel/iommu_groups/1/devices/0000:01:00.0 /sys/kernel/iommu_groups/1/devices/0000:01:00.1 /sys/kernel/iommu_groups/1/devices/0000:02:00.0 /sys/kernel/iommu_groups/1/devices/0000:02:00.1

передал в vfio все 6 устройств. сделал автозапуск вфио сервиса и получил ту же ошибку.

НО!

Попробовал запустить сервис после запуска рабочего стола. Вуаяля!

Стартую виртмашину, запускаю ... на телеке появляется экран виртмашины и идет загрузка!!! Проброс осуществлен!

Почему не срабатывает systemctl enable vfio-bind.service?

Также пока не получилось загрузиться с диска, виснет и все, но здесь я думаю проблема в образе, видимо побился при копировании...

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

Новичек пытается пробросить GTX 970 на qemu-kvm

Я знаю, кто такой Новичек... Это - друг Йозефа Швейка...

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

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

Я столкнулся с новой проблемой...

видимо устройства с одного iommu_group не собираются пробрасываться в разные виртуалки...

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