zoukankan      html  css  js  c++  java
  • [zz]文件支持的Xen存储虚拟化研究

    摘要: 本文基于文件的虚拟磁盘存储是虚拟机技术实现的重要一环,为了提高虚拟机磁盘读写效率,着重研究了Xen基于文件的磁盘虚拟化,分析利用异步I/O技术提升虚拟机对虚拟磁盘的读写速度
    关键词: 存储虚拟化虚拟磁盘镜像Xen

    虚拟化技术源于大型机,1972年,IBM在其$360大型机上首次实现虚拟机模型,它允许多个系统运行在一台机器上,提高了服务器的利用效率,距今已经有近40年的历史了。互联网发展起来以后,新兴的虚拟机应用不断出现,使虚拟化技术成为当前比较热的—个研究领域,出现了许多比较成熟的各种虚拟机或模拟器技术和产品,如Xen、Vmware和Qemu,而存储虚拟化则是实现它们的一个很重要方面。

      这里的存储虚拟化特指虚拟机中的虚拟存储设备,它与传统意义上存储设备所要实现的目标是一致的,需要简化存储管理系统,提高存储利用率和性能,增强存储数据安全性。本文着重研究了单机上基于文件的Xen磁盘虚拟化原理,分析利用异步I/O技术提升虚拟机对虚拟磁盘的读写速度,同时从理论和实验两方面说明了使用Raw格式和Qcow格式虚拟磁盘文件做为虚拟存储设备在性能和功能上的差异。

      1 相关背景

      1.1 Xen

      Xen是剑桥大学开发的一款开源X86虚拟机管理器,其上可以同时运行100多个不同的操作系统,它采用了准虚拟化(Para-virtualization)的方法,通过少量修改虚拟机中的内核,让其主动与虚拟机监视器(VMM,Virtual Machine Monitor)协同工作来达到很高的性能。实验表明,Xen中虚拟机的性能和真实的机器性能相差在3%左右回。从Xen3.0版本开始,Xen加入了对Intel VT和AMD pacifica技术的支持,大大提升了VMM对虚拟机的掌控能力,实现了全虚拟化(Full—virtualization),可以运行不加修改的操作系统,同时也考虑到了如何有效减小虚拟机的开销。

      在Xen中,Domain指一个运行中的虚拟机,在引导时最初创建的Domain称为Domain 0,它被允许使用控制接口来操控应用级的管理软件,可以创建和终止其他Domain,控制它们相关的调度参数、物理存储分配以及对给定的存储设备或网络设备的访问。

      1.2存储虚拟化

      新存储实体对原存储实体的存储资源和存储管理进行变化和转换的过程称为存储虚拟化,存储资源包括存储的读写方式、连接方式、存储的规格或结构等,而存储管理包括统一管理、分散管理、性能动态调整管理等。从虚拟机的角度来看操作的是虚拟设备,而不必关心真正的物理设备是什么。

      为虚拟机提供的虚拟存储设备可以有以下几种方式:物理硬盘或其分区,包括iSCSI磁盘或GNBD卷;网络存储协议,包括NFS等网络或并行文件系统;基于逻辑卷(LogicalVolumn Manager,LVM);基于文件的虚拟存储设备,也称为虚拟磁盘镜像(Virtual Disk Image)。本文重点讨论的就是最后一种,基于文件的虚拟存储方式。

      1.3虚拟磁盘文件

      虚拟磁盘文件顾名思义就是以一定格式的文件来做为虚拟机的磁盘存储设备,这种方式的优点是个人用户配置灵活、使用方便。每种虚拟机技术几乎都有与之相对应的虚拟磁盘文件格式:最原始的是Raw格式,它是一种“直读直写”的格式,不具备特殊的特陛,容易被其他程序所读,Linux中直接可以以回环(100p)设备来将它挂载到一个目录下;Qcow格式是Qemu中实现的一种镜像文件格式;VMware使用的是Vmdk格式;微软在其虚拟个人电脑和虚拟服务器上使用的Vhd格式等等。本文重点讨论的是在Xen虚拟机上使用Raw和Qcow格式的虚拟磁盘文件。

      2 基于文件的Xen磁盘虚拟化模型设计

      2.1磁盘虚拟化原理

      在准虚拟化的Xen中,虚拟存储设备由Domain 0负责创建和赋给其他Domain,只有Domain 0可以使用Linux驱动程序对真实磁盘进行直接的访问,其他的由Domain 0创建的Domain U只能借助于VMM和Domain 0来访问磁盘设备。具体实现方法是:在Domain 0经修改后的内核里添加了一个后端虚拟驱动(Backend Driver),为其他虚拟机提供对网络和块设备的访问,与此对应,在其他的准虚拟化Domain U的内核中添加了—个前端虚拟驱动(Frontend Driver)。

      如图1所示,前端驱动位于虚拟机Domain U中,接受来自Domain U内核的I/O请求,传递给后端驱动,后端驱动位于Domain 0中,负责接收来自前端的I/O请求,因为两者位于不同的内核中,所以它们之间的通信要依赖VMM中的I/O共享环和事件通道。Domain U将I/O请求放到环上并移动请求生产者指针,Domain 0将这些请求移出环处理,并移动相对应的请求消费者指针;经处理后生成的响应被放回到相同的环上并移动应答生产者指针,同时等待Domain U的前端驱动读取和移动应答消费者指针。另外Xen使用事件通道作为有I/O描述符进入队列的异步通知,不管是请求还是应答,都可以在环里图1 Xen磁盘I/O路径同时放入多个它们的描述符项,直到达到一定的阀值后才发送事件通知圈。当Domain 0的后端驱动得到传来的I/O请求后,通过字符设备将请求送至用户态程序Blktap,经其处理和转换后才调用Domain 0内Linux操作系统中真正的磁盘设备驱动程序最终完成对物理磁盘的访问请求。

      

    Xen磁盘I/O路径

      图1 Xen磁盘I/O路径

      2.2 Blktap功能

      Blktap是一个运行在Domain 0用户空间的程序,给用户层提供对虚拟磁盘文件读写操作的接口。如图2所示,比如某个Domain所对应的虚拟磁盘设备是真实磁盘上的文件A,则Blktap的主要作用就是将此Domain所要访问的虚拟磁盘64位扇区号转化为对物理磁盘上文件A中相应偏移量的操作。

      Blktap有很好的可扩展性,可以很容易实现支持不同格式的虚拟磁盘文件做为虚拟机的虚拟存储设备,同时易于实现如写时拷贝、磁盘加密、磁盘压缩等不同的应用,一些已有的块资源管理和磁盘调度策略也能通过它方便地附着在块设备上,另外因为Blktap处于用户空间,所以一些用户层的库和工具可以方便地被其调用以提高性能。

      

    Blktap作用

      图2 Blktap作用

      2.3加入异步I/O机制

      Blktap原有的读写模式是同步的,当它把从虚拟机传来的某扇区号的访问转化为对实际的文件某偏移处的操作,执行一个系统调用时会导致Blktap阻塞,直到系统调用完成即数据传输完成或发生错误为止,显然阻塞期间,CPU一直处于空闲状态,没有得到充分的利用。而如上所述,用户空间的Blktap能方便地使用已有的工具库,于是很自然地想到对其使用Domain0的Linux操作系统自带的异步读写库。利用处理速度与I/O速度之间的差异,当—个或多个I/O请求挂起时,CPU可以执行其他任务,或者在发起其他I/O的同时对已经完成的I/O进行操作,增加了CPU的利用率,相应也提高了对虚拟机的虚拟磁盘设备的读写效率。异步处理流程如图3所示。

      

    Blktap异步读处理

      图3 Blktap异步读处理

      2.4虚拟磁盘文件格式

      基于文件的虚拟存储设备可以由多种不同格式的文件来实现,加上了Blktap的支持后使这种实现和扩展更为容易,这里着重列出Xen常用的Raw和Qcow两种虚拟磁盘文件格式。Raw格式是一种“直读直写”的格式,Raw格式虚拟出的磁盘中,磁盘块号越大,此块在文件中所处的偏移量越大,即文件中数据存放的排列顺序与虚拟出磁盘上的数据块顺序相一致,因此从磁盘号到偏移量的地址转换比较方便快捷,但是缺少了元数据区域的支持,容易导致文件系统和数据拷贝出错。

      Qcow格式是Qemu(动态二进制翻译处理器模拟器)中实现的一种镜像文件格式。在Qcow格式文件中,数据存储的基本单元是clustertq。每个cluster都由几个块组成,每个块占512个字节,要访问某个特定的cluster需要经过两次查询操作,这个过程有点类似内存二级页表查询的机制。每个由虚拟机传来的64位虚拟磁盘扇区号按cluster_bits和12_bits两个字段的大小被分成3个部分,举个例子:如果cluster_bits是12、12』its是9,则—个给定地址的最低12位标识要访问的块在某个特定cluster内的偏移量,次低的9位标识一个512项数组内的偏移量,它指向那个特定的cluster,剩余的43位标识在一级表数组内的偏移量,它指向刚才的那个二级表,当一级表或者二级表某表项记载的偏移量为。时表示相应的地址还没有在映像文件中被分配,所以Qcow格式的文件可以动态增大。

      Qcow格式文件起始处有专门的区域存放元数据,支持一些高级的特性,如加密、压缩和快照,以节省磁盘空间并保证数据安全。另外与Raw格式相比最重要的优势在于Raw文件需要在创建时就分配好足够大的空间,而Qcow文件可以从一开始的小文件然后随着内容的增多而动态地逐渐增大,这种实现大大提升了对真实物理磁盘的利用率。

      3 性能评估

      3.1实验环境

      实验机器配置如下:CPU:Intel Pentium 4 3.0 GHz,内存:1G,磁盘:60 G。装上Xen 3.0.4的Fedora 6(内核2.6.16.33Xen0),在其上运行一个Fedora6(内核2.6.16.33 XenU)的虚拟机,分配给虚拟机的内存大小为256 M。总共测试3次,前两次此虚拟机都是使用Raw格式镜像做为虚拟磁盘,只是第一次测试时使用的虚拟磁盘读写操作是同步的,第二次则加入了异步机制,最后一次测试使用Qcow格式镜像做为虚拟磁盘,读写方式为异步。所有的测试结果都是在虚拟机中运行开源的磁盘I/O测试工具Bonnie得到,测试文件大小一般为2倍使用的内存,所以设定测试文件为512M。

      3.2同步异步性能比较

      在基于Raw格式虚拟磁盘的虚拟机上,分别对用Blktap同步和异步两种方式访问虚拟磁盘进行测试,实验结果如图4所示,Bonnie测得关于对虚拟磁盘的各项I/O指标,异步比同步效率高出6%到16%不等,这是因为对Blktap加入异步读写机制后,CPU利用率提升了,实验结果与理论分析相一致。

      3.3使用不同文件格式性能比较

      新建两个操作系统完全一致的虚拟磁盘文件,一个是Raw格式,另一个是Qcow格式,在同一台主机上分别运行这两个格式不一致、内容完全一致的虚拟机,然后在两台虚拟机里分别运行Bonnie测试程序,实验结果如图5所示。从图中可以看出使用Qcow格式文件在读写各项指标上都稍逊于使用Raw格式,这是由于Qcow的偏移量寻址需要通过二级查表,另外Qcow格式的虚拟磁盘是动态增长的,在写磁盘时经常要去申请新的空间,这些是在性能上稍慢的原因。但是以时间代价换来了可加密、压缩、快照等功能,以及磁盘空间的节省和读写安全性的提升,因此Qcow仍是Xen用于虚拟磁盘文件格式的首选。

      

    虚拟磁盘同步与异步I/O结果比较

      图4 虚拟磁盘同步与异步I/O结果比较

      

    读写Raw格式与Qcow格式文件性能比较

      图5 读写Raw格式与Qcow格式文件性能比较

      4 结束语

      本文通过研究Xen的Blktap模块,分析了虚拟机实现基于文件的虚拟磁盘设备的大致原理,在其上加入异步磁盘读写机制后,显著提升了虚拟机对虚拟磁盘的读写效率。另外,使用Qcow格式虚拟磁盘文件虽然在读写效率上比Raw格式有所下降,但它提供了可动态增长、可加密、可压缩和快照等优越性能,将是Xen所使用的主要虚拟磁盘文件格式,而且针对它的独特的寻址机制,可考虑加入快表和缓存技术,应该还有更大的性能提升的空间。

  • 相关阅读:
    Yii增删改查
    10个超级有用、必须收藏的PHP代码样例
    yii源码分析I、II
    Yii源码阅读笔记
    Yii源码阅读笔记
    Yii源码阅读笔记
    当浏览器输入url的时候发生了什么
    js模块化值之seaJS
    js判断字符串中的英文和汉字
    display:table-cell的惊天作用,直接惊呆你!
  • 原文地址:https://www.cnblogs.com/zhangzhang/p/2349022.html
Copyright © 2011-2022 走看看