Showing posts with label 虚拟化. Show all posts
Showing posts with label 虚拟化. Show all posts

Monday, October 26, 2009

虚拟化技术漫谈

虚拟化是一个广义的术语,对于不同的人来说可能意味着不同的东西,这要取决他们所处的环境。在计算机科学领域中,虚拟化代表着对计算资源的抽象,而不仅仅 局限于虚拟机的概念。例如对物理内存的抽象,产生了虚拟内存技术,使得应用程序认为其自身拥有连续可用的地址空间(Address Space),而实际上,应用程序的代码和数据可能是被分隔成多个碎片页或段),甚至被交换到磁盘、闪存等外部存储器上,即使物理内存不足,应用程序也能 顺利执行。

虚拟化的历史:
  • 硬件虚拟化,分时系统 IBM System/360
  • 处理器虚拟化,现在程序语言的虚拟里VM
  • 指令集虚拟化,指令集转换
  • 库级虚拟化,例如PC平台上的某些街机模拟器
VMM 调度虚拟机时,将其部分状态恢复到主机系统中。并非所有的状态都需要恢复,例如主机 CR3 寄存器中存放的是 VMM 设置的页表物理地址,而不是 Guest OS 设置的值。主机处理器直接运行 Guest OS 的机器指令,由于 Guest OS运行在低特权级别,当访问主机系统的特权状态(如写 GDT 寄存器)时,权限不足导致主机处理器产生异常,将运行权自动交还给 VMM。此外,外部中断的到来也会导致 VMM 的运行。VMM 可能需要先将 该虚拟机的当前状态写回到状态数据结构中,分析虚拟机被挂起的原因,然后代表 Guest OS 执行相应的特权操作。最简单的情况,如Guest OS 对 CR3 寄存器的修改,只需要更新虚拟机的状态数据结构即可。一般而言,大部分情况下,VMM 需要经过复杂的流程才能完成原本简单的操作。最后 VMM 将运行权还给 Guest OS,Guest OS 从上次被中断的地方继续执行,或处理 VMM “塞”入的虚拟中断和异常。这种经典的虚拟机运行方式被称为 Trap-And-Emulate

VT-x 为 IA 32 处理器增加了两种操作模式:VMX root operation 和 VMX non-root operation。VMM 自己运行在 VMX root operation 模式,VMX non-root operation 模式则由 Guest OS 使用。两种操作模式都支持 Ring 0 ~ Ring 3 这 4 个特权级,因此 VMM 和 Guest OS 都可以自由选择它们所期望的运行级别。 这两种操作模式可以互相转换。运行在 VMX root operation 模式下的 VMM 通过显式调用 VMLAUNCH 或 VMRESUME 指令切换到 VMX non-root operation 模式,硬件自动加载 Guest OS的上下文,于是 Guest OS 获得运行,这种转换称为 VM entry。Guest OS 运行过程中遇到需要 VMM 处理的事件,例如外部中断或缺页异常,或者主动调用 VMCALL 指令调用 VMM 的服务的时候(与系统调用类似),硬件自动挂起 Guest OS,切换到 VMX root operation 模式,恢复 VMM 的运行,这种转换称为 VM exit。VMX root operation 模式下软件的行为与在没有 VT-x 技术的处理器上的行为基本一致;而VMX non-root operation 模式则有很大不同,最主要的区别是此时运行某些指令或遇到某些事件时,发生 VM exit。

实战虚拟化技术之Xen

Xen是由剑桥大学开发的VMM.这里简要记录下安装过程中的几个问题:
使用egrep '(vmx|svm)' /proc/cpuinfo 检测处理器是否支持虚拟化.
如果不支持的话那么很遗憾,只能使用全虚拟化.
接下来,按照手册的说明文件:
make world
make install
然后修改grub的引导,使xen支持的内核可以启动,重启服务器.下面就可以体验xen了

Thursday, October 22, 2009

实战虚拟化技术之VMware Server

在虚拟化技术方案中,最耳熟能详的莫过于VMware的产品了.其桌面端VMware Workstation让很多人体验了虚拟机的快感.在服务器虚拟化领域,它的对应产品就是VMware Server.
本文主要描述了我在虚拟化方案技术选型中对Vmware Server考察的过程.

测试环境
  •  Machine :Dell PowerEdge R200 Intel(R) Pentium(R) Dual CPU E2180 @ 2.00GHz
  •  HostOS: CentOS 4.5
  •  Kernel: Linux2.6.9-89.0.11.EL
  •  Memory:2GB
  •  Software:Vmware Server 2.0.1
从Vmware官方下载二进制安装包,执行vmware-install.pl.根据提示输入你的实际参数,一般情况下直接默认就可以了.安装的最后会提示你是否运行vmware-config.pl.你可以选择yes,接下来如果遇到内核模块支持错误提示的话,可以放狗去搜对应内核模块的vmware-patch.我使用的CentOS4.5倒是没有这个问题.

一切完毕之后,就从浏览器输入服务器ip:8333进入VMware Infrastructure Web Acess,你会发现这和workstation版本几乎没有什么区别.接着就是新建虚拟机了:

 .
我配置的虚拟机参数Memory 256MB;Core 1;HDD 8G,由于使用场景的不同,我很关注I/O效率.所以特意做了一些实验,结果如下:

avg-cpu:  %user   %nice    %sys %iowait   %idle
           0.00    0.00    2.00   25.00   73.00
Device:    rrqm/s wrqm/s   r/s   w/s  rsec/s  wsec/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await  svctm  %util
sda          0.00  86.00  0.00 37.00    0.00 32800.00     0.00 16400.00   886.49     6.08  566.00   6.89  25.50
dm-0         0.00   0.00  0.00 88.00    0.00  704.00     0.00   352.00     8.00   703.14 27351.68   2.89  25.40
dm-1         0.00   0.00  0.00  0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00

总体来看.Vmware Server门槛较低,交互界面相对统一;对服务器几乎没有硬性要求.部署方便容易,磁盘镜像可复用.
对于测试型场景来说,性能完全可以满足需求.