2.7 Simulation,Virtualization,虚拟化技术、分区
IBM从POWER4 CPU开始支持虚拟化技术,它起源于IBM大型机(Mainframe)的分区技术。虚拟化并不神秘,这种设想源于IT领域资源紧张和资源闲置两种情况并存的现实需求,并且IT环境快速变化,要求设备能够动态适应这种变化。
2.7.1 虚拟化的第一个关键词:资源共享和隔离
从不同的隔离(共享)程度可以分为:
● 共享基础设施,很多大型设备都是采用这种方式,其中代表系统是传统的电信程控交换机,任何一路电路板故障,只会影响单一线路,而系统中其他设备不会受到影响。这些设备之间共享统一供电系统(通常是双路冗余的供电系统),被装配在同一个物理盒子(机柜)中,除非部件造成火灾,否则可以保证绝对安全,但同时这种共享方式也仅仅实现了分享电源资源,也不能很自由地调整其他CPU、内存、IO系统配置。很少有提供虚拟化功能的大型的计算机设备只共享基础设施,不过从可靠性和安全性角度考虑,这种虚拟化功能似乎又是必需的,这种方式实现了所谓的物理隔离。
● 共享通信系统,例如通过网络互联的一组服务器设备,但是提供这种虚拟化功能的设备在外观上并不是一组服务器,而是一台服务器,另外不仅仅共享真正的IP网络,还会共享其他一切IO总线,或者专用的通信总线。通过这种共享方式,可以静态或者动态地调整CPU、内存、IO配置,其缺点是调整只能按照预先设计好的物理分配方式内进行。大部分的高端UNIX服务器都可以实现此类虚拟化。
● 共享操作系统,例如同一个操作系统内执行的一组程序,程序分为内核级和用户级两个层次,内核级为管理程序,进行调度分配;用户级程序并不知道自己在一台真正的物理机器中执行还是在某个虚拟机中执行。
2.7.2 虚拟化的第二个关键词:分配方式和颗粒度
分配方式从静态分配到动态分配,从固定配置模式到可以自由使用非常细微的颗粒度(小于1)进行分配。根据切分方式可以分为按照预定的处理板进行切分(每块板上有固定数量的CPU、内存和IO槽位,一个处理板是最小分配单元),每个分区可以包含一个或者多个处理理板;按照CPU内核、IO槽位切分,最小分配单位为一个CPU、一个IO槽位;按照CPU时间片切分,IO采用类似VLAN的方式共享(虚拟IO控制卡)。
由于CPU、IO卡的处理速度越来越快,而UNIX服务器很多时候却处于闲置状态,为提高利用率考虑,自然想到了动态CPU、内存分配,甚至让多个系统共享几颗物理CPU或者一块IO卡的高速带宽(10Gb Ethernet,4Gb Fiber Channel,Infinity Band),多个虚拟的IO接口卡透过一块物理IO卡与外界通信。当然,物理设备越来越高的可靠性、操作系统对多路径数据访问提供自动的负载均衡和冗余,也为共享提供了可能。
硬件分区技术以物理板为基础,如图2-10所示,Sun服务器的Domain技术,HP服务器的nPar技术都是这种类型;软分区(或软件分区,其实这种软件并非操作系统软件,而是一种类似操作系统的软件,例如VMWare)则更为灵活,能够以任意的粒度、动态调整资源;IBM另外一种分区技术是LPar,逻辑分区,它以硬件分区为基础,但并不受硬件板卡所限,能够以最小资源单位进行分配,例如单CPU、128M内存等;IBM还有一种分区技术叫做微分区,它通过在硬件层的微码进行控制,能够以1/10的粒度进行切分,以1/100的粒度动态调整CPU资源,并且通过Hypervisor(专用的控制电路和系统)进行分区间通信,将某个分区(VIOS,Virtual IO Server)的物理设备映射成为自己的一个虚拟设备使用。
图2-10 虚拟化技术说明
2.7.3 虚拟化的第三个关键词:上下层之间的相关性
(1)顶层的虚拟化技术(不是更高级的技术,而是在应用层完成虚拟化功能)采用代码仿真的方式执行虚拟系统,类似Java虚拟机就是仿真出一种虚拟的计算机系统,执行Java代码,最终目标是无论底层是什么硬件设备或者操作系统,都能同样执行Java程序,得到同样的结果。如果两种CPU不能执行相同的二进制代码,则只能采用这种方式实现虚拟。
(2)下一层采用API仿真,并部分解码执行(或仿真)代码,由于API可以比虚拟执行,拥有更高的执行效率,而通过部分解码又能仿真完全不同的CPU,因此成为经常被业界采用的虚拟化技术,特别是进行CPU设计、单板机开发时,通常采用此技术。在1999年,曾经有AIX版本的Soft Windows软件可以仿真Windows 3.1系统,在AIX / RS600上执行DOS / Windows程序。请参考图2-11分区技术说明。
图2-11 分区技术说明
经常遇到朋友们询问是否可以用虚拟机(VMWare)安装AIX操作系统,很遗憾,因为AIX目前只有POWER系列CPU(包括Power PC)的二进制代码,而VMWare并非二进制代码虚拟机,即便是用opensource的一些软件,仿真出Power CPU指令集,也由于一个系统并非只有CPU,还需要很多IO外设的支持,而IBM并没有计划提供此类的支持,所以还没有渠道实现用x86的CPU安装AIX的技术。不过IBM为了推广Linux,已经提供了一个Sim System PowerPC 970的软件,让我们可以在x86硬件上建立一种支持Power PC指令集的Linux开发环境。有兴趣的朋友可以参考以下地址,了解CPU仿真的历史和未来:
http://simh.trailing-edge.com/
(3)再下一层技术利用CPU的代码优先级特性,用不同的保护级别运行,但不同程序的主要二进制代码必须兼容,实际的代码还是由CPU硬件解码执行的,而不是程序仿真。VMWare是这种虚拟技术的代表,类似的还有微软的Virtual PC。
(4)最下层的技术不进行任何仿真、虚拟,仅仅用软件监视程序执行时占据的系统资源,通过对系统资源进行限制和调整,达到控制程序的目的。
对应于AIX/pSeries则有WLM,PLM,EWLM和VE等虚拟化的应用技术实例。
WLM,Work Load Manager,该软件对单独操作系统内的各种资源进行控制,设定最大CPU、内存使用率,通过限制程序的资源占用,达到控制程序执行的目的,可以让更多地程序运行在一个操作系统内核上而互不干扰;
PLM,Partition Load Manager,它利用分区技术实现操作系统层面的隔离,但是利用动态LPar技术,动态调整不同分区之间的资源,将闲置的资源(内存、CPU)调整到繁忙的分区,达到最大的资源利用效率。
EWLM,Enterprise Workload Manager,它试图在多台同系列的物理服务器之间进行服务调配,实现负载调整。由于物理服务器的资源没有办法动态跨物理设备调配,所以只好调整其上运行的程序,让程序在新的平台运行,以实现某个业务占有更大的物理资源或者被调整到一个较小的服务器。
VE,Virtualization Engin,这是最后一步,IBM希望可以做到跨平台类型进行负载调整,也就是在IBM的几大品牌计算机(zSeries,pSeries,iSeries和xSeries)上对特定的应用进行负载分担调整,这些特定的应用以Web Service为主,以后会陆续增加各种Database和其他商业应用套件,例如SAP等。
虚拟化的实现方式多种多样,在x86系列CPU中,由于以前的CPU本身并没有特别的虚拟化功能,所以都是通过软件实现的,在其上有三种著名的软件:VMWare,Virtual PC/Virtual Server,以及Xen。其中Xen是Opensource的软件,Virtual PC和Virtual Server都是微软的产品,VMWare则由VMWare公司(现为EMC的子公司)开发。其中VMWare和Xen类似,都属于利用硬件指令直接进行虚拟和控制(Hypervisor),但Xen更提供了对应用支持的API,这样在运行某些特定的操作系统的时候,可以提供更高的性能。Virtual PC和Virtual Server则使用了Host OS技术,本身实际是一个操作系统,其上再进行虚拟化,所以略显庞大,并且对非微软的操作系统支持不好(Virtual Server根本就不支持其他操作系统),不过如果使用微软系统,则可以实现更好的性能,因为底层的Host OS本身提供了很多API,可以直接被调用,不用仿真(虚拟)。Intel和AMD都在他们的新芯片上增加了对虚拟化功能的支持(Intel使用VT技术的芯片和AMD的Pacifica芯片),这样CPU就可以更进一步提高虚拟化系统的执行效率和安全性。
遗憾的是,这些产品都只能虚拟x86的CPU(指令集),不能支持POWER系列的指令,所以在VMWare虚拟机上安装AIX只能是一种梦想了(也许在不久的将来可以实现,但现在肯定不行)。IBM曾经发布了一种开源的软件,叫做Power PC 970 Full System Simulator。我们知道,POWER CPU和Power PC系列是基本二进制兼容的,而这种软件又可以在x86的CPU上运行,似乎给了我们一线希望,但经过作者测试,发现这种软件所打包的只有在Power PC 970上的Linux开发环境,而没有AIX Boot Loader(引导启动/初始化程序),也就是说,即使你有一个能运行POWER指令的虚拟机,但是没有适合这种虚拟硬件的软件可用!普通的AIX是不支持这种虚拟出来的硬件的。
表2-4列出了当前大部分虚拟化技术及其比较,请参考。
表2-4 虚拟化技术及其比较
续表
续表
续表
续表
续表
续表
续表
续表