Hyper-V: Xen for windows?

自微软在今年 3 月份正式发布包含了 Hyper-V 模块的 Windows Server 2008 后,近日又发布了虚拟机服务器 Hyper-V Server 2008,成为了服务器虚拟化市场中的又一个亮点。

以下是 Hyper-V 的架构图(图片来自互联网):

乍一看,这个架构和早先介绍过的 Xen 的基本架构非常相近,Domain 0 在这里被称为 Parent Partition,Domain U 在这里被称为 Child Partitions。Child Partitions 中客户操作系统 WS08 或 XEN-enabled Linux Kernel 对应 Xen 架构中的 Xen PV Guest,即客户操作系统需要配合 Hypervisor 共同实现准虚拟化;而 Non-Hypervisor Aware OS 即是 Xen 架构中所说的 Xen HVM Guest,属于完全虚拟化实现。

我们知道,Xen 架构中是以打过 Xen Patch 的 类 Unix 系统(Linux 或 BSD/Solaris 等)作为 Domain 0 的,并不支持用 Windows 作为 Domain 0。Xen 诞生已有许多年,难道 MS 的 Hyper-V 只是 Xen 的 Windows 版本吗?看来有必要了解一下 Xen 的历史。

Xen 最初是剑桥大学的一个研究项目,XenSource 创始人是早期的成员之一,创建了 Xen 开源项目。之后 XenSource 被 Citrix Systems 公司收购,Xen 项目被转移到现今的 xen.org 下,并增加了来自 Citrix、IBM、SUM、Intel、HP、Novell、Red Hat 等公司的成员。MS 并不在列,因此现在的 Xen 中不支持 Windows 作为宿主操作系统。

然而,在 Xen 成立之初,它接受了来自 MS 和 Intel 等公司的资助,因此 MS 有权使用关于 Xen 的研究成果,包括 Xen 的设计方案。

Hyper-V is not based on Xen code, but the design for Hyper-V is nearly identical to and certainly based on Xen’s design. That’s why MS funded Cambridge to create Xen, so that they could copy the design. (BTW, MS has done nothing wrong here; you’re supposed to copy ideas from academic research.)

这么看来,Hyper-V 的确可以看作是 Xen 的 Windows 专有实现,对于要以 Windows Server 2008 作为 Host OS 或 Guest OS 的用户来说,由于 Hyper-V Server 2008 的免费,无疑成为首选。另外,专有的实现中必定包含了 MS 针对 Windows 操作系统的优化,我认为 Windows Server 2008 在  Hyper-V 上的性能表现必定要比使用其它虚拟化实现的要好。

延伸阅读:

— EOF —

服务器虚拟化实现 – 初窥 Xen

Xen 是一款开源的准虚拟化的虚拟机监控器(VMM, Virtual Machine Monitor),在 GPL2 许可下发行。本文主要对虚拟化的一些基本概念进行讲解,同时简要地分析了 Xen 的基本架构与运行原理(对 2008 年 2 月的架构进行分析,如有更新,请查阅官方文档)。

完全虚拟化和准虚拟化

准虚拟化(para-virtualization),是与完全虚拟化(full-virtualization)相对的。完全虚拟化实现中,实际上是用软件实现了一个硬件模拟器,模拟了所有计算机硬件,对于客户操作系统来说,它们并不知道自己工作在虚拟的硬件上。客户操作系统的所有指令和请求,都交给模拟器,模拟器再将相关操作交由宿主系统完成。而在准虚拟化实现中,客户操作系统知道自己工作在虚拟环境中,需要配合虚拟层来完成对硬件系统的操作。

当前的完全虚拟化技术主要依靠软件虚拟实现,实际硬件对客户操作系统是不可见的,客户操作系统对硬件的操作需要经过多层次软件的处理,因此虚拟的开销较大。而在准虚拟中,硬件被抽象成硬件抽象层,客户操作系统对硬件的操作直接作用于该层上,相比完全虚拟来说较为直接,开销也小得多。

常见虚拟模式

常见的虚拟模式根据所处层次不同,可分为四种:

  1. 硬件虚拟模式
  2. 逻辑分区模式
  3. 软件虚拟模式
  4. 应用虚拟模式

四种虚拟模式的架构大致如下(图片引自互联网):

从上图很容易看出,我们在 Windows 下常用的 VMware,属于软件虚拟模式,工作于主操作系统之上,使用纯软件虚拟,是完全虚拟的。

至于 Xen,事实上它有两种工作模式,上图中只提到它工作于逻辑分区模式,事实上它也可以工作于软件虚拟模式,即 Xen 同时支持准虚拟化和完全虚拟化。

目前 Xen 的主要竞争产品是来自 VMware 的 VMware ESX Server

Xen 基本架构

Xen 直接工作在系统硬件上,它将上层对硬件的操作封装在 Xen Hypervisor 中,架构图如下:

一个 Xen 的虚拟环境中包含以下部件:

  • Xen Hypervisor

Xen Hypervisor 位于所有虚拟操作系统之下,硬件之上。它将底层硬件进行抽象,同时负责各虚拟机的 CPU 调度和内存的分配,它还控制着各虚拟机所共用的进程运行环境。

  • Domain 0

Domain 0 本质上也是一个虚拟机,但它是唯一的,它需要运行在其它虚拟机之前。同其它虚拟机一样,Domain 0 也工作在 Xen Hypervisor 上,但是它还拥有操作 I/O 资源的特权,同时它还要与其它的虚拟机(Domain U)进行交互。

  • Domain U

Domain U 分两种类型:PV Guest 和 HVM Guest。

PV Guest 是准虚拟化的虚拟机实例,它要求操作系统来配合虚拟环境执行硬件操作,因此操作系统需要考虑如何与 Hypervisor 交互,所以一般在 PV Guest 实例上运行的客户操作系统是修改过的 Linux。

HVM Guest 是完全虚拟化的虚拟机实例,在此实例上运行的操作系统会认为是工作在真实硬件环境中,因此不需要修改客户操作系统,就可以在上面运行。

  • Domain Management and Control (Xen DM&C)

在 Xen DM&C 中提供了一系列用于 Domain 管理和控制的 daemon 和工具,管理命令都是通过命令行传递给 Domain 0,最终作用于 Xen Hypervisor 上的。

Xen 驱动结构

  • 使用 Domain U PV Guest

比如 PV Guest 要对硬件进行写入操作时,因为没有权限直接操作硬件,它会先通过 PV Driver 先将数据写到 Xen Hypervisor的共享内存中。而后发送一个事件中断给 Domain 0,Domain 0 在检测到中断后,通过 PV Backend Driver 通知 Xen Hypervisor 将数据写入到硬件。

  • 使用 Domain U HVM Guest

HVM Guest 使用了一个模拟器:Qemu daemon,模拟器位于 Domain 0 中。HVM Guest 的所有硬件操作都由 Qemu-DM 解析最后由 Domain 0 作用于 Xen Hypervisor 而实现。

在 Xen 3.3.0 版本以前,Domain 0 需要为每个 Domain U HVM Guest 启动一个 Qemu-DM。Qemu-DM 在当前最新的 Xen 3.3.0 版本中已被 Stub domain 替代,以取得更好的扩展性、安全性和性能。

在 Xen 3.3.0 发布说明中有这么一项:

HVM emulation domains (qemu-on-minios) for better scalability, performance and security

其中 HVM emulation domains 指的就是 Stub domain,以下摘自 Xen 开发的邮件列表。

An ioemu (the device emulator of HVM guest) can run in Dom0.

An ioemu can also run in a per-hvm-domain stubdomain (namely, the “HVM emulation domain”).
Stubdomain is a very small domain running mini-os.
In this way, we can achieve “a better scalability, performance and security…”.

关于 Xen 的虚拟效率

准虚拟化是 Xen 的亮点,因此这里也只讨论 Xen PV Guest 的虚拟效率。Xen PV Guest 使用准虚拟化技术实现,因此毋庸置疑,它的虚拟效率自然要比使用软件方式模拟硬件的模拟器高很多。以下是来自官方的虚拟效率说明:

Xen offers near-native performance for virtual servers with up to 10 times less overhead than proprietary offerings, and benchmarked overhead of well under 5% in most cases compared to 35% or higher overhead rates for other virtualization technologies.

低于 5% 的虚拟开销,对于现今许多空闲的服务器来说,完全可以接受。既然如此,何不赶快给你的服务器装上 Xen,再虚拟出几台虚拟机,享受一下准虚拟技术带来的免费的服务器增值呢?

延伸阅读:

— EOF —

Win2K3 中 IIS 不处理某些扩展名的文件?

Win2K3 的 IIS6.0 默认情况下只会对在 IIS 中注册的文件类型进行处理,对未注册的文件类型会返回“该页无法显示”的错误。

这个细节今天不幸(应该是有幸才对)被我碰上了,而且不止一次。
在给我的 Blog 设置生成 .shtml 扩展名的档案时,发生第一次错误。当时以为是安全设置的问题,并没有去理会它。
第二次错误的发生在给 Blog 设置 RSS1.0 Feed 时,生成的文件的扩展名是 .rdf,一种 XML 格式的文本文件,照理说这种不需要服务器解析的文本类型文件应该是可以直接下载的。可乍就这么见……
不用多想,还是老规矩:百度、狗狗给我搜!
………………
搞了半天没捞到一点东西 =_=!!
接着怀疑是服务器上防火墙的问题……
检查 IIS 服务器扩展的设置……
一点线索都没有。

无意中在 IIS 中本地服务器上点击了右键->"属性",看到了什么!!
“IIS 只为扩展名在 MIME 类型列表中注册了的文件提供服务。要配置更多文件扩展名,请单击“MIME 类型”。”
终于水落石出,在列表里新增一项".rdf",MIME 类型和".xml"相同,为"text/xml",然后重启 IIS (iisreset),问题解决。

— EOF —