Electronic Joint Business

Solution for E-Business

vmm

从虚拟化到云计算 (三) 编写自己的 VMWare

我一直认为要了解虚拟化,最好的方法是自己编写一个 VMM 应用程序。这有助于对硬件辅助虚拟化技术的深入理解。本文将离开前面两篇文章的理论论述,开始动手编写一个自己的 VMWare。1

本文将要创建的应用程序将会完成: 做好CPU 虚拟化的预备工作;创建客户机;进入并退出该客户机。为了简单起见,我们只针对 X64 模式来实现。该代码只演示了基本的 VMX 功能,也不一定兼容你手上的 CPU,你不过你可以使用 Bochs 并启用虚拟化,然后你就可以测试这些代码了。

我们先对专有名词做一下简单介绍:

  • VMM (虚拟机监视器 — Virtual Machine Monitor) 宿主程序
  • VM (虚拟机 —Virtual Machine)客户机程序
  • 根操作 (Root Operation) VMM 所执行的代码与上下文
  • 非根操作 (Non Root Operation) VM 所执行的代码与上下文
  • VMX 切换: 从宿主机切换到客户机(VMEntry) 或者从客户机切换到宿主机 (VMExit)
  • VMCS:控制 VM 和 VMX 切换的数据结构
  • VM Entry: 从宿主机到客户机的切换
  • VM Exit:由于某种原因,从客户机到宿主机的切换

VMX 操作的生命周期

  • VMM 检查 CPU 是否支持虚拟化 (CPUID) 并启用 (CR4 和 VMXON)
  • VMM 为每一个 VM 初始化一个 VMCS 控制结构。通过 VMPTRST 和 VMPTRLD 指令告诉 CPU 其指针的位置。VMCS 的读写通过指令 VMREAD, VMWRITE 和 VMCLEAR 来完成。
  • VMM 通过 VMLAUNCH 或者 VMRESUME 指令进入 VM
  • VM 通过 VMEXIT 退出到 VMM
  • 反复进行上面的操作
  • VMM 执行 VMXOFF 将自己关闭

 

, , , , , , ,

从虚拟化到云计算 (二) 深入硬件辅助虚拟化技术

从业界的整体趋势来看, 数据中心的焦点已经从“更快的性能”走向了合理的性能、合理的功耗、合理的利用以及合理的管理。虚拟化技术的初衷就是为了实现更高的设备利用率,使用户能够尽可能地利用系统资源。有这样一句话,叫做“更多虚拟,更少管理 (Virtualize more, manage less)”,意思是说,如果你能够在单个服务器上虚拟多个系统,就能够以少数几台计算机完成所有工作,这显然能够节省耗电、空间、冷却和管理开支。一个理想的虚拟化解决方案应该提供不同虚拟机之间的彻底的安全的隔离,并为每个虚拟机提供卓越的性能,从而确保整个平台的出色实用性、可靠性和安全性。

完全虚拟化技术可以提供较好的客户操作系统独立性,不过其性能不高。而操作系统虚拟化可以提供良好的性能,然而各个客户操作系统之间的独立性并不强。无论是何种软件方法,隔离性都是由 Hypervisor 软件提供的,过多的隔离必然会导致性能的下降。对于虚拟化技术来说,无论是软件还是硬件辅助的解决办法,其目的和作用都是一样的,都以提高IT系统利用率、大幅降低成本、提高可管理性和建立完善的合作的整体化系统作为其第一要务的

VMM 对硬件资源的虚拟可以划分为三个部分:CPU 虚拟化,内存虚拟化和 I/O 虚拟化。在计算机中,CPU 无疑是最重要的部件,要想虚拟化出一台电脑,CPU 的虚拟化无疑是重中之重,事实上英特尔和 AMD 近年来也在全力推广 CPU 的虚拟化技术。那么究竟哪些处理器是支持硬件虚拟化,除了处理器还需要什么配合才能实现硬件虚拟化呢?下面我们先来看看支持 CPU 虚拟化的硬件环境要求。

Popek 和 Goldberg 在 1974 年发表的论文中提出一个真正的 VMM 必须满足的三个条件:高效性、资源控制和同质性。高效性是指所有的安全指令都可以在本地硬件上直接运行而不需要 VMM 的干预或仿真,资源控制是指任何客户机软件都不能改变它可用的系统资源分配,同质性是指抛开性能略微下降的因素,虚拟机上执行的任何程序的行为必须和在本地机器上运行一样。根据该定义,指令集支持虚拟化的最高效的状态是:所有敏感指令都是特权指令。

敏感指令和虚拟化方法
从软件角度上来说,处理器呈现给软件的接口就是一系列指令(指令集 ISA)和一堆的寄存器(通用寄存器以及状态和控制寄存器),而 I/O 设备呈现给软件的接口也就是一堆的状态和控制寄存器(有些设备亦有内部存储)。这些都是系统的资源,其中影响处理器和设备状态和行为的寄存器称为关键资源或特权资源,如 x86 的 CR0 ~ CR4 寄存器,MIPS 的 CP0 寄存器,PowerPC 的 Privileged SPR 等等。

>>> 阅读全文

 

, ,

从虚拟化到云计算(一)概述

文章评价:

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

狭义的虚拟化技术,则通常指的是硬件虚拟化技术,即计算元件在虚拟的硬件基础上而不是真实的硬件基础上运行。将这个概念应用到计算机系统中,可以在一台计算机上同时运行多个操作系统(例如,一台计算机可以同时运行 Linux 和 Windows),不同用户看到不同的单个系统,而且每一个操作系统中都有多个程序运行,每一个操作系统都运行在一个虚拟的CPU或者是虚拟主机上。这通常称为全虚拟化(full virtualization)。

硬件虚拟化也可以有更加复杂的格式,例如单个计算机看上去具有多个架构(对于一个用户来说,它是一个标准的 x86 平台;对于另外一个用户来说,它是 IBM Power PC 平台)。这种虚拟化形式通常被称为硬件仿真。

反之,更加简单的一种硬件虚拟化是操作系统虚拟化 (OS Level Virtualization),其中一台计算机可以运行相同类型的多个操作系统。在传统操作系统中,所有用户的进程本质上是在同一个操作系统的实例中运行,因此内核或应用程序的缺陷可能影响到其它进程。操作系统级虚拟化是一种在服务器操作系统中使用的轻量级的虚拟化技术,内核通过创建多个虚拟的操作系统实例(内核和库)来隔离不同的进程,不同实例中的进程完全不了解对方的存在。比较著名的有 Solaris Container,FreeBSD Jail 和 OpenVZ 等。

>>> 阅读全文

 

, , , ,