PC也玩分身术——虚拟化技术透视

技术空间

让一台电脑“变成”两台甚至多台,这恐怕是许多电脑爱好者的梦想。如今,这个梦想正慢慢变成现实——Intel和AMD都不约而同地推出了各自的虚拟化平台解决方案。那么,究竟什么是虚拟化?它能给我们带来哪些好处?

虚拟化技术的发展

其实虚拟化技术并不是什么新名词,早在2003年,VMware、Virtual PC等虚拟化软件就让人们见识了虚拟化技术的威力。通过这些软件,用户可以在Windows XP环境下运行Windows Server 2003或Linux。由于虚拟化软件不能脱离操作系统而独立存在,因此人们把构建或支持虚拟化软件运行的操作系统称作Host OS(寄主操作系统),而在虚拟化软件提供的虚拟机中运行的操作系统则被称作Guest OS(客户操作系统)。

借助VMware等虚拟化软件,我们可以让Guest OS和Host OS相互连接组成网络,甚至可以让Guest OS单独管理专门的存储设备和硬件。更让人惊讶的是,由于VMware等虚拟化软件是构建在Host OS之上的,因此在虚拟化环境中运行的Guest OS无论受到怎样的破坏,都不会对Host OS造成影响。在不需要Guest OS的时候,人们更可以像删除应用程序那样直接删除Guest OS。

鉴于虚拟化软件可以实现对操作系统绝大部分功能的模拟,人们便考虑把它和性能日渐强大的服务器“联姻”,因为服务器的处理速度虽然相比早期有了几倍的提升,但应用并没有相应增加,绝大部分服务器都仅用于响应各种信息访问/存储请求,而这些应用并不需要占用太多的系统资源,这就造成大量的剩余资源被白白浪费掉了。借助虚拟化软件,我们就能让服务器同时运行多种不同的操作系统,提供邮件、Web、存储等服务而互不干扰,从而大幅提高服务器资源的利用率。

不过,软件虚拟化技术存在两大缺陷:一个缺陷是性能瓶颈。由于虚拟化软件是构建在操作系统之上的,因此Guest OS在虚拟机中的所有操作都将会被虚拟化软件“翻译”之后提交给Host OS执行,这种间接执行方式使得虚拟化软件无论如何改进,运行在其中的Guset OS依然无法获得和普通操作系统一样的性能表现。另一个缺陷是执行权限的问题,Guest OS必须依赖Host OS来实现各种硬件的调用,同时Guest OS也无法直接访问CPU。在内存控制方面,Guest OS同样没有独立于其他程序的内存区域供使用。上述障碍仅凭虚拟化软件自身的改进是难以彻底解决的,硬件厂商必须为虚拟化技术提供相应的支持,才能让虚拟化技术获得进一步的发展。

x86处理器的虚拟化技术

1.软件虚拟化的问题

对于所有运行在x86架构中的程序来说,系统会根据程序的“重要性”将它分为Ring 0~Ring 3共4种执行权限,其中Ring 0被称作内核模式,具有最高执行权限,该模式能够访问计算机上的所有硬件资源;而Ring 3被称作用户模式,具有最低处理权限,而且仅仅能够通过操作系统访问系统(比如访问处理器当中的某些寄存器)。Ring后面的数字越小,线程获得的权限越大,而Ring 0能对低于或等于Ring 0进程权限的程序进行访问和操作——操作系统正是运行在Ring 0权限下。这样的线程优先级所带来的问题随之出现,因为并不是所有程序都有“资格”运行在Ring 0上。

26-d8-01.jpg
x86架构中的程序有4种不同优先级的执行权限

为了实现虚拟机软件对操作系统的彻底控制和避免Guest OS破坏虚拟机环境,虚拟机软件必须运行在Ring 0模式下,而Guest OS必须运行在低于Ring 0级别的模式下(如Ring 1模式),只有这样才能随意控制Guest OS的开启或关闭。虚拟机中的Guest OS无法获得Ring 0级别的执行模式。可是Guest OS往往并不知道自己工作在低于Ring 0的执行模式下,依然可能我行我素地发出大量Ring 0操作指令,这样的Ring 0指令一旦被执行必将导致整个软件平台的崩溃。于是虚拟机必须不断协调Guest OS和Host OS之间线程的Ring的优先级,这就导致许多系统性能被白白浪费了(有数据表明,系统性能下降幅度可达到5%~20%)。

要彻底实现虚拟化,就必须对原有的x86处理器体系“动手脚”,通过提供一套针对虚拟化应用的专门指令来实现硬件级的虚拟化支持。为此,Intel在2003年提出了自己的CPU虚拟化技术——代号为Vanderpool的Intel虚拟化技术(Intel Virtualization Technology,以下简称VT)。随后,AMD也正式公布了代号为Pacifica的虚拟化技术准备与Intel一争高下。

2.硬件虚拟化技术分析

无论是Intel还是AMD,它们基于x86 CPU的硬件虚拟化技术的本质都大致相同,就是为虚拟环境下的Guest OS提供专门的执行区域,从而避免软件虚拟机的频繁协调操作从而提升稳定性和性能。下面我们就以Intel的VT技术为例,来看看x86处理器的硬件虚拟化技术的工作原理。

26-d8-02.jpg
Intel VT虚拟化技术架构

VT技术是一种设计更简单、实施更高效的硬件辅助虚拟化解决方案,它对在不同情形下分配给Guest OS 想要的Ring权限级别做了很好的改进。具体来说,Intel为Pentium4处理器新增了一种名为VMX(Virtual Machine Extensions,虚拟机扩展)的执行模式,在这个模式下CPU将会提供一个虚拟机监视器(VMM,Virtual Machine Monitor),通过这个监视器我们能够任意控制运行其中的Guest OS。与此同时,VMM工作在VMX根模式下(VMX Root Mode),这个根模式和Ring 0模式的权限大致相同,这样就能保证VMM对Guest OS的完整控制性和安全性。与之相对应,AMD把这种硬件虚拟化模式称作VMRUN,把硬件虚拟化监控器称为Hypervisor。

26-d8-03.jpg
AMD的硬件虚拟化技术架构

在打开VT技术的支持之后,所有的Guest OS都将运行在VMX模式下。在这种模式下,Guest OS拥有和Host OS完全相同的执行功能(包括Ring 0模式的执行权限)。此时,Guest OS并不知道在它运行时还有VMM对它发出指令进行管理,而虚拟机软件也不必频繁地协调Guest OS和Host OS之间的冲突。在很多情况下,我们往往需要同时运行多个Guest OS。因此在VMX模式下,Intel还引入了各种VMX模式的切换机制,并把这个切换功能称作VM登录/退出。在需要的时候,系统能够在VMM根模式和VMM普通模式之间快速切换。这样就意味着多个不同的Guest OS能够被高效地同时执行,而且在快速切换执行的同时,VT技术依然能够保证各个Guest OS的稳定运行。由于各个Guest OS都拥有相对独立的执行环境和内存访问区域,因此避免了软件虚拟技术带来的性能浪费。

在对各个Guest OS的管理方面,Intel VT技术也有自己的独特方法:当开启VT功能时,VT技术就会为每个Guest OS保留4KB的状态存储区,这个区域被称作VMCS(Virtual-Machine Control Data Structure,虚拟机数据控制架构),而AMD将它称为VMCB(虚拟机控制模块,Virtual-Machine Control Block)。这个区域将会被用来存储Guest OS的运行状态等重要信息。虚拟机软件能够通过VMPLRD命令来创建、访问、改写VMCS区域。通过读取VMCS区域的状态,用户可以自由地打开、关闭或切换Guest OS。

为了进一步简化虚拟机操作系统的运行和切换,Intel还在VT技术中引入了VMLAUNCH(或者VMRUN)指令和VMRESUME指令。前者能够让虚拟机快速地建立VMCS区域,然后开始运行Guest OS直至它们执行完毕,当出现非法操作或遇到返回指令时,进程也会提前结束。后者则用于多个Guest OS之间的简单切换。

26-d8-04.jpg
Intel VT技术工作原理图

至此VT技术已经能够让各种各样的虚拟机快速稳定地运行起来。由于VMX、VMM硬件运行管理机制的引入,所有的Guest OS都能像普通操作系统那样以最高速度运行,同时各个Guest OS还首次拥有了能独立控制的各种硬件资源。也许有朋友会问,如果要退出或关闭虚拟机中的Guest OS,VT技术是怎么实现的呢?Intel引入了以位影射为基础的事件触发机制,位影射本质上是一些32bit字段,每个bit对应一个事件。如果响应的事件被触发,则对应的bit将会被重置,此时CPU将会自动发出VM Exit指令,把VMX模式的控制权交回给VMM管理器并等待VMM的下一步操作。

Intel周密地安排了大量的触发事件以保证满足用户的需要。触发事件可以是引脚信号、页面错误反馈信息等等。这些触发事件由于是被动执行的,不需要CPU不断地监视这些位影射,这样就不会产生额外的性能浪费了。对于所有需要运行虚拟化软件的用户来说,硬件虚拟化技术充满了很大的吸引力。

写在最后

虽然在单内核架构的x86处理器上也能实现对硬件虚拟化技术的支持,但是在双内核甚至多内核架构上,硬件虚拟化技术将会表现得更加完美。我们知道,并不是每一款软件都将会为双内核处理器作特别优化,因此在双内核架构处理器平台上通过虚拟化技术运行多套操作系统就成为“压榨”双内核CPU潜力的方法之一。在企业应用方面,借助虚拟化技术支持,企业用户可以对电脑的一部分实施全权控制,在不中断终端用户工作的情况下运行安全或管理服务或者防止用户轻易窜改关键应用。企业可通过一个独立的分区过滤网络流量,防止恶意代码或病毒到达终端用户,进而更好地保护自身安全。而在家庭应用方面,我们可以通过家庭无线网络在客厅利用数字电视欣赏保存在硬盘中的影片或数码相片,而家人朋友则可以使用Hi-Fi音响播放音乐,此时两套应用软件分别工作在不同的操作系统下,不会出现因误操作而导致某种应用意外终止。

可以预见,在未来两三年时间内,虚拟技术将成为计算机应用的标准之一,而且主板BIOS允许虚拟软件在操作系统启动时直接获得系统的控制权限。到那时,你还会使用一台不支持虚拟化技术的PC吗?