服务热线:(0755)88305813
Oracle一体机SR-IOV技术运用
来源: | 作者:oracle中国 | 发布时间: 2018-12-20 | 6148 次浏览 | 分享到:

现今,在x86体系架构下,有三种常见的网络I/O虚拟化方式:

  •     基于虚拟化软件(比如OVM用到的Xen)方式的I/O共享
  •     直接设备指派
  •     基于硬件的SR-IOV(Single-Root I/O Virtualization)

基于软件方式的I/O共享

    这是人们最常想到的,也是现今基于x86体系架构商业化虚拟化产品最常用到的方式。服务器虚拟化软件(Hypervisor, 比如Xen)位于虚拟机操作系统设备驱动器和实际的服务器硬件之间。简单说,虚拟机操作系统设备驱动器需要先与虚拟化软件交互,然后虚拟化软件再与底层的物理硬件交互来完成I、O操作。这种方式的好处是允许在多个虚拟机之间共享同一个物理设备。因为虚拟化软件使虚拟机操作系统相信他们拥有自己的硬件设备,而实际上他们是共享了同一个物理设备。虚拟化软件完成所有这些工作 - 管理冲突,确保所有虚拟机并发访问I/O设备,确保稳定运行。这种方式的缺点是虚拟化软件是以牺牲一定的性能来提供该功能的:虚拟化层至少需要一些时间来处理流量控制和I/O转换。来自于虚拟机的并发I/O操作越多,虚拟化软件会越忙碌,这会对系统的稳定性造成潜在的影响。虽然随着现今虚拟化软硬件的发展,基于软件方式的I/O共享对系统的性能和稳定性影响很小,但是在一些对系统性能有着极端高度要求的场景下,这种方式对性能的影响还是显而易见的。


直接设备指派

不同于基于软件的I/O共享 - 每个虚拟机与虚拟化软件直接通讯,然后虚拟化软件再与物理硬件设备通讯,直接设备指派方式允许虚拟机操作系统直接访问物理I/O设备硬件,不需要先通过虚拟化软件。这种方式清除了虚拟化软件层面造成的性能瓶颈和潜在的不稳定性,通过将I/O设备直接指派给一个虚拟机,确保虚拟机能够获得可预期的和稳定的I/O性能,就如同裸机操作系统访问自己的设备一样。使用这种方式的缺点是由于虚拟化层被略过,导致虚拟化软件无法完成虚拟化I/O的功能,也就是实现多个虚拟机共享一个I/O设备。如果你有一个物理机只有两个网卡,你最多在上边只能跑两个虚拟机, 每个虚拟机给指派一个网卡,这种方式不是很经济。



   理想的解决方案是提供一种方式,既能实现虚拟机共享同一个物理I/O设备, 也能实现像直接设备指派方式那样提供高性能, 高稳定性的I/O方式。而SR-IOV就是为了实现这种功能,并引入到Oracle使用虚拟化的一体机系统中。

Single-Root I/O Virtualization

SR-IOV是基于硬件的I/O虚拟化解决方案,提供更高的I/O性能和可扩展性。SR-IOV需要硬件的支持,通过在网卡上定义多个轻量级的VF(Virtual Function), 然后将VF指派给虚拟机,可以实现虚拟机绕过虚拟化软件直接访问网卡,同时又共享同一个物理网卡设备。

SR-IOV是一种新的业界标准,PCI-SIG 组织负责定义和维护SR-IOV 规范,可以通过如下网址访问:

http://www.pcisig.com.

在SR-IOV设备中,有两种功能(Function )类型:

  • Physical Function (PF)

       PF具有完整的PCIe功能, 能够被发现,管理和操作,就像操作任何其他普通PCIe设备一样。PF拥有完整的配置空间。可以通过PF来配置和控制PCIe设备,PF拥有完整的能力将数据从PCIe设备移入和移出。每一个PCIe设备可以有一个到最多八个PF。每个PF是独立的,而且从软件的角度看,每个PF就是一个独立的PCIe设备。

  • Virtual Function (VF)

       VF是一个轻量级的PCIe function,仅用于将数据移入和移出设备。每一个VF与一个底层的PF关联,每个PF可以有0个或多个VF。VF通过PF来创建。每一个VF可以指派给一个虚拟机, 从虚拟机的角度来说一个VF就是一个本地的物理网络设备。

所以通过SR-IOV,在硬件网络I/O设备层面实现在一个物理设备创建出多个虚拟设备(VF),每一个VF指派给一个虚拟机,虚拟机在直接访问VF的时候,就相当于直接访问硬件,可以达到类似于主机访问本地设备的性能。在Oracle一体机上,每个InfiniBand 网卡可以最多被63个虚拟机共享,也就是支持63个VF。