KVM PCI设备直通

2021-06-24  本文已影响0人  a11oy

概念

虚拟化 intel VT-x AMD-V SVM
IO虚拟化 intel VT-d IOMMU
单根虚拟化 SRIOV

///PCI位置表示法
<domain>:<bus>:<device>.<function>
domain          0x0000  to  0xffff
bus             0x00    to  0xff
device          0x00    to  0x1f
function            0x0     to  0x7
///PCI设备标识符
<vendor>:<device>:<class>

启用IOMMU

BIOS启用VT-d(intel),IOMMU(AMD)

///linux cmdline配置

grub配置文件修改,添加iommu启动cmdline
opensuse rhel centos fedora
$ sudo vi /etc/default/grub
GRUB_CMDLINE_LINUX_DEFAULT="amd_iommu=on iommu=pt"   ///amd cpu添加
GRUB_CMDLINE_LINUX_DEFAULT="intel_iommu=on iommu=pt"   ///intel cpu添加

更新grub.cfg文件
opensuse
$ sudo grub2-mkconfig -o /boot/grub2/grub.cfg
rhel centos fedora
$ sudo grub2-mkconfig -o /etc/grub2-efi.cfg   ///采用UEFI启动时,更新此文件
$ sudo grub2-mkconfig -o /etc/grub2.cfg    ///采用传统BIOS启动时,更新此文件

vfio纳管PCI设备

vfio等相关内核模块写入dracut配置文件,确保模块包含在initramfs中
$ sudo touch /etc/dracut.conf.d/vfio.conf    ///创建配置文件
$ sudo vi /etc/dracut.conf.d/vfio.conf     ///将以下一行写入配置文件
    add_drivers+=" vfio vfio_pci vfio_virqfd vfio_iommu_type1 "     ///注意引号之间需有空格

pci设备标识符查询
$ lspci -nn
09:00.0 VGA compatible controller [0300]: NVIDIA Corporation GK110B [GeForce GTX TITAN Black] [10de:100c] (rev a1)
09:00.1 Audio device [0403]: NVIDIA Corporation GK110 High Definition Audio Controller [10de:0e1a] (rev a1)
10de:100c及10de:0e1a即标识符

vfio纳管
$ sudo touch /etc/modprobe.d/vfio-gpu.conf     ///在模块加载创建配置文件
$ sudo vi /etc/modprobe.d/vfio-gpu.conf     ///配置模块加载参数
       options vfio_pci ids=10de:100c,10de:0e1a      ///添加pci设备标识符,逗号隔开
///也可以直接添加cmdline, vfio_pci.ids=10de:100c,10de:0e1a

更新initramfs
$ sudo dracut -f

更新linux cmdline
GRUB_CMDLINE_LINUX_DEFAULT="rd.driver.pre=vfio_pci"     ///参照cmdline更新流程,添加vfio参数,其他不变

重启系统
$ sudo reboot

PCI设备验证

$ lspci -k
09:00.0 VGA compatible controller: NVIDIA Corporation GK110B [GeForce GTX TITAN Black] (rev a1)
    Subsystem: eVga.com. Corp. Device 3791
    Kernel driver in use: vfio-pci
    Kernel modules: nouveau
09:00.1 Audio device: NVIDIA Corporation GK110 High Definition Audio Controller (rev a1)
    Subsystem: eVga.com. Corp. Device 3791
    Kernel driver in use: vfio-pci
    Kernel modules: snd_hda_intel
///可以看到pci设备驱动程序为vfio,即配置完成,可透传给虚拟机使用

SRIOV

此技术主要是网卡设备支持,可将网卡虚拟成多个网卡设备给到虚拟机使用。

$ lspci     ///查看网卡所在pci位置编号
$ cat /sys/bus/pci/devices/0000:41:00.0/sriov_totalvfs    ///查看网卡支持的vf数量
$ echo 16 > /sys/bus/pci/devices/0000:41:00.0/sriov_numvfs   ///创建vf
vf可以pci直通方式给到虚拟机使用
上一篇下一篇

猜你喜欢

热点阅读