1引言

    随着桌面虚拟化技术的普及,许多企业开始部署桌面虚拟化系统。虚拟化技术经过长期的发展,其虚拟机性能已经可以满足很多应用需求,特别是对于处理器与内存的虚拟化处理,已经达到与物理主机相近的性能。但是,相对于输入/输出(input/output,I/O)设备的虚拟化处理仍然差强人意。

    现有的虚拟桌面系统大都采用单存储服务系统,以获得统一的存储视图以及较为低廉的价格。由于单一存储服务的吞吐率有限,这样的虚拟桌面往往只能在一个存储视图下支持数十台虚拟机,并不能满足中大型企业桌面虚拟化部署的要求。

    采用分布式存储结构可以有效地提高存储系统的吞吐能力。本文在分布式结构的基础上,采用直接块索引的方式,提供高性能快照,并且实施去冗余技术,可以在减少系统冗余数据的同时为用户提供存储状态和版本控制等功能。

2面向虚拟桌面的存储系统

    2.1虚拟桌面的体系结构

    虚拟桌面的一般结构如图l所示。每个用户在终端中使用客户端程序访问对应的虚拟桌面,虚拟桌面传输一般采用虚拟网络计算机(virtual networkcomputer,VNC)或者远程桌面协议(remote desktopprotocol,RDP)。这些虚拟桌面分别由一台在应用集群中的虚拟机进行支持。所有的用户数据和系统数据都存放在共享存储区中,这个可以被虚拟机访问的共享存储区一般称为数据中心。管理节点协调各个部分的功能,为外界提供统一的服务。


    2.2虚拟桌面的存储需求

    设计满足虚拟桌面的存储子系统需要基于以下三个基本特点。

    (1)高性能快照

    由于虚拟化所导致的封装性,快照成为虚拟机磁盘镜像的一个特色。使用快照,虚拟机磁盘镜像可以从错误的状态恢复到任意时刻正确的状态。

    (2)虚拟机启动性能优化

    虚拟桌面系统中的应用集群都需要从数据中心获得数据。虚拟桌面系统用在企业中为员工提供统一的工作界面。大部分用户都会在工作开始后的时间段内启动他们的虚拟机。企业环境下,数百台虚拟机同时启动会消耗掉大部分单存储服务的吞吐能力。许多虚拟机桌面采用存储区域网络(storagearea network,SAN)解决这个问题,例如虚拟机文件系统(virtual machine file system,VMFS)。

    (3)更少的数据冗余

    当前的多虚拟机系统都采用了版本控制方法,这在一定程度上减少了冗余,不过很多情况下,比如系统中存在着多种多样的应用程序时,版本控制并不能减少冗余数据。此外,使用版本控制的系统也会产生很多相同数据。所以,减少冗余数据对于减少存储系统成本是非常重要的。

3 VMStore总体设计

    本章主要介绍虚拟机存储系统(virtual machinestorage,VMStore)针对虚拟桌面环境而设计的分布式存储架构。通过连接多个存储服务节点,VMStore把单一的存储服务重新部署成为分布式架构,同时为虚拟机提供透明接口来进行访问操作。

    3.1 VMStore体系结构

    图2所展示的是VMStore的整体结构。和大多数分布式系统相似,VMStore中的存储节点都是消费型物理主机,依靠运行输入输出服务程序提供网络访问支持。每个存储节点上的输入输出设备不仅仅是应用程序和存储资源交换数据的媒介,同时还提供附加的辅助服务。通过实现冗余数据删除的机制,可以在重复数据产生时或者重复数据被传回存储服务器之后减少不必要的存储开销。

    在一些重量级的虚拟桌面产品中,例如Citrix公司的Virtual Desktops,虚拟化技术的基础设施都依靠Xen或XenServer来完成。由于Xen的开源性和性能优势,在本文的原型系统中也使用Xen来作为基础框架。在Xen自身的工具中,块工具(blktap)扮演了一个连接用户和虚拟机存储的角色。对开发者而言,块工具则提供了部分接口,从而实现一种能够索引虚拟磁盘中所有块的镜像格式。

    3.3数据管理

    VMStore为每次读写请求分配一个索引地址。每块数据的全局地址都如图4那样,被分割成高33位和低31位两个部分。其中,高33位作为一致性哈希索引中的键值,低31位作为该数据块在存储节点上的索引地址。把所有高33位相同的数据块存储在一个以该33位地址命名的文件中,然后利用低31位作为这些块在存储文件中的索引地址。

    3.4数据去冗余

    数据去冗余是VMStore系统中不可或缺的一部分。目前这项技术大部分应用在重复数据删除工作中,在虚拟服务器上,去冗余技术也能体现出它的优势。IBM公司曾经对虚拟机镜像文件的冗余状况进行了分析,结果表明数据冗余在虚拟环境下是无法避免的。VMStore以用户级后台程序的方式运行在存储节点上,通过Xen的块设备驱动来处理数据块的相关请求。在VMStore中采用了一种去冗余块结构。图5展示了两个文件以这种结构保存在存储系统中的布局。利用稀疏索引和指纹索引的方式对数据进行抽样,可以对冗余数据进行预测。

 

4系统实现

    4.1缓存机制

    I/O缓存由一个超高速缓存网络数据包模型和一个顺序写模型组成。由于数据块的轻量型,当大量I/O请求产生时网络拥挤的发生率会上升。为了缓解这种状况,I/O请求会在网络传送前合并。因此采用512 KB作为缓冲长度来缓存数据,以达到内存超载和网络效率之间的平衡。由于元数据存储在存储节点的硬盘上,并且与硬盘存取延迟和网络延迟等同的索引延迟会降低I/O请求的性能,因此在存储虚拟机上缓存了一部分索引结构来减少网络存取元数据的比率,通过缓存索引、缓存元数据来加速数据索引过程。

    4.2节点管理

    为了避免存储网络低效的询问,每个节点地址都存储在所有的存储虚拟机中。当一个节点想连接存储服务器,任何一个存储虚拟机都是这个节点的入口,用以找到它的正确位置。节点会从存储虚拟机上下载所有的存储地址,通过一致性哈希算法计算它的邻居节点,并利用加入信号通知它的两个邻居节点。该节点的前驱会传送哈希值比新节点大的节点的数据,然后删除哈希值大于这个新节点的后继节点的数据。在完成连接后,所有的存储VM将会更新节点信息。

5测试与评估

    5.1测试环境

    本文对VMStore进行了性能分析和评测。在所有的测试中,采用戴尔的PowerEdge 2950服务器作为应用节点,每个节点有两个1.6 GHz Xeon处理器,4 GB的内存和英特尔的E1000 GbE网络接口。存储数据节点是戴尔PowerEdgeT710服务器,每个节点有两个2.4 GHz Xeon处理器,24 GB内存,1 TB 7200转SAS硬盘和一个Broadcom公司5709双埠1GbE网络接口。现有系统是基于Xen 3.2.0版本开发的。

    5.2测试结果

    为了获取启动过程的最优速率,需要计算所有存储节点吞吐率的总和。图6(a)表示的是多虚拟机启动时的总读取速率。只有1台虚拟机启动时,总速率是0.073 MB/s。5台虚拟机启动时总速率达到了0.360 MB/s。图6(b)对应的是多虚拟机启动时的总写入速率。IOZone测试的结果如图7所示,4 KB大小时,虚拟磁盘的读取性能比其他单位长度下的性能要好。因为加入了写缓存,所以整体上写性能比读性能要高。图8表示的是重复12次快照,并在每次快照之后读取2 MB数据的延时。测试结果说明在VMStore中的快照性能,不像传统的“链式”快照,会导致延时线性增加。
6研究现状

    存储是虚拟化环境中一个重要的问题。接下来将介绍几种有代表性的虚拟存储设计:

    VMWare虚拟机文件系统VMFS是一个高性能的集群文件系统。该系统为虚拟化应用设计了很多优化法,利用共享存储可以使多个VMWare ESX实例同时读写相同存储位置。VMFS通过共享存储器(如光纤通道和iSCSI SAN)上存储的虚拟机文件,实现基于虚拟机的分布式基础架构服务,可高效地存储和访问整个虚拟机状态,并实现接近本机SCSI的虚拟磁盘性能。

    机器银行是一个客户端/服务器的结构。服务器端是BitVault,即为所有用户提供虚拟机镜像(virtual machine p_w_picpath,VMI)存储的可靠后台服务系统。在客户端按需下载镜像,并把镜像文件缓存在本地文件系统中减少重复数据的传输。

    Ventana是斯坦福大学提出的虚拟化感知的文件系统。它融合了虚拟磁盘和传统分布式文件系统的优点,在设计上包括分枝、视图和访问控制三个概念。

7结论

    VMStore由于采用分布式存储体系结构,提高了存储服务系统的吞吐能力。同时,分布式结构所具有的灵活性和扩展性也使得VMStore具有良好的可管理性和适应性。特别是在不同用户规模的情况下可以有效提高整体系统的利用率。实验结果表明,随着虚拟机数量的增加,VMStore的吞吐能力线性增加,很好地解决了系统中大部分虚拟机同时启动时存储吞吐率不足的问题。