概念
虛擬化 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設(shè)備標(biāo)識符
<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 ///采用傳統(tǒng)BIOS啟動時,更新此文件
vfio納管PCI設(shè)備
vfio等相關(guān)內(nèi)核模塊寫入dracut配置文件幌甘,確保模塊包含在initramfs中
$ sudo touch /etc/dracut.conf.d/vfio.conf ///創(chuàng)建配置文件
$ sudo vi /etc/dracut.conf.d/vfio.conf ///將以下一行寫入配置文件
add_drivers+=" vfio vfio_pci vfio_virqfd vfio_iommu_type1 " ///注意引號之間需有空格
pci設(shè)備標(biāo)識符查詢
$ 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即標(biāo)識符
vfio納管
$ sudo touch /etc/modprobe.d/vfio-gpu.conf ///在模塊加載創(chuàng)建配置文件
$ sudo vi /etc/modprobe.d/vfio-gpu.conf ///配置模塊加載參數(shù)
options vfio_pci ids=10de:100c,10de:0e1a ///添加pci設(shè)備標(biāo)識符锅风,逗號隔開
///也可以直接添加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參數(shù)肮帐,其他不變
重啟系統(tǒng)
$ sudo reboot
PCI設(shè)備驗(yàn)證
$ 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設(shè)備驅(qū)動程序?yàn)関fio边器,即配置完成,可透傳給虛擬機(jī)使用
SRIOV
此技術(shù)主要是網(wǎng)卡設(shè)備支持忘巧,可將網(wǎng)卡虛擬成多個網(wǎng)卡設(shè)備給到虛擬機(jī)使用。
$ lspci ///查看網(wǎng)卡所在pci位置編號
$ cat /sys/bus/pci/devices/0000:41:00.0/sriov_totalvfs ///查看網(wǎng)卡支持的vf數(shù)量
$ echo 16 > /sys/bus/pci/devices/0000:41:00.0/sriov_numvfs ///創(chuàng)建vf
vf可以pci直通方式給到虛擬機(jī)使用