解释器访存优化方法及装置的制造方法

文档序号:10624633阅读:960来源:国知局
解释器访存优化方法及装置的制造方法
【专利摘要】本发明实施例提供一种解释器访存优化方法及装置,其中,所述方法包括:在非一致性存储访问NUMA系统的至少两个节点上分别生成解释器;根据解释器线程所在的节点的编号,从所述至少两个节点上的解释器中选择一个解释器作为当前解释器;使用所述当前解释器对所述解释器线程调用的虚拟机指令进行解释执行。本发明实施例提供的解释器访存优化方法及装置,通过在至少两个节点上分别生成解释器,运行时根据解释器线程所在的节点的编号,从所述至少两个节点上的解释器中选择一个解释器作为当前解释器,以减少解释器的跨节点存储访问数量,从而提高虚拟机解释器的性能。
【专利说明】
解释器访存优化方法及装置
技术领域
[0001]本发明实施例涉及虚拟机技术,尤其涉及一种解释器访存优化方法及装置。
【背景技术】
[0002]随着云计算和大数据时代的来临,数据和信息的规模呈指数级增长,科学计算和事务处理等对计算机系统的性能提出了更高要求。为了应对日益增长增长的计算需求,多处理器计算机系统已经成为当今应用的主流。对称多处理器(简称:SMP)系统是一种常见的多处理器计算机系统,在SMP系统中所有处理器共享系统总线,对内存的访问具有相同的延迟。但是,当处理器数目增大时,SMP系统对总线的竞争冲突增大,系统总线成为制约性能的瓶颈。因此,SMP系统通常仅支持几个到十几个的处理器,其可扩展性较差。为了充分发挥多处理器系统的优势,提高系统的并发度,非一致性存储访问(简称:NUMA)系统应运而生,由于NUMA架构更易于大规模并行,更适合于构建分布式系统,并且还解决了 SMP系统的可扩展性问题,故NUMA系统成为高端服务器的主流设计架构。
[0003]虚拟机(Virtual Machine,简称VM)通常是现代高性能服务器上运行的核心软件系统。虚拟机主要通过软件(或者辅以少量硬件支持)的方法来虚拟出一台计算机,并且这台虚拟的计算机通常还支持一套自己的指令集,称为虚拟机指令集。虚拟机依托于本地的物理机,通过其执行引擎对给定的虚拟机指令序列(也称目标程序)在本地物理机器上模拟执行。虚拟机的执行引擎一般包括解释器和编译器两种类型:解释器以一条虚拟机指令为单位进行取指令、译码和执行;编译器以一组连续的虚拟机指令序列(基本块、函数或方法)为单位一次性编译成本地CPU指令序列,所生成的本地机器指令称为本地方法。相对于编译器,解释器具有结构简单、易于实现和可维护性强等诸多优势,是实现虚拟机执行引擎的首选方案。例如,广泛应用的Python语言,其执行引擎仅由解释器来实现。此外,由于编译器的编译行为具有滞后性,因此,解释器往往决定了虚拟机系统的启动性能和响应速度。考虑到现有高性能服务器大都为NUMA架构,因此提升NUMA架构中虚拟机解释器的性能,对于优化服务器上应用系统的启动性能和响应速度具有十分重要的意义。
[0004]图1为现有技术基于NUMA架构的多处理器计算机系统的架构示意图。NUMA系统可以有多个节点,为便于叙述,图1以两个节点为例进行说明。如图1所示,该系统中总共有两个节点:节点O和节点1,其中,节点O包括内存O和CPU0,节点I包括内存I和CPUl0同一节点内部的CPU和存储器直接相连;不同节点间的CPU通过高速互联总线相连。从图1可见,NUMA系统中存储系统在物理结构上具有分布式的特性,分布的存储系统使得处理器对不同节点中的内存访问具有不同的访存延迟。例如,CPUO访问节点I中内存I的延迟将远大于CPUO访问节点O中内存O的延迟。这是由于当CPUO访问内存I时,内存I中的数据需要通过高速互联总线进行传输,数据在高速互联总线上的传输带宽与速率远小于相同节点内处理器对内存的直接访问。因此,NUMA系统中的访存可以划分为两类:本地存储访问和跨节点存储访问;其中,本地存储访问,是指访存目标地址所在节点和发起访存请求的处理器所在节点相同的存储访问;跨节点存储访问,是指访存目标地址所在节点和发起访存请求的处理器所在节点不同的存储访问。研究表明,减少NUMA系统中的跨节点存储访问是提升NUMA系统性能的关键。因此,减少解释器在NUMA系统中的跨节点存储访存,是提高虚拟机解释器性能的重要手段。
[0005]现有技术通常采用随机在某个节点上生成解释器的方案,但是现有技术的这种随机产生解释器的方案容易产生解释器线程与解释器不在同一个节点上运行,则会导致大量的跨节点存储访问的技术问题,极大降低了解释器的性能。

【发明内容】

[0006]本发明实施例提供一种解释器访存优化方法及装置,以减少NUMA系统中的跨节点存储访冋,提尚虚拟机解释器的性能。
[0007]第一方面,本发明实施例提供一种解释器访存优化方法,其中,所述方法包括:
[0008]在非一致性存储访问NUMA系统的至少两个节点上分别生成解释器;
[0009]根据解释器线程所在的节点的编号,从所述至少两个节点上的解释器中选择一个解释器作为当前解释器;
[0010]使用所述当前解释器对所述解释器线程调用的虚拟机指令进行解释执行。
[0011]根据第一方面,在第一方面的第一种可能的实现方式中,所述根据解释器线程所在的节点的编号,从所述至少两个节点上的解释器中选择一个解释器作为当前解释器,包括:
[0012]根据所述解释器线程所在的节点的编号,确定所述解释器线程所在的节点是否为所述至少两个节点之一;
[0013]若是,则将所述解释器线程所在的节点上的解释器选择为当前解释器。
[0014]根据第一方面,在第一方面的第二种可能的实现方式中,所述根据解释器线程所在的节点的编号,从所述至少两个节点上的解释器中选择一个解释器作为当前解释器,包括:
[0015]根据所述解释器线程所在的节点的编号,及所述NUMA系统的所有节点的分布信息,从所述至少两个节点中选择距离所述解释器线程所在的节点最近的节点作为当前节占.V,
[0016]将所述当前节点上的解释器作为当前解释器。
[0017]根据第一方面,在第一方面的第三种可能的实现方式中,所述根据解释器线程所在的节点的编号,从所述至少两个节点上的解释器中选择一个解释器作为当前解释器之前,还包括:获取所述解释器线程所在的节点的编号;将所述获取的所述解释器线程所在的节点的编号写入全局指针寄存器。
[0018]根据第一方面的第三种可能的实现方式,在第一方面的第四种可能的实现方式中,所述根据解释器线程所在的节点的编号,从所述至少两个节点上的解释器中选择一个解释器作为当前解释器,包括:
[0019]根据所述全局指针寄存器的值,将所述至少两个节点中节点编号等于所述全局指针寄存器的值的节点上的解释器作为当前解释器。
[0020]第二方面,本发明实施例提供一种解释器访存优化装置,其中,所述装置包括:
[0021]解释器生成模块,用于在非一致性存储访问NUMA系统的至少两个节点上分别生成解释器;
[0022]选择模块,用于根据解释器线程所在的节点的编号,从所述解释器生成模块生成的所述至少两个节点上的解释器中选择一个解释器作为当前解释器;
[0023]指令执行模块,用于使用所述选择模块选择的所述当前解释器对所述解释器线程调用的虚拟机指令进行解释执行。
[0024]根据第二方面,在第二方面的第一种可能的实现方式中,所述选择模块,具体用于:根据所述解释器线程所在的节点的编号,确定所述解释器线程所在的节点是否为所述至少两个节点之一;若是,则将所述解释器线程所在的节点上的解释器选择为当前解释器。
[0025]根据第二方面,在第二方面的第二种可能的实现方式中,所述选择模块,具体用于:根据所述解释器线程所在的节点的编号,及所述NUMA系统的所有节点的分布信息,从所述至少两个节点中选择距离所述解释器线程所在的节点最近的节点作为当前节点;将所述当前节点上的解释器作为当前解释器。
[0026]根据第二方面,在第二方面的第三种可能的实现方式中,还包括:
[0027]获取模块,用于所述选择模块根据解释器线程所在的节点的编号,从所述至少两个节点上的解释器中选择一个解释器作为当前解释器之前,获取所述解释器线程所在的节点的编号;将所述获取的所述解释器线程所在的节点的编号写入全局指针寄存器。
[0028]根据第二方面的第三种可能的实现方式,在第二方面的第四种可能的实现方式中,所述选择模块,具体用于:根据所述全局指针寄存器的值,将所述至少两个节点中节点编号等于所述全局指针寄存器的值的节点上的解释器作为当前解释器。
[0029]本发明实施例提供的解释器访存优化方法及装置,通过在至少两个节点上分别生成解释器,以此增加可供选择的解释器的数量,运行时根据解释器线程所在的节点的编号,从所述至少两个节点上的解释器中选择一个解释器作为当前解释器,以减少解释器的跨节点存储访冋数量,从而提尚虚拟机解释器的性能。
【附图说明】
[0030]为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
[0031]图1为现有技术基于NUMA架构的多处理器计算机系统的架构示意图;
[0032]图2为本发明实施例提供的解释器访存优化方法的流程图;
[0033]图3为本发明实施例提供的解释器访存示意图;
[0034]图4为本发明实施例提供的解释器访存优化方法的另一流程图;
[0035]图5为本发明实施例提供的解释器访存优化装置的结构示意图;
[0036]图6为本发明实施例提供的解释器访存优化装置的又一结构示意图。
【具体实施方式】
[0037]为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
[0038]图2为本发明实施例提供的解释器访存优化方法的流程图。如图2所示,本发明实施例提供的解释器访存优化方法,包括:
[0039]201、在非一致性存储访问NUMA系统的至少两个节点上分别生成解释器。
[0040]202、根据解释器线程所在的节点的编号,从所述至少两个节点上的解释器中选择一个解释器作为当前解释器。
[0041]其中,节点主要是指NUMA节点;节点的编号主要是指执行解释器的解释器线程所在的NUMA节点的节点编号;在本发明实施例中,所述至少两个节点可以是指NUMA系统的两个及以上节点,当然也可以是指NUMA系统的所有节点。
[0042]203、使用所述当前解释器对所述解释器线程调用的虚拟机指令进行解释执行。
[0043]本发明实施例提供的解释器访存优化方法,可以应用于基于NUMA架构的多处理器计算机系统。本发明实施例提供的解释器访存优化方法的执行主体为解释器访存优化装置,所述解释器访存优化装置例如,可以是虚拟机。所述解释器线程是指在虚拟机中执行解释器的线程。NUMA系统可以有多个节点,每个节点通常包括处理器和本地存储器,同一节点内部的处理器和存储器直接相连;不同节点间的处理器通过高速互联总线相连。可选的,所述在NUMA系统的至少两个节点上分别生成解释器包括:在NUMA系统的每个节点上均分别生成解释器。
[0044]现有技术采用随机在某个节点上生成解释器的方案,如果解释器线程与解释器不在同一个节点上运行,则会导致大量的跨节点存储访问,极大降低了解释器的性能。与现有技术相比,本发明实施例通过在至少两个节点上分别生成解释器,以此增加可供选择的解释器的数量,运行时根据解释器线程所在的节点的编号,从所述至少两个节点上的解释器中选择一个解释器作为当前解释器,以降低解释器的跨节点存储访问,从而提高虚拟机解释器的性能。
[0045]在本发明的一实施例中,在NUMA系统的至少两个节点上分别生成解释器后,根据所述解释器线程所在的节点的编号,确定所述解释器线程所在的节点是否为所述至少两个节点之一;
[0046]若否,则根据解释器线程所在的节点的编号,从所述至少两个节点上的解释器中选择一个解释器作为当前解释器。
[0047]若是,则将所述解释器线程所在的节点上的解释器选择为当前解释器。从而,使得解释器线程与解释器位于同一个节点,可以大幅降低解释器在NUMA系统中的跨节点存储访问,增强了解释器访存的局部性,提高了虚拟机的性能。
[0048]在本发明的一实施例中,在至少两个节点上分别生成解释器的实现方式可以为:在所述至少两个节点上分别分配解释器存储空间,并使用解释器存储空间生成解释器存储空间对应的解释器。
[0049]在此基础上,本发明的一种选定当前解释器的实现方式可以为:根据所述解释器线程所在的节点的编号,及所述NUMA系统的所有节点的分布信息,从所述至少两个节点中选择距离所述解释器线程所在的节点最近的节点作为当前节点;将所述当前节点上的解释器作为当前解释器。其中,所述NUMA系统中所有节点的分布信息可以包括:所述NUMA系统中的节点数量、各个节点之间存储访问的代价。本领域技术人员可以理解的是:节点间的距离“最近”是指节点间的代价最小。而根据所有节点的分布信息,从各节点中选择与解释器线程所在节点间代价最小的节点,可以采用已有的方法实现。本发明实施例的技术方案,降低了解释器线程所在的节点与解释器所在的节点的距离,能够极大地降低解释器的跨节点存储访问的开销,因此,提高了虚拟机解释器的性能。
[0050]图3为本发明实施例提供的解释器访存示意图。实际中,NUMA系统可以有多个节点,为便于叙述,如图3所示,以包括两个节点(节点O和节点I)的NUMA系统为例,其中,节点O包括内存O和CPU0,节点I包括内存I和CPUl。同一节点内部的CPU和存储器直接相连;不同节点间的CPU通过高速互联总线相连。本发明实施例在每个节点上均分别生成一个解释器,即:在节点O上生成解释器0,在节点I上生成解释器I。运行时,根据解释器线程所在的节点的编号,选择与解释器线程位于同一节点的解释器作为当前解释器。例如,若解释器线程在CPUO上执行,则分派解释器O运行。显而易见的,本发明实施例大幅减少了解释器在NUMA系统中的跨节点存储访问数量,增强了解释器访存的局部性,提高了虚拟机的性能。
[0051]图4为本发明实施例提供的解释器访存优化方法的另一流程图。在上述实施例的基础上,图4所示的解释器访存优化方法以在NUMA系统的每个节点上分别生成解释器的场景为例,对本发明实施例技术方案的具体实现进行了示例说明。图4所示的解释器访存优化方法,包括如下步骤:
[0052]1、虚拟机启动,完成一系列初始化工作。
[0053]2、生成解释器,具体为:
[0054]2.1、获取机器的节点分布信息;
[0055]2.2、在每个节点上,为解释器分配存储空间;
[0056]2.3、在每个节点上,使用解释器存储空间生成解释器;
[0057]2.4、向虚拟机注册所有节点上生成的解释器;
[0058]2.5、完成解释器相关的其它初始化工作。
[0059]3、解释器线程启动。
[0060]4、获取解释器线程运行时所在的节点的编号。
[0061]5、解释器线程循环执行以下步骤:
[0062]5.1、获取即将执行的虚拟机指令;
[0063]5.2、虚拟机指令译码;
[0064]5.3、根据解释器线程所在的节点的编号,从各个节点上的解释器中选择一个解释器作为当前解释器:分派和当前执行解释器线程的处理器位于同一个节点的解释器作为当前解释器;
[0065]5.4、获取操作数;
[0066]5.5、使用当前解释器对解释器线程调用的虚拟机指令进行解释执行,即执行虚拟机指令规定的语义动作;
[0067]5.6、判断解释器是否应当停止执行:若是,则停止;若否,则跳转至5.1继续循环。
[0068]本发明的另一种选定当前解释器的实现方式为:在根据解释器线程所在的节点的编号,从所述至少两个节点上的解释器中选择一个解释器作为当前解释器之前,获取所述解释器线程所在的节点的编号,将所述获取的所述解释器线程所在的节点的编号写入全局指针寄存器;然后,根据所述全局指针寄存器的值,将所述至少两个节点中节点编号等于所述全局指针寄存器的值的节点上的解释器作为当前解释器。具体地,
[0069]在图4所示实施例的基础上,进一步,在步骤3中,解释器线程启动时,将全局指针寄存器(也称GP寄存器)的值保存到指定寄存器或内存中指定地址中。在步骤4中,获取解释器线程运行时所在的节点的编号,并将所述获取的所述解释器线程所在的节点的编号写入所述全局指针寄存器中。在步骤5.3中,根据解释器线程所在的节点的编号,从各个节点上的解释器中选择一个解释器作为当前解释器,具体可以为:根据所述全局指针寄存器的值,将所述至少两个节点中节点编号等于所述全局指针寄存器的值的节点上的解释器作为当前解释器。在步骤5.6中,若判断解释器停止执行,则读取上述指定寄存器或内存中指定地址中存储的值,并写入全局指针寄存器中。
[0070]本发明实施例通过在每个节点上分别生成解释器,运行时,根据解释器线程所在的节点的编号,选择与解释器线程位于同一节点的解释器作为当前解释器,大幅减少了解释器的跨节点存储访问数量,提高了虚拟机解释器的性能。
[0071]图5为本发明实施例提供的解释器访存优化装置的结构示意图。如图5所示,本发明实施例提供的解释器访存优化装置500,包括:
[0072]解释器生成模块501,用于在非一致性存储访问NUMA系统的至少两个节点上分别生成解释器;
[0073]选择模块502,用于根据解释器线程所在的节点的编号,从所述解释器生成模块501生成的所述至少两个节点上的解释器中选择一个解释器作为当前解释器;
[0074]指令执行模块503,用于使用所述选择模块502选择的所述当前解释器对所述解释器线程调用的虚拟机指令进行解释执行。
[0075]与现有技术相比,本发明实施例通过在至少两个节点上分别生成解释器,以此增加可供选择的解释器的数量,运行时根据解释器线程所在的节点的编号,从所述至少两个节点上的解释器中选择一个解释器作为当前解释器,以降低解释器的跨节点存储访问,从而提尚虚拟机解释器的性能。
[0076]在本发明的一实施例中,所述选择模块502,具体用于:根据所述解释器线程所在的节点的编号,确定所述解释器线程所在的节点是否为所述至少两个节点之一;若是,则将所述解释器线程所在的节点上的解释器选择为当前解释器。
[0077]在本发明的一实施例中,所述选择模块502,具体用于:根据所述解释器线程所在的节点的编号,及所述NUMA系统的所有节点的分布信息,从所述至少两个节点中选择距离所述解释器线程所在的节点最近的节点作为当前节点;将所述当前节点上的解释器作为当前解释器。
[0078]与现有技术相比,本发明实施例通过在至少两个节点上分别生成解释器,以此增加可供选择的解释器的数量,运行时根据解释器线程所在的节点的编号,从所述至少两个节点上的解释器中选择选择距离所述解释器线程所在的节点最近的节点上的解释器作为当前解释器,以降低解释器的跨节点存储访问,从而提高虚拟机解释器的性能。
[0079]图6为本发明实施例提供的解释器访存优化装置的又一结构示意图。在图5所示实施例的基础上,图6所示的解释器访存优化装置600,也包括:解释器生成模块501、选择模块502及指令执行模块503 ;进一步,在本发明实施例还包括:获取模块601,用于在所述选择模块502根据解释器线程所在的节点的编号,从所述至少两个节点上的解释器中选择一个解释器作为当前解释器之前,获取所述解释器线程所在的节点的编号;将所述获取的所述解释器线程所在的节点的编号写入全局指针寄存器。
[0080]在上述实施例的基础上,所述选择模块502具体用于:根据所述全局指针寄存器的值,将所述至少两个节点中节点编号等于所述全局指针寄存器的值的节点上的解释器作为当前解释器。
[0081]与现有技术相比,本发明实施例通过获取模块601获取解释器线程所在的节点的编号,并将解释器线程所在的节点的编号写入全局指针寄存器,选择模块502将所述至少两个节点中节点编号等于全局指针寄存器的值的节点上的解释器作为当前解释器,从而借助全局指针寄存器实现了从所述至少两个节点上的解释器中选择一个解释器作为当前解释器的方案。
[0082]最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。
【主权项】
1.一种解释器访存优化方法,其特征在于,包括: 在非一致性存储访问NUMA系统的至少两个节点上分别生成解释器; 根据解释器线程所在的节点的编号,从所述至少两个节点上的解释器中选择一个解释器作为当前解释器; 使用所述当前解释器对所述解释器线程调用的虚拟机指令进行解释执行。2.根据权利要求1所述的方法,其特征在于,所述根据解释器线程所在的节点的编号,从所述至少两个节点上的解释器中选择一个解释器作为当前解释器,包括: 根据所述解释器线程所在的节点的编号,确定所述解释器线程所在的节点是否为所述至少两个节点之一; 若是,则将所述解释器线程所在的节点上的解释器选择为当前解释器。3.根据权利要求1或2所述的方法,其特征在于,所述根据解释器线程所在的节点的编号,从所述至少两个节点上的解释器中选择一个解释器作为当前解释器,包括: 根据所述解释器线程所在的节点的编号,及所述NUMA系统的所有节点的分布信息,从所述至少两个节点中选择距离所述解释器线程所在的节点最近的节点作为当前节点; 将所述当前节点上的解释器作为当前解释器。4.根据权利要求1或2所述的方法,其特征在于,所述根据解释器线程所在的节点的编号,从所述至少两个节点上的解释器中选择一个解释器作为当前解释器之前,还包括: 获取所述解释器线程所在的节点的编号;将所述获取的所述解释器线程所在的节点的编号写入全局指针寄存器。5.根据权利要求4所述的方法,其特征在于, 所述根据解释器线程所在的节点的编号,从所述至少两个节点上的解释器中选择一个解释器作为当前解释器,包括: 根据所述全局指针寄存器的值,将所述至少两个节点中节点编号等于所述全局指针寄存器的值的节点上的解释器作为当前解释器。6.一种解释器访存优化装置,其特征在于,包括: 解释器生成模块,用于在非一致性存储访问NUMA系统的至少两个节点上分别生成解释器; 选择模块,用于根据解释器线程所在的节点的编号,从所述解释器生成模块生成的所述至少两个节点上的解释器中选择一个解释器作为当前解释器; 指令执行模块,用于使用所述选择模块选择的所述当前解释器对所述解释器线程调用的虚拟机指令进行解释执行。7.根据权利要求6所述的装置,其特征在于,所述选择模块,具体用于:根据所述解释器线程所在的节点的编号,确定所述解释器线程所在的节点是否为所述至少两个节点之一;若是,则将所述解释器线程所在的节点上的解释器选择为当前解释器。8.根据权利要求6或7所述的装置,其特征在于,所述选择模块,具体用于: 根据所述解释器线程所在的节点的编号,及所述NUMA系统的所有节点的分布信息,从所述至少两个节点中选择距离所述解释器线程所在的节点最近的节点作为当前节点;将所述当前节点上的解释器作为当前解释器。9.根据权利要求6或7所述的装置,其特征在于,还包括: 获取模块,用于所述选择模块根据解释器线程所在的节点的编号,从所述至少两个节点上的解释器中选择一个解释器作为当前解释器之前,获取所述解释器线程所在的节点的编号;将所述获取的所述解释器线程所在的节点的编号写入全局指针寄存器。10.根据权利要求9所述的装置,其特征在于, 所述选择模块,具体用于:根据所述全局指针寄存器的值,将所述至少两个节点中节点编号等于所述全局指针寄存器的值的节点上的解释器作为当前解释器。
【文档编号】G06F9/455GK105988856SQ201510053110
【公开日】2016年10月5日
【申请日】2015年2月2日
【发明人】傅杰, 靳国杰, 高翔, 王剑
【申请人】龙芯中科技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1