PCI Passthrough

From Proxmox VE
Jump to navigation Jump to search

To enable PCI passthrough, you need to configure:

INTEL CPU


edit:

#vi /etc/default/grub

change

GRUB_CMDLINE_LINUX_DEFAULT="quiet"

to

GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on"

then

# update-grub
# reboot


Then run "dmesg | grep -e DMAR -e IOMMU" from the command line.  If there is no output, then something is wrong.

AMD CPU

Edit:

# vi /etc/default/grub

Change:

GRUB_CMDLINE_LINUX_DEFAULT="quiet"

To:

GRUB_CMDLINE_LINUX_DEFAULT="quiet amd_iommu=on"

Then:

# update-grub
# echo "options kvm allow_unsafe_assigned_interrupts=1" > /etc/modprobe.d/kvm_iommu_map_guest.conf 
# reboot


Determine your PCI card address, and configure your VM

Locate your card using "lspci".  The address should be in the form of: 04:00.0

Manually edit the node.conf file.  It can be located at: /etc/pve/nodes/proxmox3/qemu-server/vmnumber.conf.

Add this line to the end of the file: "hostpci0: 04:00.0"


Verify Operation

Start the VM from the UI.

Enter the qm monitor.  "qm monitor vmnumber"

Verify that your card is listed here: "info pci"

Then install drivers on your guest OS.  


NOTE: Card support might be limited to 2 or 3 devices.

NOTE: This process will remove the card from the proxmox host OS.  

Editorial Note: Using PCI passthrough to present drives direct to a ZFS (FreeNAS, Openfiler, OmniOS) virtual machine is dangerous on many levels and is not recommended for production use. Specific FreeNAS warnings can be found here: http://forums.freenas.org/threads/absolutely-must-virtualize-freenas-a-guide-to-not-completely-losing-your-data.12714/


PCI EXPRESS PASSTHROUGH

Since proxmox 3.3, it's possible to passthrough pci express device (including nvidia/amd graphic card)


you need to run pve-kernel 3.10


/etc/pve/qemuserver/<vmid>.cfg

simple pci-express passthrough

machine: q35
hostpci0: 04:00.0,pcie=1,driver=vfio

vga pci-express passthrough

machine: q35
hostpci0: 04:00.0,x-vga=on,pcie=1,driver=vfio

multi-function pciexpress device. (like a vga card with embedded audio chipset).

Remove the .0 in pci address.

machine: q35
hostpci0: 04:00,x-vga=on,pcie=1,driver=vfio

GPU PASSTHROUGH NOTES

MD RADEON 5xxx, 6xxx, 7xxx and NVIDIA GEFORCE 7, 8, 4xx, 5xx, 6xx, 7xx have been reported working.

intel IGD'S WONT WORK currently with proxmox kernel 3.10, try with debian kernel > 3.16.

Maybe you'll need to load some specific options in grub.cfg or other tunning values,

here a good forum thread of archlinux:

https://bbs.archlinux.org/viewtopic.php?id=162768


AMD passthrough error

kvm: -device vfio-pci,host=01:00.0,id=hostpci0.0,bus=ich9-pcie-port-1,addr=0x0.0,x-vga=on,multifunction=on: vfio: error opening /dev/vfio/1: No such file or directory
kvm: -device vfio-pci,host=01:00.0,id=hostpci0.0,bus=ich9-pcie-port-1,addr=0x0.0,x-vga=on,multifunction=on: vfio: failed to get group 1
kvm: -device vfio-pci,host=01:00.0,id=hostpci0.0,bus=ich9-pcie-port-1,addr=0x0.0,x-vga=on,multifunction=on: Device initialization failed.
kvm: -device vfio-pci,host=01:00.0,id=hostpci0.0,bus=ich9-pcie-port-1,addr=0x0.0,x-vga=on,multifunction=on: Device 'vfio-pci' could not be initialized

If you have this error, you need to pass "pcie_acs_override=downstream" to grub options to get iommu group working correctly