一种内存分配方法和服务器组成比例

技术编号:20448413 阅读:32 留言:0更新日期:2019-02-27 02:46
本申请实施例公开了一种内存分配方法和服务器,用于在内存分配的时候,减少NC延迟带来的性能损失,提高服务器性能。本申请实施例方法包括:服务器识别节点拓扑表,该节点拓扑表中不仅存在NUMA节点之间的连接关系,而且存在NUMA节点与NC之间,NC与NC之间的连接关系,服务器根据该节点拓扑表,生成各NUMA节点的访存跳转表,该跳转表中不仅有连接至其他各NUMA节点的最短路径中的QPI跳数,而且有NC跳数,服务器再根据各NUMA节点的访存跳转表,计算各NUMA节点的访存优先级,将NC跳数作为访存优先级计算的一个重要参数,NC跳数越少,访存优先级越高,当有NUMA节点申请内存时,根据该访存优先级表进行内存分配,优先级越高,越优先从该优先级对应的NUMA节点中分配内存。

A Memory Allocation Method and Server

The embodiment of this application discloses a memory allocation method and a server for reducing the performance loss caused by NC latency and improving the performance of the server when allocating memory. The method of embodiment of this application includes: the server identifies the node topology table, which not only has the connection relationship between NUMA nodes, but also between NUMA nodes and NC, and between NC and NC. According to the node topology table, the server generates the memory access jump tables of each NUMA node, which not only connects to the shortest path of other NUMA nodes. QPI hops and NC hops. The server calculates the memory access priority of each NUMA node according to the memory access jump table of each NUMA node. NC hops are regarded as an important parameter to calculate the memory access priority. The fewer NC hops, the higher the memory access priority. When NUMA nodes apply for memory, the higher the priority, the higher the priority will be given to memory allocation according to the memory access priority table. Memory is allocated in NUMA nodes corresponding to the level.

【技术实现步骤摘要】
一种内存分配方法和服务器
本申请涉及通讯领域,尤其涉及一种内存分配方法和服务器。
技术介绍
受到硬件芯片技术的限制,单个处理器(CentralProcessingUnit,CPU)的计算能力趋于饱和。因此,为了获取更高的计算性能,服务器趋向于通过增加处理器数量的方式增加服务器的计算性能。对于高性能服务器而言,一般采用非一致性内存架构(Non-UniformMemoryArchitecture,NUMA),即多个节点通过高速互联网络连接而成,每个节点由一组CPU和本地内存组成。节点访问本地内存时,访存延迟较小,性能较高;但是,如果访问远端内存,则访存延迟相对较高,会造成性能下降。为此,为了提升系统性能,当前的内存分配器在进行内存分配的时候,需要优先分配本地内存,其次再考虑远端内存。为了减少访存时带宽的限制,英特尔Intel利用快速互联通道(QuickPassInterconnect,QPI)代替了传统的前端总线(FrontSideBus,FSB),其中,QPI是一种基于包传输的串行式高速点对点连接协议。但是,由于每个节点只提供三个QPI接口,因此导致一个服务器中的能够互联的节点数量受限。为了解决上述问题,引入了节点控制器(NodeController,NC)。NC提供了更多的节点接口(NodeInterface,NI),因此可以通过NC扩大服务器内互联节点的数量,从而减少跨节点访存延迟。当前内核中提供的针对传统NUMA内存分配的方法为:1、在系统初始化过程中生成NUMA距离,其中:如果是本地节点,则NUMA距离为0;如果节点A和节点B互联,即A和B相邻,则NUMA距离为20;如果节点A和节点C不互联,则A和C的NUMA距离等于A到C之间经过的最小跳(Hop)数乘以20。2、根据节点拓扑分配内存,其中包括如下三种分配策略:A、本地化(Local)策略:该策略旨增加本地内存的访问量,从而减少访存延迟,具体流程如下:(1)、检查本地节点是否有足够的内存;(2)、如果本地节点有足够的内存,则优先从本地节点分配内存;(3)、如果本地节点没有足够的内存,则需要按照各个节点距离该节点的NUMA距离由小到大的顺序,依次寻找具有足够内存的节点,分配相应的内存。B、优先(Preferred)策略:该策略会指定一系列的内存节点,在进行内存分配的时候,会首先从指定的内存节点中分配内存。如果指定的内存节点已经分配完毕,则从其他节点分配内存。C、交织(Interleaved)策略:该策略旨在增加访存的并行性。在该策略下,系统会以轮询的方式,按照节点编号,依次从各个内存节点中分配内存。然而,该内存分配方法假定每个NUMAHop的距离或者开销是相同的,因此NUMA距离的计算算法只以NUMAHop为唯一的输入变量。事实上,与通过QPI直接相连相比,通过NC的互联会引入额外的访存延迟,即,经过NC互联起来的两个节点,其延迟要远大于直接通过QPI互联起来的两个节点。这就导致,不同的NUMA节点之间的传输开销是不同的。因此,上述内存分配方法中NUMA距离的计算方法不能意识到NC的问题,会导致跨NC的访存增加,从而使得访存延迟增加,导致服务器性能下降。
技术实现思路
本申请实施例提供了一种内存分配方法和服务器,用于在内存分配的时候,减少NC延迟带来的性能损失,提高服务器性能。本申请实施例的第一方面提供了一种内存分配方法,其特征在于,包括:服务器识别节点拓扑表,其中,所述节点拓扑表中包括所述服务器中各非一致性内存架构NUMA节点之间、NUMA节点与节点控制器NC之间以及NC与NC之间的连接关系;所述服务器根据识别到的所述节点拓扑表,生成各NUMA节点的访存跳转表,设定该各NUMA节点中的任一点为第一NUMA节点,则所述第一NUMA节点的访存跳转表中包括所述第一NUMA节点连接至其他各NUMA节点的最短路径中的NC跳数和快速互联通道QPI跳数,NC跳数为最短路径经过的NC的数量,QPI跳数为最短路径经过的NUMA节点的数量;所述服务器根据各NUMA节点的访存跳转表,计算各NUMA节点的访存优先级表,其中,第一NUMA节点的第一访存优先级表中包括所述第一NUMA节点访问其他各NUMA节点的优先级,若NC跳数越少,则访问该NUMA节点的优先级越高,若NC跳数相同,则QPI跳数越少,访问该NUMA节点的优先级越高;当所述第一NUMA节点申请内存时,所述服务器根据所述第一访存优先级表进行内存分配,优先级越高,越优先从该优先级对应的NUMA节点中分配内存。在一种可能的设计中,在本申请实施例第一方面的第一种实现方式中,所述方法还包括:若所述第一访存优先级表中有多个NUMA节点的优先级相同,则所述服务器按照交织策略的方式从这些相同优先级的NUMA节点中分配内存。在一种可能的设计中,在本申请实施例第一方面的第二种实现方式中,所述服务器根据所述节点拓扑表,生成各NUMA节点的访存跳转表,具体包括:所述服务器读取存储的所述节点拓扑表;并根据所述节点拓扑表,计算每个NUMA节点到其他各NUMA节点的最短路径,其中,所述最短路径为预选最短路径中NC跳数最少的路径,所述预选最短路径为由一个NUMA节点到另一个NUMA节点的路径中QPI跳数最少的路径;所述服务器根据每个NUMA节点到其他各NUMA节点的最短路径,计算各最短路径上的NC跳数和QPI跳数;所述服务器将各NUMA节点到其他各NUMA节点的最短路径上的NC跳数和QPI跳数组成所述各NUMA节点的访存跳转表。在一种可能的设计中,在本申请实施例第一方面的第三种实现方式中,所述服务器根据各NUMA节点的访存跳转表,计算各NUMA节点的访存优先级表,具体包括:所述服务器按照各NUMA节点的访存跳转表中NC跳数由小到大的顺序,对访存跳转表中的NUMA节点排序,得到第一NUMA节点序列;对于所述第一NUMA节点序列中NC跳数相同的NUMA节点,所述服务器按照访存跳转表中QPI跳数由小到大的顺序进行排序,得到第二NUMA节点序列;所述服务器按照优先级由高到低的顺序依次对所述第二NUMA节点序列中的NUMA节点赋予优先级,其中,NC跳数和QPI跳数均相同的NUMA节点的优先级相同。在一种可能的设计中,在本申请实施例第一方面的第四种实现方式中,所述服务器根据所述第一访存优先级表进行内存分配,具体包括:假定当前待分配内存大小为第一容量,当前查询优先级为第一优先级,所述第一优先级为所述第一访存优先级表中的一个优先级,所述服务器根据第一访存优先级表中优先级从高到低的顺序,按照如下流程进行内存分配:所述服务器查询当前查询优先级的NUMA节点中是否有空闲内存;若当前查询优先级的NUMA节点中没有空闲内存,则所述服务器更新所述第一优先级为所述当前查询优先级的下一优先级,触发所述按照如下流程进行内存分配的步骤;若当前查询优先级的NUMA节点中仅存在一个第二NUMA节点有大小为第二容量的空闲内存,则所述服务器判断所述第二容量是否不小于所述当前待分配内存大小;若所述第二容量不小于所述当前待分配内存大小,则所述服务器从所述第二NUMA节点为所述第一NUMA节点分配大小为当前待分配内存大小的内存,并结束内存分配流程;若所述第二容量小于所述当前待分本文档来自技高网
...

【技术保护点】
1.一种内存分配方法,其特征在于,包括:服务器识别节点拓扑表,所述节点拓扑表中包括所述服务器中各非一致性内存架构NUMA节点之间、NUMA节点与节点控制器NC之间以及NC与NC之间的连接关系;所述服务器根据所述节点拓扑表,生成各NUMA节点的访存跳转表,第一NUMA节点的访存跳转表中包括所述第一NUMA节点连接至其他各NUMA节点的最短路径中的NC跳数和快速互联通道QPI跳数,所述NC跳数为最短路径经过的NC的数量,所述QPI跳数为最短路径经过的NUMA节点的数量,所述第一NUMA节点为所述各NUMA节点中的一个节点;所述服务器根据所述各NUMA节点的访存跳转表,计算所述各NUMA节点的访存优先级表,所述第一NUMA节点的第一访存优先级表中包括所述第一NUMA节点访问其他各NUMA节点的优先级,若NC跳数越少,则访问所述NUMA节点的优先级越高,若NC跳数相同,则QPI跳数越少,访问所述NUMA节点的优先级越高;当所述第一NUMA节点申请内存时,所述服务器根据所述第一访存优先级表进行内存分配,优先级越高,越优先从所述优先级对应的NUMA节点中分配内存。

【技术特征摘要】
1.一种内存分配方法,其特征在于,包括:服务器识别节点拓扑表,所述节点拓扑表中包括所述服务器中各非一致性内存架构NUMA节点之间、NUMA节点与节点控制器NC之间以及NC与NC之间的连接关系;所述服务器根据所述节点拓扑表,生成各NUMA节点的访存跳转表,第一NUMA节点的访存跳转表中包括所述第一NUMA节点连接至其他各NUMA节点的最短路径中的NC跳数和快速互联通道QPI跳数,所述NC跳数为最短路径经过的NC的数量,所述QPI跳数为最短路径经过的NUMA节点的数量,所述第一NUMA节点为所述各NUMA节点中的一个节点;所述服务器根据所述各NUMA节点的访存跳转表,计算所述各NUMA节点的访存优先级表,所述第一NUMA节点的第一访存优先级表中包括所述第一NUMA节点访问其他各NUMA节点的优先级,若NC跳数越少,则访问所述NUMA节点的优先级越高,若NC跳数相同,则QPI跳数越少,访问所述NUMA节点的优先级越高;当所述第一NUMA节点申请内存时,所述服务器根据所述第一访存优先级表进行内存分配,优先级越高,越优先从所述优先级对应的NUMA节点中分配内存。2.根据权利要求1所述的方法,其特征在于,所述方法还包括:若所述第一访存优先级表中存在多个优先级相同的NUMA节点,则所述服务器按照交织策略的方式从所述多个优先级相同的NUMA节点中分配内存。3.根据权利要求1或2所述的方法,其特征在于,所述服务器根据所述节点拓扑表,生成各NUMA节点的访存跳转表,包括:所述服务器读取存储的所述节点拓扑表;所述服务器根据所述节点拓扑表,计算每个NUMA节点到其他各NUMA节点的最短路径,所述最短路径为预选最短路径中NC跳数最少的路径,所述预选最短路径为由一个NUMA节点到另一个NUMA节点的路径中QPI跳数最少的路径;所述服务器根据所述每个NUMA节点到其他各NUMA节点的最短路径,计算各最短路径上的NC跳数和QPI跳数;所述服务器将所述各NUMA节点到其他各NUMA节点的最短路径上的NC跳数和QPI跳数组成所述各NUMA节点的访存跳转表。4.根据权利要求3所述的方法,其特征在于,所述服务器根据所述各NUMA节点的访存跳转表,计算各NUMA节点的访存优先级表,包括:所述服务器按照所述各NUMA节点的访存跳转表中NC跳数由小到大的顺序,对所述访存跳转表中的NUMA节点排序,得到第一NUMA节点序列;对于所述第一NUMA节点序列中NC跳数相同的NUMA节点,所述服务器按照所述访存跳转表中QPI跳数由小到大的顺序进行排序,得到第二NUMA节点序列;所述服务器按照优先级由高到低的顺序依次对所述第二NUMA节点序列中的NUMA节点赋予优先级,NC跳数和QPI跳数均相同的NUMA节点的优先级相同。5.根据权利要求2所述的方法,其特征在于,所述服务器根据所述第一访存优先级表进行内存分配,包括:若当前待分配内存大小为第一容量,当前查询优先级为第一优先级,所述第一优先级为所述第一访存优先级表中的一个优先级,所述服务器根据第一访存优先级表中优先级从高到低的顺序,按照如下流程进行内存分配:所述服务器查询当前查询优先级的NUMA节点中是否有空闲内存;若所述当前查询优先级的NUMA节点中没有空闲内存,则所述服务器更新所述第一优先级为所述当前查询优先级的下一优先级,触发所述按照如下流程进行内存分配的步骤;若所述当前查询优先级的NUMA节点中仅存在一个第二NUMA节点有大小为第二容量的空闲内存,则所述服务器判断所述第二容量是否不小于所述当前待分配内存大小;若所述第二容量不小于所述当前待分配内存大小,则所述服务器从所述第二NUMA节点为所述第一NUMA节点分配大小为当前待分配内存大小的内存,并结束内存分配流程;若所述第二容量小于所述当前待分配内存大小,则所述服务器从所述第二NUMA节点为所述第一NUMA节点分配大小为第二容量的内存,更新所述第一容量为所述当前待分配内存大小减去所述第二容量,更新所述第一优先级为所述当前查询优先级的下一优先级,触发所述按照如下流程进行内存分配的步骤。6.根据权利要求5所述的方法,其特征在于,所述服务器查询当前查询优先级的NUMA节点中是否有空闲内存的步骤之后,所述方法还包括:若当前查询优先级的NUMA节点中存在多于一个的第三NUMA节点中有空闲内存,则所述服务器通过交织策略的方式从各第三NUMA节点上分配内存,分配的内存大小为第三容量;若所述第三容量等于所述当前待分配内存大小,则结束内存分配流程;若所述第三容量小于所述当前待分配内存大小,则所述服务器更新所述第一容量为所述当前待分配内存大小减去所述第三容量,更新所述第一优先级为所述当前查询优先级的下一优先级,触发所述按照如下流程进行内存分配的步骤。7.根据权利要求5所述的方法,其特征在于,所述服务器查询当前查询优先级的NUMA节点中是否有空闲内存的步骤之后,所述方法还包括:若查询完所有的NUMA节点均没有空闲内存,则所述服务器判断是否进行了内存释放操作,所述内存释放操作表示将暂时不用的内存交换到硬盘缓冲区中;若没有进行所述内存释放操作,则执行内存释放操作,初始化当前待分配内存大小和当前查询优先级,并触发所述服务器根据第一访存优先级表中优先级从高到低的顺序,按照如下流程进行内存分配的步骤。8.根据权利要求6所述的方法,其特征在于,所述服务器通过交织策略的方式从各第三NUMA节点上分配内存的步骤之前,所述方法还包括:所述服务器判断所述当前待分配内存大小是否大于一个内存页面;若所述当前待分配内存大小大于一个内存页面,则触发所述服务器通过交织策略的方式从各第三NUMA节点上分配内存的步骤;若所述当前待分配大小不大于一个内存页面,则所述服务器从所述各第三NUMA节点中随机选择一个第三NUMA节点进行内存分配,并结束内存分配流程。9.根据权利要求1或2所述的方法,其特征在于,所述节点拓扑表为(N+M)*(N+M)阶的矩阵S,其中N为服务器中NUMA节点的数目,M为服务器中NC的数目,矩阵S的前N列和N行表示NUMA节点,矩阵S的后M列和M行表示NC,矩阵S中第p行第q列的值表示节点p...

【专利技术属性】
技术研发人员:孙贝磊沈胜宇徐建荣
申请(专利权)人:杭州华为数字技术有限公司
类型:发明
国别省市:浙江,33

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1