虚拟化是资源的逻辑表示,这种表示不受物理限制的约束,它的主要目标是对包括基础设施、系统和软件等IT资源的表示、访问、配置和管理进行简化,并为这些资源提供标准接口来接收输入和提供输出。
虚拟化技术包括两个层面,一是硬件层面的虚拟化,二是软件层面的虚拟化。实际上,我们通常所说的虚拟化是指系统虚拟化技术,除此之外,在应用层、表示层、桌面、存储和网络都可以做全方位的虚拟化。虚拟化技术主要有以下几类。
硬件仿真通过在物理机的操作系统上创建一个模拟硬件的程序来仿真所需要的硬件,并在此程序上运行虚拟机,而且虚拟机内部的客户操作系统无须修改。代表产品有微软的Virtual PC。优点是客户操作系统无须修改,缺点是速度非常慢,有时速度比物理情况甚至慢100倍以上。
全虚拟化主要是在客户操作系统和硬件之间捕捉和处理那些对虚拟化敏感的特权指令,使客户操作系统无须修改就能运行,速度会根据不同的实现而不同,但大致能满足用户的需求。这种方式是当今业界最成熟和最常见的,Hosted模式和Hypervisor模式的都有,代表产品有SUN的VirtualBox、KVM,VMware的Workstation及vSphere产品。优点是客户操作系统无须修改,速度和功能都非常不错,更重要的是使用简单。缺点是Hosted模式的产品性能不是特别优异,特别是在I/O方面。
半虚拟化与全虚拟化有一些类似,也是利用Hypervisor实现对底层硬件的共享访问,但是由于在Hypervisor上运行的guest OS已经集成了与半虚拟化有关的代码,使得guest OS非常好地配合Hypervisor实现虚拟化。通过这种方法无须重新编译或捕获特权指令,使其性能非常接近物理机。代表产品有Citrix的XEN和微软的Hyper-V。优点是与全虚拟化相比,架构更精简,在整体速度上有一定优势。缺点是需要对客户操作系统进行修改,用户体验比较差。
Intel、AMD等硬件厂商通过对部分全虚拟化和半虚拟化用到的软件技术进行硬件化来提高性能。硬件辅助虚拟化技术常用于优化全虚拟化和半虚拟化产品,而不是独创一派。现在市面上的主流全虚拟化和半虚拟化产品都支持硬件辅助虚拟化,包括VirtualBox、KVM、VMware ESX和XEN。优点是通过引入硬件技术,使虚拟机技术更接近物理机速度。当然,现有的硬件实现还有很大的优化空间。
基于操作系统指令虚拟化技术在服务器操作系统内部,通过系统级别预置指令进行简单隔离来实现虚拟化,主要用于VPS。目前也是容器化(比如Docker)的主流实现技术。代表产品有Parallels Virtuozzo Containers、UNIX系统上的chroot、cgroups、namespace和Solaris上的Zone等。优点是因为对操作系统直接修改,所以实现成本低而且性能不错,缺点是在资源隔离方面表现不佳,而且对客户操作系统及版本都有限制。
上述虚拟机化技术使用最广泛的场景是共享硬件资源、虚拟多个操作系统并同时运行,我们称这种场景为操作系统虚拟化。