openstack nova中如何实现PCI透传功能

发布时间:2021-12-29 15:37:22 作者:小新
来源:亿速云 阅读:224

这篇文章给大家分享的是有关openstack nova中如何实现PCI透传功能的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

1.   PCI透传技术

1.1     PCI 透传技术与Liunx 虚拟化关系

设备(或 PCI)透传(passthrough)的 I/O 性能增强技术,这种创新技术通过使用来自 Intel® (VT-d) 或 AMD (IOMMU) 的硬件支持改进 PCI 设备的性能。

平台虚拟化是在两个或多个操作系统之间共享一个平台,以便更有效地利用资源。但平台并不只是意味着一个以上的处理器,它还包含组成平台的其他重要元素,比如存储器、网络和其他硬件资源。某些硬件资源可以轻松虚拟化,比如处理器和存储器; 而另一些硬件资源则不然,比如视频适配器和串口。当共享不可能或没用时,Peripheral Component Interconnect (PCI) 透传技术提供有效使用这些资源的方法。

在探索透传技术之前,让我们先讨论一下如今设备模拟在两个管理程序架构中是如何工作的。第一个架构将设备模拟整合到管理程序中,而第二个架构将设备模拟推到管理程序之外的一个应用程序中。

管理程序中的设备模拟 是在 VMware 工作站产品(一个基于操作系统的管理程序)中实现的一个公共方法。在这个模型中,管理程序包含各种客户操作系统能够共享的公共设备,如虚拟磁盘、虚拟网络适配器和其他必需的平台元素。这个特定模型如图 1 所示。

openstack nova中如何实现PCI透传功能

第二个架构称为用户空间设备模拟(见图 2)。顾名思义,这种设备模拟是在用户空间中实现的,而不嵌入到管理程序中。QEMU(不仅提供设备模拟,还提供一个管理程序)提供设备模拟,用于大量独 立管理程序,如 Kernel-based Virtual Machine (KVM) 和 VirtualBox 等。这个模型更具优势,因为设备模拟独立于管理程序,因而可以在多个管理程序之间共享。另外,这个模型还支持任意设备模拟,无须管理程序(以特权状态运 行)负担这个功能。

openstack nova中如何实现PCI透传功能

将设备模拟从管理程序推向用户空间有一些明显的优势,最大的优势涉及所谓的可信计算基础(trusted computing base,TCB)。 一个系统的 TCB 是对该系统安全性很关键的所有安全组件的集合。有一点是显而易见的:如果系统被最小化,出现 bug 的可能性也就更小,因此系统也就越安全。这个原理也适用管理程序。管理程序的安全性很重要,因为它分隔多个独立的客户操作系统。管理程序中的代码越少(将 设备模拟推到特权较低的用户空间中),将特权泄露给不可信用户的机率也就越少。

基于管理程序的设备模拟的另一个变体是准虚拟化(paravirtualized)驱动程序。在这个模型中,管理程序包含物理驱动程序,每个客户操作系统包含一个管理程序可以感知的驱动程序,这个驱动程序与管理程序驱动程序(称为准虚拟化 或 PV 驱动程序)配合工作。

无论设备模拟发生在管理程序内还是在一个客户虚拟机(VM)之上,模拟方法都是相似的。设备模拟能够模拟一个特定设备(如 Novell NE1000 网络适配器)或一个特定磁盘类型(如 Integrated Device Electronics [IDE])。物理硬盘可以完全不同 — 例如,尽管一个 IDE 驱动器被模拟为客户操作系统,物理硬件平台可以使用一个串口 ATA (SATA) 驱动器。这种技术很有用,因为 IDE 支持在许多操作系统中都很普遍,可以用作一个通用标准,而不是要求所有操作系统都支持更高级的驱动器类型。

1.2     设备透传技术概述

正如上面介绍的两个设备模型所示,设备共享是有代价的。无论设别模拟是在管理程序还是在一个独立 VM 中的用户空间中执行,都存在开销。只要有多个客户操作系统需要共享这些设备,这个开销就是值得的。如果共享不是必须的,则有更有效的方法来共享这些设备。

因此,在最高层面上,设备透传就是向一个特定客户操作系统提供一种设备隔离,以便该设备能够被那个客户操作系统独占使用(见图 3)。但这种技术为什么有用?设备透传之所以有价值,原因有很多,其中两个最重要的原因是性能以及提供本质上不能共享的设备的专用权。

openstack nova中如何实现PCI透传功能

对于性能而言,使用设备透传可以获得近乎本机的性能。对于某些网络应用程序(或那些拥有高磁盘 I/O 的应用程序)来说,这种技术简直是完美的。这些网络应用程序没有采用虚拟化,原因是穿过管理程序(达到管理程序中的驱动程序或从管理程序到用户空间模拟) 会导致竞争和性能降低。但是,当这些设备不能被共享时,也可以将它们分配到特定的客户机中。例如,如果一个系统包含多个视频适配器,则那些适配器可以被传 递到特定的客户域中。

最后,可能有一些只有一个客户域使用的专用 PCE 设备,或者有一些不受管理程序支持因而应该被传递到客户机的设备。单独的 USB 端口可以与一个给定域隔离,一个串口(自身不是可共享的)可以与一个特定客户机隔离。

1.3    设备透传的硬件支持

Intel 和 AMD 都在它们的新一代处理器架构中提供对设备透传的支持(以及辅助管理程序的新指令)。Intel 将这种支持称为 Virtualization Technology for Directed I/O (VT-d),而 AMD 称之为 I/O Memory Management Unit (IOMMU)。不管是哪种情况,新的 CPU 都提供将 PCI 物理地址映射到客户虚拟系统的方法。当这种映射发生时,硬件将负责访问(和保护),客户操作系统在使用该设备时,就仿佛它不是一个虚拟系统一样。除了将客 户机映射到物理内存外,新的架构还提供隔离机制,以便预先阻止其他客户机(或管理程序)访问该内存。Intel 和 AMD CPU 提供更多虚拟化功能,您可以在 参考资料 部分了解更多信息。

另一种帮助将中断缩放为大量 VM 的技术革新称为 Message Signaled Interrupts (MSI)。MSI 将中断转换为更容易虚拟化的消息(缩放为数千个独立中断),而不是依赖将被关联到一个客户机的物理中断 pin。从 PCI 2.2 开始,MSI 就已经可用,但 PCI Express (PCIe) 也提供 MSI,在 PCIe 中,MSI 支持将结构缩放为多个设备。MSI 是理想的 I/O 虚拟化技术,因为它支持多个中断源的隔离(而不是必须通过软件多路传输或路由的物理 pin)。

2.   PCI 透传功能在Openstack nova 中实现( 译自openstack administrator guide)

2.1     在 Openstack nova 中实现 PCI透传步骤

  1. Enable PCI passthrough (Compute) 在主机启动PCI passthrough 功能

  2. Configure PCI devices in nova-compute (Compute) 在 nova-compute 中配置PCI设备。

  3. Configure nova-scheduler (Controller)配置 nova-scheduler

  4. Configure nova-api (Controller)** 配置 nova-api

  5. Configure a flavor (Controller)配置一个flavor

  6. The PCI device with address 0000:41:00.0 is as an example. Expect to change this according to your actual environment.

    2.2     Enable PCI passthrough (Compute)

    需要在服务器BIOS中启动,Intel CPU 启动VT-d,AMD CPU 启动IOMMU。

    2. 3  Configure PCI devices nova-compute (Compute)

1.  Configure nova-compute to allow the PCI device to be passed through to VMs. Edit /etc/nova/nova.conf:

openstack nova中如何实现PCI透传功能

Alternatively specify multiple PCI devices using whitelisting:

openstack nova中如何实现PCI透传功能

·  All PCI devices matching the vendor_id and product_id are added to the pool of PCI devices available for passthrough to VMs.

For more information about the syntax of pci_passthrough_whitelist, refer to nova.conf configuration options.

2.   Restart nova-compute with service nova-compute restart.

2.4   Configure nova-scheduler (Controller)

  1. Configure nova-scheduler as specified in Configure nova-scheduler.

Restart nova-scheduler with service nova-scheduler restart.

2.5   Configure nova-api (Controller)

1.   Specify the PCI alias for the device.

Configure a PCI alias a1 to request a PCI device with a vendor_id of 0x8086 and a product_id of 0x154d. The vendor_id and product_id correspond the PCI device with address 0000:41:00.0.

Edit /etc/nova/nova.conf: openstack nova中如何实现PCI透传功能 2.For more information about the syntax of pci_alias, refer to nova.conf configuration options.

  1. Restart nova-api with service nova-api restart.

2.6 Configure a flavor (Controller)

Configure a flavor to request two PCI devices, each with vendor_id as 0x8086 and product_id as 0x154d.

openstack nova中如何实现PCI透传功能

For more information about the syntax for pci_passthrough:alias, refer to flavor.

2.7     Create instances with PCI passthrough devices

The nova-scheduler selects a destination host that has PCI devices available with the specified vendor_id and product_id that matches the pci_alias from the flavor.

openstack nova中如何实现PCI透传功能

感谢各位的阅读!关于“openstack nova中如何实现PCI透传功能”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

推荐阅读:
  1. openstack概述
  2. OpenStack入门之核心组件梳理(2)——Nova篇

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

openstack nova pci

上一篇:laravel中dd是不是属于函数

下一篇:如何进行0day漏洞CVE-2018-8174复现

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》