周董是一位提供虚拟主机和空间的 ISP,如今想靠服务在市场上分一杯羹确实是很困难的,他在如何吸引客户方面伤透了脑筋。
有一天,他从在红旗工作的朋友那里得知了来自剑桥大学的虚拟化技术,名叫 Xen,离奇的名字和深邃的概念让他发生了兴趣,经过一番研究终于发现这才是他所需要的。
下面的两段文字来自他的 blog:
“传统的 ISP为用户提供的所谓虚拟机主机并不是严格意义上的‘主机’,而仅仅是虚拟空间,用户仅仅有根据 ISP 所提供的服务器来上传相应的应用,永远也没办法在一个不提供php服务的虚拟主机上使用php动态网页。
而基于Xen的虚拟主机却能轻易做到一点,因为通过虚拟化技术可以在一台物理服务器上运行多个虚拟服务器,每一个虚拟主机与其他主机一起共享物理主机的硬件资源,而每一个客户都可以拥有自己的基于虚拟技术的虚拟主机,客户对自己的虚拟主机有完全的控制权,可以在虚拟主机上运行任意自己希望的服务。”
虚拟化软件如此众多,为何独挑Xen?
这需要从Xen的体系结构说起,Xen颠覆了传统Linux宏内核(Monolithic kernel)的实现和类Qemu/Vmware 等用户空间虚拟化技术的概念,使得性能和可靠性能够具备和真实的物理主机同级的水平。
关于传统用户空间的虚拟化技术可以参考前一篇《在Linux上运行Windows-Qemu篇》,这里需要说明的是Xen的特殊结构,Xen颠覆了以前Linux所有代码都在ring 0级模式下运行,仅仅将Xen的内核调度代码放入ring 0,Xen的代码接近于一个微内核的概念,仅仅提供向内核提供硬件资源的共享和多个内核的调度。
Xen内核被加载入内存后加载domain 0内核进入内存,domain 0运行于ring 1状态,比起普通优先级高,但不能干涉ring 0中的xen代码,同时domain 0仅仅能够分配部分的系统内存,剩余的空闲内存将用于创建其它虚拟机,这种设计保证了xen中的虚拟机之间被完全隔离,不会因为某一台虚拟机的崩溃导致整台电脑的死机。
我们用domain 0来对用户提供操作接口。系统启动后其实就已经进入了domain 0的虚拟机状态,但对于用户而言可能完全无法感觉到,因为所有的服务都是照常启动。而对domain 0的操作也如同没有启动虚拟机一样,将直接影响到系统硬件。
此时用户可以通过xm命令连接xend守护进程,对处于ring 0的xen进行调度,如启动新的虚拟机domain U,domain 0在整个系统中处于控制台的地位,只能启动一个,而domain U能够启动若干个,但他们对系统而言都是平行的,没有主次之分,domain 0也可以崩溃,而不会影响到domain U。
但对于用户而言,可以在多个domain U中运行的服务,对于domain 0最好不要妄加动作,让它“一心一意”为系统中其他虚拟机提供调度控制功能。
Xen的这种同时调度多个内核的设计,保证了系统的高速运行,相比之下,传统的虚拟机是启动系统之后,通过lock系统调用锁住内存中的部分空闲空间,作为虚拟机的内存,首先就要将内存管理单元(MMU)从系统中抽象出来,这对系统性能有一定降低,因为对虚拟机的内存操作需要经过操作系统转换后处理。
同时,传统的虚拟机结构需要对操作系统提供的调用接口抽象成系统硬件,同样是对硬件的操作,Xen中虚拟机可以直接操作硬件,而普通的虚拟机中的操作系统需要先对虚拟硬件进行操作,然后由虚拟机软件转换成物理操作系统的应用软件API,再由物理操作系统转换成对硬件的操作。最重要的虚拟硬件一般都是性能较为低下的,而在昂贵的硬件上,运行虚拟机无疑是对这些硬件的一种浪费。
篇幅所限,内容就到这里。有任何意见或者建议,欢迎与作者交流。
E-Mail: [email protected]
|