著录项信息
专利名称 | 一种分布式虚拟机监视器系统的构建方法 |
申请号 | CN200810225087.7 | 申请日期 | 2008-10-28 |
法律状态 | 权利终止 | 申报国家 | 中国 |
公开/公告日 | 2009-04-01 | 公开/公告号 | CN101398768 |
优先权 | 暂无 | 优先权号 | 暂无 |
主分类号 | G06F9/455 | IPC分类号 | G;0;6;F;9;/;4;5;5查看分类表>
|
申请人 | 北京航空航天大学 | 申请人地址 | 中国广东省深圳市龙岗区坂田华为基地总部办公楼
变更
专利地址、主体等相关变化,请及时变更,防止失效 |
权利人 | 华为技术有限公司 | 当前权利人 | 华为技术有限公司 |
发明人 | 彭近兵;祝明发;肖利民;龙翔 |
代理机构 | 北京慧泉知识产权代理有限公司 | 代理人 | 王顺荣;唐爱华 |
摘要
本发明提供一种分布式虚拟机监视器系统的构建方法,它就是采用最先进的虚拟化技术在硬件之上、操作系统之下,在多个物理结点上部署和构建分布式虚拟机监视器系统DVMM,通过DVMM将多台计算机的资源整合、虚拟化为虚拟资源并集中统一管理。根据应用需求,该方法既可以将多台机器的资源整合成具有单一系统映像的虚拟机供用户使用,以满足超级应用的资源需求;也可以在一台机器上创建多个虚拟机,从而将多个小规模的应用整合到一台机器上,以提高资源利用率。因此,本发明能够充分利用现有资源,满足各类应用的需求,具有广阔的应用前景和产生显著的经济效益。
1.一种分布式虚拟机监视器系统的构建方法,其特征在于:该构建方法步骤如下:
步骤一:扩展各结点的BIOS成为eBIOS(Extended Basic Input/OutputSystem);
eBIOS实现如下功能:探测本结点拥有的物理资源,通过与其他结点的eBIOS通信收集整个机群的资源信息,将整个机群的资源信息分类整合,生成全局物理资源信息;
步骤二:各结点的VMM预留自用的内存资源,对余下的内存资源,以及处理器资源和I/O资源构建“资源-结点映射表”,实现内存资源、处理器资源和I/O资源到其所在结点的映射;
步骤三:对各类资源分别进行虚拟化,生成相应的虚拟资源池;
资源虚拟化包括处理器资源虚拟化,内存资源虚拟化、输入/输出I/O(Input/Output)资源虚拟化和中断机制虚拟化;
(一)处理器资源虚拟化:处理器资源虚拟化包括处理器的组织和指令集系统ISA(Instruction System Architecture)虚拟化;
1、将整个机群范围内的处理器资源进行统一编号、统一管理,为每个虚拟处理器指定三个id,第一个是vcpu_id,用于在VMM中管理虚拟处理器,第二个是vlapic_id,用于向guest OS提供虚拟的处理器编号,第三个是vcpu_id_global,代表当前虚拟处理器在全局环境下的逻辑id,通过虚拟处理器的vcpu_id_global追踪到其所在的结点,以及与其对应的物理处理器;
2、基于硬件虚拟化技术实现指令集虚拟化,为每个虚拟CPU创建一个虚拟机控制结构VMCS(Virtual Machine Control Structure),当客户操作系统执行到敏感指令或者当敏感行为发生的时候,发生VM exit,VMM查询产生VM exit的原因,然后对指令或行为进行相应的模拟操作,在完成模拟指令或行为后,通过VM entry返回客户操作系统;
(二)内存资源虚拟化
结合共享虚拟内存SVM(Shared Virtual Machine)技术与影子页表技术实现分布式内存虚拟化,通过共享虚拟内存技术将分布于多个物理结点上的内存资源整合成一个虚拟的统一内存空间;通过影子页表技术实现对这个共享的虚拟内存空间的地址到真正的物理内存空间地址的翻译,这样,通过SVM技术与影子页表技术结合,将机群分布式的物理内存整合并虚拟化成具有单一地址空间的虚拟统一内存;
(三)I/O资源虚拟化
采用直接访问和指令传输相结合的方法实现分布式I/O资源的虚拟化,I/O操作分为程序控制I/O PIO(Programmable I/O),内存映射I/O MMIO(Memory Map I/O)和直接内存访问(Direct Memory Access,DMA),分别阐述如下:
配置VMCS使PIO操作成为敏感行为,当客户操作系统执行PIO操作时,会触发VM exit,进入VMM,VMM查询I/O设备映射表,如果I/O设备在本结点,则执行I/O指令,将结果填写到VMCS中,然后执行VM entry操作返回客户OS;如果I/O设备不在本结点,则将I/O指令传递到目标结点,由目标结点执行I/O指令,将结果返回请求结点,请求结点相应地更新客户寄存器内容,然后执行VM entry返回客户系统;
通过内存虚拟化模块,将用于MMIO的内存页面标记为不存在;当客户系统执行MMIO时,会引起缺页故障,进入VMM,在内存虚拟化模块的配合下发现本次操作是内存映射I/O操作,调用I/O虚拟化模块进行处理,若I/O设备在本结点,则执行I/O指令,然后返回客户系统;如果I/O设备在远程结点,则将指令传递到目标结点由目标结点执行I/O指令,然后返回客户系统;
(四)中断虚拟化
以软件模拟的方式实现中断机制虚拟化,一方面,截获OS对中断控制器的操作,若目标中断控制器在本结点,则读取或修改虚拟中断控制器的内容以反映客户操作的效果;若目标中断控制器在远程结点,则将操作请求发送到目标结点,目标结点的VMM操作虚拟中断控制器,另一方面,截获硬件中断,根据中断对象所在结点,分别由本结点的VMM或远程结点的VMM修改虚拟中断控制器的内容,将硬件中断呈现给OS;
步骤四:构建各类虚拟资源到物理资源的映射表,实现虚拟资源到物理资源的映射,以及物理资源到物理结点的映射;
步骤五:创建管理虚拟机,在第一个结点上创建管理虚拟机,将该结点所拥有的物理资源的50%分配给管理虚拟机作为虚拟资源;管理虚拟机的创建过程如下:
1、为虚拟机获得的每个虚拟CPU构建VMCS,用于控制虚拟CPU的运行;
2、根据虚拟机所获得的虚拟内存资源,构建硬件寻址所需要的影子页表以及分布式共享内存算法所需要的物理地址到机器地址映射表;
3、构建虚拟的中断控制结构;
4、根据虚拟机的资源配置,构建虚拟BIOS,以便向客户操作系统呈现可用的虚拟资源;
5、启动并运行管理虚拟机;
步骤六:通过系统管理程序的控制界面显示当前可用的各类虚拟资源;
1、VMM向管理虚拟机报告系统可用的虚拟资源信息,
2、管理虚拟机通过系统管理程序展现可用资源信息;
步骤七:系统管理员根据业务需求,参照当前可用的虚拟资源信息,通过创建、撤销和迁移虚拟机的方式,灵活地使用整个系统的资源,分布式虚拟机监视器根据管理员发出的不同命令,分别进行如下操作:
(一)创建虚拟机
当管理员下达创建虚拟机指令时,分布式虚拟机监视器执行如下操作:
1、管理结点的VMM查询虚拟资源集,判断现有资源能否满足虚拟机的要求,如果不能满足要求,则向系统管理程序报错,如果满足虚拟机要求则继续执行后续步骤;
2、管理结点的VMM为虚拟机分配所需要的虚拟资源,并相应地修改系统可用的虚拟资源集合;
3、管理结点的VMM向其他结点的VMM通报创建虚拟机指令以及为该虚拟机分配的资源信息;
4、各结点VMM根据本结点为待创建虚拟机贡献的资源情况,相应调整可用资源信息;
5、各结点VMM为本结点贡献的每个虚拟CPU构建对应的VMCS;
6、各结点VMM根据本结点贡献的虚拟内存资源,构建影子页表和物理地址到机器地址映射表;
7、各结点VMM为本结点贡献的每个虚拟CPU构建虚拟的中断控制结构;
8、管理结点的VMM为虚拟机构建虚拟BIOS,以便向客户操作系统呈现可用的虚拟资源;
9、管理结点的VMM启动并运行虚拟机;
(二)撤销虚拟机
当管理员下达撤销虚拟机指令时,分布式虚拟机监视器执行如下操作:
1、管理结点的VMM通知虚拟机停机;
2、管理结点的VMM通知其他结点的VMM撤销虚拟机;
3、各结点VMM分别回收虚拟机占用的本结点虚拟资源,并修改本结点当前可用的虚拟资源集合;
4、管理结点的VMM修改系统当前可用资源信息,撤消该虚拟机相关的管理信息;
(三)迁移虚拟机
当管理员下达迁移虚拟机指令时,分布式虚拟机监视器执行如下操作:
1、管理结点的VMM向源结点和目的结点发送迁移命令;
2、源结点的VMM向目的结点发出虚拟机迁移请求;
3、目的结点的VMM接受请求后,与源结点合作,将待迁移的虚拟机扩展为跨越源结点和目的结点的临时虚拟机;
4、目的结点的VMM将待迁移的虚拟机的每个虚拟CPU元数据迁移到目的结点上并重新启动,在目的结点重新启动虚拟CPU后,其访问的页面会逐渐通过分布式共享内存算法从源结点迁移至目的结点,最终完成整个虚拟机的迁移;
步骤八:动态检测并调整系统可用资源信息;
管理结点的eBIOS实时或固定间隔地与其他结点的eBIOS通信,探测机 群中结点的变化情况,修正全局资源信息并及时反映到管理界面,以便管理员能够及时发现机群结点的变化,对系统资源分配策略进行调整;
步骤九:虚拟机运行及与分布式虚拟机监视器交互;
1、分布式虚拟机监视器在创建虚拟机后启动虚拟机运行;
2、虚拟机基于所获得的虚拟资源独立地进行资源的管理和分配,调度和运行进程;
3、虚拟机通过VM exit和VM entry和VMM进行交互;当虚拟机执行在VMCS中设定的敏感指令时,或有中断、异常发生时,虚拟处理器会发生VM exit,控制权转到分布式虚拟机监视器,分布式虚拟机监视器根据引发VM exit的原因,进行针对性地处理,然后通过VM entry返回虚拟机。
一种分布式虚拟机监视器系统的构建方法\n(一)技术领域:\n[0001] 本发明涉及一种计算机系统虚拟化技术,尤其是涉及一种以实现服务器机群虚拟化目标的分布式虚拟机监视器系统的构建方法。属于计算机技术领域。\n(二)背景技术:\n[0002] 虚拟化是一个广义的术语,在计算机方面通常是指计算和处理在虚拟的基础上而不是真实的基础上运行。计算机虚拟化技术是指对计算机系统的物理资源进行抽象的技术。计算机虚拟化技术可在计算机硬件和操作系统之间构建一个虚拟平台,实现在同一个硬件平台上构建相互隔离的多个运行域,每一个运行域中都可以分别运行自己的操作系统和应用软件。\n[0003] 虚拟化技术起源于20世纪60年代,IBM公司在System/360计算机系统中首先运用虚拟化技术实现了虚拟机,随着System/370等系列机的成功推广,虚拟化技术逐渐成为大型机中必然采用的一项重要技术,主要目的是让更多的用户共享昂贵的硬件资源。二十世纪八十年代,随着集成电路技术的飞速发展,计算机硬件成本急剧降低,特别是随着PC等微型机的广泛使用,共享硬件资源的必要性随之降低,关于虚拟化技术的研究和开发工作几近停顿。二十世纪九十年代末以来,随着网络技术的迅速发展以及PC和服务器性能的大幅提高,各种新的网络应用不断涌现,同时也伴随着出现很多新的问题,如,安全性问题、可用性问题、提高服务器和PC机的资源利用率问题等。为了解决这些问题,虚拟化技术再次被使用,虚拟机及虚拟化技术又成为当今计算机界一个重要的研究热点。\n[0004] 计算机虚拟化技术主要是通过软件手段对计算机中的重要的接口进行模拟和抽象。实现此类功能的软件称为虚拟化软件。根据虚拟化软件所处的位置以及它所虚拟的接口的不同,虚拟化技术又分为系统级虚拟化技术和进程级虚拟化技术。进程级虚拟化技术中的虚拟化软件称为运行时(Runtime),以虚拟应用二进制接口(ABI,Application Binary Interface)为目标,一般位于操作系统之上。系统级虚拟化技术中的虚拟化软件称为虚拟机监视器(VMM,Virtual MachineMonitor),以虚拟指令集系统架构(ISA,Instruction System Architecture)为目标,一般位于操作系统之下,硬件之上。当今,虚拟化技术研究的重点是基于ISA虚拟化构建虚拟机监视器VMM,也就是以系统级虚拟化研究为重点。\n[0005] 系统级虚拟化的核心是构建虚拟机监视器,然后在其上创建虚拟机,将本来直接运行于实际硬件平台的操作系统放在虚拟机中运行,这样的操作系统称为客户操作系统(Guest OS),其中原本可直接运行的某些操作通过虚拟层来运行。以VMware虚拟x86指令为例,将其分为:(1)非敏感(non-sensitive)且是非特权(non-priviledged)的指令直接在物理处理机上运行。(2)敏感(sensitive)且是特权(priviledged)的指令陷入(trap)。\n(3)敏感(sensitive)但却是非特权(non-priviledged)的指令(在x86中有17条这样的指令)由VMM监测。\n[0006] ISA虚拟化的关键是识别和处理指令集中的非特权的敏感指令。按照对这些非特权敏感指令处理方式的不同,可以将虚拟化技术分为全虚拟化技术、部分虚拟化技术、预虚拟化技术和硬件虚拟化技术。全虚拟化是完全模拟客户软件运行所需要的硬件环境,客户操作系统和应用软件可以不经修改地运行在虚拟环境中;部分虚拟化是为客户软件模拟一个和物理环境不完全相同的虚拟硬件环境,需要修改客户操作系统,使之与VMM相互协作,共同完成执行客户软件的任务;预虚拟化是通过汇编器的支持对客户操作系统中的敏感指令进行静态半自动化地替换;硬件虚拟化技术是通过对ISA进行扩展,在处理器级对ISA虚拟化提供支持,从而使VMM的设计和实现大为简化,虚拟化的性能大为提高。具体介绍如下:\n[0007] 全虚拟化(Full-Virtualization)方法:该方法提供了对物理硬件的完整模拟,采用软件模拟技术处理敏感指令,在虚拟层中完整地构造一个和物理硬件相当的环境,Guest操作系统可以不加任何修改地运行于虚拟环境中。该方法的优点是很明显的,即Guest操作系统可以不加任何修改地在虚拟机上直接运行,同时也具有很好的灵活性和扩展性。然而这种技术的缺陷也很明显,最大的问题就是每条特权指令的执行都要引起用户模式与特权模式的切换,导致虚拟机的运行效率很低。典型的服务器虚拟化系统VMware ESX Server和IBM system/370都采用了全虚拟化方法。\n[0008] 部分虚拟化(Para-Virtualization)方法:该方法通过修改Guest源代码中涉及到的敏感指令,用超级调用(hypercall)来代替特权指令,让尽可能多的指令直接运行在物理处理器上。典型的服务器虚拟化系统Xen成功地使用了部分虚拟化方法。Xen通过用超级调用来“包装”多条特权指令的执行,Guest操作系统通过超级调用让VMM执行特权指令,这样就可以减少模式切换,提高执行效率。这个方法的效率可达到非虚拟化的常规执行效率的90%以上,但是,为之付出的代价也很大,需对Guest操作系统代码进行相当大范围的修改,移植成本较高,而且随着Guest操作系统的升级,其维护成本也很高。此外,将新处理器特性集成到VMM API的代价也比完全虚拟化方法要大得多。\n[0009] 预虚拟化(Pre-Virtualization)方法:德国Karlsruhe大学、澳大利亚新南威尔士大学和IBM共同提出了预虚拟化方法。这是一种提供工具支持的半自动Guest系统构造方法,利用汇编器的支持,对Guest系统的代码进行扫描,将其中的部分特权指令进行静态替换,对无法静态处理的指令采用profile方法动态地寻找并手工替换。这个方法的指导思想是采用编译工具支持,尽可能地增加可以直接执行的指令,减少需要模拟的指令。采用这个方法基于微内核操作系统L4或者开源Linux构造虚拟机,可以运行经过静态翻译和人工修改的Linux Guest OS,其运行效率也可达到非虚拟化的常规执行效率的90%以上。该方法中Guest代码需要人工干预的汇编级半自动扫描和替换修改,也就是说依然需要获得源代码,至少是汇编代码。\n[0010] 硬件虚拟化方法:随着虚拟化技术研究的蓬勃兴起和虚拟机应用快速普及,为了占领此技术领域的优势地位,两大处理器厂商Intel和AMD针对IA-32体系架构的处理器进行了扩展,从硬件上支持虚拟化技术。Intel针对IA-32架构的硬件虚拟化技术称为VT-x(Virtual Technology for x86),AMD针对IA-32架构的硬件虚拟化技术称为SVC(Safe Virtual Machine)。\n[0011] 以Intel的VT-x为例,它对IA32体系结构进行了如下扩展:一是增加了一种新的处理器工作模式,称为VMX(Virtual Machine Extensions)模式,用于运行虚拟机系统。\n其中又分为两个子操作模式,即VMX根(root)操作模式和VMX非根(not root)操作模式,VMX根操作模式用于运行VMM,VMX非根操作模式用于运行虚拟机VM,这两种模式都能够支持四个特权级(ring0-ring3)。二是定义了两种模式切换。由根模式进入非根模式的切换,称为VM entry;由非根模式进入根模式的切换,称为VM exit。三是增加一个控制结构VMCS(VirtualMachine Control Structure),用于保存根模式和非根模式的上下文、控制虚拟机运行的相关信息以及控制VM entry和VM exit过程的相关信息。四是增加10条用于控制虚拟机的新指令。\n[0012] 通过配置VMCS可以实现所需的虚拟化策略,使得客户软件在执行敏感指令或发生异常时能够切换到VMM,由VMM根据退出原因相应地做出处理。\n[0013] 在VT-x技术支持下,可以简化VMM的设计,可以在不使用二进制动态翻译技术的情况下,实现全虚拟化,即客户操作系统和应用软件可以不经修改地运行于虚拟机中。\n[0014] 虚拟机监视器系统\n[0015] 如前所述,当前虚拟化研究的重点是系统级虚拟化技术。系统级虚拟化技术就是通过虚拟机监视器VMM对整个系统资源特别是ISA进行虚拟化,构建一个和实际硬件相当的虚拟运行环境,在VMM之上创建并运行虚拟机。\n[0016] 虚拟化技术可以通过两个方向来抽象物理资源:一个方向是“分”,即把一个物理的计算机虚拟成若干个独立的逻辑计算机;另一个方向是“合”,就是把若干个分散的物理计算机虚拟为一个大的逻辑计算机。\n[0017] 当前虚拟化技术研究主要集中于服务器虚拟化(Server Virtualization)。服务器虚拟化主要是解决服务器系统的整体效能及资源利用率问题。其主要目的是将多项服务功能整合到同一台硬件服务器平台上,并且能够实现服务之间的隔离,同时能够实现服务在不同硬件平台之间的迁移。其主要技术手段是在服务器硬件之上部署虚拟机监视器对服务器资源进行抽象,在VMM之上创建多个虚拟机,每个虚拟机中运行一项或几项服务。VMM能够保证各虚拟机在资源以及性能上都是隔离的,并且VMM能够实现对虚拟机运行环境的打包封装,因而能够支持虚拟机在硬件平台之间随需迁移。\n[0018] 由此可见,当前服务器虚拟化的关键是构建分布式虚拟机监视器VMM。目前,应用于单台服务器虚拟化的虚拟机监视器的主要代表是VMware ESX Server和Xen。ESX Server是VMware公司研制的面向x86体系架构的虚拟机监视器,采用动态二进制翻译技术和直接执行相结合的方法实现对x86指令集的完全虚拟化。即对非特权且非敏感的指令让其直接在硬件平台上执行;对于特权指令通过陷入的方式捕获并由VMM代理执行;通过动态地翻译二进制代码的方式发现非特权的敏感指令,并将其替换成事先设计好的模拟子程序。这种方法的优点是可以通过软件实现对x86 ISA的完全虚拟化,无须对客户操作系统进行任何修改,因而应用面较广;该系统的缺点是需要对客户的所有代码进行动态翻译并找出需要替换的敏感指令,因而虚拟化开销很大,和非虚拟化的原生系统相比,系统性能下降显著。Xen是剑桥大学开发的一个开放源代码的面向x86体系架构的虚拟机监视器,早期版本只能实现部分虚拟化策略,目前版本既能够实现部分虚拟化策略也能够实现硬件虚拟化策略。在部分虚拟化策略中,Xen通过超级调用封装非特权的敏感指令,客户系统通过超级调用请求VMM代理其执行特权操作,这样就避免了虚拟机与VMM之间频繁地进行上下文切换,大幅度降低了虚拟化带来的开销,采用这种技术修改过的Linux OS的效率能够达到非虚拟化情况下的90%以上。但是这种方法的缺点是对操作系统进行较大范围的修改,移植难度很大,应用受到局限。Xen支持硬件虚拟化策略的虚拟机称为硬件虚拟机(HVM,HardwareVirtual Machine),在利用Xen原有基础设施(事件通道,中断处理等)的基础上,利用VT-x或SVM技术实现对指令集系统的虚拟化,利用Qemu(一种x86系统仿真器)中的设备模拟模块实现对I/O设备的模拟,从而在Xen之上能够支持HVM的运行。运行在HVM中的客户操作系统无须进行任何修改,因而具有较好的应用前景。\n[0019] VMware ESX Server和Xen都只能实现对单台服务器结点的虚拟化,只能用于整合多个应用于一台硬件平台之上,以便提高服务器的利用率。但是,在实践中,有些应用对硬件能力的需求超出了单一硬件平台的限度,比如天气预报、石油勘探这类的应用既需要很高的计算能力又需要海量的存储容量,这些需求都是单台计算机所不能满足的。为此,就需要将多台机器整合起来使用。机群就是这类应用的典型代表。但是现有的机群系统不能够提供透明的完全的单一系统映像(SSI,Single System Image),编程复杂,管理难度很大,可用性和易用性受到限制,因而,应用范围也受到局限。如果通过系统级虚拟化技术将多台机器的资源抽象成一台具有单一系统映像的虚拟机,供上层用户使用,使用户感觉就像在使用单台机器一样,只不过这台机器具有超强的计算能力和海量的存储容量,则可以满足前述的天气预报等类型的应用需求。目前,研究人员在这方面进行了尝试性的研究,但尚处于起步阶段。典型的代表是Virtual multiprocessor和vNUMA。\n[0020] Virtual multiprocessor是东京大学实现的VMM,为IA-32(x86)机群提供单一系统映像。它在8台PC机组成的机群上实现共享内存的8路多处理器虚拟机。该系统在主机OS(Host OS)支持下实现VMM,VMM运行在用户态;采用部分虚拟化技术,修改客户OS;用软件分布式共享内存(DSM,Distributed SharedMemory)实现内存共享;通过进程模拟虚拟处理器;VMM与I/O服务器协作实现I/O设备虚拟化。该系统的优点是:能够为客户OS和应用软件提供完全的SSI特征;对客户OS和应用软件具有完全的透明性。该系统的不足是:VMM实现在应用层,性能低,灵活性弱;采用部分虚拟化技术,需要修改客户OS代码,实现难度大,应用面窄;只能利用一个结点的I/O资源;不支持SMP结点,因而不能实现SMP机群SSI。\n[0021] vNUMA是新南威尔士大学研制的VMM,为IA64机群提供SSI。它在2台单处理器工作站组成的机群上实现一个NUMA虚拟机。vNUMA直接在硬件之上实现VMM,无须OS支持;\n采用预虚拟化技术,即利用汇编器扫描Guest代码,静态地替换特权指令;使客户OS运行于ring1特权级,以保证VMM的特权地位;通过软件DSM实现内存共享;结点有主、从之分,系统从主结点引导。该系统的优点是:能够为客户OS和应用软件提供完全的SSI特征;对客户OS和应用软件具有完全的透明性;直接在硬件之上实现VMM,性能较高。该系统的缺点是:采用预虚拟化技术,需要修改客户OS代码,实现难度大,应用受限;降低客户OS特权级,易产生特权级混淆;不支持SMP结点,不能实现SMP机群SSI。\n[0022] 共享虚拟内存(Shared Virtual Memory)\n[0023] 李凯在他的博士论文中首次提出了软件分布式共享存储DSM(DistributedShared Memory)的概念,并阐述了实现这一概念的原型系统IVY。软件分布式共享存储技术是指通过软件技术将物理上分布于多个结点机上的内存资源抽象、整合成一个逻辑上统一的内存空间,各结点可共享这个内存空间。\n[0024] 共享虚拟内存思想广泛应用于系统级的软件分布式共享存储DSM算法中。其主要机制为:将虚拟内存的概念扩展为节点间共享的虚拟地址,各节点不但对本地内存进行分页,也对远程内存进行分页。当页面映射为本地时,直接命中页表,当页面映射为远程页面时,会产生缺页异常,引发软件DSM算法从远程获取该页面并建立本地映射。\n[0025] 影子页表(Shadow Page table)技术\n[0026] 影子页表技术是一种性能较高的软件实现内存虚拟化技术。其主要机制为:为客户操作系统提供一个虚拟化的物理地址空间,客户操作系统使用客户页表对虚拟的客户物理地址进行分页;客户页表只是为虚拟机提供了一个虚拟化的地址变换过程,并不真正用于硬件寻址;VMM记录客户物理页面到机器页面的映射(Physical To Machine,P2M),并针对每一个客户页表维护一个与其对应的影子页表,该影子页表保存的是从线性地址到机器地址的映射;硬件使用影子页表进行寻址,当产生缺页异常时VMM查询客户页表与P2M表得到相应的映射项并装入影子页表。\n(三)发明内容:\n[0027] 1、目的\n[0028] 本发明提供一种分布式虚拟机监视器系统的构建方法,它克服现有技术的不足,能更好地满足各类应用对计算机系统能力的弹性需求。具体来说,就是采用最先进的虚拟化技术在硬件之上、操作系统之下构建分布式虚拟机监视器系统DVMM,通过DVMM将多台计算机的资源整合、虚拟化为虚拟资源集中并统一管理。根据应用需求,既可以将多台机器的资源整合成具有单一系统映像的虚拟机供用户使用,以满足超级应用的资源需求;也可以在一台机器上创建多个虚拟机,从而将多个小规模的应用整合到一台机器上,以提高资源利用率。无论是将多台机器当作一台虚拟机使用还是将一台机器当作多台虚拟机使用,对用户都是透明的,用户感觉自己是在独占地使用机器。\n[0029] 2、技术方案\n[0030] 2.1 方法\n[0031] 1、总体思路:在多个物理结点上部署分布式虚拟机监视器系统DVMM(Distributed Virtual Machine Monitor),实现对整个机群资源的感知、整合和统一管理。根据业务需要对这些资源进行灵活使用,既可以基于多个结点资源或整个机群资源创建一个虚拟机,以获得最高的处理性能;又可以基于一个结点的资源创建多个虚拟机,以提高资源的利用率。\n也就是说根据业务需要创建虚拟机,虚拟机所占用的资源既可以局限于结点以内,也可以跨越结点,甚至包括整个机群系统的资源。\n[0032] 2、构建DVMM:基于Intel面向x86架构的硬件虚拟化技术VT-x构建分布式虚拟机监视器系统DVMM。DVMM由分布于各个机器结点上的虚拟机监视器VMM(Virtual Machine Monitor)组成,各VMM的功能和结构完全对称。各VMM通过底层通信机制相互协作。DVMM的功能包括:感知机群的资源,整合整个机群的资源,将整个机群的物理资源虚拟化成虚拟资源集,通过控制界面将虚拟资源集呈现给管理员,根据控制指令划分虚拟资源,创建虚拟机,启动虚拟机中的客户操作系统使其正常运行,监控虚拟机的运行,接管特权操作,实现虚拟资源到物理资源的映射,操纵物理资源,根据控制指令撤消虚拟机或在结点之间迁移虚拟机。\n[0033] 3、探测物理资源:扩展和模拟基本输入输出系统BIOS(Basic Input/OutputSystem)成为扩展的基本输入输出系统eBIOS(Extended BasicInput/Output System)。eBIOS实现如下功能:探测本结点拥有的物理资源,通过与其他结点的eBIOS通信收集整个机群的资源信息,将整个机群的资源信息分类整合,生成全局物理资源信息。\n[0034] 4、资源虚拟化:基于eBIOS探测的物理资源信息,VMM保留部分资源以备自用,对余下资源进行虚拟化,生成全局虚拟资源集合。资源虚拟化包括处理器资源虚拟化,内存资源虚拟化、输入/输出I/O(Input/Output)资源虚拟化和中断机制虚拟化,下面分别介绍各自虚拟化的方法。\n[0035] 4.1、处理器资源虚拟化:处理器虚拟化包括处理器的组织和指令集虚拟化。关键是实现指令集系统ISA(Instruction System Architecture)虚拟化。具体方法是:\n[0036] 1)、虚拟处理器的组织。将整个机群范围内的处理器资源进行统一编号、统一管理。通常,在支持对称多处理器SMP(Symmetric MultipleProcessors)的操作系统OS(Operating System)中,每个处理器拥有两个id,一个是logicalid,是个逻辑概念,由OS指定;另一个是apicid,是个物理概念,代表硬件指定的处理器id。在DVMM中,为每个虚拟处理器指定三个id。第一个是vcpu_id,类似于logicalid,用于在VMM中管理虚拟处理器。第二个是vlapic_id,类似于apicid,用于向guest OS提供虚拟的apicid。第三个是vcpu_id_global,代表当前虚拟处理器在全局环境下的逻辑id,从guest OS的角度看,vcpu_id_global就是其所拥有的处理器在全局层面的逻辑id。vcpu_id的作用范围限于结点内,从0计数,连续分配,结点内的每个虚拟处理器拥有一个vcpu_id。8位的vlapic_id域分为两个部分,低三位标识该vcpu在本结点内的序号,在数值上等于其vcpu_id;高五位标识该虚拟处理器所在的服务器号。vcpu_id_global是虚拟处理器在机群范围内的编号,其计算公式为:vcpu_id_global=vcpu_id_ba se+vcpu_id\n[0037] 其中,vcpu_id_base指示当前结点中vcpu_id_global的起始计数,它等于node_id(结点号)小于当前结点id的所有结点上的虚拟处理器数量之和。\n[0038] 2)、指令集虚拟化:基于VT-x实现指令集虚拟化。为每个虚拟CPU创建一个虚拟机控制结构VMCS(Virtual Machine Control Structure),用于保存该虚拟处理器在根模式和非根模式下的上下文环境,关于VMentry和VM exit的状态信息,设定的敏感指令集和敏感行为集,发生VM exit的原因,以及一些控制信息。当客户操作系统执行到敏感指令或者当敏感行为发生的时候,发生VM exit,控制权转移到虚拟机监视器,这时首先查询产生VM exit的原因,然后对指令或行为进行相应的模拟操作。在多物理结点的背景下,有一些敏感指令或者行为(例如发送跨处理器中断)会引发跨物理结点的处理器操作,这时源结点向目标结点发送处理方式及指令或行为信息,目标结点做出相应处理,并将处理结果返回源结点。源结点在完成模拟指令或行为后,如有必要,会通过VM entry将处理结果返回给客户操作系统。底层DVMM所做的处理对客户操作系统是透明的,当结果正常返回给客户操作系统后,客户操作系统认为相应的指令或行为得到了正确处理。\n[0039] 4.2、分布式内存资源虚拟化:结合共享虚拟内存与影子页表技术实现分布式内存虚拟化。通过共享虚拟内存技术将分布于多个物理结点上的内存资源整合成一个虚拟的统一内存空间;通过影子页表技术实现对这个共享的虚拟内存空间的地址翻译。具体说来,就是将影子页表中的客户物理地址概念扩展为节点之间共享的物理地址,并利用软件DSM算法维护共享客户物理地址到机器地址的映射。通过部署在各节点上的VMM之间协作,为客户操作系统提供一个共享的物理地址空间。客户操作系统使用自己的页表维护线性地址空间到该共享的物理地址空间的映射。客户物理地址用于在共享的物理地址空间中寻址,并不用于真正的硬件寻址;VMM维护硬件寻址使用的页表—影子页表。影子页表中只保存本地页面映射项,远程页面访问会引发缺页异常。VMM捕获该异常,并判断引发异常的原因。\n如果该异常是由远程页面访问引发,VMM会启动软件DSM算法从远程获取该页面并保存在本地,接着在影子页表中建立相应的映射项,随后重新执行该指令完成寻址。这样,利用DSM算法实现了分布式影子页表之间的协作,为客户操作系统提供一个共享的存储器视图,使客户操作系统运行在结点间共享的客户物理地址空间中。\n[0040] 4.3、分布式I/O资源虚拟化:采用直接访问和指令传输相结合的方法实现分布式I/O资源的虚拟化。在DVMM启动期间,通过eBIOS模块探测和收集整个机群所拥有的I/O资源信息;对这些信息进行归并整合。构建虚拟I/O设备与物理结点、物理I/O设备之间的映射表,用于维护虚拟设备到物理设备的映射以及判别I/O操作是否在本结点执行。通过配置虚拟机控制结构(VMCS)使所有的端口I/O操作都会引起VM exit;通过与内存虚拟化模块配合,识别所有的内存映射I/O操作。当客户操作系统执行端口I/O操作时,会触发VM exit,进入VMM,VMM查询I/O设备影射表,确定物理设备所在结点,如果在本结点,则执行I/O指令,将结果填写到VMCS中,然后执行VM entry操作返回客户OS;如果设备不在本结点,则将I/O指令传递到目标结点,由目标结点执行I/O指令,将结果返回请求结点,请求结点相应地更新客户寄存器内容,然后执行VM entry返回客户系统。当客户系统执行内存映射I/O(MMIO,Memory MapI/O)时,会引起缺页故障,进入VMM,在内存虚拟化模块的配合下(通过对I/O内存区域添加特殊标记)可以发现本次操作是内存映射I/O操作,调用I/O虚拟化模块进行处理,该模块查阅设备映射表确定设备所在结点,若在本结点,则执行I/O指令,然后返回客户系统;如果设备在远程结点,则将指令传递到目标结点,由目标结点执行I/O指令,然后返回客户系统。对于DMA操作,由于其控制指令是端口I/O操作,所以会引起VM exit进入VMM,随后的处理过程类似于MMIO操作。\n[0041] 4.4、中断系统虚拟化。中断系统主要包括底层DVMM的中断处理系统和DVMM与上层客户操作系统的中断接口。对于DVMM的中断处理系统,借鉴Linux操作系统中的中断处理框架,计算并统计各个必要设备的IRQ以及中断向量,支持I/O APIC,将中断向量写入到I/O APIC的中断路由转发表中。同时,修改各个中断的处理过程,对于每个到来的中断,判断其是应该由DVMM处理,还是由客户操作系统处理。如果客户操作系统需要处理该中断,则通过VM entry进入到客户操作系统时,需要将该中断进行中断注入。DVMM与客户操作系统的中断接口主要是由中断引发的VM exit和VM entry时的中断注入。其中的关键是要将同一个设备在DVMM中的IRQ和中断向量与在客户操作系统中的IRQ和中断向量对应起来,当需要客户操作系统处理的中断到来时,DVMM查询该中断在客户操作系统中的中断向量,然后将该中断向量进行注入。中断系统还包括对I/O APIC和Local APIC的虚拟,这是通过为客户操作系统创建一块虚拟的APIC寄存器域,捕获客户操作系统读写I/O APIC和Local APIC寄存器的操作并对其模拟来实现的。\n[0042] 5、资源的呈现:通过控制界面显示系统当前可用的各类虚拟资源,管理员据此定制虚拟机的系统配置信息,主要是资源需求信息。\n[0043] 6、资源的管理和使用:通过创建虚拟机的方式来分配和使用资源。管理员通过控制接口向DVMM下达创建虚拟机的命令,并提供虚拟机的资源需求信息。DVMM在接到创建虚拟机的命令后,审核各类资源是否满足要求,若不满足要求,则报错。如果系统资源能够满足虚拟机的创建要求,DVMM就从可用系统虚拟资源集中分离出所需要的各类资源。为虚拟机构建虚拟BIOS,向客户操作系统呈现所获得的虚拟资源。\n[0044] 对于处理器资源和内存资源是采用独占方式分配的,也就是在同一时间内只能够分配给一个虚拟机使用。对于I/O资源的分配和使用采用两种策略。一种是独占使用策略:\n主要针对I/O敏感型应用,这种类型的虚拟机对I/O效率的要求较高。可以将该类型的虚拟机配置为独占某些高速外部设备,并结合VT-d(Virtual Technology for device)技术使虚拟机和外部高速设备可以直接进行DMA。另一种是共享使用策略,也就是多个虚拟机可以共享并分时使用同一台或同一类I/O设备。\n[0045] 7、虚拟机的加载和运行:首先根据分配给该虚拟机的资源集合,为虚拟机准备所需要的虚拟处理器、虚拟内存、虚拟I/O设备等资源,其次为虚拟机构建虚拟BIOS信息,以便向客户操作系统呈现其可管理和使用的虚拟资源;再次为每个虚拟处理器构建一个VMCS,用于管理该虚拟处理器的相关控制信息,同时指定虚拟的主引导处理器;最后将操作系统的入口地址存入主引导处理器的VMCS中,启动主引导处理器开始加载客户操作系统运行。\n[0046] 8、虚拟机与DVMM交互:基于所分配的虚拟资源,DVMM启动虚拟机运行。虚拟机基于所获得的虚拟资源独立地进行资源的管理和分配,调度和运行进程。虚拟机通过VM exit和VM entry和VMM进行交互。当虚拟机执行敏感操作时或有外部中断等特定事件发生时,虚拟处理器会发生VMexit,控制权转到DVMM,DVMM根据引发VM exit的原因,进行针对性地处理,然后通过VM entry返回虚拟机。\n[0047] 9、资源的动态探测:DVMM通过底层的通信机制和eBIOS实时或固定间隔地探测机群中结点的变化情况,修正全局资源信息并及时反映到管理界面,以便管理员能够及时发现机群结点的变化。比如,某结点因故障离线后,DVMM能够及时发现这一变化并反映给管理员,以便管理员对系统资源分配策略进行调整。\n[0048] 2.2、结构\n[0049] 系统的逻辑视图如图1所示。机群的各个结点之间通过高速互联网络连接,在每个结点的硬件之上部署虚拟机监视器,各结点上的虚拟机监视器的结构和功能完全对称,它们彼此之间通过底层的通信机制相互通信协作,共同组成分布式虚拟机监视器系统DVMM,DVMM对整个机群的资源进行整合、虚拟化后,集中管理和使用。根据需要,可以在DVMM之上构建一个或多个虚拟机,每个虚拟机所占用的系统资源可以局限于单个物理结点之内,也可以跨越物理结点,甚至包括整个机群的资源。在每个虚拟机之内透明地运行各自的客户操作系统和应用软件。各个虚拟机之间相互隔离。\n[0050] DVMM的结构如图2所示。DVMM由分布于各个结点上的VMM共同组成,各个VMM的结构和功能完全对称,但在应用中需要将其中的某个VMM配置成控制结点,控制节点承担整个系统的控制台的功能,和其他节点的区别是能够监控整个系统的资源使用情况,能够创建和撤销虚拟机。\n[0051] DVMM中的各个VMM采用分层次、模块化的结构。如图所示,VMM结构上可以分成三个层次:自下往上,最底层是基础设施,第二层是资源虚拟化层,第三层是虚拟机管理层。\n基础设施层中包括VMM启动、中断处理、底层通信、eBIOS、VMM资源管理等模块。资源虚拟化层中包括处理器虚拟化、内存虚拟化、I/O虚拟化等模块。虚拟机管理层中包括控制台接口、VM创建与撤销、VM迁移等模块。各模块的功能介绍如下:\n[0052] 基础设施层是为VMM运行创建底层支撑环境,其包含的各个模块的功能是:VMM启动模块的功能是负责本结点的初始化,加载本结点的VMM映像并启动运行本结点的VMM。中断处理模块的功能是负责接管和处理各类中断信号,分析该中断应该由VMM处理还是应该由虚拟机处理,如果应该由VMM处理,则调用VMM的中断处理例程,如果应该由虚拟机处理,则查询中断向量映射表,确定该中断在虚拟机中的中断向量,通过修改目标虚拟处理器的VMCS结构向虚拟机注入该中断。底层通信模块的功能是在没有操作系统支持的情况下实现各个VMM之间可靠、高效、有序的通信,主要包括通信协议处理软件和网络接口驱动软件。\neBIOS模块是对BIOS扩展而得,其功能是:首先通过本结点的BIOS操作探测本结点拥有的各类物理资源,然后通过与各个结点的eBIOS模块通信,收集整个机群的物理资源信息,并分类整合,生成全局资源信息表。VMM资源管理模块的功能是管理VMM自用的内存等资源的分配和回收。\n[0053] 资源虚拟化层的功能是在eBIOS所收集的物理资源的基础上,对各类资源进行虚拟化,生成对应的虚拟资源,以供虚拟机使用。包括处理器虚拟化、内存虚拟化、I/O虚拟化等模块。处理器虚拟化模块中又可以分为指令集虚拟化、中断虚拟化和虚拟处理器管理等子模块。指令集虚拟化子模块的功能是通过VT-x技术实现对x86处理器的ISA的完全虚拟化。中断虚拟化子模块的功能是模拟I/OAPIC和Local APIC的功能,以及维护VMM与客户操作系统之间的中断向量的对应关系和向客户操作系统注入虚拟中断。虚拟处理器管理子模块的功能是在全局范围内为每个虚拟处理器分配id,并维护各个虚拟处理器的逻辑id到物理id和物理结点号之间的对应关系,便于判断虚拟处理器是否在本结点内。内存虚拟化模块的主要功能是实现软件分布式共享内存算法和实现内存管理单元MMU(Memory Manage Unit)虚拟化。包括虚拟MMU子模块、影子页表子模块和DSM子模块。虚拟MMU子模块为虚拟机提供一个虚拟化的MMU,客户操作系统操纵的实际上是该虚拟的MMU。该模块是CPU虚拟化模块与内存虚拟化模块的接口,主要负责为虚拟机提供虚拟的MMU功能如虚拟的页表基址寄存器,以及负责模拟客户操作系统MMU相关操作指令(如刷新TLB,更改页表基址)。影子页表子模块为虚拟处理器维护影子页表,供虚拟处理器运行的物理处理器寻址。影子页表中存放的映射是从线性地址直接到节点的机器地址的映射。对于跨节点运行的处理器,如果该页面位于远程,则相应的映射项会被标记为不存在从而引发DSM算法。\nDSM子模块通过在VMM中实现软件分布式共享存储算法为跨节点运行的VM提供一个共享的存储器视图。I/O虚拟化模块主要功能是为虚拟机提供高效率的I/O访问,包括核心设备模拟、高速设备穿越、设备共享与操作和远程设备访问等子模块。核心设备模拟子模块通过软件为虚拟机模拟Local APIC,I/O APIC,RTC等核心设备。高速设备穿越子模块的功能是可以将部分高速外部设备配置给对I/O性能有很高要求的虚拟机独占使用,并结合Intel VT-d技术实现外部设备利用DMA直接访问虚拟机地址空间,提高I/O效率。设备共享与操作子模块的功能是实现多个虚拟机对I/O设备的共享访问以及判断本次I/O操作是否在本结点执行,如果是在本结点执行,则操纵物理设备完成访问,如果不是在本结点执行,则调用远程设备访问子模块处理。远程设备访问子模块负责向目标节点发出远程处理请求,同时处理远程节点到达的I/O请求。\n[0054] 虚拟机管理层的功能是管理虚拟资源集,创建、撤消和迁移虚拟机。包括控制台接口、VM创建与撤销、VM迁移等模块。如果本结点配置成管理节点,则本结点上运行VM控制台程序。控制台接口子模块的功能是与VM控制台通信,接收从VM管理界面或者非本地节点传递来的VM管理指令,通过调用其它虚拟化模块完成这些指令对应的策略。VM创建与撤销子模块根据管理员的指令创建虚拟机或者撤销虚拟机。当管理员通过VM管理界面下达VM创建指令时,VM创建与撤销子模块首先查询虚拟资源集,判断现有资源能否满足虚拟机的要求,如果不能满足要求,则向控制台程序报错,如果可以满足虚拟机要求则首先为虚拟机分配所需要的虚拟资源,并相应地修改系统可用的虚拟资源集合,然后利用CPU虚拟化模块创建VM所需的虚拟CPU,通过内存虚拟化模块准备VM硬件寻址所需要的影子页表等数据结构,根据VM的配置调用I/O虚拟化模块为客户操作系统准备虚拟BIOS(vBIOS,Virtual BIOS),最后启动并运行相应的VM。如果接到撤消虚拟机的指令,则该模块首先通知虚拟机停机,然后回收虚拟机占用的虚拟资源,并修改系统当前可用的虚拟资源集合,最后撤消该虚拟机相关的管理信息。VM迁移子模块与其它模块配合完成VM在节点间的迁移。VMM从VM管理界面接收到迁移指令后,通过VM迁移子模块进行VM迁移的准备工作。首先VM迁移子模块会向迁移目的节点发出VM迁移请求。目的节点的VM迁移子模块在接受请求后会通过原节点和目的节点内存虚拟化DSM子模块之间合作,将运行在原节点上的VM扩展为跨越原节点和目标节点的临时VM。在这完成后,VM迁移子模块会通过调用CPU虚拟化模块将原节点的每一个虚拟CPU元数据迁移到目的节点上并重新启动。在目的节点重新启动虚拟CPU后,其访问的页面会逐渐利用DSM算法从原节点迁移至目的节点,最终完成整个VM的迁移。通过这种方式可以极大地减少VM迁移产生的停机时间(downtime),实现无缝迁移。\n[0055] 当节点被配置为管理节点时,在VM控制台中运行整个系统的管理程序,VM管理界面。系统管理员通过VM管理界面可以了解整个系统中的当前可用虚拟资源,对系统中正在运行的各个VM进行监控和配置,下达虚拟机的创建、撤消和迁移指令。管理员下达的命令通过VMM中的控制台接口进行解析并与VMM其它模块配合执行。\n[0056] 2.3、工作流程\n[0057] 整个虚拟机监视器系统的工作流程分为两个大的阶段,即初始化阶段和运行阶段。初始化阶段包括DVMM自身的加载、运行阶段和控制台系统的加载和启动阶段;运行阶段是指DVMM和控制台系统运行后,创建、撤消和迁移虚拟机的阶段。\n[0058] 2.3.1初始化阶段\n[0059] 开机后,DVMM启动模块开始运行,它主要完成以下工作。\n[0060] ①加载DVMM映像,然后进行单结点的初始化工作,主要包括创建内存分配表、中断向量表(IDT)、全局描述符表(GDT);\n[0061] ②初始化网卡设备和通信子系统,加载eBIOS模块,通过各结点eBIOS模块之间的通信,感知其它结点的资源信息,将感知到的全局资源信息按照BIOS的常规格式进行分类整合,生成全局资源信息;\n[0062] ③DVMM基于全局资源表进行全局内存的初始分配,进行单结点处理器的初始化工作,加载处理器虚拟化模块、MMU虚拟化模块、DSM虚拟化模块、I/O虚拟化模块和中断虚拟化模块,完成单结点的启动和初始化;\n[0063] ④创建全局虚拟资源信息表,以及各类虚拟资源与物理资源和物理结点之间的映射表,用于管理全局虚拟资源。\n[0064] ⑤创建控制台虚拟机,启动控制台虚拟机运行系统管理程序。至此,整个机群的资源已经被整合、虚拟化后集中管理,并通过系统控制台呈现给系统管理员了,DVMM系统等待管理员的指令进行相应的操作。\n[0065] 2.3.2运行阶段\n[0066] DVMM系统完成初始化、创建控制台虚拟机并运行系统管理程序以后,等待管理员的指令进行相应的操作。如果管理员发出创建虚拟机的指令,则控制结点的VMM首先检查可用虚拟资源能否满足创建虚拟机的要求,如果不能够满足要求,则向控制台程序报错,如果能够满足要求,则为虚拟机分配资源,修改可用资源信息,并将资源分配信息和创建虚拟机的指令通知其他结点的VMM,主结点VMM为待创建的虚拟机构建虚拟BIOS(vBIOS)以便向客户操作系统呈现其可用的虚拟资源;各结点根据自己提供给虚拟机的资源情况,调用处理器虚拟化模块为虚拟处理器构建VMCS,调用内存虚拟化模块创建影子页表和DSM所用的物理地址到机器地址的映射表(P2M表);主结点VMM指定一个虚拟处理器为该虚拟机的主引导处理器,并将客户操作系统的起始执行地址存入该主引导处理器对应的VMCS之中,然后激活主引导虚拟处理器运行,以便加载客户操作系统运行;主结点VMM向控制台报告完成虚拟机创建任务。至此,虚拟机创建工作结束。\n[0067] 如果DVMM接到撤消虚拟机的指令,则控制结点上的VMM首先通知虚拟机停机,然后回收虚拟机占用的虚拟资源,并修改系统当前可用的虚拟资源集合,随后撤消该虚拟机相关的管理信息,并将虚拟机撤销及资源回收指令传递到相关结点,相关结点根据自己贡献给该虚拟机的资源情况回收相应资源。主结点VMM向控制台报告完成虚拟机撤消任务。\n至此,虚拟机撤消工作结束。\n[0068] 如果DVMM从控制台接收到迁移虚拟机的指令,控制台结点(以下称主结点)的VMM首先会向迁移目的节点的VMM发出VM迁移请求。目的节点的VMM在接受请求后会在源节点和目的节点间通过内存虚拟化DSM子模块间合作将运行在源节点上的VM扩展为跨越源节点和目标节点的临时VM。在这完成后,VM迁移模块会通过调用CPU虚拟化模块将源节点的每一个虚拟CPU元数据迁移到目的节点上并重新启动。在目的节点重新启动虚拟CPU后,其访问的页面会逐渐利用DSM算法从原节点迁移至目的节点,最终完成整个VM的迁移。\n通过这种方式可以极大地减少VM迁移产生的downtime,实现无缝迁移。当原虚拟机的虚拟处理器在目标节点上重新启动之后,DVMM向系统管理程序报告虚拟机迁移成功。\n[0069] 当虚拟机被成功创建,客户操作系统基于vBIOS信息启动以后,客户操作系统基于其所管理的资源进行进程的调度和资源分配,正常地运行作业,无需DVMM的干预,也就是说,客户软件的运行对DVMM是透明的。只有当客户执行特权指令、出现异常或发生硬件中断时,才由硬件虚拟化机制触发VM exit,进入DVMM环境,DVMM分析退出的原因,调用相应的功能模块进行处理,期间可能需要进行跨结点DVMM之间的协作才能完成服务。完成服务后,DVMM通过VM entry机制返回客户状态,期间有可能通过VMCS结构向客户操作系统注入中断。此后客户操作系统继续执行用户作业。\n[0070] 例如,当客户操作系统发生缺页异常时,就会引起VM exit进入DVMM环境,DVMM通过分析退出原因获知客户发生了缺页异常,接着会检查内部数据结构P2M表确定请求的页面是否在本结点,分别进行处理。如果请求页在本结点,则DVMM调用MMU虚拟化模块更新客户页表以及由DVMM维护的与客户页表保持一致的“影子页表”,然后返回客户环境继续执行;如果请求页面在远程结点,则MMU虚拟化模块调用DSM模块,通过通信机制向远程结点的VMM请求页面,远程结点的VMM收到页面请求后,调用MMU虚拟化模块和DSM模块,经由通信机制将请求页面发送给请求结点,请求结点收到所需页面后,更新客户页表和“影子页表”的映射项,然后返回客户环境继续执行。这样就完成了一次缺页异常的处理,也是完成了客户操作系统和DVMM之间的一次交互过程。\n[0071] 以上所述,在虚拟机运行期间,虚拟资源的管理和分配,用户进程的调度、执行由客户操作系统负责,客户操作系统和DVMM之间的唯一交互途径是通过VT-x所提供的VM exit和VM entry机制。通过客户操作系统和DVMM之间的相互协作,实现了在分布式的服务器机群之上构建虚拟平台,创建虚拟机,在虚拟机中透明地运行客户操作系统和客户应用程序的目标。\n[0072] 综上所述,本发明一种分布式虚拟机监视器系统的构建方法,其步骤如下:\n[0073] 步骤一:扩展各结点的BIOS成为eBIOS(Extended Basic Input/OutputSystem)。\neBIOS实现如下功能:探测本结点拥有的物理资源,通过与其他结点的eBIOS通信收集整个机群的资源信息,将整个机群的资源信息分类整合,生成全局物理资源信息。\n[0074] 步骤二:各结点的VMM预留自用的内存资源,对余下资源构建“资源-结点映射表”,实现每一资源到其所在结点的映射。\n[0075] 步骤三:对各类资源分别进行虚拟化,生成相应的虚拟资源池。\n[0076] 资源虚拟化包括处理器资源虚拟化,内存资源虚拟化、输入/输出I/O(Input/Output)资源虚拟化和中断机制虚拟化。\n[0077] (一)处理器资源虚拟化:处理器资源虚拟化包括处理器的组织和指令集系统ISA(Instruction System Architecture)虚拟化。\n[0078] 1、将整个机群范围内的处理器资源进行统一编号、统一管理。为每个虚拟处理器指定三个id。第一个是vcpu_id,用于在VMM中管理虚拟处理器。第二个是vlapic_id,用于向guest OS提供虚拟的apicid。第三个是vcpu_id_global,代表当前虚拟处理器在全局环境下的逻辑id。通过虚拟处理器的vcpu_id_global可以追踪到其所在的结点,以及与其对应的物理处理器。\n[0079] 2、基于VT-x实现指令集虚拟化。为每个虚拟CPU创建一个虚拟机控制结构VMCS(Virtual Machine Control Structure)。当客户操作系统执行到敏感指令或者当敏感行为发生的时候,发生VM exit,VMM查询产生VM exit的原因,然后对指令或行为进行相应的模拟操作,在完成模拟指令或行为后,通过VM entry返回客户操作系统。\n[0080] (二)内存资源虚拟化\n[0081] 结合共享虚拟内存(SVM,Shared Virtual Machine)技术与影子页表技术实现分布式内存虚拟化。通过共享虚拟内存技术将分布于多个物理结点上的内存资源整合成一个虚拟的统一内存空间;通过影子页表技术实现对这个共享的虚拟内存空间的地址到真正的物理内存空间地址的翻译。这样,通过SVM技术与影子页表技术结合,将机群分布式的物理内存整合并虚拟化成具有单一地址空间的虚拟统一内存。\n[0082] (三)I/O资源虚拟化\n[0083] 采用直接访问和指令传输相结合的方法实现分布式I/O资源的虚拟化。I/O操作分为程序控制I/O(Programmable I/O,PIO),内存映射I/O(MemoryMap I/O,MMIO)和直接内存访问(Direct Memory Access,DMA)。分别阐述如下:\n[0084] 配置VMCS使PIO操作成为敏感行为。当客户操作系统执行PIO操作时,会触发VM exit,进入VMM,VMM查询I/O设备影射表,如果设备在本结点,则执行I/O指令,将结果填写到VMCS中,然后执行VM entry操作返回客户OS;如果设备不在本结点,则将I/O指令传递到目标结点,由目标结点执行I/O指令,将结果返回请求结点,请求结点相应地更新客户寄存器内容,然后执行VM entry返回客户系统。\n[0085] 通过内存虚拟化模块,将用于MMIO的内存页面标记为不存在。当客户系统执行MMIO时,会引起缺页故障,进入VMM,在内存虚拟化模块的配合下可以发现本次操作是内存映射I/O操作,调用I/O虚拟化模块进行处理,若设备在本结点,则执行I/O指令,然后返回客户系统;如果设备在远程结点,则将指令传递到目标结点,由目标结点执行I/O指令,然后返回客户系统。\n[0086] 对于DMA操作,由于其控制指令是PIO操作,所以会引起VM exit进入VMM,随后的处理过程类似于MMIO操作。\n[0087] (四)中断虚拟化\n[0088] 以软件模拟的方式实现中断机制虚拟化。一方面,截获OS对中断控制器的操作,若目标中断控制器在本结点,则读取或修改虚拟中断控制器的内容以反映客户操作的效果;若目标中断控制器在远程结点,则将操作请求发送到目标结点,目标结点的VMM操作虚拟中断控制器。另一方面,截获硬件中断,根据中断对象所在结点,分别由本结点的VMM或远程结点的VMM修改虚拟中断控制器的内容,将硬件中断呈现给OS。\n[0089] 步骤四:构建各类虚拟资源到物理资源的映射表,实现虚拟资源到物理资源的映射,以及物理资源到物理结点的映射。\n[0090] 步骤五:创建管理虚拟机。在特定的结点上创建管理虚拟机(默认情况下是在第一个结点上创建),根据该结点所拥有的物理资源,按照一定的比例为管理虚拟机分配虚拟资源(比如默认按50%的比例分配)。管理虚拟机的创建过程如下:\n[0091] 1、为虚拟机获得的每个虚拟CPU构建VMCS,用于控制虚拟CPU的运行。\n[0092] 2、根据虚拟机所获得的虚拟内存资源,构建硬件寻址所需要的影子页表以及DSM算法所需要的P2M(Physical to Machine)表等数据结构。\n[0093] 3、构建虚拟的中断控制结构。\n[0094] 4、根据虚拟机的资源配置,构建虚拟BIOS(vBIOS,Virtual BIOS),以便向客户操作系统呈现可用的虚拟资源。\n[0095] 5、启动并运行管理虚拟机。\n[0096] 步骤六:通过系统管理程序的控制界面显示当前可用的各类虚拟资源。\n[0097] 1、VMM向管理虚拟机报告系统可用的虚拟资源信息。\n[0098] 2、管理虚拟机通过系统管理程序展现可用资源信息。\n[0099] 骤七:系统管理员根据业务需求,参照当前可用的虚拟资源信息,[0100] 通过创建、撤销和迁移虚拟机的方式,灵活地使用整个系统的资源。DVMM根据管理员发出的不同命令,分别进行如下操作:\n[0101] (一)创建虚拟机\n[0102] 当管理员下达创建虚拟机指令时,DVMM执行如下操作:\n[0103] 1、管理结点的VMM查询虚拟资源集,判断现有资源能否满足虚拟机的要求,如果不能满足要求,则向系统管理程序报错,如果满足虚拟机要求则继续执行后续步骤。\n[0104] 2、管理结点的VMM为虚拟机分配所需要的虚拟资源,并相应地修改系统可用的虚拟资源集合。\n[0105] 3、管理结点的VMM向其他结点的VMM通报创建虚拟机指令以及为该虚拟机分配的资源信息。\n[0106] 4、各结点VMM根据本结点为待创建虚拟机贡献的资源情况,相应调整可用资源信息。\n[0107] 5、各结点VMM为本结点贡献的每个虚拟CPU构建对应的VMCS。\n[0108] 6、各结点VMM根据本结点贡献的虚拟内存资源,构建影子页表和P2M(Physical to Machine)表等数据结构。\n[0109] 7、各结点VMM为本结点贡献的每个虚拟CPU构建虚拟的中断控制结构。\n[0110] 8、管理结点的VMM为虚拟机构建虚拟BIOS,以便向客户操作系统呈现可用的虚拟资源。\n[0111] 9、管理结点的VMM启动并运行虚拟机。\n[0112] (二)撤销虚拟机\n[0113] 当管理员下达撤销虚拟机指令时,DVMM执行如下操作:\n[0114] 1、管理结点的VMM通知虚拟机停机。\n[0115] 2、管理结点的VMM通知其他结点的VMM撤销虚拟机。\n[0116] 3、各结点VMM分别回收虚拟机占用的本结点虚拟资源,并修改本结点当前可用的虚拟资源集合。\n[0117] 4、管理结点的VMM修改系统当前可用资源信息,撤消该虚拟机相关的管理信息。\n[0118] (三)迁移虚拟机\n[0119] 当管理员下达迁移虚拟机指令时,DVMM执行如下操作:\n[0120] 1、管理结点的VMM向源结点和目的结点发送迁移命令。\n[0121] 2、源结点的VMM向目的结点发出虚拟机迁移请求。\n[0122] 3、目的结点的VMM接受请求后,与源结点合作,将待迁移的虚拟机扩展为跨越源结点和目的结点的临时虚拟机。\n[0123] 4、目的结点的VMM将待迁移的虚拟机的每个虚拟CPU元数据迁移到目的结点上并重新启动。在目的结点重新启动虚拟CPU后,其访问的页面会逐渐通过DSM算法从源结点迁移至目的结点,最终完成整个虚拟机的迁移。\n[0124] 步骤八:动态检测并调整系统可用资源信息。\n[0125] 管理结点的eBIOS实时或固定间隔地与其他结点的eBIOS通信,探测机群中结点的变化情况,修正全局资源信息并及时反映到管理界面,以便管理员能够及时发现机群结点的变化,对系统资源分配策略进行调整。\n[0126] 步骤九:虚拟机运行及与DVMM交互\n[0127] 1、如前所述,DVMM在创建虚拟机后启动虚拟机运行。\n[0128] 2、虚拟机基于所获得的虚拟资源独立地进行资源的管理和分配,调度和运行进程。\n[0129] 3、虚拟机通过VM exit和VM entry和VMM进行交互。当虚拟机执行敏感操作时或有外部中断等特定事件发生时,虚拟处理器会发生VMexit,控制权转到DVMM,DVMM根据引发VM exit的原因,进行针对性地处理,然后通过VM entry返回虚拟机。\n[0130] 3、优点与效果\n[0131] 随着我国信息化程度不断提高,企业等各类机构的日常业务大都运行于计算机系统之上。在应用实践中,各类应用对计算机系统能力的需求差异很大,有些应用只需要少量的计算和存储能力,如果利用专门的计算机系统为之服务,则资源利用率很低;另一些应用则需要很强的计算能力和很大的存储容量,以至于现有的最强大的单台计算机系统也无法满足要求。这样,就出现了矛盾,一方面大量的计算机系统只用于运行资源需求量小的轻量级应用,造成资源浪费,另一方面,囿于单台计算机系统的处理能力和存储能力,无法满足一些对计算机系统能力要求很高的业务的应用需求。\n[0132] 运用本发明的成果,就可以将企业的计算机系统互联起来,构成机群,通过在机群上部署分布式虚拟机监视器系统,将机群系统虚拟成一个虚拟化的计算平台,这个虚拟计算平台具有充足的资源可供利用。根据业务需求,可以在这个虚拟计算平台上创建能力各异的虚拟机系统,用于运行相应的业务应用。比如,既可以将虚拟平台的大部分资源甚至全部资源用于构建一台虚拟机,以满足超级应用的需求,又可以在单台物理机器上创建多个虚拟机,从而将多个轻量级的应用整合到一台物理机器之上,以最大限度地提高资源利用率。因此,本发明能够充分利用现有资源,满足各类应用的需求,具有广阔的应用前景,可望产生显著的经济效益。\n(四)附图说明\n[0133] 图1分布式虚拟机监视器系统的逻辑示意图\n[0134] 图2以两个结点示例的分布式虚拟机监视器模块结构示意图\n[0135] 图3分布式内存虚拟化逻辑示意图\n[0136] 图4指令集虚拟化示意图\n[0137] 图5I/O设备感知、呈现过程示意图\n[0138] 图6I/O指令执行过程示意图\n(五)具体实施方式:\n[0139] 见图1、图2、图3、图4、图5、图6所示,其具体步骤如下:\n[0140] 将两台DELL服务器通过Infiniband高速互联网络互联构成服务器机群的硬件平台,每台服务器拥有双路八核的AMD巴塞罗那处理器,4G物理内存,每个处理器都支持硬件虚拟化技术。\n[0141] 步骤一:扩展各结点的BIOS成为eBIOS(Extended Basic Input/OutputSystem)。\neBIOS实现如下功能:探测本结点拥有的物理资源,通过与其他结点的eBIOS通信收集整个机群的资源信息,将整个机群的资源信息分类整合,生成全局物理资源信息。\n[0142] 步骤二:各结点的VMM预留自用的内存资源,对余下资源构建“资源-结点映射表”,实现每一资源到其所在结点的映射。\n[0143] 步骤三:对各类资源分别进行虚拟化,生成相应的虚拟资源池。\n[0144] 资源虚拟化包括处理器资源虚拟化,内存资源虚拟化、输入/输出I/O(Input/Output)资源虚拟化和中断机制虚拟化。\n[0145] (一)处理器资源虚拟化:处理器资源虚拟化包括处理器的组织和指令集系统ISA(Instruction System Architecture)虚拟化。\n[0146] 1、将整个机群范围内的处理器资源进行统一编号、统一管理。为每个虚拟处理器指定三个id。第一个是vcpu_id,用于在VMM中管理虚拟处理器。第二个是vlapic_id,用于向guest OS提供虚拟的apicid。第三个是vcpu_id_global,代表当前虚拟处理器在全局环境下的逻辑id。通过虚拟处理器的vcpu_id_global可以追踪到其所在的结点,以及与其对应的物理处理器。\n[0147] 2、基于VT-x实现指令集虚拟化。为每个虚拟CPU创建一个虚拟机控制结构VMCS(Virtual Machine Control Structure)。当客户操作系统执行到敏感指令或者当敏感行为发生的时候,发生VM exit,VMM查询产生VM exit的原因,然后对指令或行为进行相应的模拟操作,在完成模拟指令或行为后,通过VM entry返回客户操作系统。\n[0148] (二)内存资源虚拟化\n[0149] 结合共享虚拟内存(SVM,Shared Virtual Machine)技术与影子页表技术实现分布式内存虚拟化。通过共享虚拟内存技术将分布于多个物理结点上的内存资源整合成一个虚拟的统一内存空间;通过影子页表技术实现对这个共享的虚拟内存空间的地址到真正的物理内存空间地址的翻译。这样,通过SVM技术与影子页表技术结合,将机群分布式的物理内存整合并虚拟化成具有单一地址空间的虚拟统一内存。\n[0150] (三)I/O资源虚拟化\n[0151] 采用直接访问和指令传输相结合的方法实现分布式I/O资源的虚拟化。I/O操作分为程序控制I/O(Programmable I/O,PIO),内存映射I/O(MemoryMap I/O,MMIO)和直接内存访问(Direct Memory Access,DMA)。分别阐述如下:\n[0152] 配置VMCS使PIO操作成为敏感行为。当客户操作系统执行PIO操作时,会触发VM exit,进入VMM,VMM查询I/O设备影射表,如果设备在本结点,则执行I/O指令,将结果填写到VMCS中,然后执行VM entry操作返回客户OS;如果设备不在本结点,则将I/O指令传递到目标结点,由目标结点执行I/O指令,将结果返回请求结点,请求结点相应地更新客户寄存器内容,然后执行VM entry返回客户系统。\n[0153] 通过内存虚拟化模块,将用于MMIO的内存页面标记为不存在。当客户系统执行MMIO时,会引起缺页故障,进入VMM,在内存虚拟化模块的配合下可以发现本次操作是内存映射I/O操作,调用I/O虚拟化模块进行处理,若设备在本结点,则执行I/O指令,然后返回客户系统;如果设备在远程结点,则将指令传递到目标结点,由目标结点执行I/O指令,然后返回客户系统。\n[0154] 对于DMA操作,由于其控制指令是PIO操作,所以会引起VM exit进入VMM,随后的处理过程类似于MMIO操作。\n[0155] (四)中断虚拟化\n[0156] 以软件模拟的方式实现中断机制虚拟化。一方面,截获OS对中断控制器的操作,若目标中断控制器在本结点,则读取或修改虚拟中断控制器的内容以反映客户操作的效果;若目标中断控制器在远程结点,则将操作请求发送到目标结点,目标结点的VMM操作虚拟中断控制器。另一方面,截获硬件中断,根据中断对象所在结点,分别由本结点的VMM或远程结点的VMM修改虚拟中断控制器的内容,将硬件中断呈现给OS。\n[0157] 步骤四:构建各类虚拟资源到物理资源的映射表,实现虚拟资源到物理资源的映射,以及物理资源到物理结点的映射。\n[0158] 步骤五:创建管理虚拟机。在特定的结点上创建管理虚拟机(默认情况下是在第一个结点上创建),根据该结点所拥有的物理资源,按照一定的比例为管理虚拟机分配虚拟资源(比如默认按50%的比例分配)。管理虚拟机的创建过程如下:\n[0159] 1、为虚拟机获得的每个虚拟CPU构建VMCS,用于控制虚拟CPU的运行。\n[0160] 2、根据虚拟机所获得的虚拟内存资源,构建硬件寻址所需要的影子页表以及DSM算法所需要的P2M(Physical to Machine)表等数据结构。\n[0161] 3、构建虚拟的中断控制结构。\n[0162] 4、根据虚拟机的资源配置,构建虚拟BIOS(vBIOS,Virtual BIOS),以便向客户操作系统呈现可用的虚拟资源。\n[0163] 5、启动并运行管理虚拟机。\n[0164] 步骤六:通过系统管理程序的控制界面显示当前可用的各类虚拟资源。\n[0165] 1、VMM向管理虚拟机报告系统可用的虚拟资源信息。\n[0166] 2、管理虚拟机通过系统管理程序展现可用资源信息。\n[0167] 步骤七:系统管理员根据业务需求,参照当前可用的虚拟资源信息,通过创建、撤销和迁移虚拟机的方式,灵活地使用整个系统的资源。DVMM根据管理员发出的不同命令,分别进行如下操作:\n[0168] (一)创建虚拟机\n[0169] 当管理员下达创建虚拟机指令时,DVMM执行如下操作:\n[0170] 1、管理结点的VMM查询虚拟资源集,判断现有资源能否满足虚拟机的要求,如果不能满足要求,则向系统管理程序报错,如果满足虚拟机要求则继续执行后续步骤。\n[0171] 2、管理结点的VMM为虚拟机分配所需要的虚拟资源,并相应地修改系统可用的虚拟资源集合。\n[0172] 3、管理结点的VMM向其他结点的VMM通报创建虚拟机指令以及为该虚拟机分配的资源信息。\n[0173] 4、各结点VMM根据本结点为待创建虚拟机贡献的资源情况,相应调整可用资源信息。\n[0174] 5、各结点VMM为本结点贡献的每个虚拟CPU构建对应的VMCS。\n[0175] 6、各结点VMM根据本结点贡献的虚拟内存资源,构建影子页表和P2M(Physical to Machine)表等数据结构。\n[0176] 7、各结点VMM为本结点贡献的每个虚拟CPU构建虚拟的中断控制结构。\n[0177] 8、管理结点的VMM为虚拟机构建虚拟BIOS,以便向客户操作系统呈现可用的虚拟资源。\n[0178] 9、管理结点的VMM启动并运行虚拟机。\n[0179] (二)撤销虚拟机\n[0180] 当管理员下达撤销虚拟机指令时,DVMM执行如下操作:\n[0181] 1、管理结点的VMM通知虚拟机停机。\n[0182] 2、管理结点的VMM通知其他结点的VMM撤销虚拟机。\n[0183] 3、各结点VMM分别回收虚拟机占用的本结点虚拟资源,并修改本结点当前可用的虚拟资源集合。\n[0184] 4、管理结点的VMM修改系统当前可用资源信息,撤消该虚拟机相关的管理信息。\n[0185] (三)迁移虚拟机\n[0186] 当管理员下达迁移虚拟机指令时,DVMM执行如下操作:\n[0187] 1、管理结点的VMM向源结点和目的结点发送迁移命令。\n[0188] 2、源结点的VMM向目的结点发出虚拟机迁移请求。\n[0189] 3、目的结点的VMM接受请求后,与源结点合作,将待迁移的虚拟机扩展为跨越源结点和目的结点的临时虚拟机。\n[0190] 4、目的结点的VMM将待迁移的虚拟机的每个虚拟CPU元数据迁移到目的结点上并重新启动。在目的结点重新启动虚拟CPU后,其访问的页面会逐渐通过DSM算法从源结点迁移至目的结点,最终完成整个虚拟机的迁移。\n[0191] 步骤八:动态检测并调整系统可用资源信息。\n[0192] 管理结点的eBIOS实时或固定间隔地与其他结点的eBIOS通信,探测机群中结点的变化情况,修正全局资源信息并及时反映到管理界面,以便管理员能够及时发现机群结点的变化,对系统资源分配策略进行调整。\n[0193] 步骤九:虚拟机运行及与DVMM交互。\n[0194] 1、如前所述,DVMM在创建虚拟机后启动虚拟机运行。\n[0195] 2、虚拟机基于所获得的虚拟资源独立地进行资源的管理和分配,调度和运行进程。\n[0196] 3、虚拟机通过VM exit和VM entry和VMM进行交互。当虚拟机执行敏感操作时或有外部中断等特定事件发生时,虚拟处理器会发生VMexit,控制权转到DVMM,DVMM根据引发VM exit的原因,进行针对性地处理,然后通过VM entry返回虚拟机。
法律信息
- 2019-10-18
未缴年费专利权终止
IPC(主分类): G06F 9/455
专利号: ZL 200810225087.7
申请日: 2008.10.28
授权公告日: 2011.06.15
- 2011-11-16
专利权的转移
登记生效日: 2011.09.26
专利权人由北京航空航天大学变更为华为技术有限公司
地址由100191 北京市海淀区学院路37号北京航空航天大学计算机科学与工程学院变更为518129 中国广东省深圳市龙岗区坂田华为基地总部办公楼
- 2011-06-15
- 2009-09-30
- 2009-04-01
引用专利(该专利引用了哪些专利)
序号 | 公开(公告)号 | 公开(公告)日 | 申请日 | 专利名称 | 申请人 |
1
| |
2008-09-24
|
2008-04-23
| | |
被引用专利(该专利被哪些专利引用)
序号 | 公开(公告)号 | 公开(公告)日 | 申请日 | 专利名称 | 申请人 | 1 | | 2013-01-17 | 2013-01-17 | | |
2 | | 2017-03-30 | 2017-03-30 | | |