Had a crazy idea to try to replicate my desktop PC as a VM in the TrueNAS hypervisor. It didn't work out as I had lots of graphical glitches and freezes in the desktop environment in a Debian VM. I was PCI-E passing-through the nVidia P400 GPU and the external Inateck KT4006 USB controller (FL1100 controller). It may not have worked due to driver issues in the guest, as the USB passthrough worked in the Debian GUI installer. I was passing through the GPU because I was connecting my monitor to a physical port on the GPU. Maybe 4k over PCI-E x1 was too much, hence the glitches
Even thought it didn't work I thought I'd dump the IOMMU groups of the board (as seen in TrueNAS 23.10.x, with default kernel options, so no ACS override etc.). Basically, if passing through a device to a VM, all of the devices in the same IOMMU group get stolen from the host and provided to the VM. This is catastrophic if you e.g. steal the CPU from the host. Anyways here goes:
Unfortunately the IOMMU groups of the PCI-E slots aren't very nice:
- Slot closest to the CPU - it's in the group 1 (as seen below with the Quadro P400), so the same group as the CPU, so no go. Passing this through to an Arch Linux VM made the TX1320 M3 freeze and show a CPU error in IPMI > Component Status
- 2nd PCI-E slot counting from the CPU - it's in group 1 (so same as CPU, so also no go)
- 3rd PCI-E slot (PCI-E x1), this one has a separate IOMMU group (group 13)
- 4th PIC-E slot (PCI-E x1, black plastic), also has separate IOMMU group (group 14)
If you really need to you can put the GPU in the PCI-E x1 slot to have it appear on a separate IOMMU group (13, 14), as seen above.
Here's a dump of the IOMMU groups with the GPU in the fastest slot and the Fresco Logic USB controller in another PCI-E slot right next to it:
Code:
$ for d in /sys/kernel/iommu_groups/*/devices/*; do n=${d#*/iommu_groups/*}; n=${n%%/*}; printf 'IOMMU group %s ' "$n"; lspci -nns "${d##*/}"; done
IOMMU group 0 00:00.0 Host bridge [0600]: Intel Corporation Xeon E3-1200 v6/7th Gen Core Processor Host Bridge/DRAM Registers [8086:5918] (rev 05)
IOMMU group 1 00:01.0 PCI bridge [0604]: Intel Corporation 6th-10th Gen Core Processor PCIe Controller (x16) [8086:1901] (rev 05)
IOMMU group 1 00:01.1 PCI bridge [0604]: Intel Corporation Xeon E3-1200 v5/E3-1500 v5/6th Gen Core Processor PCIe Controller (x8) [8086:1905] (rev 05)
IOMMU group 1 01:00.1 Audio device [0403]: NVIDIA Corporation GP107GL High Definition Audio Controller [10de:0fb9] (rev a1)
IOMMU group 1 01:00.0 VGA compatible controller [0300]: NVIDIA Corporation GP107GL [Quadro P400] [10de:1cb3] (rev a1)
IOMMU group 1 02:00.0 USB controller [0c03]: Fresco Logic FL1100 USB 3.0 Host Controller [1b73:1100] (rev 01)
IOMMU group 10 04:00.0 Ethernet controller [0200]: Intel Corporation I210 Gigabit Network Connection [8086:1533] (rev 03)
IOMMU group 11 05:00.0 Ethernet controller [0200]: Intel Corporation I210 Gigabit Network Connection [8086:1533] (rev 03)
IOMMU group 2 00:14.0 USB controller [0c03]: Intel Corporation 100 Series/C230 Series Chipset Family USB 3.0 xHCI Controller [8086:a12f] (rev 31)
IOMMU group 2 00:14.2 Signal processing controller [1180]: Intel Corporation 100 Series/C230 Series Chipset Family Thermal Subsystem [8086:a131] (rev 31)
IOMMU group 3 00:16.0 Communication controller [0780]: Intel Corporation 100 Series/C230 Series Chipset Family MEI Controller #1 [8086:a13a] (rev 31)
IOMMU group 3 00:16.1 Communication controller [0780]: Intel Corporation 100 Series/C230 Series Chipset Family MEI Controller #2 [8086:a13b] (rev 31)
IOMMU group 4 00:17.0 SATA controller [0106]: Intel Corporation Q170/Q150/B150/H170/H110/Z170/CM236 Chipset SATA Controller [AHCI Mode] [8086:a102] (rev 31)
IOMMU group 5 00:1c.0 PCI bridge [0604]: Intel Corporation 100 Series/C230 Series Chipset Family PCI Express Root Port #5 [8086:a114] (rev f1)
IOMMU group 6 00:1c.5 PCI bridge [0604]: Intel Corporation 100 Series/C230 Series Chipset Family PCI Express Root Port #6 [8086:a115] (rev f1)
IOMMU group 7 00:1c.6 PCI bridge [0604]: Intel Corporation 100 Series/C230 Series Chipset Family PCI Express Root Port #7 [8086:a116] (rev f1)
IOMMU group 8 00:1f.0 ISA bridge [0601]: Intel Corporation C236 Chipset LPC/eSPI Controller [8086:a149] (rev 31)
IOMMU group 8 00:1f.2 Memory controller [0580]: Intel Corporation 100 Series/C230 Series Chipset Family Power Management Controller [8086:a121] (rev 31)
IOMMU group 8 00:1f.4 SMBus [0c05]: Intel Corporation 100 Series/C230 Series Chipset Family SMBus [8086:a123] (rev 31)
IOMMU group 9 03:00.0 VGA compatible controller [0300]: Matrox Electronics Systems Ltd. MGA G200e [Pilot] ServerEngines (SEP1) [102b:0522] (rev 05)
IOMMU group 9 03:00.1 Co-processor [0b40]: Emulex Corporation ServerView iRMC HTI [19a2:0800]