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

本文档详细介绍了如何在RHEL7系统中通过passthrough模式将PCI设备(以NVIDIA GPU为例)分配给虚拟机。首先,通过dmesg和lspci命令查找并选择PCI设备,然后解除设备与主机的绑定,并启用IOMMU功能。接着,编辑GRUB配置以开启 intel_iommu,并调整SELinux策略。最后,在虚拟机配置中添加PCI设备,并启动虚拟机完成passthrough设置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

 

 

  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>

 

 

 

 

  1. 将设备从宿主机解除绑定

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  ###PCIID number

echo 0000:06:00.0 > /sys/bus/pci/drivers/pci-stub/bind            ###PCIIDnumber

 

  1. 编辑grub,启动项,来打开IOMMU功能模块。(VFIO等报错的时候,是因为没启用该功能)

 $vim /etc/default/grub

添加:intel_iommu=on

使其生效要进行:

update-grub

reboot

 

  1. 关闭SElinux安全策略(目前生产环节的机器状态为disable)

Setenforce 0

Getenforce

永久修改:vim /etc/selinux/config

  1. 在对应的VM添加PCI设备

<devices> …

  

<hostdev mode='subsystem' type='pci' managed='yes'>

      <source>

        <addressdomain='0x0000' bus='0x87' slot='0x00' function='0x0'/>

      </source>

       </hostdev>

</devices>

 

  1. 启动VMvirsh start vm-03

192.168.122.15   0x1            virbr0

192.168.122.142  0x1             virbr0

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值