# PVE 多客機共享 PCI 裝置 SR-IOV 設置


# 前言

一般來說在 VM/CT 環境我們可以去設定 GPU Passthrough 讓實體主機上的 PCI 裝置,指定讓 VM/CT 直接存取 PCI 裝置,但在多 VM/CT 的情境下, Passthrough 的解決方案並沒有辦法分享 PCI 裝置給予多台 VM/CT,因此本篇是要用 SR-IOV IOMMU VT-d 這些韌體來實施多客機 PCI 裝置共享


# 打開主機板韌體

F12 進入主機板 BIOS 設置把 VT-d 打開


# 安裝依賴

1
apt install grub-efi-amd64

# 修改 Grub 添加 IOMMU 支援

修改 Host 上的 /etc/default/grub
原本是 GRUB_CMDLINE_LINUX_DEFAULT=“quiet” 修改成如下

1
GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on video=efifb:off"

套用與檢查是否啟用

1
2
update-grub
dmesg | grep -e dmar -e iommu

# VFIO 配置


# Kernel Layer

修改配置 /etc/modules 添加以下內容

1
2
3
4
vfio
vfio_iommu_type1
vfio_pci
vfio_virqfd

# System Layer

為了避免在啟動過程把 PCI 裝置搶走,這會造成 VM/CT 無法使用 PCI 裝置

輸入以下內容至 Host

1
2
3
4
5
6
7
8
9
echo "blacklist radeon" >> /etc/modprobe.d/blacklist.conf
echo "blacklist nouveau" >> /etc/modprobe.d/blacklist.conf
echo "blacklist nvidia" >> /etc/modprobe.d/blacklist.conf
echo "blacklist nvidiafb" >> /etc/modprobe.d/blacklist.conf
echo "blacklist i2c_nvidia_gpu" >> /etc/modprobe.d/blacklist.conf
echo "blacklist snd_hda_intel" >> /etc/modprobe.d/blacklist.conf
echo "blacklist snd_hda_codec_hdmi" >> /etc/modprobe.d/blacklist.conf
echo "blacklist i915" >> /etc/modprobe.d/blacklist.conf
update-initramfs -u

# 參考資料

  • Day 17:PVE GPU Passthrough(GPU 通透)
  • PCIe passthrough/SR-IOV 啟用
  • PCI 通透
  • IOMMU? VFIO? GPO? Proxmox PVE PCIE 直通和核顯 HDMI 直通設置參數解釋
  • 虚拟机 linux ecap 文件在,pve 系统里配置虚拟机的网卡、硬盘直通