1.在HOST 选择PCI设备
[root@localhost~]# dmesg |grep -e DMAR -e IOMMU
[ 0.000000] ACPI: DMAR 000000007b7be000 00120(v01 INSYDE HSW-LPT 00000001 ACPI00040000)
[ 0.155894] dmar: IOMMU 0: reg_base_addrfbffc000 ver 1:0 cap 8d2078c106f0466 ecap f020df
[ 0.155899] dmar: IOMMU 1: reg_base_addrc7ffc000 ver 1:0 cap 8d2078c106f0466 ecap f020df
[ 0.156023] IOAPIC id 10 under DRHD base 0xfbffc000 IOMMU 0
[ 0.156024] IOAPIC id 8 under DRHD base 0xc7ffc000 IOMMU 1
[ 0.156025] IOAPIC id 9 under DRHD base 0xc7ffc000 IOMMU 1
- 选择要使用的passthrough设备
a.
[root@localhost ~]# lspci -nn |grep NVIDIA
06:00.0 3D controller [0302]: NVIDIA Corporation Device [10de:15f8](rev a1)
87:00.0 3D controller [0302]: NVIDIACorporation Device [10de:15f8] (rev a1)
PCI bus number: PCIdevice number.Function number
b.查看所有的PCI接口
$virsh nodedev-list --tree
c.
可以查看两个PCI的接口对应了NVIDIA 设备
[root@localhost ~]# virsh nodedev-dumpxml pci_0000_06_00_0
<device>
<name>pci_0000_06_00_0</name>
<path>/sys/devices/pci0000:00/0000:00:03.0/0000:06:00.0</path>
<parent>pci_0000_00_03_0</parent>
<driver>
<name>nvidia</name>
</driver>
<capabilitytype='pci'>
<domain>0</domain>
<bus>6</bus>
<slot>0</slot>
<function>0</function>
<product id='0x15f8'/>
<vendorid='0x10de'>NVIDIA Corporation</vendor>
<numa node='0'/>
<pci-express>
<link validity='cap'port='0' speed='8' width='16'/>
<link validity='sta'speed='8' width='16'/>
</pci-express>
</capability>
</device>
[root@localhost~]# virsh nodedev-dumpxml pci_0000_87_00_0
<device>
<name>pci_0000_87_00_0</name>
<path>/sys/devices/pci0000:80/0000:80:03.0/0000:87:00.0</path>
<parent>pci_0000_80_03_0</parent>
<driver>
<name>nvidia</name>
</driver>
<capability type='pci'>
<domain>0</domain>
<bus>135</bus>
<slot>0</slot>
<function>0</function>
<product id='0x15f8' />
<vendor id='0x10de'>NVIDIACorporation</vendor>
<numa node='1'/>
<pci-express>
<link validity='cap' port='0'speed='8' width='16'/>
<link validity='sta' speed='8'width='16'/>
</pci-express>
</capability>
</device>
- 将设备从宿主机解除绑定
echo "10de 15f8" >/sys/bus/pci/drivers/pci-stub/new_id
echo 0000:06:00.0> /sys/bus/pci/devices/0000:06:00.0/driver/unbind ###为PCI的ID number
echo 0000:06:00.0 > /sys/bus/pci/drivers/pci-stub/bind ###为PCI的IDnumber
- 编辑grub,启动项,来打开IOMMU功能模块。(VFIO等报错的时候,是因为没启用该功能)
$vim /etc/default/grub
添加:intel_iommu=on
使其生效要进行:
update-grub
reboot
- 关闭SElinux安全策略(目前生产环节的机器状态为disable)
Setenforce 0
Getenforce
永久修改:vim /etc/selinux/config
- 在对应的VM添加PCI设备
<devices> …
<hostdev mode='subsystem' type='pci' managed='yes'>
<source>
<addressdomain='0x0000' bus='0x87' slot='0x00' function='0x0'/>
</source>
</hostdev>
</devices>
- 启动VM,virsh start vm-03
192.168.122.15 0x1 virbr0
192.168.122.142 0x1 virbr0