I/O虚拟化--VT-d和SR_IOV

I/O设备虚拟化

Hypervisor——一种运行在基础物理服务器和操作系统之间的中间软件层,可允许多个操作系统和应用共享硬件。也可叫做VMM( virtual machine monitor ),即虚拟机监视器。QEMU就是一款开源的模拟器及虚拟机监管器(VMM)。VMM通过I/O虚拟化来复用有限的外设资源,其通过截获 Guest OS对I/O设备的访问请求,然后通过软件模拟真实的硬件,目前I/O设备的虚拟化方式主要有三种:设备接口完全模拟、前端/后端模拟、直接划分。

1、设备接口完全模拟:
即软件精确模拟与物理设备完全一样的接口,Guest OS驱动无须修改就能驱动这个虚拟设备。优点是没有额外的硬件开销,可重用现有驱动程序,缺点是为完成一次操作要涉及到多个寄存器的操作,使得 VMM 要截获每个寄存器访问并进行相应的模拟,导致多次上下文切换,性能较低。

2、前端/后端模拟:
VMM 提供一个简化的驱动程序(后端, Back-End),Guest OS中的驱动程序为前端 (Front-End, FE),前端驱动将来自其他模块的请求通过与Guest OS间的特殊通信机制直接发送给Guest OS的后端驱动,后端驱动在处理完请求后再发回通知给前端(Xen即采用该方法)。优点是由于基于事务的通信机制,能在很大程度上减少上下文切换开销,没有额外的硬件开销,缺点是需要VMM实现前端驱动,后端驱动可能成为瓶颈。

3、直接划分:
即PCI/PCIe 设备直接分配(Pass-through),直接将物理设备分配给某个 Guest OS,由Guest OS直接访问I/O设备(不经 VMM),目前与此相关的技术有IOMMU(Intel VT-d, PCI-SIG 之 SR-IOV 等),旨在建立高效的I/O虚拟化直通道。优点是直接访问减少了虚拟化开销,缺点是需要购买额外的硬件。

本文主要介绍第3种方式。

PCI/PCIe 设备直接分配(Pass-through)

设备直接分配 (Device assignment)也称为 Device Pass-Through,也就是俗称的虚拟化直通技术。就是将宿主机host中的物理 PCI 设备直接分配给客户机guest使用,虚拟机独占这个PCI设备,利用效率几乎等同于将硬件插到了虚拟机的主板扩展槽里一样。在guest进行对应的IO操作时,避免 了VM Exit 陷入VMM 中,因此避免了虚拟化平台自身软件层转换带来的效能下降,极大提高了性能。

在Intel平台上的Device assignment技术是VT-d(Intel Virtualization Technology for Directed I/O),是在VT-X的基础上对硬件辅助虚拟化的扩展。

Intel VT-d


普通 MMU只能完成一次虚拟地址VVA到物理地址GPA的映射,在虚拟机环境下,经过 MMU 转换所得到的“物理地址”并不是真正的机器地址,当设备拿着这个虚拟机物理地址GPA去发起DMA操作肯定会失败。若需得到真正的机器地址,必须再经过一次映射,将GPA转化为HPA主机物理地址,才能得到总线上正确的机器地址。而Intel VT-d就是完成这样一个工作,在芯片组里引入了DMA重映射硬件(DMA Remapping),以提供设备重映射和设备直接分配的功能。

概念介绍:

  1. MMU(Memory Management Unit, 内存管理单元): 将虚拟地址转化为物理地址,cpu与主存之间地址转换。
  2. DMA(Direct Memory Access,直接内存存取): 是一种快速传送数据的机制。DMA 传输将数据从一个地址空间复制到另外一个地址空间。
    当CPU 初始化这个传输动作,传输动作本身是由 DMA 控制器来实行和完成。最初的DMA地址是物理地址,后来dmar就出现了。 dmar意为DMA remapping,是Intel为支持虚拟机而设计的I/O虚拟化技术,I/O设备访问的DMA地址不再是真正的物理内存地址,而要通过DMA remapping硬件进行转译,DMA remapping硬件会把DMA地址翻译成物理内存地址,并检查访问权限等等。负责DMA remapping操作的硬件称为IOMMU。

I/O虚拟化--VT-d和SR_IOV_第1张图片

PCIe SR-IOV

Intel VT-d技术和Passthrough技术通过降低I/O操作中VMM的参与提升了虚拟机的I/O性能。虽然可以将物理网卡直接透传到虚拟机,但是一台服务器的物理网卡毕竟有限,因此, SR-IOV技术应运而生。通过SR-IOV技术,一个物理网卡可以虚拟出多个网卡,分配给虚拟机使用。

SR-IOV 两种功能(function):

  • 物理功能(Physical Functions,PF):这是完整的带有 SR-IOV 能力的PCIe 设备。PF 能像普通 PCI 设备那样被发现、管理和配置。
  • 虚拟功能(Virtual Functions,VF):简单的 PCIe 功能,它只能处理I/O。每个 VF 都是从 PF 中分离出来的。每个物理硬件都有一个 VF 数目的限制。一个 PF,能被虚拟成多个 VF 用于分配给多个虚拟机。

Hypervisor 能将一个或者多个 VF 分配给一个虚机。在某一时刻,一个 VF 只能被分配给一个虚机。一个虚机可以拥有多个 VF。在虚机的操作系统看来,一个 VF 网卡看起来和一个普通网卡没有区别。SR-IOV 驱动是在内核中实现的。
在这里插入图片描述

从网卡的角度对比虚拟化技术:

I/O虚拟化--VT-d和SR_IOV_第2张图片
I/O虚拟化--VT-d和SR_IOV_第3张图片

你可能感兴趣的:(云计算虚拟化)