Hello again (twice today but I was preparing this post a couple of days now)
Well according to the very famous GPU Passthrough (and there is a very good official guide for that) there is the need to passthrough other pcie devices and you ll understand soon enough why I have many doubts if it is supposed to be done like the gpu way. If I cover that then I believe 85+ % of the need to pass through a pci device will be covered here with my post since what someone will want to passthrough will be a NIC card (for instance pfsence) an HBA (Host Bus Adapter, probably for Virtualizing Free-True-Nas) and a usb/sata controller for VM's. Pretty much the above pcie devices cover the vast majority of things someone might want to passthrough.
Enough with the long intro and lets get to the point. I want to passthrough an Intel I350 4 port Nic to a VM and here lies my thoughts about it trying to follow the official guide and my custom notes. My H/W and Bios settings will follow at the end of the post. So.......
1) I have configure the Grub adding the intel_iommu=on at the GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on" line Depending on a forum's member here I have an extra question that came forward. In case of Proxmox zfs and systemd-boot usage do I have to fill the above line in/etc/default/grub or /etc/kernel/cmdline or both?
2) Assuming this out the equation, since my cpu is an E3 Xeon 1260L and according to others has not such a good IOMMU grouping capability do you think that the extra options iommu=pt pcie_acs_override=downstream,multifunction will help??
3)Does a Network Card with 4 ports considered to be a multifunction device like a gpu which has the audio part embedded into it or not? If not the the multifunction option above will be irrelevant to my case dont you think. But from what it depends if a device considered to be a multifunction device or not. Any cli command to find out?
VFIO modules I have added the (vfio / vfio_iommu_type1 / vfio_pci / vfio_virqfd) in /etc/modules
4)Does this update-initramfs -u -k all applies to my case also (I mean because running systemd-boot or is it irrelevant)
IOMMU interrupt remaping I have added the following lines
echo "options vfio_iommu_type1 allow_unsafe_interrupts=1" > /etc/modprobe.d/iommu_unsafe_interrupts.conf
echo "options kvm ignore_msrs=1" > /etc/modprobe.d/kvm.conf
5)Even though I have the path /sys/kernel/iommu_groups/ running the command find /sys/kernel/iommu_groups/ -type l returns nothing
Is it because I havent yet added iommu=pt pcie_acs_override=downstream,multifunction and it is needed due to my weird (as many say) behavior of the xeon e3 1260L?
or motherboard issue to spplit devices in groups ? And what does that mean that all motherboard is one big group and cant pass anything?
6)Do you have to black list drivers for all pcie devices you want to pass through or is it applicable only to the gpu? Because my network card is using
Kernel driver in use: igb
Kernel modules: igb So do I have to blacklist like echo "blacklist idb" >> /etc/modprobe.d/blacklist.conf or it isnt needed? What if the onboard nic was intel also (it is)
and was using the same igb kernel driver (it isnt ). Wouldn t that be a problem too?
Finally I added the nic vendor to the VFIO echo "options vfio-pci ids=8086:1521"> /etc/modprobe.d/vfio.conf
7)All for ports have the same vendor id so i have to enter it once to include all 4 of them. Probably the gpu has an audio part from a different vendor and that results in 2
different ids you want to stick in the vfio right?
I would like to be excused for the long of the post but I really believe that if all or at least some of the questions been answered will help noobies at first and trigger also more experienced users to look into it and in general have a better understanding of how Proxmox works in the passthrough section at least.
Last but not least my H/W Spec are as follows
Machine:dell optiplex 7010 with
Cpu :Xeon E3 1260L socket LGA1155 4/8 Threads
support for VT-X / VT-d according to Intel's spec sheet
https://ark.intel.com/content/www/u...eon-processor-e3-1260l-8m-cache-2-40-ghz.html
Motherboard: Q77 express based chipset At least according to this official Intel link
https://www.intel.com/content/www/u...000005758/boards-and-kits/desktop-boards.html
seems to support VT-X/VT
Bios Settings:Version ->Latest
Boot Sequence -> UEFI
Advanced Boot options -> Enable LegacyOption ROMs
TPM Security ->Unchecked
Secure Boot Enable ->Disabled
Virtualization Support->Enable Virtualization
VT for Direct I/O ->Enabled
8) Trusted Execution ->Unchecked (I suppose this has to be enabled ???????) because of this
Intel® Desktop Boards require the following components to support Intel VT or Intel VT-d:
A third-party VMM (virtual machine manager) may also be required
Do this option needs to be enabled?
And some of the results of the relevant commands
Well according to the very famous GPU Passthrough (and there is a very good official guide for that) there is the need to passthrough other pcie devices and you ll understand soon enough why I have many doubts if it is supposed to be done like the gpu way. If I cover that then I believe 85+ % of the need to pass through a pci device will be covered here with my post since what someone will want to passthrough will be a NIC card (for instance pfsence) an HBA (Host Bus Adapter, probably for Virtualizing Free-True-Nas) and a usb/sata controller for VM's. Pretty much the above pcie devices cover the vast majority of things someone might want to passthrough.
Enough with the long intro and lets get to the point. I want to passthrough an Intel I350 4 port Nic to a VM and here lies my thoughts about it trying to follow the official guide and my custom notes. My H/W and Bios settings will follow at the end of the post. So.......
1) I have configure the Grub adding the intel_iommu=on at the GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on" line Depending on a forum's member here I have an extra question that came forward. In case of Proxmox zfs and systemd-boot usage do I have to fill the above line in/etc/default/grub or /etc/kernel/cmdline or both?
2) Assuming this out the equation, since my cpu is an E3 Xeon 1260L and according to others has not such a good IOMMU grouping capability do you think that the extra options iommu=pt pcie_acs_override=downstream,multifunction will help??
3)Does a Network Card with 4 ports considered to be a multifunction device like a gpu which has the audio part embedded into it or not? If not the the multifunction option above will be irrelevant to my case dont you think. But from what it depends if a device considered to be a multifunction device or not. Any cli command to find out?
VFIO modules I have added the (vfio / vfio_iommu_type1 / vfio_pci / vfio_virqfd) in /etc/modules
4)Does this update-initramfs -u -k all applies to my case also (I mean because running systemd-boot or is it irrelevant)
IOMMU interrupt remaping I have added the following lines
echo "options vfio_iommu_type1 allow_unsafe_interrupts=1" > /etc/modprobe.d/iommu_unsafe_interrupts.conf
echo "options kvm ignore_msrs=1" > /etc/modprobe.d/kvm.conf
5)Even though I have the path /sys/kernel/iommu_groups/ running the command find /sys/kernel/iommu_groups/ -type l returns nothing
Is it because I havent yet added iommu=pt pcie_acs_override=downstream,multifunction and it is needed due to my weird (as many say) behavior of the xeon e3 1260L?
or motherboard issue to spplit devices in groups ? And what does that mean that all motherboard is one big group and cant pass anything?
6)Do you have to black list drivers for all pcie devices you want to pass through or is it applicable only to the gpu? Because my network card is using
Kernel driver in use: igb
Kernel modules: igb So do I have to blacklist like echo "blacklist idb" >> /etc/modprobe.d/blacklist.conf or it isnt needed? What if the onboard nic was intel also (it is)
and was using the same igb kernel driver (it isnt ). Wouldn t that be a problem too?
Finally I added the nic vendor to the VFIO echo "options vfio-pci ids=8086:1521"> /etc/modprobe.d/vfio.conf
7)All for ports have the same vendor id so i have to enter it once to include all 4 of them. Probably the gpu has an audio part from a different vendor and that results in 2
different ids you want to stick in the vfio right?
I would like to be excused for the long of the post but I really believe that if all or at least some of the questions been answered will help noobies at first and trigger also more experienced users to look into it and in general have a better understanding of how Proxmox works in the passthrough section at least.
Last but not least my H/W Spec are as follows
Machine:dell optiplex 7010 with
Cpu :Xeon E3 1260L socket LGA1155 4/8 Threads
support for VT-X / VT-d according to Intel's spec sheet
https://ark.intel.com/content/www/u...eon-processor-e3-1260l-8m-cache-2-40-ghz.html
Motherboard: Q77 express based chipset At least according to this official Intel link
https://www.intel.com/content/www/u...000005758/boards-and-kits/desktop-boards.html
seems to support VT-X/VT
Bios Settings:Version ->Latest
Boot Sequence -> UEFI
Advanced Boot options -> Enable LegacyOption ROMs
TPM Security ->Unchecked
Secure Boot Enable ->Disabled
Virtualization Support->Enable Virtualization
VT for Direct I/O ->Enabled
8) Trusted Execution ->Unchecked (I suppose this has to be enabled ???????) because of this
Intel® Desktop Boards require the following components to support Intel VT or Intel VT-d:
A third-party VMM (virtual machine manager) may also be required
Do this option needs to be enabled?
And some of the results of the relevant commands
Code:
lspci -v
02:00.0 Ethernet controller: Intel Corporation I350 Gigabit Network Connection (rev 01)
02:00.1 Ethernet controller: Intel Corporation I350 Gigabit Network Connection (rev 01)
02:00.2 Ethernet controller: Intel Corporation I350 Gigabit Network Connection (rev 01)
02:00.3 Ethernet controller: Intel Corporation I350 Gigabit Network Connection (rev 01)
Kernel driver in use: igb
Kernel modules: igb
Code:
lspci -n -s 02:00 (card's Vendor IDs)
02:00.0 0200: 8086:1521 (rev 01)
02:00.1 0200: 8086:1521 (rev 01)
02:00.2 0200: 8086:1521 (rev 01)
02:00.3 0200: 8086:1521 (rev 01)
Code:
dmesg | grep -e DMAR -e IOMMU
[ 0.018082] ACPI: DMAR 0x00000000D7FFFC48 0000B8 (v01 INTEL SNB 00000001 INTL 00000001)
[ 0.150014] DMAR: Host address width 36
[ 0.150016] DMAR: DRHD base: 0x000000fed90000 flags: 0x0
[ 0.150022] DMAR: dmar0: reg_base_addr fed90000 ver 1:0 cap c0000020e60262 ecap f0101a
[ 0.150025] DMAR: DRHD base: 0x000000fed91000 flags: 0x1
[ 0.150030] DMAR: dmar1: reg_base_addr fed91000 ver 1:0 cap c9008020660262 ecap f0105a
[ 0.150033] DMAR: RMRR base: 0x000000daf78000 end: 0x000000daf9efff
[ 0.150035] DMAR: RMRR base: 0x000000db800000 end: 0x000000df9fffff
[ 0.150038] DMAR-IR: IOAPIC id 2 under DRHD base 0xfed91000 IOMMU 1
[ 0.150040] DMAR-IR: HPET id 0 under DRHD base 0xfed91000
[ 0.150042] DMAR-IR: Queued invalidation will be enabled to support x2apic and Intr-remapping.
[ 0.150451] DMAR-IR: Enabled IRQ remapping in x2apic mode
Code:
find /sys/kernel/iommu_groups/ -type l returns nothing why?
Code:
dmesg | grep Virtual returns nothing why?
Last edited: