Proxmox VE(PVE) 进行网卡直通

文章目录

  • 我的设备
  • 介绍
  • 添加CPU支持,开启iommu
    • 查询网卡信息
    • Intel CPU
    • AMD CPU
  • 新增所需模块
  • 添加PCI设备
    • 命令模式添加
    • web页面模式添加
  • 验证IOMMU有效
  • IOMMU中断重映射
    • 查看中断重映射
    • 启用中断重映射
  • 参考

我的设备

  • ECS Z270H4-I
  • E3 1235L V5
  • DDR4 2133 24G
  • WD 240G SSD

介绍

PCI直通允许您在VM内部使用物理PCI设备(图形卡,网卡)(仅限KVM虚拟化)。如果您“PCI passthrough”设备,该设备将不再可用于主机。

注意:PCI passthrough是Proxmox VE中的一项实验性功能

要启用硬件直通的话先要确保硬件支持VT-D和VT-X,CPU必须支持硬件虚拟化(为了使用 kvm)和 IOMMU(为了使用 VGA 直通)并保证主板中相关功能的开启

添加CPU支持,开启iommu

  • IOMMU 是 Intel VT-d 和 AMD-Vi 的通用名称。
  • VT-d 指的是直接输入/输出虚拟化(Intel Virtualization Technology for Directed I/O),不应与VT-x(x86平台下的Intel虚拟化技术,Intel Virtualization Technology)混淆。VT-x 可以让一个硬件平台作为多个“虚拟”平台,而 VT-d 提高了虚拟化的安全性、可靠性和 I/O 性能。

设置完之后最好重新启动一下

reboot

查询网卡信息

lspci | grep -i ethernet 

显示

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
root@pve:~# lspci | grep -i ethernet 
00:1f.6 Ethernet controller: Intel Corporation Ethernet Connection (2) I219-LM
01:00.0 Ethernet controller: Intel Corporation I350 Gigabit Network Connection (rev 01)
01:00.1 Ethernet controller: Intel Corporation I350 Gigabit Network Connection (rev 01)
01:00.2 Ethernet controller: Intel Corporation I350 Gigabit Network Connection (rev 01)
01:00.3 Ethernet controller: Intel Corporation I350 Gigabit Network Connection (rev 01)
03:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller (rev 16)
root@pve:~# 

Intel CPU

修改grub

  • 编辑文件/etc/default/grub
  • 修改行“GRUB_CMDLINE_LINUX_DEFAULT=“quiet”
  • 使其为“GRUB_CMDLINE_LINUX_DEFAULT=“quiet intel_iommu=on”
  • 使用update-grub更新
  • 验证其有效性,从命令行运行“dmesg | grep -e DMAR -e IOMMU”。如果没有输出,则出现问题。极有可能是bios设置的问题,需要启动cpu的vt-x支持。
vi /etc/default/grub

找到  GRUB_CMDLINE_LINUX_DEFAULT="quiet"
修改为 GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on"

update-grub

dmesg | grep -e DMAR -e IOMMU

AMD CPU

修改grub

  • 编辑文件/etc/default/grub
  • 修改行“GRUB_CMDLINE_LINUX_DEFAULT=“quiet”
  • 使其为“GRUB_CMDLINE_LINUX_DEFAULT=“quiet amd_iommu=on”
  • 使用update-grub更新
  • 验证其有效性,从命令行运行“dmesg | grep -e DMAR -e IOMMU”。如果没有输出,则出现问题。极有可能是bios设置的问题,需要启动cpu的vt-x支持。
vi /etc/default/grub

找到  GRUB_CMDLINE_LINUX_DEFAULT="quiet"
修改为 GRUB_CMDLINE_LINUX_DEFAULT="quiet amd_iommu=on"

update-grub

dmesg | grep -e DMAR -e IOMMU

新增所需模块

修改文件/etc/modules,加入如下的行

vi /etc/modules
vfio
vfio_iommu_type1
vfio_pci
vfio_virqfd

执行命令来更新initramfs

update-initramfs -u -k all.

添加PCI设备

命令模式添加

  1. 使用命令找到网卡PCI的地址,地址应采用以下形式:01:00.0
  2. 打开文件进行手工添加
  • 集群:/etc/pve/nodes/你的集群名称/qemu-server/虚拟机id.conf
  • PCI:/etc/pve/qemu-server/vmid.conf
  • PCIE: /etc/pve/qemu-server/.conf
查找网卡ID
lspci | grep net


或者
lspci


添加PCI
vi /etc/pve/qemu-server/vmid.conf
添加一个pci地址:  
hostpci0: 01:00.0
添加多个pci地址方式1:  
hostpci0: 01:00.0;01:00.1
添加多个pci地址方式2:  
hostpci0: 01:00.0
hostpci1: 01:00.1
添加统称所有pci地址,自动传递所有功能:  
hostpci0: 01:00


添加PCIE
vi /etc/pve/qemu-server/111.conf
machine: q35
hostpci0: 01:00.0,pcie=1

web页面模式添加

硬件->添加,选择PCI设备->选择,完成
如需更改为PCIE,可设置机器为q35

如果添加了PCI设备开启虚拟机正常使用那后面的就不需要看了

如果添加了PCI设备无法开启虚拟机的话需要允许不安全的中断

  1. 先验证IOMMU是否有效
  2. 再查看IOMMU是否可以中断重映射
  3. 后启用中断重映射,允许不安全的中断

验证IOMMU有效

要让pci passthrough正常工作,您需要为您的pci设备提供专用的iommu组

find / sys / kernel / iommu_groups / -type l

输入命令后有相关东西输出,则表示正常

如果没有则需要进行IOMMU中断重映射,只有每个IOMMU都支持中断重映射,才会启用中断重映射。

IOMMU中断重映射

没有中断重映射就不可能使用PCI passthrough。

对于KVM用户,设备分配将失败,出现’Failed to assign device "[device name]"的错误,即“无法分配设备”[设备名称]“:操作不允许”错误,并且’未找到中断重映射硬件,将设备传递到非特权域是不安全的。

不支持中断重映射的系统:

  • 所有使用AMD处理器和芯片组的系统都支持AMD I / O虚拟化(AMD-Vi)。这种硬件具有中断重映射支持; 但是,上游尚未提供软件支持。
  • 所有使用英特尔处理器和芯片组的系统都支持英特尔定向I / O虚拟化技术(VT-d),但不支持中断重映射。新的处理器和芯片组提供了中断重映射支持。要确定您的系统是否支持中断重映射:

查看中断重映射

  1. 运行“dmesg | grep ecap”命令。
  2. 在IOMMU行上,“ecap”之后的十六进制值表示是否支持中断重映射。如果该值的最后一个字符是8,9,a,b,c,d,e或f,则支持中断重映射。例如,“ecap 1000”表示没有中断重映射支持。“ecap 10207f”表示中断重映射支持,因为最后一个字符是“f”。

启用中断重映射

  • 官方文档是这个

If your system doesn’t support interrupt remapping,
you can allow unsafe interrupts with:

echo "options vfio_iommu_type1 allow_unsafe_interrupts=1" > /etc/modprobe.d/iommu_unsafe_interrupts.conf
  • 或者添加驱动黑名单
vi /etc/modprobe.d/pve-blacklist.conf

文件里面添加一行
options vfio_iommu_type1 allow_unsafe_interrupts=1
来启用不安全的中断

之后就可以通过图形化界面执行PCIE设备的直通操作了

参考

  • Proxmox VE Pci passthrough 官方文档
  • PCI passthrough via OVMF (简体中文)
  • Proxmox 直通物理网卡
  • 家用存储娱乐服务器 篇三:软件搭建篇

你可能感兴趣的:(Proxmox,VE,pve,kvm,虚拟化)