《软硬件融合:超大规模云计算架构创新之路》之二:CPU虚拟化--从软件模拟到完全硬件

CPU虚拟化是计算机虚拟化的核心,CPU虚拟化有很多种方式,概括的分为三类:软件虚拟化、类虚拟化以及完全硬件虚拟化,依次性能越来越好。

1.CPU的软件虚拟化

操作系统设计的目标就是直接在裸机硬件上运行,因此自然会假定自己完全“拥有”所有的计算机硬件。x86架构为操作系统和应用程序提供了四个级别的特权,分别称为Ring 0/1/2/3,以此管理对计算机硬件资源的访问。

 

    图 3.28 CPU虚拟化

如图 3.28(a)所示,无虚拟化的场景。用户级应用程序通常在Ring 3中运行,操作系统要想直接访问内存和硬件,就必须在Ring 0中执行其特权指令。

CPU的软件虚拟化大概有三类:

  1. 解释执行。也称全软件模拟,即取出一条指令,模拟出这条指令执行的效果,再继续下一条指令。由于每条指令都要模拟,也相当于虚拟机的每条指令都会“陷入”Hypervisor,因此解释执行的性能非常差。
  2. 扫描与修补。让大多数的指令在物理CPU直接运行,而把操作系统敏感指令替换成跳转指令或会陷入Hypervisor的指令,执行到系统敏感指令的时候,就会进入Hypervisor,由Hypervisor代为模拟执行。扫描和修补技术的实现相对简单,大部分客户机操作系统和应用代码可以在物理CPU执行,性能损失相对较小。扫描与修补也会带来一些问题:特权和敏感指令被模拟执行,因此有的指令模拟时间会较短有的会非常长;特权和敏感指令引入的额外的跳转,降低了代码的局部性;需要维护两套代码,之后还需要将代码恢复原状。
  3. 二进制翻译。在Hypervisor开辟一块代码缓存,将代码翻译好放在其中,这样客户机操作系统代码并不会直接被物理CPU执行,所有要被执行的代码都在代码缓存中。相比较的,二进制翻译技术最为复杂,其在性能上同扫描和修补技术各有长短。

如图 3.28(b)所示,VMware在1998年开发了二进制转换技术,该技术允许Hypervisor在Ring 0中运行以实现隔离和性能,同时将操作系统迁移到用户级别的Ring1,其权限要高于Ring 3中的应用程序,但比虚拟机要低。VMware可以使用二进制转换和直接执行技术的组合来虚拟化x86操作系统,这种方法翻译内核代码,以对虚拟硬件产生预期影响的新指令序列替换不可虚拟化的指令。同时,用户级代码直接在处理器上执行以实现高性能虚拟化。

2.CPU的类虚拟化

类虚拟化(Para-Virtualization)技术需要修改现有的操作系统,把不可虚拟化的指令替换成hypercall,通过协调客户机操作系统和虚拟化管理层的的通信。以此来提升虚拟化效率,打破了传统的虚拟化的同质性要求。

如图 3.28(c),通过修改源代码使得操作系统内核完全避免难以虚拟化的指令,这样操作系统就不必在Ring0特权级别运行,可以运行在次一级的特权级别。当操作系统试图执行特权指令时,保护异常就会触发,从而让Hypervisor来截获处理。

传统的完全软件虚拟化,客户机操作系统是不知道自己运行在虚拟环境之上的。但在类虚拟化方式下,上层操作系统知道自己运行在一个虚拟环境之上,这样可以更好的配合Hypervisor的工作。类虚拟化大概有如下优点:

  1. 相比传统的软件虚拟化,类虚拟化可以提供最大限度的性能优化,主要包括减少冗余代码、减少地址空间借还和跨特权等级切换、减少内存复制等。
  2. 类虚拟化在一定程度上消除了虚拟化层和上层操作系统之间的语义鸿沟,使得系统的管理更加有效。
  3. 类虚拟化技术还可以在不同的抽象高度提供硬件抽象,甚至提供功能更强大的硬件抽象接口,来优化性能和提供新的功能。

类虚拟化最大的问题是需要对操作系统源代码进行修改,这样会增加操作系统开发和调试的工作量,同时也会降低系统运行的稳定性。

3.CPU的硬件虚拟化

以Intel为例,2005年Intel推出了VT-x技术,为处理器的虚拟化技术提供了硬件支持。主要体现在:

  1. 引入了两种操作模式:根模式(Root Mode),Hypervisor运行的模式;非根模式(Non-Root Mode),客户机运行的模式。如图 3.28(d),我们知道,指令的虚拟化是通过陷入再模拟的方式实现的,最直观的解决办法是让敏感指令能够触发异常,可是这样会导致跟原有软件不兼容,因此不可取。在非根模式下,对一些敏感指令的行为重新定义,触发陷入来进行处理;而在根模式下这些指令的行为没有改变。
  2. VM-Exit和VM-Entry。非根模式下敏感指令引起的陷入称为VM-Exit,发生VM-Exit时候,处理器从非根模式切换到根模式。另外,VT-x技术定义了新的指令VMLAUCH和VMRESUME来触发VM-Entry,使得处理器从根模式切换到非根模式。
  3. VT-x技术还引入了VMCS(Virtual-Machine Control Structure,虚拟机控制结构)。VM保存虚拟CPU的相关状态。类似中断,中断在进入时需要保存当前进程上下文环境(Context),在返回时需要重载此进程上下文环境一样。在VM-Exit和VM-Entry的时候,我们需要进行虚拟机的上下文环境的操作。为了提高虚拟机上下文的效率,才有了硬件支持的VMCS,VMCS本质上是用来硬件加速VM上下文环境切换。

通过VT-x技术的CPU硬件虚拟化,几乎可以完全消除虚拟化的代价。通过硬件虚拟化技术的支持,可以让虚拟机获得跟物理机几乎一致的性能。

云计算的软件和硬件如何融合更高效?

未来的数据中心如何搭建?一起来学习《软硬件融合》吧。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章