Linux虚拟化技术分析(下)
清单1. 从命令行创建VPS
$ vzctl create 42 --ostemplate fedora-core-4
Creating VPS private area
VPS private area was created
$ vzctl start 42
Starting VPS ...
VPS is mounted
另外还可以使用vzlist命令显示目前创建的VPS,该命令与标准Linux ps命令类似。
为了对进程进行调度,OpenVZ还包括了两级CPU调度器。首先,调度器确定哪个VPS应该获得CPU。在这个步骤完成之后,第二级调度器会根据给定的标准Linux优先级挑选进程来执行。
OpenVZ还包括了所谓的beancounters。beancounter包括很多参数,这些参数为给定的VPS定义了资源分配。这为VPS提供了一定层次上的控制,定义了有多少内存可用,有多少进程间通信(IPC)对象可用等。
OpenVZ的一个特性是检查点功能和将VPS从一个物理服务器迁移到其他物理服务器上的能力。检查点意味着正在运行的VPS的状态被冻结并存储到一个文件中。然后可以将这个文件迁移到一个新服务器上并加以还原以使VPS恢复运行。
OpenVZ支持很多硬件体系结构,包括x86、x86-64和PowerPC。
对完全虚拟化和超虚拟化的硬件支持
回想一下IA-32(x86)体系结构在进行虚拟化时会产生的一些问题。特定的特权模式指令无法捕获,基于所使用的模式还可能返回不同的结果。例如,x86 STR指令可以检索安全状态,但是所返回的值要取决于请求者特定的特权级别。在尝试在不同的层次对不同的操作系统进行虚拟化时,这会出现问题。例如,x86支持4环保护,其中级别0(最高特权)通常运行操作系统,级别1和2支持操作系统服务,级别3(最低级别)支持应用程序。不过硬件供应商已经认识到了这种缺陷(以及其他一些问题),并且已经开发了一些支持并加速虚拟化的新设计。
Intel正在开发新虚拟化技术,能在x86(VT-x)和Itanium(VT-i)体系架构上支持hypervisor。VT-x支持两种格式的操作,一种用于VMM(root),另外一种用于客户操作系统(非root)。root格式完全是特权级的,而非root格式是非特权级的(即使对环0来说也是如此)。这种体系架构支持定义指令来使VM(客户操作系统)退出到VMM和保存处理器状态。
AMD也开发了硬件辅助虚拟化技术,称为Pacifica。除了其他一些特性之外,Pacifica还为在特殊指令执行时保存的客户操作系统维护了一个控制块。VMRUN指令允许虚拟机(及其相关的客户操作系统)一直运行,直到VMM重新获得控制权为止(这也是可配置的)。这种可配置能力允许CMM为每个客户操作系统定制特权指令。Pacifica还可以使用宿主和客户内存管理单元(MMU)表来进行地址转换。
这些新技术也可以应用到此处讨论的很多其他虚拟化技术中,包括Xen、VMware、User-mode Linux等。
Linux KVM(内核虚拟机)
Linux传出的最新消息是将KVM合并到Linux内核中(2.6.20)。KVM是一种完全虚拟化解决方案,它有一个方面非常独特:它将Linux内核转换为一个使用内核模块的hypervisor。这个模块允许使用其他客户操作系统,然后在宿主Linux内核的用户空间中运行(参见图7)。内核中的KVM通过/dev/kvm字符设备来公开虚拟化后的硬件。客户操作系统使用为PC硬件仿真修改过的QEMU进程与KVM模块接口。

图 7. 使用内核虚拟机(KVM)的虚拟化
KVM模块向内核中引入了一个新的执行模块。普通内核支持内核模式和用户模式,而KVM则引入了一种客户模式。客户模式用来执行所有非I/O客户代码,而普通用户模式支持客户I/O。
KVM的引入是Linux的一个有趣革新,因为它代表了作为主流Linux内核一部分的第一个虚拟化技术。它已经存在于2.6.20树中,不过也可以作为2.6.19内核的一个内核模块使用。当在支持虚拟化的硬件上运行时,KVM支持 Linux(32位和64位)和 Windows(32位)客户机。 |