一种独立式I/O虚拟化方法研究
2014-06-07蒋烈辉董卫宇陈慧超
宋 聿,蒋烈辉,董卫宇,陈慧超
(解放军信息工程大学数学工程与先进计算国家重点实验室,郑州450001)
一种独立式I/O虚拟化方法研究
宋 聿,蒋烈辉,董卫宇,陈慧超
(解放军信息工程大学数学工程与先进计算国家重点实验室,郑州450001)
当前虚拟化系统中的设备仿真过程与I/O指令串行执行,无法发挥真实体系结构中直接存储器访问、异步I/O等加速I/O访问技术的性能优势,致使虚拟平台I/O性能与真实I/O性能存在一定差距。针对该问题,提出一种独立式I/O虚拟化方法,通过将I/O仿真活动(如磁盘读写)分离成一个独立的进程,虚拟机监控器(VMM)只保留相应的接口,达到将VMM与I/O设备分离实现仿真与指令并行化执行的目的,并基于QEMU平台实现该方法。实验结果表明,采用该方法后的QEMU I/O读写性能优于原有I/O子系统。由于I/O指令不必再等待I/O仿真的结束,因此在提高CPU指令执行速度的同时,能够有效提高4.9%的磁盘读取速度及9.2%的VGA测试基准软件Viewpref得分。
I/O虚拟化;设备仿真;虚拟机监控器;异步I/O;直接存储器访问
1 概述
随着我国制造水平的提高,我国已可以自主设计一些非X86指令集的处理器,但相应软件资源却很少,因此,跨平台的虚拟化作为一种软件移植技术,可以提供大量软件资源,逐渐变得更有研究意义。虚拟化技术发展至今,已经出现很多成熟的虚拟化平台,如VMware,QEMU(Quick Emulator)和Xen等。其中,QEMU和Xen因其开源、整机仿真等特性,已成为研究虚拟化技术的主流的2种虚拟化平台。在以上2种系统虚拟化系统中,I/O虚拟化作为系统虚拟化的一个模块,因其异构性强,难于进行多虚拟机共享,内部状态不易控制和掌握等特点,成为虚拟化技术的一个技术难点。
本文提出一种独立式的I/O子系统的设计方案SVIO(Stand-alone Virtual I/O)。在该方案中,使用一个新的线程来进行I/O设备仿真,从而达到将虚拟机监控器(Virtual Machine Monitor,VMM)与I/O设备的仿真相互分离的目的,使两者可以并行工作,以提升系统的整机性能。通过实现磁盘以及VGA的仿真模型并运行标准测试软件来分析其性能的优劣。
2 传统I/O虚拟子系统
对于一个完整的虚拟化平台而言,除进行CPU、内存的仿真外,还需进行输入/输出设备的仿真。I/O设备作为计算机与外界通信的桥梁,是客户机正常运行必不可少的因素,因此,虚拟化平台必须提供各式各样的I/O虚拟设备。
2.1 传统I/O虚拟子系统分类
目前,主流设备虚拟化的实现方式主要有:设备仿真,直接分配和虚拟设备[1]。根据其实现的方式不同,其性能、兼容性也不尽相同。如设备仿真采用的是以全软件仿真的方式实现I/O虚拟子系统。具有无需更改客户机系统设备驱动程序,兼容性好的优势。直接分配将一个物理I/O设备单独分配给一个虚拟机以提升虚拟机I/O性能,但是需要Intel VT-d或IOMMU支持。虚拟设备模型是在Xen[2]中使用的一种性能较好的设备虚拟化方式。将驱动程序分成前端/后端2个部分,前者从虚拟机中接收I/O请求后并不立即执行,而是通过事件通道机制将请求转发给后者,由后端驱动完成请求。通过这种方式,Xen将前端的I/O访问过程简化,而后端批量处理由各个前端发来的请求,提升了虚拟I/O系统的性能。但是由于其更改了系统驱动,因此其兼容性略差,后端也容易成为I/O处理的性能瓶颈。文献[3]详细分析了Xen的分离驱动模型,并测试其性能。文献[4-5]以Xen为基础平台,研究实现将物理设备从VMM中分离,供客户机直接访问。文献[6]在Xen的I/O模型的基础上提出一个VMM旁路I/O的思想,并建立了原型系统Xen-IB,通过测试InfiniBand性能发现其带宽可以达到880 MB/s,是PCI-X总线的极限并且此带宽与直接使用真实设备相同,采用IPoIB基准测试时至少能保留有90%本地物理设备的性能。文献[7]提出了一种基于多核平台的设备虚拟化方案,在改善I/O处理效率的同时,提高设备虚拟化模型的通用性。文献[8]提出一个软硬件结合的模拟器平台FAST,利用异构部件如FPGA,GPU等实现VMM加速。文献[9]分析SR-IOV虚拟化技术相对于传统虚拟化技术的优势。文献[10]将其应用到网卡的虚拟化中,性能只较真实网卡低1.76%。文献[11]认为I/O虚拟化性能将是云计算发展的瓶颈。
通过以上分析,可以发现采用直接分配和虚拟设备实现的I/O虚拟子系统性能较好,但因其分别需要额外的硬件支持及修改系统驱动,所以其兼容性和通用性不强。而仿真设备由于是纯软件模拟,因此兼容性更好,并且其支持指令集不同的异构平台虚拟化。为此,本文将进一步分析仿真设备模型,并在此基础上构建SVIO。
2.2 设备仿真模型分析
QEMU[12]是一个基于动态二进制翻译技术的模拟处理器,其基本功能是作为一个虚拟机运行无修改的Linux或者Windows系统。与其他虚拟机最大的不同在于它可以跨平台的运行系统,是一个多源到多目标的动态二进制翻译系统。其内部实现了多种不同的CPU仿真和I/O设备(如VGA、PS/2鼠标键盘、IDE硬盘等)。QEMU的VMM运行于主机操作系统之上,设备管理是完全交由宿主机操作系统,而自身则仅作为宿主机的进程动态地加载程序,按照取指、译码、源指令翻译至中间指令,中间指令翻译至目标指令这样的执行顺序进行仿真。QEMU系统结构如图1所示。
图1 QEMU系统结构
在动态翻译过程中,QEMU采用基本块作为独立的翻译单元,将遇到的每一块代码都转换成主机指令集。由于指令翻译缓存、块链等机制的存在,因此多数块只需翻译一次,大大提升了性能。当遇到I/O指令,则以I/O端口地址为索引,分发到不同的I/O设备仿真模块中。由于磁盘仿真相对其他设备比较复杂、全面,因此以磁盘仿真为例,详细讲述其仿真过程。
IDE磁盘接口以其价格低廉、兼容性强、性价比高等优点被广泛采用。其内部共有两大类寄存器接口:(1)命令寄存器组,包括数据寄存器、命令寄存器、扇区寄存器、状态寄存器、错误寄存器等。(2)控制寄存器组,包括设备控制寄存器和辅助状态寄存器。通常IDE接口支持2类通信模式:(1)PIO(Programing I/O)传输模式;(2)DMA(Direct Memory Access)传输模式。虽然在几乎所有的计算机中都已采用了DMA传输模式,但是在系统启动阶段,往往还是先通过PIO模式加载系统内核,所以对于一个虚拟磁盘而言必须同时支持这2种传输模式。无论是PIO模式还是DMA传输模式,操作系统实质上都是通过一连串的IN/OUT指令完成。
2.2.1 PIO传输模式
在系统启动初期,是由BIOS或者LILO等程序提供磁盘驱动程序,如13 h中断调用。此时数据量较小,而且一般BIOS,LILO等本身功能有限,所以广泛采用PIO模式。PIO传输过程如图2所示。
图2 PIO传输过程
PIO传输过程具体如下:
(1)由翻译模块翻译IN/OUT指令,访问虚拟磁盘设备,定位需要读取的数据。
(2)由虚拟磁盘设备通过Read/Write系统调用读取宿主机文件系统。若为写操作,则将数据写入磁盘缓冲区,此时,无论何种操作VMM将作为宿主机的进程挂起,等待宿主机驱动将数据读取或写入结束。
(3)宿主机驱动将数据写入宿主机真实文件系统中或者将数据拷贝进入虚拟磁盘的缓冲区。
(4)通过宿主机中断唤醒VMM进程,这个过程由宿主机进程调度器完成。
(5)虚拟设备数据交换成功,将通过v8259发起中断,这一过程与真实系统中断过程一样,VCPU在下一个基本块翻译前检查并响应中断。
(6)VCPU响应中断,跳转至客户机中断处理程序。若是读操作则通过串传输指令将数据从IDE缓存调入虚拟内存中。然后根据扇区数寄存器确定本次传输是否结束,如果未结束转到步骤(2)。
由以上过程可以发现,由于仿真设备模型存在于VMM内部,因此VCPU与VMM之间是完全串行的关系。
2.2.2 DMA传输模式
对于DMA过程,系统会启动DMA控制器,此时系统直接将缓冲区内的数据拷贝入虚拟内存,而不是通过VCPU执行串传输指令拷贝数据。而且在现代DMA传输过程中,为了进一步提升DMA传输的效率,会增加2种现在被广泛使用的技术:
(1)采用scatter-gather DMA方式。在这种方式下,由驱动程序创建一个首地址及数据长度为一个单元的单元组,用于描述一段在物理上不连续的数据空间,然后把单元组的首地址写入DMA控制器,当DMA控制器完成一块物理上连续地址的数据后,不用发起中断,而是根据链表来传输下一块物理上连续的数据,直至完全传输完毕后发起一次中断。
(2)采用AIO异步I/O技术。在这种技术的支持下,虚拟设备模型不必等待真正的Read/Write系统调用发生前就可以返回,而后续工作将由辅助线程完成。作为系统驱动只需等到中断的到来即可。虽然提升了DMA传输的效率,但是其实现位置却在底层,并且辅助线程存在时间短暂,并且仅限部分虚拟I/O设备,可能需要重新创建辅助线程。所以,这种技术在性能提升上比较有限。
对于VGA设备而言,其仿真原理与磁盘设备相似,在此不再赘述。根据以上分析发现,设备模型在VMM中导致VMM往往是串行地进行VCPU与设备的仿真,而在I/O请求被处理的过程中,通常要经历复杂的设备仿真活动。这导致了VCPU指令执行的停顿,系统性能的下降,并且在真实的机器中,处理器不必等待这种复杂的设备活动结束,而是通过调度器转而执行其他程序。因此,这种单进程的VMM会因I/O活动拖慢了虚拟化平台的整体性能。
3 SVIO子系统的设计
本文基于现有虚拟化平台QEMU,设计并实现了异步并行虚拟I/O子系统——SVIO,该子系统只在VMM中保留I/O设备的虚拟接口,用于快速获得I/O设备的当前状态以及简单配置工作等,并不参与仿真工作。而将I/O一些仿真过程,例如磁盘读写、VGA刷新等置于一个辅助线程SVIO中。通过这种设计,VCPU不在等待I/O活动的结束,而是在I/O活动时转而执行其他程序。SVIO系统框架如图3所示。
图3 SVIO系统结构
3.1 SVIO初始化
SVIO作为独立的I/O子系统将在VMM启动时一并初始化,其初始化过程将分为两部分,消息队列初始化和虚拟设备模型初始化。前者主要是VMM与SVIO通信的桥梁。两者主要以消息为单位进行通信,所以在初始化期间要建立消息队列用于通信。后者作为仿真设备的一部分,使自身表现为一个虚拟设备,主要通过向PCI总线注册设备,建立设备之间的拓扑关系,以及建立相应的固件信息等。
3.2 接口实现
在SVIO模型中,虚拟设备通过消息队列获得VMM发来的请求,经过处理后通过中断机制反馈给VMM,并且通过共享缓冲区的方式实现数据反馈。通过消息队列,可以实现VMM与SVIO的隔离,保护了SVIO的正常运行。
SVIO消息包含以下3个部分:(1)DevCode:设备标识码,用于区分设备,寻找接收消息的设备。(2)Command:设备命令,各设备有所不同。(3)Body:信息主体,用于VMM与设备之间的具体通信,各设备之间内容及格式不同,例如:与磁盘通信包含用于定位扇区位置的扇区号、缓冲区位置等,而在VGA中则定义为空。
从定义可以看出,消息包中不包含真实的数据,而是VMM发起的I/O请求,当多个不同设备的请求到来时,就形成了一个消息队列,由于SVIO和VMM是异步的关系,因此并不影响VMM和SVIO的正常运行。消息队列采用先入先出的原则,同时为了正确管理消息队列,本文定义了一套原子操作用于读写其临界区。为最大化地提升性能,采用自旋锁来实现读写接口,如图4所示。
图4 设备I/O环形队列
3.3 系统实现
对于SVIO而言,其实质是一个独立于VMM而言的辅助线程,因此当VCPU通过翻译一连串IN/ OUT指令而发起一次I/O请求时,不再退出翻译引擎去执行设备仿真,而是通过消息队列将请求封装发送至SVIO中,VMM则继续翻译执行后续程序。此时,SVIO收到消息后,对消息解封,转而执行设备仿真,完成后通过中断机制和页面共享通知VCPU进行数据交互。基于该机制,可以将I/O设备的仿真与VMM中VCPU指令翻译最大限度的分离,使两者不再串行工作,可以极大地提升系统的响应和指令执行的速度,如图5所示。
图5 设备请求处理过程
4 系统性能测试
本文采用QEMU动态二进制翻译系统为平台,在其上面实现了SVIO系统模型,并对具有代表性的设备IDE-DMA和VGA进行了测试。在磁盘设备测试中,本文采用Hdparm工具测试其读取速度,结果如图6所示。对于VGA设备,本文采用一款基于OpenGL的图形测试基准软件Viewpref,观测不同环境下的基准测试结果,如图7所示。
图6 硬盘读取速率测试结果
图7 Viewpref测试结果对比
通过比较可以发现,引入SVIO后对系统整体性能有很大提升,磁盘读取速度提升4.9%。而VGA显示性能对于不同场景均有至少9.2%的提升。对于IDE而言,主要基于引入SVIO后,系统的VCPU执行不在参与I/O活动,而是继续执行后续指令,使VCPU的执行效率更高,I/O活动则是交予SVIO仿真,而后通过中断机制通知VCPU。所以,磁盘的读取速度有所提升。对于VGA而言,并不涉及耗时的端口读写命令,但是其屏幕的刷新操作也会打断VCPU的仿真,并且因其图形显示运算复杂、次数繁多,因此在很大程度上限制了系统的图形运算能力,移入SVIO后,可以获得较大的提升。并且磁盘操作相对于VGA刷新要少得多,因此将两者置于同一SVIO中即可提升系统仿真的性能,也不会过多加重宿主机的负担,是一种有效提高系统虚拟化性能的方法。
5 结束语
本文分析了当前主流虚拟化平台的I/O子系统框架,提出一种并行I/O子系统SVIO的设计方案。引入SVIO后的测试结果表明,解决了I/O子系统与VCPU串行的问题,并且系统整体性能有较大提升,具有一定的实用性。下一步将通过引入真实硬件设备进一步提升I/O的虚拟化性能。
[1] 石 磊,邹德清,金 海.Xen虚拟化技术[M].武汉:华中科技大学出版社,2009.
[2] Barham P,Dragovic B,Fraser K,et al.Xen and the Art of Virtualization[J].ACM SIGOPS Operating Systems Review,2003,37(5):164-177.
[3] 胡冷非,李小勇.基于Xen的I/O准虚拟化驱动研究[J].计算机工程,2009,35(23):258-259,262.
[4] Xen VGA Passthrough[EB/OL].(2009-04-18).http:// wiki.xen.org/wiki/Xen_VGA_Passthrough.
[5] 陈 诚.基于显卡直接分配的虚拟机图形加速系统[J].计算机系统应用,2010,19(8):6-9.
[6] Liu Junxing,Huang Wei,Abali B,et al.High Performance VMM-Bypass I/O in Virtual Machines[C]//Proceedings of 2006 USENIX Annual Conference.Berkeley,USA: USENIX Association,2006:29-42.
[7] 赵玉春,郭玉东,王晓睿,等.协作型虚拟机中设备虚拟化研究[J].计算机工程,2012,38(14):283-286.
[8] Chiou D,Sunwoo D,Kim J,et al.FPGA-accelerated Simulation Technologies(fast):Fast,Full-system,Cycleaccurate Simulators[C]//Proceedingsofthe 40th Annual IEEE/ACM International Symposium on Microarchitecture.Chicago, USA: IEEE Computer Society,2007:249-261.
[9] 李 超.SR-IOV虚拟化技术的研究与优化[D].长沙:国防科学技术大学,2010.
[10] Dong Y,Yang X,Li J,et al.High Performance Network Virtualization with SR-IOV[J].Journal of Parallel and Distributed Computing,2012,72(11):1471-1480.
[11] Shafer J.I/O Virtualization Bottlenecks in Cloud Computing Today[C]//Proceedings of the 2nd Conference on I/O Virtualization.Berkeley,USA:USENIX Association, 2010:5-7.
[12] Bellard F.QEMU,A Fastand Portable Dynamic Translator[C]//Proceedings of Annual Conference on USENIX Annual Technical Conference.Berkeley,USA: USENIX Association,2005:41-46.
编辑 陆燕菲
Research on a Stand-alone I/O Virtualization Method
SONG Yu,JIANG Lie-hui,DONG Wei-yu,CHEN Hui-chao
(State Key Laboratory of Mathematical Engineering and Advanced Computing, PLA Information Engineering University,Zhengzhou 450001,China)
Because current virtualized devices in the system simulation process and I/O instructions execute serially, which can not play performance advantages of accelerated I/O access technical such as Direct Memory Access(DMA), asynchronous I/O in the real architecture,there is a certain gap between virtual platform I/O performance and the real I/O performance.To solve this problem,this paper presents a stand-alone I/O virtualization method,which separates the I/O simulation activities such as disk access from the Virtual Machine Monitor(VMM)only retained the appropriate interfaces by putting the activities in a stand-alone process to achieve I/O simulation and parallel instruction execution, and based on QEMU platform implements the method.Experimental results show that the I/O performance is better than the original QEMU I/O subsystem by this method.Because I/O instructions do not have to wait for I/O simulation ends, this method not only improves the speed of the CPU instruction execution,but also can effectively improve disk read speed by 4.9%and increase software Viewpref VGA benchmark score by 9.2%.
I/O virtualization;device simulation;Virtual Machine Monitor(VMM);asynchronous I/O;Direct Memory Access(DMA)
1000-3428(2014)10-0081-05
A
TP302
10.3969/j.issn.1000-3428.2014.10.016
宋 聿(1988-),男,硕士研究生,主研方向:虚拟化技术;蒋烈辉,教授;董卫宇,副教授;陈慧超,硕士研究生。
2013-09-16
2013-11-19E-mail:ysong1988@163.com
中文引用格式:宋 聿,蒋烈辉,董卫宇,等.一种独立式I/O虚拟化方法研究[J].计算机工程,2014,40(10):81-85.
英文引用格式:Song Yu,Jiang Liehui,Dong Weiyu,et al.Research on a Stand-alone I/O Virtualization Method[J]. Computer Engineering,2014,40(10):81-85.