LinuxForum.Fans
Тема

KVM проброс PCI

Автор: FreeOwl 17 сообщений 12371 просмотров 📌 закреплена
29.10.2013 14:00 #346001

имеется: Debian 3.2.51-1 x86_64 GNU/Linux
QEMU emulator version 1.1.2 (qemu-kvm-1.1.2+dfsg-6, Debian), Copyright (c) 2003-2008 Fabrice Bellard

text

# lspci |grep Tiger
09:03.0 Communication controller: Tiger Jet Network Inc. Tiger3XX Modem/ISDN interface

# lspci -n |grep 09:03.0 09:03.0 0780: e159:0001

# readlink /sys/bus/pci/devices/0000\:09\:03.0/driver ../../../../bus/pci/drivers/pci-stub

# virt-install -n vm03ipats -r 4096 --vcpus=2,maxvcpus=4 --disk path=vm03_ipats.img,size=40 --accelerate --os-type=linux --os-variant=debianwheezy -w bridge:kvmbr0 -v --description=Asterisk --host-device=09:03.0 --boot hd

Starting install... ERROR Unable to read from monitor: Connection reset by peer Domain installation does not appear to have been successful. If it was, you can restart your domain by running: virsh --connect qemu:///system start vm03ipats otherwise, please restart your installation.

или если через virt-manager

Не удалось завершить установку: 'Unable to read from monitor:
Connection reset by peer'

Traceback (most recent call last):
File "/usr/share/virt-manager/virtManager/asyncjob.py", line 100, in
cb_wrapper
callback(asyncjob, *args, **kwargs)
File "/usr/share/virt-manager/virtManager/create.py", line 1920, in do_install
guest.start_install(False, meter=meter)
File "/usr/share/virt-manager/virtinst/Guest.py", line 1134, in start_install
noboot)
File "/usr/share/virt-manager/virtinst/Guest.py", line 1202, in _create_guest
dom = self.conn.createLinux(start_xml or final_xml, 0)
File "/usr/lib64/python2.7/site-packages/libvirt.py", line 2897, in
createLinux
if ret is None:raise libvirtError('virDomainCreateLinux() failed',
conn=self)
libvirtError: Unable to read from monitor: Connection reset by peer

что я делаю не так? помогите пожалуйста...

29.10.2013 17:52 #346034

сначала провести нормальную инсталляцию, а потом цеплють host device через virsh edit

29.10.2013 20:45 #346051
dyasny написал:
сначала провести нормальную инсталляцию, а потом цеплють host device через virsh edit

нормальная установка - сделал
цепляю через эдит:

text
# virsh nodedev-dumpxml pci_0000_09_03_0
<device>
  <name>pci_0000_09_03_0</name>
  <parent>pci_0000_00_1e_0</parent>
  <capability type='pci'>
    <domain>0</domain>
    <bus>9</bus>
    <slot>3</slot>
    <function>0</function>
    <product id='0x0001'>Tiger3XX Modem/ISDN interface</product>
    <vendor id='0xe159'>Tiger Jet Network Inc.</vendor>
    <capability type='virt_functions'>
    </capability>
  </capability>
</device>
text
# virsh nodedev-dettach pci_0000_09_03_0
Device pci_0000_09_03_0 detached

дальше я вставляю

text
    <hostdev mode='subsystem' type='pci' managed='yes'>
      <source>
        <address domain='0x0000' bus='0x09' slot='0x03' function='0x0'/>
      </source>
    </hostdev>

сохраняю, закрываю, открывю на редактирование, а там

text
    <hostdev mode='subsystem' type='pci' managed='yes'>
      <source>
        <address domain='0x0000' bus='0x09' slot='0x03' function='0x0'/>
      </source>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x08' function='0x0'/>
    </hostdev>

<address type='pci' domain='0x0000' bus='0x00' slot='0x08' function='0x0'/> - это откуда берётся?
как бы то нибыло, сей танец с бубном ничего не дал:

text

# virsh start asterisk
error: Failed to start domain asterisk
error: Unable to read from monitor: Connection reset by peer
29.10.2013 21:34 #346054

что в логах?

29.10.2013 21:57 #346060
dyasny написал:
что в логах?

по-моему нашёл причину
лог:

text
2013-10-29 18:10:28.968+0000: starting up
LC_ALL=C PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin HOME=/ QEMU_AUDIO_DRV=spice /usr/bin/kvm -S -M pc-1.1 -enable-kvm -m 4096 -smp 4,sockets=4,cores=1,threads=1 -name asterisk -uuid 113e185e-c8be-1848-1f89-106e4d445cf0 -no-user-config -nodefaults -chardev socket,id=charmonitor,path=/var/lib/libvirt/qemu/asterisk.monitor,server,nowait -mon chardev=charmonitor,id=monitor,mode=control -rtc base=utc -no-shutdown -device piix3-usb-uhci,id=usb,bus=pci.0,addr=0x1.0x2 -device virtio-serial-pci,id=virtio-serial0,bus=pci.0,addr=0x5 -drive file=/mnt/disk4tb02/kvm01.data/vm03_asterisk.img,if=none,id=drive-virtio-disk0,format=raw,cache=none -device virtio-blk-pci,scsi=off,bus=pci.0,addr=0x6,drive=drive-virtio-disk0,id=virtio-disk0,bootindex=1 -drive if=none,id=drive-ide0-1-0,readonly=on,format=raw -device ide-cd,bus=ide.1,unit=0,drive=drive-ide0-1-0,id=ide0-1-0 -netdev tap,fd=25,id=hostnet0 -device virtio-net-pci,netdev=hostnet0,id=net0,mac=52:54:00:81:59:cb,bus=pci.0,addr=0x3 -chardev pty,id=charserial0 -device isa-serial,chardev=charserial0,id=serial0 -chardev spicevmc,id=charchannel0,name=vdagent -device virtserialport,bus=virtio-serial0.0,nr=1,chardev=charchannel0,id=channel0,name=com.redhat.spice.0 -spice port=5902,addr=127.0.0.1,disable-ticketing -vga qxl -global qxl-vga.vram_size=67108864 -device intel-hda,id=sound0,bus=pci.0,addr=0x4 -device hda-duplex,id=sound0-codec0,bus=sound0.0,cad=0 -device pci-assign,host=09:03.0,id=hostdev0,configfd=26,bus=pci.0,addr=0x8 -device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x7
char device redirected to /dev/pts/5
do_spice_init: starting 0.11.0
spice_server_add_interface: SPICE_INTERFACE_MIGRATION
spice_server_add_interface: SPICE_INTERFACE_KEYBOARD
spice_server_add_interface: SPICE_INTERFACE_MOUSE
spice_server_add_interface: SPICE_INTERFACE_QXL
red_worker_main: begin
display_channel_create: create display channel
cursor_channel_create: create cursor channel
spice_server_add_interface: SPICE_INTERFACE_PLAYBACK
spice_server_add_interface: SPICE_INTERFACE_RECORD
No IOMMU found.  Unable to assign device "hostdev0"
kvm: -device pci-assign,host=09:03.0,id=hostdev0,configfd=26,bus=pci.0,addr=0x8: Device 'pci-assign' could not be initialized
spice_server_remove_interface: remove SPICE_INTERFACE_PLAYBACK
spice_server_remove_interface: remove SPICE_INTERFACE_RECORD
2013-10-29 18:10:29.451+0000: shutting down

No IOMMU found. Unable to assign device "hostdev0" -

29.10.2013 23:53 #346075

IOMMU/VT-d в биосе есть и включен?

30.10.2013 10:40 #346142

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

ERROR Unable to read from monitor: Connection reset by peer

а в логи писало

No IOMMU found. Unable to assign device "hostdev0" -

решение такое:
-> В файле настроек GRUB (/etc/default/grub)

text
#KVM
GRUB_CMDLINE_LINUX_DEFAULT="intel_iommu=on"

для AMD IOMMU - будет другая строка (доп инфо)
-> В каталоге /etc/modprobe.d, файл kvm_iommu_map_guest.conf со следущим содержанием:

text
options kvm allow_unsafe_assigned_interrupts=1

-> update-grub.
-> reboot
lspci -vb
ХОСТ

text
09:03.0 Network controller: Tiger Jet Network Inc. Tiger3XX Modem/ISDN interface
        Subsystem: OpenVox Communication Co. Ltd. Device 0001
        Flags: medium devsel
        I/O ports at <unassigned>
        Capabilities: [40] Power Management version 2
        Kernel driver in use: pci-stub

ГОСТЬ

text
00:06.0 Network controller: Tiger Jet Network Inc. Tiger3XX Modem/ISDN interface
        Subsystem: OpenVox Communication Co. Ltd. Device 0001
        Physical Slot: 6
        Flags: medium devsel, IRQ 10
        I/O ports at c000
        Memory at febf7000 (32-bit, non-prefetchable)
        Capabilities: [40] Power Management version 2
30.10.2013 12:03 #346174

Тему отметил как важную, т.к. есть решение нужной проблемы с пробросом PCI в KVM

30.10.2013 20:31 #346310

ну да, если есть VT-d надо его еще и включить

31.10.2013 11:02 · отредактировано #346407

только в госте драйвер не цепляется :(
dyasny, не подскажешь как быть?
Memory at febf6000 (32-bit, non-prefetchable)
Capabilities: [40] MSI-X: Enable+ Count=2 Masked-
Kernel driver in use: virtio-pci

00:06.0 Network controller: Tiger Jet Network Inc. Tiger3XX Modem/ISDN interface
Subsystem: OpenVox Communication Co. Ltd. Device 0001
Physical Slot: 6
Flags: bus master, medium devsel, latency 64, IRQ 10
I/O ports at c000
Memory at febf7000 (32-bit, non-prefetchable)
Capabilities: [40] Power Management version 2


00:07.0 Unclassified device [00ff]: Red Hat, Inc Virtio memory balloon
Subsystem: Red Hat, Inc Device 0005
Physical Slot: 7

text
# dmesg |grep 00:06.0
[    0.125611] pci 0000:00:06.0: [e159:0001] type 0 class 0x000280
[    0.129376] pci 0000:00:06.0: reg 10: [io  0xc000-0xc0ff]
[    0.132111] pci 0000:00:06.0: reg 14: [mem 0xfebf7000-0xfebf7fff]
[    0.146733] pci 0000:00:06.0: supports D2
[    0.146749] pci 0000:00:06.0: PME# supported from D0 D2 D3hot D3cold
[    5.994216] wctdm: probe of 0000:00:06.0 failed with error -5
[  187.364521] wctdm: probe of 0000:00:06.0 failed with error -5
31.10.2013 19:31 #346552

а на хосте wcdtm его нормально находил? я бы еще попробовал заблеклистить его на хосте, чтоб не было конфликтов при пробросе

26.12.2013 11:00 #357247

тоже попробую спросить. Пытаюсь пробросить древнюю плату Farsync T1U, информация о ней из lspci:

text
01:05.0 Communication controller: FarSite Communications Ltd FarSync T1U (1 port X.21/V.35/V.24) (rev 03)
    Subsystem: PLX Technology, Inc. Device 9054
    Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV+ VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx-
    Status: Cap+ 66MHz- UDF- FastB2B+ ParErr- DEVSEL=medium >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
    Latency: 64 (1000ns min, 10000ns max), Cache Line Size: 256 bytes
    Interrupt: pin A routed to IRQ 19
    Region 0: Memory at fa1ffc00 (32-bit, non-prefetchable) [size=256]
    Region 1: I/O ports at a800 [size=256]
    Region 2: Memory at fa200000 (32-bit, non-prefetchable) [size=1M]
    Region 3: Memory at fa1ff800 (32-bit, non-prefetchable) [size=16]
    Capabilities: [40] Power Management version 1
        Flags: PMEClk- DSI- D1- D2- AuxCurrent=0mA PME(D0-,D1-,D2-,D3hot-,D3cold-)
        Status: D0 NoSoftRst- PME-Enable- DSel=0 DScale=0 PME-
    Capabilities: [48] CompactPCI hot-swap <?>
    Kernel driver in use: fst
    Kernel modules: farsync

Добавлчю что через virt-manager что вручную через virsh edit ошибка в логах виртуалки

text
Failed to assign irq for "hostdev1": Input/output error
Perhaps you are assigning a device that shares an IRQ with another device?
kvm: -device pci-assign,host=00:1a.2,id=hostdev1,configfd=25,bus=pci.0,addr=0x6: Device 'pci-assign' could not be initialized
2013-12-24 14:47:47.274+0000: shutting down

IRQ она действительно шарит еще с двумя устройствами. Можно ли что-то сделать или без поддержки MSI со стороны устройства уже ничего не поделаешь? Тестирую на ядре 3.12.6, QEMU emulator version 1.2.0

30.12.2013 21:22 #357976
"donhenaro" написал:
Perhaps you are assigning a device that shares an IRQ with another device?
10.01.2014 16:42 #359106

dyasny, я же написал, что она шарит прирывания, не отрицаю. Вопрос как это обойти, на современных материнках почти на всех прерываниях сидит по несколько устройств.

11.01.2014 07:47 #359326
"donhenaro" написал:
dyasny, я же написал, что она шарит прирывания, не отрицаю. Вопрос как это обойти, на современных материнках почти на всех прерываниях сидит по несколько устройств.

ну, если система против, то никак. на самом деле это уже совсем low level, я бы спросил в рассылках kvm или на IRC

14.11.2014 13:13 #400819

Дистрибутив openSUSE 13.2.
есть две видяхи:
[console]01:00.0 VGA compatible controller [0300]: NVIDIA Corporation GF106 [GeForce GTS 450] [10de:0dc4] (rev a1)
01:00.1 Audio device [0403]: NVIDIA Corporation GF106 High Definition Audio Controller [10de:0be9] (rev a1)
02:00.0 VGA compatible controller [0300]: NVIDIA Corporation GK107 [GeForce GTX 650] [10de:0fc6] (rev a1)
02:00.1 Audio device [0403]: NVIDIA Corporation GK107 HDMI Audio Controller [10de:0e1b] (rev a1)[/console]
На хосте GTS 450. Реально ли сделать проброс второй видяхи в виртуальную машину? Где то читал что нормально пробрасываются только AMD....

14.11.2014 18:30 #400848

по идее возможно, если железо поддерживает VT-d

Войдите или зарегистрируйтесь, чтобы ответить.