您的位置:首页 > 其它

使用passthrough模式,只通过PCI任意设备(该过程是在RHEL7系统进行,其他系统原理一样)

2017-11-22 10:09 681 查看
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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐