IO虚拟化及虚拟化模型
一、I/O虚拟化简介 I/O虚拟化(Input/output virtualization,简称IOV)是虚拟化的一种新形式,是来自物理连接或物理运输上层协议的抽象,让物理服务器和虚拟机可以共享I/O资源。在现实生活中,可用的物理资源往往是有限的,虚拟机的个数往往会比实际的物理设备个数要多。为了提高资源的利用率,满足多个虚拟机操作系统对外部设备的访问需求,虚拟机监视器必须通过I/O虚拟化的
一、I/O虚拟化简介
I/O虚拟化(Input/output virtualization,简称IOV)是虚拟化的一种新形式,是来自物理连接或物理运输上层协议的抽象,让物理服务器和虚拟机可以共享I/O资源。
在现实生活中,可用的物理资源往往是有限的,虚拟机的个数往往会比实际的物理设备个数要多。为了提高资源的利用率,满足多个虚拟机操作系统对外部设备的访问需求,虚拟机监视器必须通过I/O虚拟化的方式来实现资源的复用,让有限的资源能被多个虚拟机共享。为了达到这个目的,监视器程序需要截获虚拟机操作系统对外部设备的访问请求,通过软件的方式模拟出真实的物理设备的效果,这样,虚拟机看到的实际只是一个虚拟设备,而是真正的物理设备,这种模拟的方式就是I/O虚拟化的一种实现,下图所示就是一个典型的虚拟机I/O模型。
如上图所示,虚拟化技术通过在物理硬件上抽象出一个虚拟化层,来实现对整个物理平台的虚拟化,这个虚拟化层通常被称为虚拟机监视器(VMM)。通过对硬件层的模拟,将一台物理计算机抽象成了多台虚拟计算机,每个虚拟机都运行独立的操作系统,有各自的I/O子系统。I/O虚拟化并不需要完整地虚拟化出所有外设的所有接口,究竟怎样做完全取决于设备与VMM的策略以及客户机操作系统的需求。
二、I/O虚拟化的基本要求
I/O虚拟化虽然有着显著的优点,但是具体实现并没有那么简单,要考虑的因素也很多的,基本要求主要有以下的三点:
- 保真性,要求在虚拟化平台下进行的I/O访问与非虚拟化条件下的I/O访问除了完成时间差别外,其它效果相同;
- 安全性,要求各虚拟机操作系统只能访问虚拟机监视器分配给其的I/O资源,而各I/O设备也只能与属于同一个虚拟机的其它资源进行交互,如存储空间和CPU,而不能越界访问属于其它虚拟机的资源;
- 性能,要求虚拟化系统下I/O访问的性能与非虚拟化系统下的I/O访问性能接近。
在这三个基本要求之中最为重要的就是安全性方面的要求,这是保证虚拟化环境可以正常运行的根本,只有首先满足这一要求才能保证虚拟化I/O的保真性,对于性能的要求才会有意义。虚拟化环境下之所以会出现安全性的问题是因为虚拟机操作系统可见的地址并不是实际的机器物理地址,而是客户物理地址,设备若无法获知客户物理地址和机器物理地址间的转换关系,会直接使用客户物理地址进行内存访问,这会导致非法地址访问、破坏正常数据。
正是由于I/O虚拟化对于I/O空间安全隔离性方面的要求,所以对于虚拟机操作系统的I/O访问操作一般都需要虚拟机监视器的干预,而不允许虚拟机操作系统与I/O设备直接进行交互,这也就使得虚拟化系统下的I/O性能与非虚拟化系统的I/O性能有着较大的差距。在设备直接分配模型中,有IOMMU的硬件辅助,实现了域间隔离和设备地址转换,保证被分配给虚拟机的设备不会访问不属于该虚拟机的存储器空间。
三、I/O虚拟化的性能
因为I/O虚拟化安全性的要求,导致虚拟机操作系统的I/O访问会受到虚拟机监视器干预,导致性能与非虚拟化环境有较大差距。而虚拟机监视器介入之所以会导致性能严重损失的根本原因就是发生了上下文切换。
上下文切换分为两种,虚拟机与虚拟机之间发生的上下文切换以及虚拟机与虚拟机监视器之间发生的上下文切换。在I/O虚拟化中影响性能的就是虚拟机和虚拟机监视器之间的上下文切换。虚拟机操作系统产生的I/O请求会被监视器截获,监视器将I/O请求交由驱动域去处理,驱动域完成I/O请求要返回执行结果,这些过程都是造成上下文切换。虚拟机和监视器之间的上下文切换的开销主要分为以下三个部分:
- 直接开销,这个部分主要由CPU的切换造成,CPU需要停滞虚拟机切换到虚拟机监视器去执行,之后又要从监视器程序转回虚拟机执行下一条指令;
- 间接开销,两种环境的切换导致需要保存上下文环境。
- 同步开销,这个部分主要是虚拟机监视器处理VM EXIT造成的。
因此,一旦发生大量的上下文切换,将严重影响I/O虚拟化的性能,尤其在I/O密集型的任务中,上下文切换导致的开销往往是无法忍受的。
四、主流的I/O设备虚拟化模型
(1)模拟模型
模拟模型是使用最为广泛的I/O设备虚拟化模型,该模型采用软件的方式模拟设备行为,为虚拟机模拟出与底层硬件完全一致的虚拟化环境,保证虚拟机操作系统的行为与非虚拟化环境下完全一致。在模拟模型中,虚拟设备必须以某种方式让虚拟机可以发现,导致虚拟机被“欺骗”。当虚拟机访问虚拟设备时,访问请求被虚拟机监视器截获,然后监视器程序将I/O请求交由domain0来模拟完成,最后将结果返回给虚拟机。如下图所示是一个基于设备模拟的xen的I/O虚拟化模型。
模拟模型最大的优点在于不需要对操作系统内核做修改,也不需要为其改写驱动程序,因此,全虚拟化下的模拟模型成为了可移植性与兼容性最佳的一种I/O设备虚拟模型,这也是它被如此广泛使用的主要原因。
但是设备模拟模型有一个很大的不足之处,即性能不够高,主要原因有两方面:第一、模拟方式是用软件行为进行模拟,这种方式本身就无法得到很高的性能;第二、这种模型下I/O请求的完成需要虚拟机与监视器程序多次的交互,产生大量的上下文切换,造成巨大开销。
(2)泛虚拟化模型
泛虚拟化模型是被广泛使用的另一种I/O设备虚拟化模型。相比于设备模拟模型而言,泛虚拟化模型在性能上有很大的提升。主要有以下两个原因:
- 该模型采用了I/O环机制,减少了虚拟机与虚拟机监视器之间的切换;
- 该模型摒弃了传统的中断机制,而采用事件或回调机制来实现设备与客户机间的通信。进行中断处理时,传统的中断服务程序需要进行中断确认和上下文切换,而采用事件或回调机制,无需进行上下文切换。
如下图所示是一个基于泛虚拟化的Xen的I/O虚拟化模型。
泛虚拟化模型虽然在性能上比模拟模型要好,但是这种I/O模型有一个很大的缺点,要修改操作系统内核以及驱动程序,因此会存在移植性和适用性方面的问题,导致其使用受限。
(3)设备直接分配模型
传统的实现I/O虚拟化的技术中,所有的虚拟机都共享物理平台上的硬件设备。如果物理条件好,有足够的硬件,就可以考虑让每个虚拟机独占一个物理设备,这样无疑会提高系统的性能。把某一个设备直接分配给一个虚拟机,让虚拟机可以直接访问该物理设备而不需要通过虚拟机监视器或被虚拟机监视器截获,这就是设备直接分配技术。如下图所示为设备直接分配的I/O模型。
在设备直接分配模型中,虚拟机操作系统可直接拥有某一物理设备的访问控制权限,虚拟机监视器不再干涉其访问操作。因此,该模型可以较大地改善虚拟化设备的性能,降低监视器程序的复杂性,易于实现,并且不需要修改操作系统,保证了高可用性。
设备直接分配模型虽然在性能上相比主流的两种I/O设备虚拟化模型有着很大的提升,但是该模型的使用也是有一定限制的。因为该模型将一件物理设备直接分配给了一个虚拟机,其它虚拟机是无法使用该设备的,所产生的一个问题就是如果其它虚拟机需要访问该设备则无法满足需求,解决的办法就是服务器上还有一个同样的设备以供其它虚拟机使用。因此,设备直接分配模型的使用必须满足物理资源较为充足的前提条件,对于那些紧缺的物理资源,该模型是不适用的。
(4)SR-IOV
为降低虚拟机I/O的性能开销,学术界和工业界从软硬件方面对虚拟机I/O模型做了大量的改进。Intel VT-d技术和Passthrough技术通过降低I/O操作中VMM的参与提升了虚拟机的I/O性能, SR-IOV标准在此基础上支持虚拟机对I/O设备的原生共享。SR-IOV标准定义了设备原生共享所需的软硬件支持。硬件支持包括芯片组对SR-IOV设备的识别,BIOS为SR-IOV分配足够的资源,此外为保证对设备的安全、隔离访问还需要北桥芯片的VT-d支持。软件方面,VMM将驱动管理权限交给域0,域0操作系统必须支持SR-IOV功能。域0通过物理功能(physical function,PF)驱动发现设备的SR-IOV功能后将包括发送、接收队列在内的物理资源依据VF数目划分成多个子集,然后PF驱动将这些资源子集抽象成设备即系统中所见的虚拟功能(virtual function,VF)设备,创建VF设备后,域0可将VF设备以Passthrough方式分配给虚拟机。
SR-IOV的软件架构如下图所示,分成四个部分:PF、VF、控制面板以及PF和VF间的通信机制。其中,PF是域0中负责管理SR-IOV设备的特殊驱动,其主要功能是为特权域0提供设备访问功能和全局贡献资源配置的功能,虚拟机所有影响设备状态的操作均需通过通信机制向PF发出请求完成。VF是轻量级的PCIe功能,其功能包含三个方面:向虚拟机操作系统提供的接口;数据的发送、接收功能;与PF进行通信,完成全局相关操作,由于VF的资源仅是设备资源的子集,因此VF驱动能够访问的资源有限,对其它资源的访问要求通过PF完成。控制面板同PF一样位于特权域0中,其主要功能是负责生成PCIe配置空间并将VF抽象成PCIe设备,并向用户提供VF分配、回收等接口。
尽管Intel VT-d技术和Passthrough技术消除了虚拟机I/O中VMM干预引起的额外开销,但在I/O操作中I/O设备会产生大量的中断,出于安全等因素考虑,虚拟机无法直接处理中断,因此中断请求需要由VMM安全、隔离地路由至合适的虚拟机。若CPU运行虚拟机时接收中断请求,Xen将强制将虚拟机切换出来并且陷入到VMM中执行中断处理程序,待处理完毕后再恢复虚拟机的执行,因而增加了虚拟机的I/O延迟。
转载自:http://blog.csdn.net/lkn910907/article/details/41866109
更多推荐
所有评论(0)