服务器 频道

1998-2009 VMware书写的“虚拟化”历史

核心产品设计理念

    x86 计算机与大型机不同,它在设计上不支持全面虚拟化,因此 VMware 必须克服难以解决的难题才能在 x86 计算机上开发出虚拟机。

    在大型机和 PC 中,大多数 CPU 的基本功能都是执行一系列存储的指令(即软件程序)。x86 处理器中有 17 条特定指令在虚拟化时会产生问题,从而导致操作系统显示警告、终止应用程序或直接完全崩溃。因此,这 17 条指令是在 x86 计算机上首次实现虚拟化时的严重障碍。

    为应对 x86 体系结构中会产生问题的这些指令,VMware 开发了一种自适应虚拟化技术。在生成这些指令时此技术会将它们“困住”,然后将它们转换成可以虚拟化的安全指令,同时允许所有其他指令不受干扰地执行。这样就产生了一种与主机硬件匹配并保持软件完全兼容性的高性能虚拟机。VMware 创新了这项技术。

    VMware提供了一套完整的虚拟化硬件给客户机操作系统,VMware软件虚拟化了显卡、网卡和硬盘,主机为客户机USB、串行和并行设备提供驱动,因此VMware虚拟机就可以在不同计算机之间进行快速迁移,因为每个主机看到的几乎是一样的客户机,实际上,系统管理员可以暂停在虚拟机客户机上的操作,移动或拷贝客户机到另一个物理计算机上,而且正好在暂停点恢复执行。另外,对于企业用户,有一个实用的工具VMotion,它允许迁移正在运行的虚拟客户机到独立的主机上,但存储是共享的,转移过程对于所有用户而言都是透明的。

    VMware Workstation、GSX Server和ESX对目标操作系统都进行了优化,比起模拟器(如Bochs)性能要好得多。模拟器在目标主机上一个一个模拟每个CPU指令的功能,或动态重新编译它们第一次执行的机器指令编译块,当代码再次运行时直接使用翻译后的代码,微软公司的Virtual PC for Mac OS X就是使用的这种方法。VMware软件部模拟不同硬件的指令集,大大提升了性能,但在不同指令集计算机之间移动虚拟客户机可能会出现问题(如从64位Intel CPU主机移动到AMD CPU主机上);如果源和目标主机的CPU数量不一样也可能会出现问题,在移动虚拟客户机之前先停掉它,然后再移动到不同CPU型号的主机上通常不会出现问题。

    VMware的产品使用CPU直接运行代码(如在x86上运行用户模式和虚拟的8086模式),当直接执行不起作用时,VMware产品动态重写代码,VMware管这个过程叫做“二进制转换”或BT,转换的代码存储在多余的内存中,通常在地址空间的末尾,它的分段机制可以保护和隐身,正是由于这些原因,VMware要比那些模拟器的运行速度更快,在相同的硬件上,虚拟客户机的运行速度大约上升80%左右,VMware宣传在计算密集型应用程序上系统开销要少3%-6%。

    VMware的方法巧妙地避开了基于x86平台上虚拟化的困难,虚拟机可以通过替换处理干扰指令,或在用户模式下运行内核代码。虽然VMware虚拟机运行在用户模式下,但VMware Workstation本身需要安装主机操作系统的各种驱动,特别要注意GDT和IDT表动态切换。VMware产品线也可以在双启动系统上运行不同的操作系统。 

1
相关文章