libvirt笔记 PCI设备直通

PCI设备直通功能允许将主机上的物理PCI设备直接分配给来宾机。客户操作系统驱动程序可以直接使用设备硬件,而无需依赖主机操作系统的任何驱动程序功能。
在使用PCI设备直通时需要注意一些事项。当将PCI设备直接分配给客户机时,如果不首先从客户机热拔下设备,迁移是不可能的。此外,libvirt并不保证直接设备分配是安全的,将安全策略决策留给底层虚拟化技术。安全PCI设备透传通常需要特殊的硬件功能,例如用于英特尔芯片组的VT-d功能,或用于AMD芯片组的IOMMU功能。
PCI设备可以在两种模式下连接,“托管”或“非托管”模式,尽管在编写本文时只有KVM支持“托管”模式连接。在托管模式下,当客户端启动时,所配置的设备将自动与主机的操作系统驱动程序分离,当客户端关闭时,将重新连接所配置的设备。在非托管模式下,必须在启动客户机之前显式分离设备。如果设备仍然连接到主机操作系统,客户端将拒绝启动。libvirt ‘Node Device’ api提供了一种从主机驱动程序分离/重新连接PCI设备的方法。或者,主机操作系统可以配置为将来宾操作系统使用的PCI设备列入黑名单,这样它们就永远不会连接到主机操作系统驱动程序。
在这两种模式中,虚拟化技术总是在启动客户机之前和关闭客户机之后在设备上执行重置。这对于确保主机和客户操作系统之间的隔离至关重要。PCI设备有多种复位方式。一些复位技术局限于单个设备/功能,而另一些可能同时影响多个设备。在后一种情况下,将有必要将所有影响设备分配给同一来宾,否则将不可能安全地进行重置。通过手动解绑定设备,然后尝试执行复位操作,可以使用节点设备api来确定是否需要共同分配设备。如果这成功了,那么就可以自行将设备分配给客户。如果它失败了,那么将有必要在同一PCI总线上共同分配设备。
使用’hostdevice’元素将PCI设备连接到客户机。“mode”属性应该总是设置为“subsystem”,而“类型”属性应该设置为“pci”。根据应用程序的要求,“managed”属性可以是“yes”或“no”。在’hostdevice’元素中有一个’source’元素,在这个元素中还有一个’address’元素用于指定要附加的PCI设备。address元素需要“domain”、“bus”、“slot”和“function”的属性。通过一个简短的示例,这是最容易理解的.

<hostdev mode='subsystem' type='pci' managed='yes'><source><address domain='0x0000'
             bus='0x06'
             slot='0x12'
             function='0x5'/></source></hostdev>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值