PVE開啟硬件直通功能

PVE開啟網卡直通,顯卡直通,USB直通 。


第一步:確認自己的主板cpu是否支持Vt-d功能
不支持就搞不了直通 。 intel要b75以上芯片組才支持 。 也就是說intel4代酷睿處理器以上,都支持 。 amd不明 。 如果支持,需要先去主板開啟vt-d 。


第二步:開啟iommu
#編輯grub vi /etc/default/grub 
在里面找到:
【PVE開啟硬件直通功能】GRUB_CMDLINE_LINUX_DEFAULT="quiet" 
然后修改為:
GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on" 
如果是amd cpu請改為:
GRUB_CMDLINE_LINUX_DEFAULT="quiet amd_iommu=on"

修改完成之后,直接更新grub
update-grub 
#amd cpu
也可以執行 
pve-efiboot-tool refresh



第三步 加載相應的內核模塊
echo vfio >> /etc/modules echo vfio_iommu_type1 >> /etc/modules echo vfio_pci >> /etc/modules echo vfio_virqfd >> /etc/modules

重啟主機


第四步 驗證是否開啟iommu
重啟之后,在終端輸入
dmesg | grep 'remapping'

出現如下例子 。 則代表成功
AMD-Vi: Interrupt remapping enabLED #或者 DMAR-IR: Enabled IRQ remapping in x2apic mode

此時輸入命令
find /sys/kernel/iommu_groups/ -type l  #出現很多直通組,就代表成功了 。 如果沒有任何東西,就是沒有開啟

PCI-E直通
直通要求:
滿足前面所有條件 。 虛擬機芯片組一定要q35 。

PVE開啟硬件直通功能

文章插圖

顯卡直通
AMD RADEON 5xxx, 6xxx, 7xxx, Navi 5XXX(XT), nvidia GEFORCE 7, 8, GTX 4xx, 5xx, 6xx, 7xx, 9xx, 10xx and RTX 16xx/20xx 都可以成功直通
1、屏蔽顯卡
# 查看顯卡,很多設備,自己看是哪個 lspci    83:00.0 3D controller: NVIDIA Corporation GP106 [P106-090] (rev a1)

其中83:00 是代表組名 。 83:00.0 是代表83:00組的第一個設備
lspci -n -s 83:00      #查看  83:00 組的所有pci設備 83:00.0 0302: 10de:1c09 (rev a1)

10de:1c09 是 廠商ID:設備ID 。 我這顯卡沒有聲卡,所以就一個設備 。 正常的GPU,有2個設備,一個是顯卡,一個是聲音 。
正常的GPU都會有2個設備,就像下面
lspci -n -s 01:00 01:00.0 0300: 10de:1381 (rev a2) 01:00.1 0403: 10de:0fbc (rev a1)

直接屏蔽,直接讓系統不啟用它 。
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 amdgpu" >> /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  

把顯卡添加到直通組
echo "options vfio-pci ids=10de:1381,10de:0fbc" > /etc/modprobe.d/vfio.conf #注意,上面這條命令,ids=后面跟直通組的所有設備 。 中間以英文逗號隔開 。 自己的設備自己替換 。

對于nvidia顯卡,需要
echo "options kvm ignore_msrs=1" > /etc/modprobe.d/kvm.conf

上述操作完成之后,再檢查一下,是否將例子內容替換成自己的 。 使用以下命令查看 。
cat /etc/modprobe.d/blacklist.conf cat /etc/modprobe.d/vfio.conf

檢查無誤之后,重啟
2、開始直通
首先確定自己的顯卡是否支持uefi 。
一般情況下,amd r9以后的顯卡都支持uefi 。 nvidia,9代以上顯卡均支持UEFI 。
uefi的顯卡,需要用ovmf biOS 。 也就不能使用Win7 。
新建一個虛擬機 。 bios類型,根據顯卡支不支持uefi選擇 。 cpu類型設置為host,并且開啟muma,內存一定要為靜態內存,也就是最大最小都為一樣 。
系統安裝好之后 。 開始配置直通
vi /etc/pve/qemu-server/100.conf       #請把這里的100替換成自己的vmid 添加  hostpci0: 83:00,pcie=1,x-vga=on        #請把這里的83:00 替換成需要的直通組 。 注意留空

附自己的配置
cat /etc/pve/qemu-server/100.conf 
agent: 1 audio0: device=ich9-intel-hda,driver=spice balloon: 2048 bios: ovmf bootdisk: virtio0 cores: 4 cpu: host efidisk0: nvme960:100/vm-100-disk-1.qcow2,size=128K hostpci0: 83:00,pcie=1,x-vga=on ide0: local:iso/virtio-win-0.1.173.iso,media=cdrom,size=385322K ide2: local:iso/cn_Windows_10_enterprise_ltsc_2019_x64_dvd_9c09ff24.iso,media=cdrom machine: q35 memory: 4096 name: PCIE net0: virtio=8E:D0:4B:FA:22:48,bridge=vmbr1,firewall=1 numa: 1 ostype: win10 scsihw: virtio-scsi-pci serial0: socket smbios1: uuid=ce49834c-1340-4010-9631-1fa50f39384d sockets: 1 spice_enhancements: foldersharing=1,videostreaming=all usb0: spice,usb3=1 vga: qxl virtio0: nvme960:100/vm-100-disk-0.qcow2,cache=none,size=60G vmgenid: 952920f7-1d6d-40ec-89a8-cbfe2e2cc76f

推薦閱讀