LINUX.ORG.RU
решено ФорумAdmin

Проброс NICs в виртуальную машину KVM

 , ,


1

1

Через virt-manager пытаюсь развернуть вм и пробросить в неё две сетевые карты от Broadcom. IOMMU поддерживается и включён. На моменте установки выбивает ошибку:

2019-09-14T15:07:44.387999Z qemu-system-x86_64: -device vfio-pci,host=03:00.0,id=hostdev0,bus=pci.3,addr=0x0,rombar=1: vfio 0000:03:00.0: group 1 is not viable
Please ensure all devices within the iommu_group are bound to their vfio bus driver.'

iommu_group 1

ls -l /sys/kernel/iommu_groups/1/devices/
total 0
lrwxrwxrwx 1 root root 0 Sep 14 18:07 0000:00:02.0 -> ../../../../devices/pci0000:00/0000:00:02.0
lrwxrwxrwx 1 root root 0 Sep 14 18:07 0000:00:02.2 -> ../../../../devices/pci0000:00/0000:00:02.2
lrwxrwxrwx 1 root root 0 Sep 14 18:07 0000:00:02.4 -> ../../../../devices/pci0000:00/0000:00:02.4
lrwxrwxrwx 1 root root 0 Sep 14 18:07 0000:00:02.5 -> ../../../../devices/pci0000:00/0000:00:02.5
lrwxrwxrwx 1 root root 0 Sep 14 18:07 0000:01:00.0 -> ../../../../devices/pci0000:00/0000:00:02.2/0000:01:00.0
lrwxrwxrwx 1 root root 0 Sep 14 18:07 0000:02:00.0 -> ../../../../devices/pci0000:00/0000:00:02.4/0000:02:00.0
lrwxrwxrwx 1 root root 0 Sep 14 18:07 0000:03:00.0 -> ../../../../devices/pci0000:00/0000:00:02.5/0000:03:00.0
lrwxrwxrwx 1 root root 0 Sep 14 18:07 0000:03:00.1 -> ../../../../devices/pci0000:00/0000:00:02.5/0000:03:00.1

lsmod

Module                  Size  Used by
vfio_pci               53248  0
vfio_virqfd            16384  1 vfio_pci
vfio_iommu_type1       28672  0
vfio                   32768  2 vfio_iommu_type1,vfio_pci
ipt_REJECT             16384  1
nf_reject_ipv4         16384  1 ipt_REJECT
nf_tables             143360  0
devlink                77824  0
nfnetlink              16384  1 nf_tables
ip6_tables             32768  0
xt_tcpudp              16384  1
xt_multiport           16384  2
xt_conntrack           16384  1
iptable_filter         16384  1
iptable_mangle         16384  0
iptable_nat            16384  0
nf_nat_ipv4            16384  1 iptable_nat
nf_nat                 36864  1 nf_nat_ipv4
nf_conntrack          172032  3 xt_conntrack,nf_nat,nf_nat_ipv4
nf_defrag_ipv6         20480  1 nf_conntrack
nf_defrag_ipv4         16384  1 nf_conntrack
tun                    49152  2
dm_crypt               40960  1
algif_skcipher         16384  0
af_alg                 28672  1 algif_skcipher
amdkfd                237568  1
amd64_edac_mod         36864  0
amdgpu               3457024  1
edac_mce_amd           28672  1 amd64_edac_mod
kvm_amd               106496  0
dm_mod                155648  4 dm_crypt
ccp                    98304  1 kvm_amd
rng_core               16384  1 ccp
kvm                   729088  1 kvm_amd
chash                  16384  1 amdgpu
gpu_sched              28672  1 amdgpu
irqbypass              16384  2 vfio_pci,kvm
ttm                   131072  1 amdgpu
crct10dif_pclmul       16384  0
drm_kms_helper        208896  1 amdgpu
crc32_pclmul           16384  0
evdev                  28672  2
ghash_clmulni_intel    16384  0
drm                   495616  5 gpu_sched,drm_kms_helper,amdgpu,ttm
fam15h_power           16384  0
pcspkr                 16384  0
i2c_algo_bit           16384  1 amdgpu
k10temp                16384  0
sg                     36864  0
sp5100_tco             16384  0
pcc_cpufreq            16384  0
video                  45056  0
acpi_cpufreq           24576  0
button                 16384  0
nfsd                  425984  13
auth_rpcgss            73728  1 nfsd
nfs_acl                16384  1 nfsd
lockd                 118784  1 nfsd
grace                  16384  2 nfsd,lockd
sunrpc                425984  14 nfsd,auth_rpcgss,lockd,nfs_acl
ip_tables              28672  3 iptable_filter,iptable_nat,iptable_mangle
x_tables               45056  8 xt_conntrack,iptable_filter,xt_multiport,xt_tcpudp,ip6_tables,ipt_REJECT,ip_tables,iptable_mangle
autofs4                49152  2
ext4                  737280  2
crc16                  16384  1 ext4
mbcache                16384  1 ext4
jbd2                  122880  1 ext4
fscrypto               32768  1 ext4
ecb                    16384  0
btrfs                1400832  0
zstd_decompress        81920  1 btrfs
zstd_compress         172032  1 btrfs
xxhash                 16384  2 zstd_compress,zstd_decompress
raid10                 57344  0
raid456               172032  0
async_raid6_recov      20480  1 raid456
async_memcpy           16384  2 raid456,async_raid6_recov
async_pq               16384  2 raid456,async_raid6_recov
async_xor              16384  3 async_pq,raid456,async_raid6_recov
async_tx               16384  5 async_pq,async_memcpy,async_xor,raid456,async_raid6_recov
xor                    24576  2 async_xor,btrfs
raid6_pq              122880  4 async_pq,btrfs,raid456,async_raid6_recov
libcrc32c              16384  4 nf_conntrack,nf_nat,btrfs,raid456
crc32c_generic         16384  0
raid1                  45056  0
raid0                  20480  0
multipath              16384  0
linear                 16384  0
md_mod                167936  6 raid1,raid10,raid0,linear,raid456,multipath
uas                    28672  0
usb_storage            73728  3 uas
sd_mod                 61440  4
crc32c_intel           24576  5
xhci_pci               16384  0
xhci_hcd              266240  1 xhci_pci
ehci_pci               16384  0
ehci_hcd               94208  1 ehci_pci
usbcore               294912  6 xhci_hcd,ehci_pci,usb_storage,ehci_hcd,xhci_pci,uas
aesni_intel           200704  4
ahci                   40960  1
libahci                40960  1 ahci
libata                270336  2 libahci,ahci
r8169                  90112  0
aes_x86_64             20480  1 aesni_intel
crypto_simd            16384  1 aesni_intel
realtek                20480  1
cryptd                 28672  4 crypto_simd,ghash_clmulni_intel,aesni_intel
glue_helper            16384  1 aesni_intel
libphy                 77824  2 r8169,realtek
i2c_piix4              24576  0
scsi_mod              249856  5 sd_mod,usb_storage,uas,libata,sg
usb_common             16384  1 usbcore

lspci -k (карточки для проброса 03:00.0 и 03:00.1)

00:00.0 Host bridge: Advanced Micro Devices, Inc. [AMD] Family 15h (Models 60h-6fh) Processor Root Complex
        Subsystem: Advanced Micro Devices, Inc. [AMD] Family 15h (Models 60h-6fh) Processor Root Complex
00:00.2 IOMMU: Advanced Micro Devices, Inc. [AMD] Family 15h (Models 60h-6fh) I/O Memory Management Unit
        Subsystem: Advanced Micro Devices, Inc. [AMD] Family 15h (Models 60h-6fh) I/O Memory Management Unit
00:01.0 VGA compatible controller: Advanced Micro Devices, Inc. [AMD/ATI] Carrizo (rev 87)
        Subsystem: Advanced Micro Devices, Inc. [AMD/ATI] Wani [Radeon R5/R6/R7 Graphics]
        Kernel driver in use: amdgpu
        Kernel modules: amdgpu
00:02.0 Host bridge: Advanced Micro Devices, Inc. [AMD] Family 15h (Models 60h-6fh) Host Bridge
00:02.2 PCI bridge: Advanced Micro Devices, Inc. [AMD] Family 15h (Models 60h-6fh) Processor Root Port
        Kernel driver in use: pcieport
00:02.4 PCI bridge: Advanced Micro Devices, Inc. [AMD] Family 15h (Models 60h-6fh) Processor Root Port
        Kernel driver in use: pcieport
00:02.5 PCI bridge: Advanced Micro Devices, Inc. [AMD] Family 15h (Models 60h-6fh) Processor Root Port
        Kernel driver in use: pcieport
00:03.0 Host bridge: Advanced Micro Devices, Inc. [AMD] Family 15h (Models 60h-6fh) Host Bridge
00:08.0 Encryption controller: Advanced Micro Devices, Inc. [AMD] Carrizo Platform Security Processor
        Subsystem: Advanced Micro Devices, Inc. [AMD] Carrizo Platform Security Processor
00:09.0 Host bridge: Advanced Micro Devices, Inc. [AMD] Carrizo Audio Dummy Host Bridge
00:10.0 USB controller: Advanced Micro Devices, Inc. [AMD] FCH USB XHCI Controller (rev 20)
        Subsystem: Advanced Micro Devices, Inc. [AMD] FCH USB XHCI Controller
        Kernel driver in use: xhci_hcd
        Kernel modules: xhci_pci
00:11.0 SATA controller: Advanced Micro Devices, Inc. [AMD] FCH SATA Controller [AHCI mode] (rev 49)
        Subsystem: Advanced Micro Devices, Inc. [AMD] FCH SATA Controller [AHCI mode]
        Kernel driver in use: ahci
        Kernel modules: ahci
00:12.0 USB controller: Advanced Micro Devices, Inc. [AMD] FCH USB EHCI Controller (rev 49)
        Subsystem: Advanced Micro Devices, Inc. [AMD] FCH USB EHCI Controller
        Kernel driver in use: ehci-pci
        Kernel modules: ehci_pci
00:14.0 SMBus: Advanced Micro Devices, Inc. [AMD] FCH SMBus Controller (rev 4a)
        Subsystem: Advanced Micro Devices, Inc. [AMD] FCH SMBus Controller
        Kernel driver in use: piix4_smbus
        Kernel modules: i2c_piix4, sp5100_tco
00:14.3 ISA bridge: Advanced Micro Devices, Inc. [AMD] FCH LPC Bridge (rev 11)
        Subsystem: Advanced Micro Devices, Inc. [AMD] FCH LPC Bridge
00:18.0 Host bridge: Advanced Micro Devices, Inc. [AMD] Family 15h (Models 60h-6fh) Processor Function 0
00:18.1 Host bridge: Advanced Micro Devices, Inc. [AMD] Family 15h (Models 60h-6fh) Processor Function 1
00:18.2 Host bridge: Advanced Micro Devices, Inc. [AMD] Family 15h (Models 60h-6fh) Processor Function 2
00:18.3 Host bridge: Advanced Micro Devices, Inc. [AMD] Family 15h (Models 60h-6fh) Processor Function 3
        Kernel driver in use: k10temp
        Kernel modules: k10temp
00:18.4 Host bridge: Advanced Micro Devices, Inc. [AMD] Family 15h (Models 60h-6fh) Processor Function 4
        Kernel driver in use: fam15h_power
        Kernel modules: fam15h_power
00:18.5 Host bridge: Advanced Micro Devices, Inc. [AMD] Family 15h (Models 60h-6fh) Processor Function 5
01:00.0 SATA controller: Marvell Technology Group Ltd. 88SE9230 PCIe SATA 6Gb/s Controller (rev 11)
        Subsystem: Marvell Technology Group Ltd. 88SE9230 PCIe SATA 6Gb/s Controller
        Kernel driver in use: ahci
        Kernel modules: ahci
02:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller (rev 06)
        Subsystem: TP-LINK Technologies Co., Ltd. TG-3468 Gigabit PCI Express Network Adapter
        Kernel driver in use: r8169
        Kernel modules: r8169
03:00.0 Ethernet controller: Device a7e4:b2f8
        Subsystem: Device 813c:1741
03:00.1 Ethernet controller: Device a7e4:b2f8
        Subsystem: Device 813c:17e8

IOMMU

dmesg | grep IOMMU
[    2.154252] AMD-Vi: IOMMU performance counters supported
[    2.158500] AMD-Vi: Found IOMMU at 0000:00:00.2 cap 0x40
[    2.162895] perf/amd_iommu: Detected AMD IOMMU #0 (2 banks, 4 counters/bank).
[    2.599871] AMD IOMMUv2 driver by Joerg Roedel <jroedel@suse.de>

Как пофиксить?



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

Проблема в том, что для проброса pci устройств нужно пробрасывать всю группу iommu в которых эти сами устройства:

...For successful PCI passthrough the PCI devices on the host need to be separated out into individual IOMMU groups...

Буду пытаться выкинуть эту сетевушку в отдельную группу...

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

Буду пытаться выкинуть эту сетевушку в отдельную группу...

Собственно получилось.

После усиленного гугления нашёл кастомное ядро которое позволяет разделить определённые устройства в отдельные iommu группы.

Сами ядра:

https://queuecumber.gitlab.io/linux-acs-override/

И опцией для этого ядра:

pcie_acs_override

можно назначить нужные устройства для разделения. Формат опции:

pcie_acs_override =
        [PCIE] Override missing PCIe ACS support for:
    downstream
        All downstream ports - full ACS capabilties
    multifunction
        All multifunction devices - multifunction ACS subset
    id:nnnn:nnnn
        Specfic device - full ACS capabilities
        Specified as vid:did (vendor/device ID) in hex

/closed

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

1. ACS override будет работать, только если мост, но котором висят все 4 контроллера, поддерживает ACS.

2. Это нестабильное и небезопасное решение.

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

ACS override будет работать, только если мост, но котором висят все 4 контроллера, поддерживает ACS.

Ну в ВМ карточки определились и работают. Значит всё успешно.

2. Это нестабильное и небезопасное решение.

А выбора у меня нет, так что пусть хоть так.

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

Говоря простым языком ACS патч делает вид, что ACS есть там, где его нет. А значит гостевая система может все еще делать все что ей захочется со всеми девайсами в реальной IOMMU группе.

Так что это прямо огромная дырища через которую не только легко «выйти» за пределы виртуалки. Из-за DMA к устройствам с которыми активно работает ядро на хосте это возможность без труда получить рута и обойти песочницы apparmor / selinux которыми по дефолту покрыт libvirt.

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

Спасибо за разъяснения. Отказался от этой затеи.

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