Proxmox PCIeパススルーが機能しません。

Proxmox PCIeパススルーが機能しません。

pfSenseを実行している仮想マシンにネットワークデバイスを配信しようとしても機能できません。 pfSenseを起動すると、ネットワークカードはまったく表示されません。すべてが正しく設定されたと思います。問題が何であるかを提案できる人はいますか?

取り付けられたPCIデバイスは次のとおりです。

# lspci -nn
<snip>
00:1f.6 Ethernet controller [0200]: Intel Corporation Ethernet Connection (7) I219-V [8086:15bc] (rev 10)
01:00.0 Ethernet controller [0200]: Intel Corporation 82574L Gigabit Network Connection [8086:10d3]
02:00.0 Ethernet controller [0200]: Intel Corporation I211 Gigabit Network Connection [8086:1539] (rev 03)
03:00.0 Network controller [0280]: Intel Corporation Dual Band Wireless-AC 3168NGW [Stone Peak] [8086:24fb] (rev 10)

私が伝えたいデバイスは01:00.0です

ハードウェア返品リスト:

# Ishw -class network
<snip>
*-network
description: Ethernet controller
product: 82574L Gigabit Network Connection
vendor: Intel Corporation
physical id: 0
bus info: pci@0000:01:00.0
version: 00
width: 32 bits
clock: 33MHz
capabilities: pm msi pciexpress msix cap_list rom
configuration: driver=vfio-pci latency=0
resources: irq:16 memory:a13c0000-a13dffff memory:a1300000-a137ffff ioport:4000(size=32) memory:a13e0000-a13e3fff memory:a1380000-a13bffff

VMID は 100 で、/etc/pve/qemu-server/100.conf には以下が含まれます。

bootdisk: virtio0
cores: 2
hostpci1: 01:00,pcie=1,rombar=0
ide2: NAS1:iso/pfSense-CE-2.4.4-RELEASE-p3-amd64.iso,media=cdrom
machine: q35
memory: 2048
name: pfSense
net0: virtio=16:B9:C8:87:DE:54,bridge=vmbr1,firewall=1
numa: 0
onboot: 1
ostype: l26
scsihw: virtio-scsi-pci
smbios1: uuid=a18cecad-2bf6-4e81-ad32-aa2b2d7d0142
sockets: 1
usb0: host=148f:2573,usb3=1
virtio0: local-lvm:vm-100-disk-0,size=32G
vmgenid: 412dae1f-41c4-49eb-9a58-398bd33c350b

/etc/default/grub には次の内容があります。

GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on"

/etc/modules には以下が含まれます。

# /etc/modules: kernel modules to load at boot time.
#
# This file contains the names of kernel modules that should be loaded
# at boot time, one per line. Lines beginning with "#" are ignored.
vfio
vfio_iommu_type1
vfio_pci
vfio_virqfd

すべて有効になっていることを確認してください(docoとは少し異なります)。

# dmesg | grep -e DMAR -e IOMMU -e AMD-Vi
[ 0.012056] ACPI: DMAR 0x000000007E41DBC0 0000A8 (v01 INTEL EDK2 00000002 01000013)
[ 0.182375] DMAR: IOMMU enabled
[ 0.349186] DMAR: Host address width 39
[ 0.349187] DMAR: DRHD base: 0x000000fed90000 flags: 0x0
[ 0.349192] DMAR: dmar0: reg_base_addr fed90000 ver 1:0 cap 1c0000c40660462 ecap 19e2ff0505e
[ 0.349193] DMAR: DRHD base: 0x000000fed91000 flags: 0x1
[ 0.349196] DMAR: dmar1: reg_base_addr fed91000 ver 1:0 cap d2008c40660462 ecap f050da
[ 0.349197] DMAR: RMRR base: 0x0000007e704000 end: 0x0000007e94dfff
[ 0.349198] DMAR: RMRR base: 0x0000007f800000 end: 0x0000008fffffff
[ 0.349200] DMAR-IR: IOAPIC id 2 under DRHD base 0xfed91000 IOMMU 1
[ 0.349201] DMAR-IR: HPET id 0 under DRHD base 0xfed91000
[ 0.349201] DMAR-IR: Queued invalidation will be enabled to support x2apic and Intr-remapping.
[ 0.351514] DMAR-IR: Enabled IRQ remapping in x2apic mode
[ 1.315529] DMAR: No ATSR found
[ 1.315585] DMAR: dmar0: Using Queued invalidation
[ 1.315588] DMAR: dmar1: Using Queued invalidation
[ 1.345917] DMAR: Intel(R) Virtualization Technology for Directed I/O

すべて別のグループに返されることを確認してください。

# find /sys/kernel/iommu_groups/ -type l
/sys/kernel/iommu_groups/7/devices/0000:00:1c.0
/sys/kernel/iommu_groups/5/devices/0000:00:16.0
/sys/kernel/iommu_groups/3/devices/0000:00:12.0
/sys/kernel/iommu_groups/11/devices/0000:03:00.0
/sys/kernel/iommu_groups/1/devices/0000:00:01.0
/sys/kernel/iommu_groups/1/devices/0000:01:00.0
/sys/kernel/iommu_groups/8/devices/0000:00:1c.6
/sys/kernel/iommu_groups/6/devices/0000:00:17.0
/sys/kernel/iommu_groups/4/devices/0000:00:14.2
/sys/kernel/iommu_groups/4/devices/0000:00:14.0
/sys/kernel/iommu_groups/2/devices/0000:00:02.0
/sys/kernel/iommu_groups/10/devices/0000:02:00.0
/sys/kernel/iommu_groups/0/devices/0000:00:00.0
/sys/kernel/iommu_groups/9/devices/0000:00:1f.0
/sys/kernel/iommu_groups/9/devices/0000:00:1f.5
/sys/kernel/iommu_groups/9/devices/0000:00:1f.3
/sys/kernel/iommu_groups/9/devices/0000:00:1f.6
/sys/kernel/iommu_groups/9/devices/0000:00:1f.4

最後に、すべての設定が正しいことを確認してください。

# lspci -nnk
<snip>
01:00.0 Ethernet controller [0200]: Intel Corporation 82574L Gigabit Network Connection [8086:10d3]
Subsystem: Intel Corporation Gigabit CT Desktop Adapter [8086:a01f]
Kernel driver in use: vfio-pci
Kernel modules: e1000e

文書によると、最後のステップは、すべてが順調に進むべきであることを示しています。だから何が起こっているのか分かりません。

ベストアンサー1

この問題を発見しました。 pfSenseはfreeBSDを使用し、freeBSDにはPCIeの通過を防ぐバグがあります。 https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=243640

Fedora 31 VMを作成し、WiFi PCIe NICを正常に通過し、これが私の問題であることを確認しました。

解決策は、freeBSDがカーネルをパッチし、pfSenseがそれをマージするのを待つことです。追跡できるようにpfSenseにバグを送信しました(https://redmine.pfsense.org/issues/10315)

i440fxを使用した解決策については多くの議論がありますが、正しく機能させることはできません。

誰もが回避策を実装する方法についてのガイダンスを提供できると思います。

おすすめ記事