PCI Passthrough

何謂PCI Passthrough? 開啟PCI Passthrough PCI Passthrough設定

何謂PCI Passthrough

PCI Passthrough是直接將主機上的實體網卡或是顯卡給Guest VM使用,

可以想像成直接在Guest上安裝網卡或是顯卡提供給VM使用

而在Passthrough給Guest VM後,在Host上是無法使用該實體網卡或是顯卡(被Guest VM獨佔了該設備)

優點:效能的提升,不用透過Host模擬,在VM下面時,則是利用CPU來當Switch,很容易造成處理packet per second的效能不足

由下圖可以知道,如果透過Host會是由CPU模擬出Device,

而IOMMU則是由Device直接執行

缺點:其他的Guest VM及Host本身不能使用該PCI

 

開啟PCI Passthrough

設置的前提:

CPU及主機板都需支援VT-d

設定步驟:

nano /etc/default/grub

將GRUB_CMDLINE_LINUX_DEFAULT="quiet"修改成

Intel CPU作法
將GRUB_CMDLINE_LINUX_DEFAULT="quiet"修改成
GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on"
update-grub

AMD CPU作法
將GRUB_CMDLINE_LINUX_DEFAULT="quiet"修改成
GRUB_CMDLINE_LINUX_DEFAULT="quiet amd_iommu=on"
update-grub

在/etc/modules添加

vfio
vfio_iommu_type1
vfio_pci
vfio_virqfd

Passthrough Ethernet To Guest VM

1.確認要passthrough的網卡

lspci |grep Eth

2.將需要passthrough的網卡加入vid.conf

nano /etc/pve/qemu-server/<vmid>.conf

3.不同的passthrough作法

a.單張作法:
machine: q35
hostpci0: 03:00.0,pcie=1

b.整張pcie作法:
machine: q35
hostpci0: 03:00

c.多pcie作法
machine: q35
hostpci0: 05:00.0;05:00.1;05:00.2
限定是同一個pci id下面的sub id
需都是05:00.X,不可以和其他(03:00.X)的混搭

4. 在proxmox的VM上,只能Passthrought 4 張PCIE

經測試可以用c.多PCIE作法破解,就可以超過4個PCIE

Passthrough Ethernet To LXC

 

確認要passthrough過去的網卡名稱,

示例是要把enp5s16fs2這張網卡passthorugh給LXC

在/etc/pve/lxc/<vid>.conf裡增加以下內容

lxc.net.1.type: phys
lxc.net.1.link: enp5s16f2 #連接Host的網卡
lxc.net.1.name: enp5s16f2 #在lxc裡的name,也可以用ethX之類的
lxc.net.1.ipv4.address: 192.168.88.50/24
lxc.net.1.ipv4.gateway: 192.168.88.254
lxc.net.1.flags: up