Portál AbcLinuxu, 5. května 2025 21:33

Dotaz: Zkušenosti s VFIO Virtual Function I/O (qemu/kvm)

7.6.2014 02:34 Lazar
Zkušenosti s VFIO Virtual Function I/O (qemu/kvm)
Přečteno: 496×
Odpovědět | Admin

VFIO .. Způsob zpřístupnění fyzického HW v GuestOSu (QEMU/KVM) s využitím IOMMU/VT-d.

https://www.kernel.org/doc/Documentation/vfio.txt

https://bbs.archlinux.org/viewtopic.php?id=162768

Vycházeje z tohoto návodu, podařilo se mi GuestOSu (sorry za Windows) zpřístupnit jak 2.GK(PCIe ATI), tak například SCSI řadič (PCI Adaptec). Použita distribuce Kubuntu 14.04x64 s vanilla jádrem 3.14.4.

http://www.monitos.cz/tmp/x3430_vfio_pci_scsi.png

PCI strom (lspci -k) vypadá takto:
-+-[0000:ff]-+-00.0
 |           +-00.1
 |           +-02.0
 |           +-02.1
 |           +-03.0
 |           +-03.1
 |           +-03.2
 |           +-03.4
 |           +-04.0
 |           +-04.1
 |           +-04.2
 |           +-04.3
 |           +-05.0
 |           +-05.1
 |           +-05.2
 |           \-05.3
 \-[0000:00]-+-00.0
             +-03.0-[01-05]----00.0-[02-05]--+-00.0-[03]----00.0
             |                               +-02.0-[04]--+-00.0
             |                               |            \-00.1
             |                               \-03.0-[05]----00.0
             +-08.0
             +-08.1
             +-08.2
             +-08.3
             +-10.0
             +-10.1
             +-1a.0
             +-1b.0
             +-1c.0-[06]----00.0
             +-1c.1-[07]----00.0
             +-1c.2-[08]----00.0
             +-1c.3-[09]--+-00.0
             |            \-00.1
             +-1c.6-[0a]--+-00.0
             |            \-00.1
             +-1d.0
             +-1e.0-[0b]--
             +-1f.0
             +-1f.2
             \-1f.3

Kombinované SATA/IDE řadiče JMicron jsou připojeny na 09:00.0,09:00.1 (druhý 0a:00.0,0a:00.1). Při snaze o zpřístupnění v GuestOSu jednoho z integrovaných SATA/IDE řadičů JMicron JB36x na MB, základní deska MSI Big Bang Trinergy MSI-7580 (MB:P55/NF200-based + CPU:X3430 jich obsahuje několik, se mi objevilo hlášení.

group 6 is not viable, please ensure all devices within the iommu_group

Problém asi spočívá v omezené granulaci IOMMU, takže bylo nutné přiřadit všechny členy iommu groupy 1c.0 až 1c.6 (pravděpodobně jde o sdílení společných zdrojů .. IRQ?). Po tomto opatření již většina zařízení byla v GuestOSu dostupná. Vzhledem k tomu, že celkem šlo o 2xNIC,1xFireWire,1xSATA/IDE JMB36x (druhy radic ovladač neinicializoval), nezbylo slovy klasika: "Již nikoho kdo by se na živý obraz díval.". HostOSu jsem musel přidat USB WLAN, aby měl aspoň nějakou síťovou konektivitu. ;-)

http://www.monitos.cz/tmp/x3430_vfio_group.png

Neberte založené téma prosím jako problém/dotaz, ale spíše jako snahu o oživení debaty k této zajímavé problematice.

Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

7.6.2014 17:49 Lazar
Rozbalit Rozbalit vše Re: Zkušenosti s VFIO Virtual Function I/O (qemu/kvm)
Odpovědět | | Sbalit | Link | Blokovat | Admin
Doplnění:

Na denním světle vypadá osazení trochu jinak. Externí řadiče jsou celkem ctyři dle geografie MB by se nabízelo JBM363(obsluha IDE?), 2x JMB322(2x 2 SATA RAID porty?) a JBM362(2x eSATA?).
09:00.0 SATA controller [0106]: JMicron Technology Corp. JMB363 SATA/IDE Controller [197b:2363] (rev 03)
09:00.1 IDE interface [0101]: JMicron Technology Corp. JMB363 SATA/IDE Controller [197b:2363] (rev 03)
0a:00.0 SATA controller [0106]: JMicron Technology Corp. JMB363 SATA/IDE Controller [197b:2363] (rev 03)
0a:00.1 IDE interface [0101]: JMicron Technology Corp. JMB363 SATA/IDE Controller [197b:2363] (rev 03)
Lspci vzhledem k shodným vendor:device hodnotám v identifikaci moc nepomůže.

Nakonec se podařilo v GuestOSu fyzicky zpřístupnit: samostatný HDD na eSATA, samostatný HDD na jednom z RAID řadičů, RAID1 na druhém RAID řadiči, DVD IDE byla si v GuestOS viditelná, ale nefungovala (ovladač IDE řadiče chybu nehlásil).

http://www.monitos.cz/tmp/x3430_vfio_group_attach_hdds.png

Z v úvodu zmíněného návodu zbývá k dořešení rest s propagací/využitím BIOSu VGA pro přidelenou GK, tj. zpřístupnění obrazu již po zapnutí virtuálního stroje.
15.6.2014 19:11 Lazar
Rozbalit Rozbalit vše Re: Zkušenosti s VFIO Virtual Function I/O (qemu/kvm)
Odpovědět | | Sbalit | Link | Blokovat | Admin
Hodnota 10ec:8168 v parametru pci-stub.ids v GRUBu zabere nejen na integrované Realtek Gigabit NICy, ale i na ten umístěný do PCIe 1x.

K zajištění jeho funkcionality v HostOSu stačilo (snad správně?) do rc.local přidat unbind pci-stub a modprobe r8169.
echo -n "10ec 8168" > /sys/bus/pci/drivers/pci-stub/new_id
echo -n 0000:0a:00.0 > /sys/bus/pci/drivers/pci-stub/unbind
modprobe r8169


....

root@kubuntu:~# lspci -k |grep 8111 -A 2
06:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller (rev 03)
        Subsystem: Micro-Star International Co., Ltd. [MSI] Device 7580
        Kernel driver in use: pci-stub
07:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller (rev 03)
        Subsystem: Micro-Star International Co., Ltd. [MSI] Device 7580
        Kernel driver in use: pci-stub
--
0a:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller (rev 06)
        Subsystem: Realtek Semiconductor Co., Ltd. Device 0123
        Kernel driver in use: r8169
16.6.2014 22:53 Lazar
Rozbalit Rozbalit vše Re: Zkušenosti s VFIO Virtual Function I/O (qemu/kvm)
Ukazalo se, ze dotycny PCIe 1x slot patri do iommu group 6 (rada zarizeni sdilena GuestOSu), takze pro HostOS je "ztracen". Pro HostOS vyclenena PCI RT8139, ktera je samostatne (s PCI bridgem?) v iommu group 8.

Nevite nekdo o nejake Live distribuci se zapnutou podporou IOMMU/VT-d v kernelu, po prvotni overeni dostupnosti (vypis dmesg s klicovymi slovy) teto technologie na dane kombinaci MB/CPU?

root@kubuntu:~# ls -la /sys/kernel/iommu_groups/*/devices/
/sys/kernel/iommu_groups/0/devices/:
total 0
drwxr-xr-x 2 root root 0 čen 16 22:12 .
drwxr-xr-x 3 root root 0 čen 16 22:12 ..
lrwxrwxrwx 1 root root 0 čen 16 22:12 0000:00:00.0 -> ../../../../devices/pci0000:00/0000:00:00.0

/sys/kernel/iommu_groups/10/devices/:
total 0
drwxr-xr-x 2 root root 0 čen 16 22:12 .
drwxr-xr-x 3 root root 0 čen 16 22:12 ..
lrwxrwxrwx 1 root root 0 čen 16 22:12 0000:01:00.0 -> ../../../../devices/pci0000:00/0000:00:03.0/0000:01:00.0

/sys/kernel/iommu_groups/11/devices/:
total 0
drwxr-xr-x 2 root root 0 čen 16 22:12 .
drwxr-xr-x 3 root root 0 čen 16 22:12 ..
lrwxrwxrwx 1 root root 0 čen 16 22:12 0000:02:00.0 -> ../../../../devices/pci0000:00/0000:00:03.0/0000:01:00.0/0000:02:00.0
lrwxrwxrwx 1 root root 0 čen 16 22:12 0000:03:00.0 -> ../../../../devices/pci0000:00/0000:00:03.0/0000:01:00.0/0000:02:00.0/0000:03:00.0

/sys/kernel/iommu_groups/12/devices/:
total 0
drwxr-xr-x 2 root root 0 čen 16 22:12 .
drwxr-xr-x 3 root root 0 čen 16 22:12 ..
lrwxrwxrwx 1 root root 0 čen 16 22:12 0000:02:02.0 -> ../../../../devices/pci0000:00/0000:00:03.0/0000:01:00.0/0000:02:02.0
lrwxrwxrwx 1 root root 0 čen 16 22:12 0000:04:00.0 -> ../../../../devices/pci0000:00/0000:00:03.0/0000:01:00.0/0000:02:02.0/0000:04:00.0
lrwxrwxrwx 1 root root 0 čen 16 22:12 0000:04:00.1 -> ../../../../devices/pci0000:00/0000:00:03.0/0000:01:00.0/0000:02:02.0/0000:04:00.1

/sys/kernel/iommu_groups/13/devices/:
total 0
drwxr-xr-x 2 root root 0 čen 16 22:12 .
drwxr-xr-x 3 root root 0 čen 16 22:12 ..
lrwxrwxrwx 1 root root 0 čen 16 22:12 0000:02:03.0 -> ../../../../devices/pci0000:00/0000:00:03.0/0000:01:00.0/0000:02:03.0
lrwxrwxrwx 1 root root 0 čen 16 22:12 0000:05:00.0 -> ../../../../devices/pci0000:00/0000:00:03.0/0000:01:00.0/0000:02:03.0/0000:05:00.0

/sys/kernel/iommu_groups/14/devices/:
total 0
drwxr-xr-x 2 root root 0 čen 16 22:12 .
drwxr-xr-x 3 root root 0 čen 16 22:12 ..
lrwxrwxrwx 1 root root 0 čen 16 22:12 0000:ff:00.0 -> ../../../../devices/pci0000:ff/0000:ff:00.0
lrwxrwxrwx 1 root root 0 čen 16 22:12 0000:ff:00.1 -> ../../../../devices/pci0000:ff/0000:ff:00.1

/sys/kernel/iommu_groups/15/devices/:
total 0
drwxr-xr-x 2 root root 0 čen 16 22:12 .
drwxr-xr-x 3 root root 0 čen 16 22:12 ..
lrwxrwxrwx 1 root root 0 čen 16 22:12 0000:ff:02.0 -> ../../../../devices/pci0000:ff/0000:ff:02.0
lrwxrwxrwx 1 root root 0 čen 16 22:12 0000:ff:02.1 -> ../../../../devices/pci0000:ff/0000:ff:02.1

/sys/kernel/iommu_groups/16/devices/:
total 0
drwxr-xr-x 2 root root 0 čen 16 22:12 .
drwxr-xr-x 3 root root 0 čen 16 22:12 ..
lrwxrwxrwx 1 root root 0 čen 16 22:12 0000:ff:03.0 -> ../../../../devices/pci0000:ff/0000:ff:03.0
lrwxrwxrwx 1 root root 0 čen 16 22:12 0000:ff:03.1 -> ../../../../devices/pci0000:ff/0000:ff:03.1
lrwxrwxrwx 1 root root 0 čen 16 22:12 0000:ff:03.2 -> ../../../../devices/pci0000:ff/0000:ff:03.2
lrwxrwxrwx 1 root root 0 čen 16 22:12 0000:ff:03.4 -> ../../../../devices/pci0000:ff/0000:ff:03.4

/sys/kernel/iommu_groups/17/devices/:
total 0
drwxr-xr-x 2 root root 0 čen 16 22:12 .
drwxr-xr-x 3 root root 0 čen 16 22:12 ..
lrwxrwxrwx 1 root root 0 čen 16 22:12 0000:ff:04.0 -> ../../../../devices/pci0000:ff/0000:ff:04.0
lrwxrwxrwx 1 root root 0 čen 16 22:12 0000:ff:04.1 -> ../../../../devices/pci0000:ff/0000:ff:04.1
lrwxrwxrwx 1 root root 0 čen 16 22:12 0000:ff:04.2 -> ../../../../devices/pci0000:ff/0000:ff:04.2
lrwxrwxrwx 1 root root 0 čen 16 22:12 0000:ff:04.3 -> ../../../../devices/pci0000:ff/0000:ff:04.3

/sys/kernel/iommu_groups/18/devices/:
total 0
drwxr-xr-x 2 root root 0 čen 16 22:12 .
drwxr-xr-x 3 root root 0 čen 16 22:12 ..
lrwxrwxrwx 1 root root 0 čen 16 22:12 0000:ff:05.0 -> ../../../../devices/pci0000:ff/0000:ff:05.0
lrwxrwxrwx 1 root root 0 čen 16 22:12 0000:ff:05.1 -> ../../../../devices/pci0000:ff/0000:ff:05.1
lrwxrwxrwx 1 root root 0 čen 16 22:12 0000:ff:05.2 -> ../../../../devices/pci0000:ff/0000:ff:05.2
lrwxrwxrwx 1 root root 0 čen 16 22:12 0000:ff:05.3 -> ../../../../devices/pci0000:ff/0000:ff:05.3

/sys/kernel/iommu_groups/1/devices/:
total 0
drwxr-xr-x 2 root root 0 čen 16 22:12 .
drwxr-xr-x 3 root root 0 čen 16 22:12 ..
lrwxrwxrwx 1 root root 0 čen 16 22:12 0000:00:03.0 -> ../../../../devices/pci0000:00/0000:00:03.0

/sys/kernel/iommu_groups/2/devices/:
total 0
drwxr-xr-x 2 root root 0 čen 16 22:12 .
drwxr-xr-x 3 root root 0 čen 16 22:12 ..
lrwxrwxrwx 1 root root 0 čen 16 22:12 0000:00:08.0 -> ../../../../devices/pci0000:00/0000:00:08.0
lrwxrwxrwx 1 root root 0 čen 16 22:12 0000:00:08.1 -> ../../../../devices/pci0000:00/0000:00:08.1
lrwxrwxrwx 1 root root 0 čen 16 22:12 0000:00:08.2 -> ../../../../devices/pci0000:00/0000:00:08.2
lrwxrwxrwx 1 root root 0 čen 16 22:12 0000:00:08.3 -> ../../../../devices/pci0000:00/0000:00:08.3

/sys/kernel/iommu_groups/3/devices/:
total 0
drwxr-xr-x 2 root root 0 čen 16 22:12 .
drwxr-xr-x 3 root root 0 čen 16 22:12 ..
lrwxrwxrwx 1 root root 0 čen 16 22:12 0000:00:10.0 -> ../../../../devices/pci0000:00/0000:00:10.0
lrwxrwxrwx 1 root root 0 čen 16 22:12 0000:00:10.1 -> ../../../../devices/pci0000:00/0000:00:10.1

/sys/kernel/iommu_groups/4/devices/:
total 0
drwxr-xr-x 2 root root 0 čen 16 22:12 .
drwxr-xr-x 3 root root 0 čen 16 22:12 ..
lrwxrwxrwx 1 root root 0 čen 16 22:12 0000:00:1a.0 -> ../../../../devices/pci0000:00/0000:00:1a.0

/sys/kernel/iommu_groups/5/devices/:
total 0
drwxr-xr-x 2 root root 0 čen 16 22:12 .
drwxr-xr-x 3 root root 0 čen 16 22:12 ..
lrwxrwxrwx 1 root root 0 čen 16 22:12 0000:00:1b.0 -> ../../../../devices/pci0000:00/0000:00:1b.0

/sys/kernel/iommu_groups/6/devices/:
total 0
drwxr-xr-x 2 root root 0 čen 16 22:12 .
drwxr-xr-x 3 root root 0 čen 16 22:12 ..
lrwxrwxrwx 1 root root 0 čen 16 22:12 0000:00:1c.0 -> ../../../../devices/pci0000:00/0000:00:1c.0
lrwxrwxrwx 1 root root 0 čen 16 22:12 0000:00:1c.1 -> ../../../../devices/pci0000:00/0000:00:1c.1
lrwxrwxrwx 1 root root 0 čen 16 22:12 0000:00:1c.2 -> ../../../../devices/pci0000:00/0000:00:1c.2
lrwxrwxrwx 1 root root 0 čen 16 22:12 0000:00:1c.3 -> ../../../../devices/pci0000:00/0000:00:1c.3
lrwxrwxrwx 1 root root 0 čen 16 22:12 0000:00:1c.5 -> ../../../../devices/pci0000:00/0000:00:1c.5
lrwxrwxrwx 1 root root 0 čen 16 22:12 0000:00:1c.6 -> ../../../../devices/pci0000:00/0000:00:1c.6
lrwxrwxrwx 1 root root 0 čen 16 22:12 0000:06:00.0 -> ../../../../devices/pci0000:00/0000:00:1c.0/0000:06:00.0
lrwxrwxrwx 1 root root 0 čen 16 22:12 0000:07:00.0 -> ../../../../devices/pci0000:00/0000:00:1c.1/0000:07:00.0
lrwxrwxrwx 1 root root 0 čen 16 22:12 0000:08:00.0 -> ../../../../devices/pci0000:00/0000:00:1c.2/0000:08:00.0
lrwxrwxrwx 1 root root 0 čen 16 22:12 0000:09:00.0 -> ../../../../devices/pci0000:00/0000:00:1c.3/0000:09:00.0
lrwxrwxrwx 1 root root 0 čen 16 22:12 0000:09:00.1 -> ../../../../devices/pci0000:00/0000:00:1c.3/0000:09:00.1
lrwxrwxrwx 1 root root 0 čen 16 22:12 0000:0a:00.0 -> ../../../../devices/pci0000:00/0000:00:1c.5/0000:0a:00.0
lrwxrwxrwx 1 root root 0 čen 16 22:12 0000:0b:00.0 -> ../../../../devices/pci0000:00/0000:00:1c.6/0000:0b:00.0
lrwxrwxrwx 1 root root 0 čen 16 22:12 0000:0b:00.1 -> ../../../../devices/pci0000:00/0000:00:1c.6/0000:0b:00.1

/sys/kernel/iommu_groups/7/devices/:
total 0
drwxr-xr-x 2 root root 0 čen 16 22:12 .
drwxr-xr-x 3 root root 0 čen 16 22:12 ..
lrwxrwxrwx 1 root root 0 čen 16 22:12 0000:00:1d.0 -> ../../../../devices/pci0000:00/0000:00:1d.0

/sys/kernel/iommu_groups/8/devices/:
total 0
drwxr-xr-x 2 root root 0 čen 16 22:12 .
drwxr-xr-x 3 root root 0 čen 16 22:12 ..
lrwxrwxrwx 1 root root 0 čen 16 22:12 0000:00:1e.0 -> ../../../../devices/pci0000:00/0000:00:1e.0
lrwxrwxrwx 1 root root 0 čen 16 22:12 0000:0c:01.0 -> ../../../../devices/pci0000:00/0000:00:1e.0/0000:0c:01.0

/sys/kernel/iommu_groups/9/devices/:
total 0
drwxr-xr-x 2 root root 0 čen 16 22:12 .
drwxr-xr-x 3 root root 0 čen 16 22:12 ..
lrwxrwxrwx 1 root root 0 čen 16 22:12 0000:00:1f.0 -> ../../../../devices/pci0000:00/0000:00:1f.0
lrwxrwxrwx 1 root root 0 čen 16 22:12 0000:00:1f.2 -> ../../../../devices/pci0000:00/0000:00:1f.2
lrwxrwxrwx 1 root root 0 čen 16 22:12 0000:00:1f.3 -> ../../../../devices/pci0000:00/0000:00:1f.3

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.