Hey folks, I've recently done some hardware upgrades to one of my systems and have found myself having quite a hard time with what I think is an IOMMU grouping issue regarding the devices I want/need to pass through for my usecase (full disclosure, this is a homelab, not a prod stack)
Some details on my system:
Mobo: ASROCK X670e Steel Legend (BIOS 3.50 from 2025-10-2, latest release on the asrock site as of the time of this post)
CPU: AMD Ryzen 9 9900X3D (microcode: Current revision: 0x0b404032)
RAM: 2x 48GB Teamgroup 6400 DDR5 CL32
GPU: Gigabyte RTX 2080 Super (in addition to the 9900X3D onboard graphics)
Additional devices: 4x various nvme disks, 2x sata ssds for boot, 2x spinners for future bulk storage, 1x HP NC552SFP dual-port 10G SFP+ NIC
PVE info:
Usecase for my system: This is my desktop PC, joined as part of my 3-node Proxmox cluster. Day to day I run an Arch Linux VM on it and utilize PCIe passthrough to pass a my RTX2080 Super, the onboard wireless chipset, an nvme disk, and a USB root hub from the mobo (with a number of downstream physical multi-port USB hubs that I have connected). I daily drive this VM as what I use to actually interact with the PC on a daily basis, game, etc, with mouse/keyboard, monitors, various other connected peripherals. I also will run other guest VMs with no hardware passthrough on this node as needed, particularly useful when running maintenance on other nodes.
Problem: Since upgrading to the X670e Steel Legend + 9900X3D (previously using a Gigabyte X570 board + Ryzen 9 3950X, under which it worked perfectly) the Arch VM has been crashing every 1.5-2 days on average and automatically restarts. I finally caught it right when it happened last night and saw this in dmesg on the host:
After some googling, the AMD-Vi: Event logged [IO_PAGE_FAULT bit has lead me down the line of reasoning that this seems to be related to IOMMU group conflicts, and this where I'm starting to get lost in the weeds. I can see via the Datacenter -> Resource Mappings workflow that each passed PCIe device other than the nvidia GPU is in its own IOMMU group along with a corresponding 600 Series Chipset PCIe Switch Downstream Port. However, those "downstream port" devices do not show up in the guest-level PCI passthrough selection, and if I create a resource mapping for the Downstream Port device, the VM will fail to start with:
And at this point, I'm not sure where to go. The BIOS doesn't expose an ACS option as far as I can see, which I understand is needed for better breaking down IOMMU groups but I'm not sure if I need that in my case. I'm not even positive in the first place if this issue is being caused because of the combination of the "downstream port" being in the same IOMMU group as the device that's connected under it or if I'm chasing the wrong thing. If it is ACS, I suppose I need a different motherboard, and it seems that consumer-grade AM5 mobos with ACS support aren't super common? And, especially as I host services that are exposed externally, I'm reluctant to enable the ACS override patch due to the security implications.
I've run into so many snags along the way with this hardware upgrade and I'm wishing I never did it. Unfortunately I'm beyond the return period for this CPU now and with how expensive hardware has gotten recently I'm deep enough in the hole that what's a few hundred more for another mobo, right
? I'm lost and feel like I'm going in circles with trying to figure this out, and I would be overwhelmingly grateful for any insight that anyone has to offer.
Some details on my system:
Mobo: ASROCK X670e Steel Legend (BIOS 3.50 from 2025-10-2, latest release on the asrock site as of the time of this post)
CPU: AMD Ryzen 9 9900X3D (microcode: Current revision: 0x0b404032)
RAM: 2x 48GB Teamgroup 6400 DDR5 CL32
GPU: Gigabyte RTX 2080 Super (in addition to the 9900X3D onboard graphics)
Additional devices: 4x various nvme disks, 2x sata ssds for boot, 2x spinners for future bulk storage, 1x HP NC552SFP dual-port 10G SFP+ NIC
PVE info:
Code:
root@deadbit-vm-103:~# pveversion -v
proxmox-ve: 9.0.0 (running kernel: 6.14.11-4-pve)
pve-manager: 9.0.11 (running version: 9.0.11/3bf5476b8a4699e2)
proxmox-kernel-helper: 9.0.4
proxmox-kernel-6.14.11-4-pve-signed: 6.14.11-4
[truncated for brevity]
root@deadbit-vm-103:~# cat /etc/kernel/cmdline
root=ZFS=rpool/ROOT/pve-1 boot=zfs iommu=pt
Usecase for my system: This is my desktop PC, joined as part of my 3-node Proxmox cluster. Day to day I run an Arch Linux VM on it and utilize PCIe passthrough to pass a my RTX2080 Super, the onboard wireless chipset, an nvme disk, and a USB root hub from the mobo (with a number of downstream physical multi-port USB hubs that I have connected). I daily drive this VM as what I use to actually interact with the PC on a daily basis, game, etc, with mouse/keyboard, monitors, various other connected peripherals. I also will run other guest VMs with no hardware passthrough on this node as needed, particularly useful when running maintenance on other nodes.
Problem: Since upgrading to the X670e Steel Legend + 9900X3D (previously using a Gigabyte X570 board + Ryzen 9 3950X, under which it worked perfectly) the Arch VM has been crashing every 1.5-2 days on average and automatically restarts. I finally caught it right when it happened last night and saw this in dmesg on the host:
Code:
Nov 01 02:42:12 deadbit-vm-103 pveproxy[2368]: worker 1699680 finished
Nov 01 02:42:12 deadbit-vm-103 pveproxy[2368]: starting 1 worker(s)
Nov 01 02:42:12 deadbit-vm-103 pveproxy[2368]: worker 1720958 started
Nov 01 02:42:13 deadbit-vm-103 pveproxy[1720957]: worker exit
Nov 01 02:42:15 deadbit-vm-103 kernel: vfio-pci 0000:01:00.0: resetting
Nov 01 02:42:15 deadbit-vm-103 kernel: vfio-pci 0000:01:00.1: resetting
Nov 01 02:42:15 deadbit-vm-103 kernel: vfio-pci 0000:01:00.2: resetting
Nov 01 02:42:15 deadbit-vm-103 kernel: vfio-pci 0000:01:00.3: resetting
Nov 01 02:42:15 deadbit-vm-103 kernel: vfio-pci 0000:01:00.0: reset done
Nov 01 02:42:15 deadbit-vm-103 kernel: vfio-pci 0000:01:00.1: reset done
Nov 01 02:42:15 deadbit-vm-103 kernel: vfio-pci 0000:01:00.2: reset done
Nov 01 02:42:15 deadbit-vm-103 kernel: vfio-pci 0000:01:00.3: reset done
Nov 01 02:42:15 deadbit-vm-103 kernel: vfio-pci 0000:05:00.0: resetting
Nov 01 02:42:15 deadbit-vm-103 kernel: vfio-pci 0000:05:00.0: reset done
Nov 01 02:42:15 deadbit-vm-103 kernel: vfio-pci 0000:08:00.0: resetting
Nov 01 02:42:15 deadbit-vm-103 kernel: vfio-pci 0000:08:00.0: reset done
Nov 01 02:42:15 deadbit-vm-103 kernel: vfio-pci 0000:14:00.0: resetting
Nov 01 02:42:15 deadbit-vm-103 kernel: vfio-pci 0000:14:00.0: reset done
Nov 01 02:42:15 deadbit-vm-103 kernel: vfio-pci 0000:01:00.0: resetting
Nov 01 02:42:16 deadbit-vm-103 kernel: vfio-pci 0000:01:00.0: reset done
Nov 01 02:42:16 deadbit-vm-103 kernel: vfio-pci 0000:01:00.0: resetting
Nov 01 02:42:16 deadbit-vm-103 kernel: vfio-pci 0000:01:00.1: resetting
Nov 01 02:42:16 deadbit-vm-103 kernel: vfio-pci 0000:01:00.2: resetting
Nov 01 02:42:16 deadbit-vm-103 kernel: vfio-pci 0000:01:00.3: resetting
Nov 01 02:42:16 deadbit-vm-103 kernel: vfio-pci 0000:01:00.0: reset done
Nov 01 02:42:16 deadbit-vm-103 kernel: vfio-pci 0000:01:00.1: reset done
Nov 01 02:42:16 deadbit-vm-103 kernel: vfio-pci 0000:01:00.2: reset done
Nov 01 02:42:16 deadbit-vm-103 kernel: vfio-pci 0000:01:00.3: reset done
Nov 01 02:42:16 deadbit-vm-103 kernel: vfio-pci 0000:05:00.0: resetting
Nov 01 02:42:16 deadbit-vm-103 kernel: vfio-pci 0000:05:00.0: reset done
Nov 01 02:42:16 deadbit-vm-103 kernel: vfio-pci 0000:08:00.0: resetting
Nov 01 02:42:16 deadbit-vm-103 kernel: vfio-pci 0000:08:00.0: reset done
Nov 01 02:42:16 deadbit-vm-103 kernel: vfio-pci 0000:14:00.0: resetting
Nov 01 02:42:16 deadbit-vm-103 kernel: vfio-pci 0000:14:00.0: reset done
Nov 01 02:42:16 deadbit-vm-103 kernel: vfio-pci 0000:01:00.0: resetting
Nov 01 02:42:16 deadbit-vm-103 kernel: vfio-pci 0000:01:00.0: reset done
Nov 01 02:42:20 deadbit-vm-103 kernel: vfio-pci 0000:14:00.0: AMD-Vi: Event logged [IO_PAGE_FAULT domain=0x0023 address=0xe7a00 flags=0x0000]
Nov 01 02:42:27 deadbit-vm-103 kernel: kvm_do_msr_access: 29 callbacks suppressed
Nov 01 02:42:27 deadbit-vm-103 kernel: kvm: kvm [2569]: ignored rdmsr: 0xc0000410 data 0x0
Nov 01 02:42:27 deadbit-vm-103 kernel: kvm: kvm [2569]: ignored wrmsr: 0xc0000410 data 0x22
Nov 01 02:42:27 deadbit-vm-103 kernel: kvm: kvm [2569]: ignored rdmsr: 0xc0000410 data 0x0
Nov 01 02:42:27 deadbit-vm-103 kernel: kvm: kvm [2569]: ignored wrmsr: 0xc0000410 data 0x22
Nov 01 02:42:27 deadbit-vm-103 kernel: kvm: kvm [2569]: ignored rdmsr: 0xc0000410 data 0x0
Nov 01 02:42:27 deadbit-vm-103 kernel: kvm: kvm [2569]: ignored wrmsr: 0xc0000410 data 0x22
Nov 01 02:42:27 deadbit-vm-103 kernel: kvm: kvm [2569]: ignored rdmsr: 0xc0000410 data 0x0
Nov 01 02:42:27 deadbit-vm-103 kernel: kvm: kvm [2569]: ignored wrmsr: 0xc0000410 data 0x22
Nov 01 02:42:28 deadbit-vm-103 kernel: kvm: kvm [2569]: ignored rdmsr: 0xc0000410 data 0x0
Nov 01 02:42:28 deadbit-vm-103 kernel: kvm: kvm [2569]: ignored wrmsr: 0xc0000410 data 0x22
Nov 01 02:42:34 deadbit-vm-103 kernel: kvm_do_msr_access: 30 callbacks suppressed
Nov 01 02:42:34 deadbit-vm-103 kernel: kvm: kvm [2569]: ignored rdmsr: 0x3a data 0x0
Nov 01 02:42:34 deadbit-vm-103 kernel: kvm: kvm [2569]: ignored rdmsr: 0xd90 data 0x0
Nov 01 02:42:34 deadbit-vm-103 kernel: kvm: kvm [2569]: ignored rdmsr: 0x122 data 0x0
Nov 01 02:42:34 deadbit-vm-103 kernel: kvm: kvm [2569]: ignored rdmsr: 0x570 data 0x0
Nov 01 02:42:34 deadbit-vm-103 kernel: kvm: kvm [2569]: ignored rdmsr: 0x571 data 0x0
Nov 01 02:42:34 deadbit-vm-103 kernel: kvm: kvm [2569]: ignored rdmsr: 0x572 data 0x0
Nov 01 02:42:34 deadbit-vm-103 kernel: kvm: kvm [2569]: ignored rdmsr: 0x560 data 0x0
Nov 01 02:42:34 deadbit-vm-103 kernel: kvm: kvm [2569]: ignored rdmsr: 0x561 data 0x0
Nov 01 02:42:34 deadbit-vm-103 kernel: kvm: kvm [2569]: ignored rdmsr: 0x580 data 0x0
Nov 01 02:42:34 deadbit-vm-103 kernel: kvm: kvm [2569]: ignored rdmsr: 0x581 data 0x0
Nov 01 02:43:00 deadbit-vm-103 pmxcfs[1959]: [status] notice: received log
Nov 01 02:43:04 deadbit-vm-103 pmxcfs[1959]: [status] notice: received log
After some googling, the AMD-Vi: Event logged [IO_PAGE_FAULT bit has lead me down the line of reasoning that this seems to be related to IOMMU group conflicts, and this where I'm starting to get lost in the weeds. I can see via the Datacenter -> Resource Mappings workflow that each passed PCIe device other than the nvidia GPU is in its own IOMMU group along with a corresponding 600 Series Chipset PCIe Switch Downstream Port. However, those "downstream port" devices do not show up in the guest-level PCI passthrough selection, and if I create a resource mapping for the Downstream Port device, the VM will fail to start with:
Code:
kvm: -device vfio-pci,host=0000:04:00.0,id=hostpci4,bus=pci.2,addr=0xd: vfio 0000:04:00.0: error getting device from group 17: No such device
Verify all devices in group 17 are bound to vfio-<bus> or pci-stub and not already in use
TASK ERROR: start failed: QEMU exited with code 1
And at this point, I'm not sure where to go. The BIOS doesn't expose an ACS option as far as I can see, which I understand is needed for better breaking down IOMMU groups but I'm not sure if I need that in my case. I'm not even positive in the first place if this issue is being caused because of the combination of the "downstream port" being in the same IOMMU group as the device that's connected under it or if I'm chasing the wrong thing. If it is ACS, I suppose I need a different motherboard, and it seems that consumer-grade AM5 mobos with ACS support aren't super common? And, especially as I host services that are exposed externally, I'm reluctant to enable the ACS override patch due to the security implications.
I've run into so many snags along the way with this hardware upgrade and I'm wishing I never did it. Unfortunately I'm beyond the return period for this CPU now and with how expensive hardware has gotten recently I'm deep enough in the hole that what's a few hundred more for another mobo, right