分布式虚拟机访问异常的处理方法以及虚拟机监控器的制作方法

文档序号:6359056阅读:127来源:国知局
专利名称:分布式虚拟机访问异常的处理方法以及虚拟机监控器的制作方法
技术领域
本发明涉及计算机技术领域,尤其涉及一种分布式虚拟机访问异常的处理方法以及虚拟机监控器。
背景技术
虚拟机(Virtual Machine,简称VM)指通过软件模拟的具有完整硬件系统功能的、运行在一个完全隔离环境中的完整计算机系统。分布式虚拟化技术是一种将来自多台物理机器的资源以虚拟的方式重新组合成一台虚拟机的技术,当安装在虚拟机上的操作系统运行和使用这些虚拟资源时,部署在每台物理机器上的分布式虚拟机监控器 (Distributed Virtual Machine Monitor,简称DVMM)会截获敏感的访问行为,以保证虚拟机对虚拟资源使用的正确性。由于每台物理机器上的处理器只能访问本地的内存,因此,DVMM需要截获虚拟机对远程内存或远程内存对本地缓存(cache)的访问,并将这些访问事件交给分布式共享内存(Distributed Shared Memory,简称DSM)处理,以维护本地缓存与远程内存的正确性和一致性(Consistent and Coherent)。一般情况下,DVMM捕获处理器对远程内存或本地缓存的访问需要使用处理器的页面异常(Page Fault,简称PF)或嵌套的页异常(NestedPage Fault)等机制,而这些异常是以物理页大小为单位(例如4KB、2MB或1GB)产生,即处理器访问此物理页内的任一数据都会产生异常,这就导致了假共享问题(False faring)。又如极端的情况,两个不同物理节点上的处理器需要访问同一内存地址的一个字节,DSM为了维护这个字节的内存对两个处理器是一致的,需要截获处理器对这个内存地址的访问,又因为内存截获是以物理页为单位的,导致处理器对此物理页中实际共享的地址之外的其他字节的访问也产生内存异常 (无权限访问),使DSM触发处理维持共享内存一致性的过程。假共享降低了 DVMM中缓存的利用率,增加了无意义的网络通信,加重远程内存访问迟延,进而影响分布式虚拟机内存性能。

发明内容
本发明的实施例所要解决的技术问题在于提供一种分布式虚拟机访问异常的处理方法以及虚拟机监控器,能够减少假共享的产生,从而提高了分布式虚拟机内存的性能。为解决上述技术问题,本发明的实施例采用如下技术方案一种分布式虚拟机访问异常的处理方法,包括根据虚拟机执行当前指令并访问虚拟机内存时出现访问异常的物理页的地址,获得出现访问异常的物理页的子页的页内偏移地址,并根据所述页内偏移地址,找到出现访问异常的子页,所述物理页包括若干个子页;判断所述虚拟机是否具有所述出现访问异常的子页的访问权限,若所述虚拟机没有所述出现访问异常的子页的访问权限,修复所述出现访问异常
4的子页,使虚拟机内存能够访问所述出现访问异常的子页并重新执行当前指令,若所述虚拟机具有所述出现访问异常的子页的访问权限,执行所述当前指令,并将执行结果返回给虚拟机执行上下文,使所述虚拟机完成所述当前指令的执行。一种虚拟机监控器,包括子页查找模块,用于根据虚拟机执行当前指令并访问虚拟机内存时出现访问异常的物理页的地址,获得出现访问异常的物理页的子页的页内偏移地址,并根据所述页内偏移地址,找到出现访问异常的子页,所述物理页包括若干个子页;访问权限判断模块,用于判断所述虚拟机是否具有所述出现访问异常的子页的访问权限,分布式共享内存,用于在判断所述虚拟机没有所述出现访问异常的子页的访问权限,修复所述出现访问异常的子页,使虚拟机内存能够访问所述出现访问异常的子页并重新执行当前指令,指令模拟执行模块,用于在判断所述虚拟机具有所述出现访问异常的子页的访问权限,执行所述当前指令,并将执行结果返回给虚拟机执行上下文,使所述虚拟机完成所述当前指令的执行。一种分布式虚拟机,包括多个通过网络连接的物理服务器,每台所述物理服务器上均设有虚拟机监控器,所述虚拟机监控器包括子页查找模块,用于根据虚拟机执行当前指令并访问虚拟机内存时出现访问异常的物理页的地址,获得出现访问异常的物理页的子页的页内偏移地址,并根据所述页内偏移地址,找到出现访问异常的子页,所述物理页包括若干个子页;访问权限判断模块,用于判断所述虚拟机是否具有所述出现访问异常的子页的访问权限,分布式共享内存,用于在判断所述虚拟机没有所述出现访问异常的子页的访问权限,修复所述出现访问异常的子页,使虚拟机内存能够访问所述出现访问异常的子页并重新执行当前指令,指令模拟执行模块,用于在判断所述虚拟机具有所述出现访问异常的子页的访问权限,执行所述当前指令,并将执行结果返回给虚拟机执行上下文,使所述虚拟机完成所述当前指令的执行。本发明实施例的分布式虚拟机访问异常的处理方法以及虚拟机监控器,通过将物理页划分为若干个子页,在物理页出现访问异常时,使出现访问异常的子页以外的其他子页能够被正常访问,减少了假共享的发生,并在判断虚拟机没有所述子页的访问权限时,出现访问异常的子页,使虚拟机内存能够访问所述出现访问异常的子页;在判断具有所述子页的访问权限时,模拟执行当前所述访问异常的指令,并将执行结果返回给虚拟机执行上下文,使所述虚拟机完成所述当前指令的执行,能够有效解决访问异常问题,提高了虚拟机内存的性能。


为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。图1为本发明实施例中分布式虚拟机访问异常的处理方法的流程示意图;图2为本发明实施例中虚拟机监控器的示意图;图3为本发明实施例中指令模拟执行模块的示意图;图4为本发明实施例中分布式虚拟机中虚拟机监控器的示意图。
具体实施例方式本发明实施例提供一种分布式虚拟机访问异常的处理方法以及虚拟机监控器,能够减少假共享的产生,从而提高了分布式虚拟机内存的性能。下面结合附图对本发明实施例做详细描述。实施例一分布式虚拟机从硬件层面上由分布式虚拟化环境下运行的多个物理服务器组成, 具体包括处理器(Central Processing Unit,简称CPU)、虚拟机内存、网卡和高速输入输出(I/O)设备。此外,每个物理服务器上均设有虚拟机监控器,通过虚拟机监控器之间相互通信,使得每个物理服务器的处理器可以访问其他物理服务器的资源,进而组成一个虚拟的聚合的硬件平台。虚拟机内存对于虚拟机来说是一个隔离的、从零开始且具有连续性的伪物理内存空间,这个内存空间分别对应各物理服务器分配的一段物理内存。虚拟机监控器在每个物理服务器上为分布式虚拟机建立一个PZMG^seudo-physical Address to Machine Physical Address,虚拟机伪地址到机器物理地址的映射关系)表,将GFN转换成MFN。P2M 表中一部分GFN映射到本地服务器的内存;由于本地物理服务器的处理器不能直接访问其他物理服务器的内存,因此映射其他物理服务器内存的GFN映射在本地缓存,这个缓存存储了远程物理服务器上内存的内容。为了保证本地缓存和远程内存的一致性,需要在虚拟机监控器中设置分布式共享内存。本实施例提供一种分布式虚拟机访问异常的处理方法,如图1所示,该方法包括步骤101、根据虚拟机执行当前指令并访问虚拟机内存时出现访问异常的物理页的地址,获得出现访问异常的物理页的子页的页内偏移地址,并根据所述页内偏移地址,找到出现访问异常的子页,所述物理页包括若干个子页。当某一物理服务器上的处理器访问虚拟机内存地址中的数据时,DSM需要截获此处理器对这个内存地址的访问。本实施例将物理页划分为若干个子页(sub-page),以减小截获粒度,并为子页分配子页地址。因此,当物理页出现访问异常时,可查找到出现异常的子页,物理页中除出现访问异常的子页之外的其他子页均可正常访问,通过这种方式大大提高了内存的效率,减少了假共享现象。由于内存地址的访问是以字节为单位的,因此,为了找到出现异常的子页,需要获得子页的页内偏移地址。页内偏移地址是指子页相对于所在的物理页的地址,即子页地址与物理页的起始地址的差值。访问异常的物理页的地址减去物理页的起始地址即为出现异常的子页的偏移地址。根据计算出的页内偏移地址,便可找到出现访问异常的子页。步骤102、判断虚拟机是否具有所述出现访问异常的子页的访问权限。
6
在根据子页的页内偏移地址找到出现访问异常的子页后,判断是否具有这个子页的访问权限。为了方便子页的管理,本实施例在虚拟机监控器中设置子页管理模块,用于存储所述子页的权限信息,如图2所示,其中,物理页的权限为所有子页中权限最低的子页的权限。一般情况下,权限信息包括可读可写(Read feite)、可读不可写(Read Only)和不可读不可写(INV),权限的级别依次降低。子页的权限可通过分布式共享内存进行更改。子页的权限信息在虚拟机监控器维持共享内存一致性时被更新。举例来说,若某处理器需要对虚拟机内存进行写操作,在读取子页管理模块中的内容后,发现出现访问异常的子页的权限为可读不可写,即处理器不能对内存进行写操作, 因此,此时的处理器不具有这个子页的访问权限。步骤103、若所述虚拟机没有所述出现访问异常的子页的访问权限,修复所述出现访问异常的子页,使虚拟机内存能够访问所述出现访问异常的子页并重新执行当前指令。在判断没有访问异常的子页的访问权限后,虚拟机监控器调用分布式共享内存修复所述子页,使所述子页能够被虚拟机内存访问,即将所述子页的权限修改为可读或者可写。修复完毕后,虚拟机的处理器重新执行出现异常的指令,由于涉及的虚拟机内存已可读或者可写,因此,指令可以被顺利的执行,减少了虚拟机监控器处理异常的时间。步骤104、若所述虚拟机具有所述出现访问异常的子页的访问权限,执行所述当前指令,并将执行结果返回给虚拟机执行上下文,使所述虚拟机完成所述当前指令的执行。上下文是进程执行活动全过程的静态描述,通常把已执行过的进程指令和数据在相关寄存器与堆栈中的内容称为上文,把正在执行的指令和数据在寄存器和堆栈中的内容称为正文,把待执行的指令和数据在寄存器与堆栈中的内容称为下文。本实施例中的虚拟机执行上下文包括虚拟机寄存器、虚拟机内存中的内容和虚拟机控制信息。在判断虚拟机具有访问异常的子页的访问权限后,虚拟机监控器进一步执行当前指令,并将执行结果返回给虚拟机执行上下文,使所述虚拟机完成所述当前指令的执行,虚拟机在接收到指令模拟结果后,执行当前指令的下一条指令。虚拟机监控器模拟执行当前访问异常的指令的过程如下虚拟机内存保存当前指令的原始的执行结果;根据指令集编码将当前指令进行译码,得到指令操作码和操作数;根据指令操作码对操作数执行相应的操作,操作成功后,得到新的执行结果,并将与当前指令相关的操作数更新至虚拟机执行上下文。在完成上述步骤后,处理过程从虚拟机监控器返回至虚拟机中,并更新保存在虚拟机执行上下文中的执行结果。通过上述方法,虚拟机监控器就可代替虚拟机处理访问异常的指令,能够迅速修复访问异常的虚拟机内存,从而提高了虚拟机内存的效率。在模拟执行当前指令的过程中,可能会遇到操作数不在当前访问异常的子页的情况,而在其他的子页中,因此,虚拟机监控器首先需要从其他子页中读取操作数。故本实施例在判断具有子页的访问权限之后,还包括以下步骤;步骤105、判断是否具有所述当前指令的内存操作数的访问权限,步骤106、若没有所述当前指令的内存操作数的访问权限,则修复所述内存操作数所在的子页,使所述内存操作数能够被访问。在修复所述内存操作数所在的子页后,虚拟机监控器便可执行当前访问异常的指令。本实施例的分布式虚拟机访问异常的处理方法,通过将物理页划分为若干个子页,在物理页出现访问异常时,使出现访问异常的子页以外的其他子页能够被正常访问,减少了假共享的发生,并在判断没有出现访问异常的子页的访问权限时,修复出现访问异常的子页,使所述子页能够被虚拟机内存访问;在判断具有出现访问异常的子页的访问权限时,执行当前指令,并将执行结果返回给虚拟机执行上下文,使虚拟机完成所述当前指令的执行,能够有效解决访问异常,提高了虚拟机内存的性能。实施例二本实施例提供一种虚拟机监控机,如图2所示,包括子页查找模块11、访问权限判断模块12、分布式共享内存13和指令模拟执行模块14,其中,子页查找模块11,用于根据虚拟机执行当前指令并访问虚拟机内存时出现访问异常的物理页的地址,获得出现访问异常的物理页的子页的页内偏移地址,并根据所述页内偏移地址,找到出现访问异常的子页,所述物理页包括若干个子页;访问权限判断模块12,用于判断虚拟机是否具有所述出现访问异常的子页的访问权限;分布式共享内存13,用于在判断虚拟机没有所述出现访问异常的子页的访问权限,修复所述出现访问异常的子页,使虚拟机内存能够访问所述出现访问异常的子页并重新执行当前指令;指令模拟执行模块14,用于在判断虚拟机具有所述出现访问异常的子页的访问权限,执行所述当前指令,并将执行结果返回给虚拟机执行上下文,使所述虚拟机完成所述当前指令的执行。本实施例中的虚拟机执行上下文包括虚拟机寄存器、虚拟机内存中的内容和虚拟机控制信息。进一步的,所述访问权限判断模块12还用于判断是否具有所述当前指令的内存操作数的访问权限;所述分布式共享内存13还用于在判断没有所述内存操作数的访问权限时,修复所述内存操作数所在的子页,使所述内存操作数能够被访问。本实施例的虚拟机监控机还包括子页管理模块10,用于存储子页的权限信息。进一步的,所述访问权限判断模块12还用于读取所述子页管理模块中子页的权限信息,所述物理页的访问权限不大于其包括的子页的访问权限。所述权限信息包括可读可写、可读不可写和不可读不可写。如图3所示,本实施例的指令模拟执行模块14具体包括译码单元141,用于根据指令集编码将当前指令进行译码,得到指令操作码和操作数;执行单元142,用于根据指令操作码对操作数执行相应的操作,操作成功后,得到执行结果,并将与当前指令相关的操作数更新至虚拟机执行上下文。本实施例的虚拟机监控机各部分的工作原理与实施例一类似,在此不再赘述。本实施例的虚拟机监控机,通过将物理页划分为若干个子页,在物理页出现访问异常时,使出现访问异常的子页以外的其他子页能够被正常访问,减少了假共享的发生,并通过访问权限判断模块在判断虚拟机没有出现访问异常的子页的访问权限时,分布式共享
8内存修复出现访问异常的子页,使出现访问异常的子页允许被虚拟机内存访问;在判断具有出现访问异常的子页的访问权限时,指令模拟执行模块执行当前指令,并将执行结果返回给虚拟机执行上下文,使所述虚拟机完成当前指令的执行,能够有效解决访问异常,提高了虚拟机内存的性能。实施例三本实施例提供一种分布式虚拟机,如图4所示,包括多个通过网络连接的物理服务器,每台所述物理服务器上均设有虚拟机监控器,所述虚拟机监控器包括子页查找模块11,用于根据虚拟机执行当前指令并访问虚拟机内存时出现访问异常的物理页的地址,获得出现访问异常的物理页的子页的页内偏移地址,并根据所述页内偏移地址,找到出现访问异常的子页,所述物理页包括若干个子页;访问权限判断模块12,用于判断虚拟机是否具有所述出现访问异常的子页的访问权限;分布式共享内存13,用于在判断虚拟机没有所述出现访问异常的子页的访问权限,修复所述出现访问异常的子页,使虚拟机内存能够访问所述出现访问异常的子页并重新执行当前指令;指令模拟执行模块14,用于在判断虚拟机具有所述出现访问异常的子页的访问权限,执行所述当前指令,并将执行结果返回给虚拟机执行上下文,使所述虚拟机完成所述当前指令的执行。本实施例中的虚拟机执行上下文包括虚拟机寄存器、虚拟机内存中的内容和虚拟机控制信息。进一步的,本实施例的虚拟机监控器还包括子页管理模块10,用于存储子页的权限信息;通信模块15,用于实现所述分布式虚拟机中各虚拟机监控器之间的通信,以保证同一内存地址中的信息在不同物理服务器的一致性。本实施例的虚拟机监控机各部分的工作原理与实施例一类似,在此不再赘述。本实施例的分布式虚拟机,通过将物理页划分为若干个子页,在物理页出现访问异常时,使出现访问异常的子页以外的其他子页能够被正常访问,减少了假共享的发生,并通过虚拟机监控机的访问权限判断模块在判断虚拟机没有出现访问异常的子页的访问权限时,分布式共享内存修复出现访问异常的子页,使出现访问异常的子页允许被虚拟机内存访问;在判断具有出现访问异常的子页的访问权限时,指令模拟执行模块执行当前指令, 并将执行结果返回给虚拟机执行上下文,使所述虚拟机完成当前指令的执行,能够有效解决访问异常,提高了虚拟机内存的性能。通过以上的实施方式的描述,所属领域的技术人员可以清楚地了解到本发明可借助软件加必需的通用硬件的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在可读取的存储介质中,如计算机的软盘,硬盘或光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机, 服务器,或者网络设备等)执行本发明各个实施例所述的方法。以上所述,仅为本发明的具体实施方式
,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以所述权利要求的保护范围为准。
权利要求
1.一种分布式虚拟机访问异常的处理方法,其特征在于,包括根据虚拟机执行当前指令并访问虚拟机内存时出现访问异常的物理页的地址,获得出现访问异常的物理页的子页的页内偏移地址,并根据所述页内偏移地址,找到出现访问异常的子页,所述物理页包括若干个子页;判断所述虚拟机是否具有所述出现访问异常的子页的访问权限,若所述虚拟机没有所述出现访问异常的子页的访问权限,修复所述出现访问异常的子页,使虚拟机内存能够访问所述出现访问异常的子页并重新执行当前指令,若所述虚拟机具有所述出现访问异常的子页的访问权限,执行所述当前指令,并将执行结果返回给虚拟机执行上下文,使所述虚拟机完成所述当前指令的执行。
2.根据权利要求1所述的分布式虚拟机访问异常的处理方法,其特征在于,在判断所述虚拟机具有所述出现访问异常的子页的访问权限之后,还包括;判断是否具有所述当前指令的内存操作数的访问权限,若没有所述当前指令的内存操作数的访问权限,则修复所述内存操作数所在的子页, 使所述内存操作数能够被访问。
3.根据权利要求1所述的分布式虚拟机访问异常的处理方法,其特征在于,在所述找到出现访问异常的子页之后,判断所述虚拟机是否具有所述出现访问异常的子页的访问权限之前,还包括读取出现访问异常的子页的权限信息,所述物理页的访问权限不大于其包括的子页的访问权限。
4.根据权利要求3所述的分布式虚拟机访问异常的处理方法,其特征在于,所述权限信息包括可读可写、可读不可写和不可读不可写。
5.根据权利要求1所述的分布式虚拟机访问异常的处理方法,其特征在于,所述执行所述当前指令,包括根据指令集编码将当前指令进行译码,得到指令操作码和操作数;根据指令操作码对操作数执行相应的操作,操作成功后,得到执行结果,并将与所述当前指令相关的操作数更新至虚拟机执行上下文。
6.根据权利要求1或5所述的分布式虚拟机访问异常的处理方法,其特征在于,所述虚拟机执行上下文包括虚拟机寄存器、虚拟机内存中的内容和虚拟机控制信息。
7.—种虚拟机监控器,其特征在于,包括子页查找模块,用于根据虚拟机执行当前指令并访问虚拟机内存时出现访问异常的物理页的地址,获得出现访问异常的物理页的子页的页内偏移地址,并根据所述页内偏移地址,找到出现访问异常的子页,所述物理页包括若干个子页;访问权限判断模块,用于判断所述虚拟机是否具有所述出现访问异常的子页的访问权限,分布式共享内存,用于在判断所述虚拟机没有所述出现访问异常的子页的访问权限, 修复所述出现访问异常的子页,使虚拟机内存能够访问所述出现访问异常的子页并重新执行当前指令,指令模拟执行模块,用于在判断所述虚拟机具有所述出现访问异常的子页的访问权限,执行所述当前指令,并将执行结果返回给虚拟机执行上下文,使所述虚拟机完成所述当前指令的执行。
8.根据权利要求7所述的虚拟机监控器,其特征在于,所述访问权限判断模块还用于判断是否具有所述当前指令的内存操作数的访问权限,若没有所述当前指令的内存操作数的访问权限,则修复所述内存操作数所在的子页, 使所述内存操作数能够被访问。
9.根据权利要求7所述的虚拟机监控器,其特征在于,还包括 子页管理模块,用于存储子页的权限信息。
10.根据权利要求9所述的虚拟机监控器,其特征在于,所述访问权限判断模块还用于读取子页管理模块中子页的权限信息,所述物理页的访问权限不大于其包括的子页的访问权限。
11.根据权利要求9或10所述的虚拟机监控器,其特征在于,所述权限信息包括可读可写、可读不可写和不可读不可写。
12.根据权利要求7所述的虚拟机监控器,其特征在于,所述指令模拟执行模块具体包括译码单元,用于根据指令集编码将当前指令进行译码,得到指令操作码和操作数; 执行单元,用于根据指令操作码对操作数执行相应的操作,操作成功后,得到执行结果,并将与所述当前指令相关的操作数更新至虚拟机执行上下文。
13.根据权利要求7或12所述的虚拟机监控器,其特征在于,所述虚拟机执行上下文包括虚拟机寄存器、虚拟机内存中的内容和虚拟机控制信息。
14.一种分布式虚拟机,包括多个通过网络连接的物理服务器,每台所述物理服务器上均设有虚拟机监控器,其特征在于,所述虚拟机监控器包括子页查找模块,用于根据虚拟机执行当前指令并访问虚拟机内存时出现访问异常的物理页的地址,获得出现访问异常的物理页的子页的页内偏移地址,并根据所述页内偏移地址,找到出现访问异常的子页,所述物理页包括若干个子页;访问权限判断模块,用于判断所述虚拟机是否具有所述出现访问异常的子页的访问权限,分布式共享内存,用于在判断所述虚拟机没有所述出现访问异常的子页的访问权限, 修复所述出现访问异常的子页,使虚拟机内存能够访问所述出现访问异常的子页并重新执行当前指令,指令模拟执行模块,用于在判断所述虚拟机具有所述出现访问异常的子页的访问权限,执行所述当前指令,并将执行结果返回给虚拟机执行上下文,使所述虚拟机完成所述当前指令的执行。
15.根据权利要求14所述的分布式虚拟机,其特征在于,所述虚拟机监控器还包括 通信模块,用于实现所述分布式虚拟机中各虚拟机监控器之间的通信,以保证同一内存地址中的信息在不同物理服务器的一致性。
全文摘要
本发明实施例公开了一种分布式虚拟机访问异常的处理方法以及虚拟机监控器,涉及计算机技术领域,能够减少假共享的产生,从而提高了分布式虚拟机内存的性能。本发明实施例的分布式虚拟机访问异常的处理方法,包括根据虚拟机执行当前指令并访问虚拟机内存时出现访问异常的物理页的地址,找到出现访问异常的子页;判断虚拟机是否具有出现访问异常的子页的访问权限,若虚拟机没有访问权限,修复出现访问异常的子页,使虚拟机内存能够访问出现访问异常的子页并重新执行当前指令,若所述虚拟机具有访问权限,执行当前指令,并将执行结果返回给虚拟机执行上下文,使虚拟机完成所述当前指令的执行。
文档编号G06F9/455GK102439567SQ201180002122
公开日2012年5月2日 申请日期2011年10月21日 优先权日2011年10月21日
发明者邱军 申请人:华为技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1