一种基于KSM及Pass‑through相结合的虚拟机内存共享方法与流程

文档序号:11829526阅读:650来源:国知局
本发明涉及一种基于KSM及Pass-through相结合的虚拟机内存共享方法。
背景技术
::在系统虚拟化技术中,客户机(guest)的内存页由宿主机(host)的内存页所支持。例如,虚拟机管理器(VMM)可以利用IntelEPT技术,把客户机物理内存地址(GPA-guestphysicaladdress)映射到宿主机的物理内存地址(HPA-hostphysicaladdress)。同时,系统虚拟化还常用一些内存共享技术,例如KSM等。KSM(kernelsamepagemerging)技术,能够在多台虚拟机(VM)之间合并内容相同的内存页,同时设置写保护。例如,VM1中的某个内存页(guestPA1->hostPA1),与另一个位于VM2中的内存页(guestPA2->hostPA2)内容相同,则在宿主机中只须保留一个内存页(HPA_SH)用于支持映射,也就是说,可以让VM1的guestPA1和VM2的guestPA2都重新映射到同一个页面HPA_SH,并加写保护。该技术节省系统内存,尤其对于客户机中的只读内存页,例如代码页和全零页(zeropage)。当虚拟机修改内存页的内容时,KSM利用写时拷贝COW(copy-on-write)机制,取消共享映射。Pass-through是虚拟化系统中提高设备性能的一类常用技术,原理是通过IOMMU页表,把客户机内存的物理地址重映射到宿主机的内存物理地址,典型如IntelVT-d,将支持Pass-Through的虚拟机命名为PT-VM。PT-VM客户机对物理设备MMIO寄存器的访问,和对物理设备DMA(外设直接访问内存技术)的设置,都是直接方式,如图1所示。PT-VM被广泛应用在当前的虚拟化/云计算环境中,尤其是配合SR-IOV技术。SR-IOV仅需要对设备进行微小的硬件升级,就可以为多虚拟机提供高效的共享操作支持。图2是SR-IOV技术使用IOMMU的示意图。一个好的系统虚拟化解决方案既要求较高的操作性能,如通过使用Pass-Through技术;又要求节省内存,例如通过使用KSM内存共享技术。然而,目前KSM内存共享技术无法与DMA直接模式(属于Pass-through技术)同时使用,有两个原因:一是DMA直接模式下,当修改内存页的内容时不会通知虚拟机管理器(VMM);二是大多数现有平台都不支持在DMA过程中触发缺页异常(#PF)。因此,VMM没有机会得知共享内存页的变化而解除共享,进而影响其它共享该内存页面的虚拟机。因此,对于PT-VM中用到的宿主机内存页(作为客户机内存页的映射目标),必须在使用KSM机制前预先排除,避免发生对这些页面实施共享映射。现有方法中缺少相应的技术来解决这个问题。技术实现要素:本发明为了解决上述问题,提出了一种基于KSM及Pass-through相结合的虚拟机内存共享方法,本方法结合使用KSM和Pass-through技术,在虚拟机性能效率方面获得最佳的权衡,有效地解决了PT-VM中使用内存共享技术的限制问题。为了实现上述目的,本发明采用如下技术方案:一种基于KSM及Pass-through相结合的虚拟机内存共享方法,具体为:虚拟机管理器判断各客户机的操作系统是否使用IOMMU,若否,不参与KSM技术的共享映射;若是,对每个客户机内存页面进行判断,确认是否为映射页面,若是将各客户机的映射页面映射到宿主机中;若否,在保持Pass-through特性的前提下,对于所有非映射页面使用KSM技术,合并多台虚拟机之间内容相同的内存页面,同时进行写保护处理。进一步的,所述虚拟机内存共享方法,具体包括以下步骤:(1)虚拟机管理器跟踪每台客户机的操作系统,判断各客户机的操作系统是否使用IOMMU,若否,不参与KSM技术的共享映射,若是转入步骤(2);(2)虚拟机管理器读取启动IOMMU的客户机的内存页面,判断其是否为映射内存页面,若是,将各客户机的映射页面映射到宿主机中,若否进入步骤(3);(3)基于哈希算法为每台客户机的非映射内存页面数据生成一个页面标识列表,页面标识为页面内容的哈希值;(4)合并页面标识相同的内存页面,在宿主机中建立一个共享的宿主页面以更新原有的映射,并对该共享的宿主页面进行写保护。进一步的,判断客户机的操作系统是否使用IOMMU的具体方法为:通过跟踪客户虚拟机对IOMMU的操作,虚拟机管理器确定是否各个客户虚拟机启用了IOMMU,如果虚拟机使用Pass-through设备,但是客户操作系统没有启用IOMMU,虚拟机的所有页面作为DMA页面,即不参与KSM的共享映射。进一步的,基于客户机IOMMU页表的写保护机制或跟踪IOTLB刷新的机制,虚拟机管理器感知到客户机对虚拟IOMMU页表的修改,并同步修改IOMMU影子页表。判断是否为映射内存页面的具体方法为:基于IOMMU影子页表,虚拟机管理器确认是否有内存页作为DMA操作的目标页面,且所有的DMA页面都必然被客户机IOMMU页表所映射。进一步的,当客户机的IOMMU页表的表项被设置时,该设置动作触发VM-exit,虚拟机管理器获知客户机正在写入的PTE内容,如果该PTE是新建一项指向目标页面的映射转换,虚拟机管理器将该目标页面加入到DMA页的链表中。进一步的,虚拟机管理器建立一个反向映射表,维护从宿主机页帧号到客户机IOMMU中的设备空间地址的映射,以跟踪可能存在的别名映射,如果有客户机IOMMU页表的表项被删除或被更新,则目标页面不再被用于DMA页面,通过查阅反向映射表确认,将确认不再为映射页面的目标页面转移到非映射页面链表中。使用KSM技术合并相同页面的具体方法为:采用哈希算法,为每一个虚拟机产生一个页面标识列表,页面标识即页面内容的哈希值,假如两个PI相同,认为对应的页面内容相同,发现不同或相同的虚拟机中包含一组内容一致的内存页时,把它们合并成一个。进一步的,合并的具体做法为:将具有相同内存页的虚拟机的客户页帧号分别映射到一个宿主页帧号,虚拟机管理器基于一个共享的宿主页面更新原有的映射,并为这两个映射设置写保护。进一步的,当有客户机修改了某共享页面的内容,因为设定的映射写保护机制,触发VM-exit,虚拟机管理器一旦检测到该触发信号,取消共享页面的映射。所述取消共享页面的映射的具体方法为:(i)另外分配新的宿主页面HPN2;(ii)将原宿主共享页面HPN1的内容复制到新的宿主页面HPN2上;(iii)分别向原有的具有相同内存页的虚拟机的客户页帧号分别映射到原宿主共享页面HPN1和新的宿主页面HPN2,同时取消两个映射的写保护;(iv)模拟客户机现场环境,在之前触发VM-exit的断点位置恢复执行。所述虚拟机管理器对IOMMU影子页表与客户机中的IOMMU页表相对应,具体措施包括为客户机IOMMU页表设置写保护或跟踪客户机的IOTLB刷新操作,以保证客户机修改IOMMU页表时,对应修改IOMMU影子页表。进一步的,如果客户机修改了共享页面的内容,虚拟机管理器会撤销共享映射。进一步的,是否为映射内存页面会因客户机的操作而改变,具体包括以下三种情况:(a)从映射内存页面到非映射内存页面,待处理的客户页帧号之前在映射内存页面链表中,一旦检测到页面角色变化,就把该页面转移到非映射内存页面链表中,进行合并处理相同内容的页面;(b)从未进行共享的非映射内存页面转化为映射内存页面,待处理的客户页帧号之前在非映射内存页面链表中,尚未建立共享映射,直接将该客户页帧号转移到所属虚拟机的映射内存页面链表中;(c)从已经进行共享的非映射内存页面转化为映射内存页面,执行撤销共享映射过程,将原虚拟机的客户页帧号进行重映射,将原始客户页帧号转移到相应虚拟机的映射内存页面链表中。本发明的有益效果为:(1)目前没有其它技术方案,能够支持在Pass-Through虚拟机中使用KSM内存共享合并技术,本发明解决了这一难题,有效的解决了在Pass-Through虚拟机中使用KSM内存共享合并问题;(2)Pass-through技术(包括SR-IOV)可以使虚拟机达到很高的DMA操作性能,但是虚拟机在内存页面共享方面表现很差,同时,普通虚拟机(没有采用Pass-through)能够基于KSM共享合并内存页面,但是设备IO性能很低,而本发明能够结合使用Pass-through和KSM两种技术,同时达成提高设备IO性能和节省内存资源的目标;(3)本发明基于客户机中虚拟化的IOMMU,把客户机内存页面区分为DMA专用和非DMA用途,进而选择性的仅把KSM技术应用到非DMA页面上,在保持Pass-through特性的前提下,同时达到节省内存资源的目的。附图说明图1为本发明的虚拟机设备的Pass-through技术示意图;图2为本发明的虚拟机SR-IOV示意图;图3为本发明的KSM机制示意图;图4为本发明的原生操作系统使用IOMMU实现隔离/保护过程示意图;图5为本发明的基于影子IOMMU页表的IOMMU虚拟化过程示意图;图6为本发明的流程示意图即KSM与Pass-through协作方法过程图。具体实施方式:下面结合附图与实施例对本发明作进一步说明。本发明的目的,解决PT-VM中使用内存共享技术的限制问题,即结合使用KSM和Pass-through技术,在虚拟机性能效率方面获得最佳的权衡。下文中将该技术发明命名为SM_PT_VM。SM_PT_VM基于客户机中虚拟化的IOMMU,把客户机内存页面区分为DMA专用和非DMA用途,进而选择性的仅把KSM技术应用到非DMA页面上,在保持Pass-through特性的前提下,同时达到节省内存资源的目的。要点如下:1)向客户操作系统提供虚拟的IOMMU(目前KVM已经支持),利用客户操作系统自身的机制,支持DMA目标地址空间的保护。2)识别客户机中内存页面的用途,包括非DMA页和(可能的)DMA页。可以通过跟踪客户机IOMMU页表来识别(当前KVM已经基于IOMMU影子页表机制支持IOMMU虚拟化功能)。只有在虚拟IOMMU页表中建立映射的页面才有可能是DMA页面,它们被设定为DMA专用(即不允许被KSM合并共享)。客户机中的其它页面都作为非DMA页面。3)本发明的策略是:选择性的把KSM技术仅应用到非DMA页面上。由于通常情况下非DMA页面占大多数,所以该策略能保证很高的合并效率。4)当KSM合并产生的共享页面需要在IOMMU页表中建立映射(通过截获客户机对IOMMU页面的修改动作),应当取消客户页面的共享映射(基于写时拷贝COW),即拷贝产生新的宿主页面,分离恢复两个单独映射,标记该页面属于某虚拟机的DMA专用页面。5)当发现某页面对应的PTE项从IOMMU页表中删除时(采用2M大页时为PDE,采用1G大页时为PDPE),并且该页面没有被其它的PTE(PDE/PDPE)项映射,这个页面恢复成为非DMA页面,以后就可以被KSM技术处理。A、KSM的原理客户页帧号(GPN)到宿主页帧号(HPN)的映射管理是系统虚拟化的基础技术。IntelEPT(和AMDNPT)基于二维页表,直接在硬件支持下完成映射;影子页表则隐含采用类似原理完成从客户虚拟地址(GVA)到宿主物理地址的映射(HPA)。映射可能因为某些原因而动态变化,例如页面交换(pageswap)和页面共享(pagesharing,典型如KSM)。这种映射与操作系统内部的内存管理相适应,例如页面内容换出到磁盘的功能。KSM在虚拟机应用的机制如图3所示。虚拟机管理器(VMM)可以是I型或II型,包括Xen、KVM、Vmware以及HyperV等,即术语VMM既可以代表直接运行于裸机上的Hypervisor型,也可以代表宿主型。KSM管理器位于VMM中,可以在一个独立线程中运行,它负责合并内存页面。KSM通常采用哈希算法,为每一个虚拟机产生一个页面标识(PI)列表,页面标识PI即页面内容的哈希值。假如两个PI相同,就可以认为对应的页面内容相同。1.1)合并相同的内存页面当KSM管理器发现不同或相同的虚拟机中包含一组内容一致的内存页时,有可能把它们合并成一个。假如,VM1的GPN1和VM2的GPN2分别映射到HPN1和HPN2,即GPN1(ofVM1)→HPN1GPN2(ofVM2)→HPN2并且HPN1和HPN2的内容一致。VMM就可能基于一个共享的宿主页面HPN3更新原有的映射(HPN3可以是HPN1或HPN2或新页面但内容拷贝自HPN1/2)GPN1(ofVM1)→HPN3,加写保护GPN2(ofVM2)→HPN3,加写保护同时,VMM通过EPT(NPT)或影子页表,为这两个映射设置写保护。如此,KSM减少了作为映射支持的宿主内存页的数量。1.2)取消共享页面映射一旦某客户机修改了某共享页面(假定GPN1)的内容,就会因为共享页面的写保护机制,触发VM-exit,是指CPU从非根模式切换到根模式,从客户机切换到虚拟机管理器VMM的过程。VMM检测到该条件,按照如下步骤取消共享映射:a)分配新的宿主页面HPN4b)拷贝原共享页面HPN3的内容到HPN4c)映射VM1的GPN1到HPN3,取消写保护d)映射VM2的GPN2到HPN4,取消写保护e)模拟客户机现场环境,在之前触发VM-exit的断点位置恢复执行。B、操作系统对IOMMU的使用以及IOMMU虚拟化为了保护不同应用程序对设备的操作,操作系统使用IOMMU保护DMA操作。可以为每一个PCIe设备(通过BDF-Bus:Dev:Function作为设备标识)维护单独的IOMMU页表,防止为指定设备预分配的内存页面遭到破坏,也就是,对IOMMU保护的页面进行访问限制。如图4所示。图5显示了典型VMM的对虚拟IOMMU的实现方法。VMM实现了一个实际的IOMMU页表(命名为IOMMU影子页表)与客户机中的IOMMU页表相对应。为了保证上述两个页表在内容上的同步,典型情况下,VMM可以为客户机IOMMU页表设置写保护,以便当客户机修改页表时,VMM得以及时修改对应的影子页表。另一个可选方案是跟踪客户机的IOTLB刷新操作,即每当客户机执行IOTLB刷新时,对应修改IOMMU影子页表。无论采用哪一种方案,VMM都能够跟踪监视设备DMA操作的目标内存页面。在本文中,使用术语SIOPT-shadowiommupagetables代表实际的IOMMU页表(用于客户机的DMA用途);术语“跟踪客户机IOMMU页表变化”包括发现IOMMU页表的变化和监视IOTLB刷新两个意义。为实现虚拟IOMMU,VMM需要实现IOMMU影子页表,并且在客户机改写IOMMU页表时触发陷入,以便保持IOMMU影子页表的实时更新。C、KSM在SM_PT_VM的实现方法在这一节中,假定客户操作系统使用IOMMU。通过跟踪客户机对IOMMU的操作,VMM可以很容易的确定是否启用了IOMMU(因为虚拟IOMMU是由VMM模拟的)。注意:如果虚拟机使用Pass-through设备,但是客户操作系统没有启用IOMMU,则不能使用SM_PT_VM的策略。该虚拟机的所有页面作为DMA页面,即不参与KSM的共享映射。图6是SM_PT_VM使用KSM机制的完整示意图。在Pass-through方案中,客户机有直接操作设备DMA的能力,DMA通过IOMMU来实现保护。也就是说,当客户机提交DMA操作时,它需要设置虚拟IOMMU为DMA提供指示。如此,基于客户机IOMMU页表的写保护机制或跟踪IOTLB刷新的机制,VMM就可以感知到客户机对虚拟IOMMU页表的修改(见图5),然后同步修改IOMMU影子页表。3.1)区分DMA页面和非DMA页面基于IOMMU影子页表,VMM能够知道某内存页是否作为DMA操作的目标页面。所有的DMA页面都必然被客户机IOMMU页表所映射(进而会被IOMMU影子页表映射)。典型实现方式是,初始情况下把客户机全部的页面作为非DMA页面(即都可以被KSM管理器合并处理)。一旦有PTE(客户机IOMMU页表的表项)被设置,这种动作会触发VM-exit(页表写保护触发或IOTLB触发),VMM就能及时获知客户机正在写入的PTE内容。如果该PTE是新建一项指向目标页面(GPNx)的映射转换(PTE的present位被设置),VMM把GPNx加入到DMA页的链表中。如图6所示。VMM可以建立一个反向映射表,维护从HPN(宿主机页帧号)到IOVA(客户机IOMMU中的设备空间地址)的映射,用于跟踪可能存在的别名映射。假如PTE(指向GPNy)被删除(present位被清零)或被新PTE覆盖,则说明GPNy可能不再被用于DMA页面,这需要通过查阅反向映射表确认。一旦确定GPNy不再是DMA页面,VMM就把该页面转移到非DMA页的链表。3.2)SM_PT_VM的页面共享通常,KSM管理器可以处理非DMA页面,以共享映射的方式合并内容相同的页面。这里必须注意:共享合并只能应用到非DMA页面。当然,如果客户机修改了共享页面的内容,会执行一个撤销共享映射的过程,就像KSM常规处理过程一样。并且,SM_PT_VM在工作过程中,页面的角色(DMA或非DMA)可能因客户机的操作而改变(区分DMA和非DMA页面一节中所述),这里分三种情况(以页面GPN5为例):从DMA页到非DMA页:在这种情况下,GPN5之前在DMA页链表中,一旦检测到页面角色变化,就把该页面转移到非DMA页链表中(可以使用链表或其它数据结构),然后KSM管理器可以合并处理相同内容的页面,如上文过程。从非DMA页(未共享)到DMA页:在这种情况下,GPN5之前在非DMA页链表中,但是尚未建立共享映射,VMM把GPN5转移到所属虚拟机的DMA页的链表中。从非DMA页(已共享)到DMA页:在这种情况下,HPN1(VM1中的GPN1映射HPN1)之前被建立共享映射,VMM必须执行撤销共享映射过程,把HPN1拷贝到HPN2(例如),然后重映射VM1的GPN1到HPN1,映射VM2的GPN2到HPN2。与此同时,VMM把GPN1转移到VM1的DMA页的链表中,把GPN2转移到VM2的DMA页的链表中。上述虽然结合附图对本发明的具体实施方式进行了描述,但并非对本发明保护范围的限制,所属领域技术人员应该明白,在本发明的技术方案的基础上,本领域技术人员不需要付出创造性劳动即可做出的各种修改或变形仍在本发明的保护范围以内。当前第1页1 2 3 当前第1页1 2 3 
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1