1.虚拟机绑定PCIe直通设备
上集说到qemu+kvm搭建虚拟机,那么如何在虚拟机上绑定pcie直通设备呢?这里就要知道绑定pcie直通有什么作用呢?
作用:更高的性能:直通设备可以直接访问虚拟机,绕过虚拟化层,因此可以提供接近物理机性能的性能表现。这对于需要高性能的工作负载(如图形加速、高速网络传输等)非常有益。
更低的延迟:绕过虚拟化层可以减少传输和处理数据的时间,从而降低延迟。这对于对延迟敏感的应用程序(如实时数据处理、高频交易等)非常重要。
更好的资源隔离:通过直通设备,可以将物理设备与特定的虚拟机绑定,避免了虚拟机之间的资源冲突和干扰。这提供了更好的隔离性和安全性,保护了虚拟机的稳定性和性能。
更强大的功能支持:某些设备驱动程序要求直接访问硬件,以实现其全部功能。通过绑定直通设备,虚拟机可以完全利用设备的功能,从而提供更强大的功能支持。
1.1.首先在宿主机上echo 多个VF
echo N > /sys/bus/pci/devices/0001:66:00.0/sriov_numvfs N代表你要enable VF的个数
enable之后可以cat查看
cat /sys/bus/pci/devices/0001:06:00.0/sriov_numvfs
1.2.通过virt-manager绑定PCIe直通设备,安装如下步骤
1.3.UI界面绑定步骤选择需要绑定VF的pcie addr
1.4 配置文件绑定步骤,虚拟机的配置文件一般都在这个目录
/etc/libvirt/qemu
虚拟机的配置文件都是.xml结尾,vi需要配置的xml文件,配置路径如下
第一个address domain是真实的pcie地址,就是我们pci设置的BDF号,下面的是映射到虚拟机显示的这个pci设置的bdf号。
遇到问题:如果这里绑定pcie直通设备报错的话,需要先去宿主机enable一下kvm以及VFIO(VFIO的作用:在CentOS中,绑定PCIe直通设备并启用VFIO的作用是将特定的物理设备直接分配给虚拟机,使虚拟机能够直接访问和控制这些设备。
使用VFIO可以提供更高的性能和更低的延迟,因为虚拟机可以直接与物理设备进行通信,而无需通过中间的虚拟化层。
此外,VFIO还可以提供更好的安全性,因为直通设备可以被隔离在单独的虚拟机中,避免了虚拟机之间的干扰和攻击风险。
通过绑定PCIe直通设备并启用VFIO,用户可以在虚拟化环境中使用高性能的物理设备,如图形加速器、网络适配器等,从而提供更好的虚拟化体验和性能。)
sudo modprobe kvm
sudo modprobe vfio
sudo modprobe vfio_pci
sudo modprobe vfio_iommu_type1
enable之后lsmod |grep kvm查看是否初始化成功
2.给每个VF绑定namespace(因为我这里拿的SSD来绑定的VF,实际应用也可以拿其他的设备。)
2.1绑定nvme namespace前提,需要先给每个VF设置中断信息等。
nvme virt-mgmt /dev/nvme3 -c 1 -a 8 -r 0 -n 8
nvme virt-mgmt /dev/nvme3 -c 1 -a 8 -r 1 -n 7
nvme virt-mgmt /dev/nvme3 -c 1 -a 9
2.2先删除宿主机盘符的ns,不然创建namespace会报空间不足
nvme delete-ns /dev/nvme3 --namespace-id=1 --timeout=0
nvme create-ns /dev/nvme3 --nsze=0x26000000 --ncap=0x26000000 --flbas=0 --dps=0 --nmic=0
nvme attach-ns /dev/nvme3 --namespace-id=1 --controllers=0
nvme attach-ns /dev/nvme3 --namespace-id=1 --controllers=1
nvme attach-ns /dev/nvme3 --namespace-id=2 --controllers=1