使用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
选择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
相关文章推荐
- Android系统Recovery工作原理之使用update.zip升级过程分析(三)---Android系统的三种启动模式
- SQL Server 阻止了对组件 'Ole Automation Procedures' 的 过程'sys.sp_OACreate' 的访问,因为此组件已作为此服务器安全配置的一部分而被关闭。系统管理员可以通过使用 sp_configur
- Android系统Recovery工作原理之使用update.zip升级过程分析(四)---Android系统Recovery模式的工作原理
- 使用XILINX SDK工具通过网络进行基于linux系统的远程调试方法
- Android系统Recovery工作原理之使用update.zip升级过程分析(三)---Android系统的三种启动模式
- Android系统Recovery工作原理之使用update.zip升级过程分析(四)---Android系统Recovery模式的工作原理
- 【分享】 使用MacBook Pro共享网络让其他PC和手持设备通过wi-fi上网方法
- Android系统Recovery工作原理之使用update.zip升级过程分析(四)---Android系统Recovery模式的工作原理
- Android系统Recovery工作原理之使用update.zip升级过程分析(四)---Android系统Recovery模式的工作原理
- 一次恢复操作系统的失败之旅:使用主盘对从盘进行独立系统安装过程实践——OneKey7.3.1
- Android系统Recovery工作原理之使用update.zip升级过程分析(三)---Android系统的三种启动模式
- SQL Server 阻止了对组件 'Ole Automation Procedures' 的 过程'sys.sp_OACreate' 的访问,因为此组件已作为此服务器安全配置的一部分而被关闭。系统管理员可以通过使用 sp_configure 启用 'Ol
- SQL Server 阻止了对组件 'xp_cmdshell' 的 过程'sys.xp_cmdshell' 的访问,因为此组件已作为此服务器安全配置的一部分而被关闭。系统管理员可以通过使用 sp_co
- Android系统Recovery工作原理之使用update.zip升级过程分析(三)---Android系统的三种启动模式
- 在进行嵌入式开发之前,首先要建立一个交叉编译环境,这是一套编译器、连接器和libc库等组成的开发环境。文章通过一个具体的例子说明了这些嵌入式交叉编译开发工具的制作过程。 随着消费类电子产品的大量开发和应用和Linux操作系统的不断健壮和强大,嵌入式系统越来
- 在Windows系统下通过Xmanager远程使用桌面连接RHEL6
- 1月14日苹果在线商店促销,冲动之下购买了IMAC。以前一直在旧电脑windows下使用itunes,现在有了新的也想借此机会将旧电脑系统重装。于是我需要把现有设备中的所有资料通过itunes全部导
- Android系统Recovery工作原理之使用update.zip升级过程分析(四)---Android系统Recovery模式的工作原理
- 1月14日苹果在线商店促销,冲动之下购买了IMAC。以前一直在旧电脑windows下使用itunes,现在有了新的也想借此机会将旧电脑系统重装。于是我需要把现有设备中的所有资料通过itunes全部导
- SQL2000系统表、存储过程、函数的功能介绍及应用2009年01月21日 星期三 11:38虽然使用系统存储过程、系统函数与信息架构视图已经可以为我们提供了相当丰富的元数据信息,但是对于某些特殊的元数据信息,我们仍然需要直接对系统表进行查询。因为SQL