CN104375899A - 高性能计算机numa感知的线程和内存资源优化方法与系统 - Google Patents
高性能计算机numa感知的线程和内存资源优化方法与系统 Download PDFInfo
- Publication number
- CN104375899A CN104375899A CN201410677736.2A CN201410677736A CN104375899A CN 104375899 A CN104375899 A CN 104375899A CN 201410677736 A CN201410677736 A CN 201410677736A CN 104375899 A CN104375899 A CN 104375899A
- Authority
- CN
- China
- Prior art keywords
- memory
- module
- thread
- smp
- free block
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Landscapes
- Devices For Executing Special Programs (AREA)
Abstract
本发明公开一种高性能计算机NUMA感知的线程和内存资源优化方法与系统,该系统包括:运行时环境探测模块,用于探测计算结点的硬件资源、并行进程数;计算资源分配管理模块,用于为并行进程分配计算资源,建立并行进程及线程与处理器核和物理内存的映射;并行编程接口及线程绑定模块,用于提供并行编程接口,根据映射关系获取线程的绑定位置掩码,将执行线程绑定到相应的CPU核。还公开一种NUMA感知的多线程内存管理器及其多线程内存管理方法,该管理器包括:DSM内存管理模块和SMP模块内存池,分别管理MPI进程所属SMP模块及单个SMP模块内部的内存分配及释放。可减少内存操作的系统调用次数,提高内存管理性能;减少应用程序的远地访存行为,提升应用程序性能。
Description
技术领域
本发明涉及计算机技术领域,尤其涉及高性能计算机NUMA(Non-Uniform MemoryAccess,非一致内存访问)感知的线程和内存资源优化方法与系统。
背景技术
当前,主流的高性能计算机结点大多采用DSM(Distributed Shared Memory,分布式共享存储结构)设计。如图1所示,基于DSM体系结构设计的计算结点,每块CPU(CenterProcess unit,中央处理单元,及处理器)既可以通过CPU内的内存控制器访问自身的内存模块(本地内存),也可以通过高速互联网络访问其它CPU的内存模块(远端内存)。访问远端内存的代价高于本地内存,在部分系统上甚至高出数倍,这样的访存特性称为NUMA(Non-Uniform Memory Access,非一致内存访问)。DSM的NUMA特征给应用程序,特别是科学工程计算领域的应用程序带来巨大的性能挑战。
对应用程序而言,要充分发挥DSM体系结构的性能,关键在于减少应用程序的远地访存行为,提高访存局部性。然而当前的应用程序和操作系统存在如下两方面的缺陷:
一、操作系统无法感知应用程序的访存局部性需求
操作系统对线程的调度没有考虑到应用程序的访存局部性需求,可能会将执行线程调度到与其内存不相邻的处理器核上,这就可能导致远端访存的发生,从而降低应用程序的执行性能。
二、应用程序编程模型内存管理无法做到NUMA感知
随着高性能计算机规模的不断增长,越来越多的高性能数值模拟程序采用基于MPI+OpenMP的“结点间多进程并行,结点内多线程并行”嵌套并行编程模型。在这样的编程模型中,单结点内的多线程并行程序由于共享地址空间而无法分辨物理内存的位置,从而导致远程内存分配,进而造成应用程序的性能损失。
现有技术中还提出First-Touch内存分配策略+Auto-Migration自动页迁移技术,该技术实现为:物理内存页在首次被访问时分配,并尽可能分配在发起访问的线程或进程所在的CPU本地内存上。其中,内存页是操作系统进行内存管理的最小粒度。在常见的基于x86处理器的Linux操作系统上,内存页的大小通常为4KB。如果在一段时间内某个页面总是发生远程访问,则将该页面迁移到发生访问的线程运行所在的CPU本地内存上。然而,该方案存在如下技术缺陷:
(1)页迁移的开销大,且具有滞后性。
(2)First-Touch内存分配策略和Auto-Migration自动页迁移技术无法准确预知程序的访存行为,可能导致不恰当的内存迁移,造成应用程序的远程内存访问。譬如:操作系统将执行线程调度到线程初始执行CPU之外的其它CPU核上运行,此时会产生远地访存行为,经过一段时间的探测后,自动页迁移技术将该内存页迁移到线程所在CPU的本地内存上。如果操作系统再度将相应的执行线程调度到别的CPU核上,有可能再次引发内存页迁移。来回的页迁移会极大的增大应用程序的访存开销,降低应用程序执行性能。
现有技术还提出一种LibNUMA内存管理库。该方案中,根据用户设定的内存亲近性策略,调用相应的内核态接口设置相应的内存区的内存亲近性策略,为用户分配指定SMP(Symmetrical Multi-Processing,对称多处理器共享存储结构)模块的内存页。其中,SMP模块是在一个DSM结点内部,由多个CPU以及挂载在该SMP模块上的内存所组成的计算资源模块,在SMP模块内部的处理器核对该SMP模块上的内存访问具有相同的访存性能。DSM结点是具有DSM体系结构特征的计算结点。LibNUMA内存管理库对于内存的申请和释放以操作系统的内存管理为基础,采用固定大小的内存页为基本粒度,例如对于常见的基于x86处理器的Linux操作系统而言,其内存页面的大小通常为4KB,如果开启了HugePage技术,其内存页面更是可扩大到2MB。然而,仍然存在如下技术缺陷:
(1)管理粒度较大,不适应应用程序的细粒度访存需求。对于数值模拟程序而言,其访存需求以不定尺寸的内存块(variable size block,由应用程序申请的一块连续内存)为基本单位,这些内存块可以从几个Byte到几个MB不等,而LibNUMA库的最小管理单位为内存页,很多时候,一个内存页的大小可以包含很多个内存块,如果应用程序频繁的申请细粒度内存,将造成极大的内存资源浪费。
(2)频繁调用会导致用户态与内核态的上下文切换,导致开销高。LibNUMA的主要功能实现在内核态,如果应用程序直接频繁的调用LibNUMA接口,将会导致上下文的切换过于频繁而使得应用程序的执行性能大为降低。
发明内容
本发明实施例提供一种高性能计算机NUMA感知的线程和内存资源优化系统,用以减少应用程序的远地访存行为,提高访存局部性,该系统包括:
运行时环境探测模块,用于探测并行程序所在计算结点的硬件资源及所述硬件资源的分布情况,探测并行程序分布在当前计算结点上的并行进程数;
计算资源分配管理模块,用于根据所述硬件资源的分布情况及所述并行进程数,为各并行进程分配处理器和内存计算资源,建立各并行进程及并行进程的子线程与实际处理器核和物理内存区域的映射关系;其中,由每个并行进程开启的并行区内的执行线程在该进程所属的处理器核上调度,各线程的内存资源分配请求在线程所属进程的内存资源区域内划分;
并行编程接口及线程绑定模块,用于向并行程序提供相应的并行编程接口,在并行程序调用相应的并行编程接口后,根据所述映射关系,获取并行区内各线程的绑定位置掩码,将执行线程绑定到相应的CPU核上。
一个实施例中,运行时环境探测模块具体用于:
探测当前计算结点包含的对称多处理器共享存储结构SMP模块数量,每个SMP模块的CPU数量,每块CPU的处理器核数量,每块CPU下挂载的内存容量及空闲内存信息统计;其中,SMP模块是由多个CPU以及挂载在该SMP模块上的内存所组成的计算资源模块,在SMP模块内部的处理器核对该SMP模块上的内存访问具有相同的访存性能;
运行时环境探测模块具体用于:
采用共享内存通信计数的方式获知以消息传递接口MPI并行方式运行于当前计算结点上的并行进程数。
本发明实施例还提供一种高性能计算机NUMA感知的线程和内存资源优化方法,用以减少应用程序的远地访存行为,提高访存局部性,该方法包括:
探测并行程序所在计算结点的硬件资源及所述硬件资源的分布情况;
探测并行程序分布在当前计算结点上的并行进程数;
根据所述硬件资源的分布情况及所述并行进程数,为各并行进程分配处理器和内存计算资源,建立各并行进程及并行进程的子线程与实际处理器核和物理内存区域的映射关系;其中,由每个并行进程开启的并行区内的执行线程在该进程所属的处理器核上调度,各线程的内存资源分配请求在线程所属进程的内存资源区域内划分;
向并行程序提供相应的并行编程接口,在并行程序调用相应的并行编程接口后,根据所述映射关系,获取并行区内各线程的绑定位置掩码,将执行线程绑定到相应的CPU核上。
一个实施例中,探测并行程序所在计算结点的硬件资源及所述硬件资源的分布情况,包括:
探测当前计算结点包含的对称多处理器共享存储结构SMP模块数量,每个SMP模块的CPU数量,每块CPU的处理器核数量,每块CPU下挂载的内存容量及空闲内存信息统计;其中,SMP模块是由多个CPU以及挂载在该SMP模块上的内存所组成的计算资源模块,在SMP模块内部的处理器核对该SMP模块上的内存访问具有相同的访存性能;
探测并行程序分布在当前计算结点上的并行进程数,包括:
采用POSIX共享内存写入的方式统计当前计算结点上的并行进程数,对运行于当前计算结点上的各个并行进程按如下流程执行统计操作:
初始化进程间信号量;
并行进程抢占信号量锁资源,若未抢占到则执行等待操作;
并行进程获得信号量锁资源,尝试创建共享内存;
并行进程归还信号量锁资源,让当前计算结点上的其它并行进程继续抢占信号量锁资源;
执行全局进程同步,确保当前计算结点内的并行进程已更新完自己的信息;
将共享内存中的信息拷贝回当前进程并排序,将排序后的进程号对应的序号作为该并行进程在计算结点内的ID号;
回收共享内存和信号量。
一个实施例中,根据所述硬件资源的分布情况及所述并行进程数,为各并行进程分配处理器和内存计算资源,建立各并行进程及并行进程的子线程与实际处理器核和物理内存区域的映射关系,包括:
按如下方式计算并行进程能够创建的一级并行区和二级并行区内的线程数目以及各线程的绑定位置掩码:
获取用户的线程分配约束;
获取硬件资源信息;
根据用户约束确定计算资源分配方案:如果用户指定的二级并行区线程数超过每个SMP模块实际拥有的处理器核数或者用户指定的二级并行区线程数小于0,则将二级并行区线程数设定为每个SMP模块实际拥有的处理器核数目,否则将二级并行区数目设置为用户指定的二级并行区线程数目;如果探测到当前计算结点上的并行进程数超过当前计算结点实际拥有的SMP模块数目,则将一级并行区线程数目和二级并行区的线程数目均置为1,以单线程方式执行;如果探测到的当前结点并行进程数小于SMP模块数,则按照自然序将SMP模块分配给相应的并行进程,确定该并行进程能够开启的一级并行区线程数目和二级并行区线程数目;
计算各并行进程内一级并行线程和二级并行线程的绑定位置掩码:如果按照单线程方式执行,则将并行进程内的一级并行线程和二级并行线程按照并行进程在当前计算结点内的ID号设置相应的绑定位置掩码;如果按照多线程方式执行,则为并行进程内的一级并行线程和二级并行线程按照自然序的方式设置绑定位置掩码;
向并行程序提供相应的并行编程接口,在并行程序调用相应的并行编程接口后,根据所述映射关系,获取并行区内各线程的绑定位置掩码,将执行线程绑定到相应的CPU核上,包括:
调用相应的并行编程接口,开启一级并行区和二级并行区;
查询当前执行线程的一级并行区ID和二级并行区ID;
根据当前执行线程的一级并行区ID和二级并行区ID查询执行线程的绑定位置掩码;
调用操作系统提供的线程绑定接口API,执行线程绑定。
本发明实施例还提供一种基于上述高性能计算机NUMA感知的线程和内存资源优化方法创建的NUMA感知的多线程内存管理器,用以减少应用程序的远地访存行为,提高访存局部性,该多线程内存管理器包括:
DSM内存管理模块,用于管理MPI进程所属SMP模块上的内存分配及释放;其中,SMP模块是由多个CPU以及挂载在该SMP模块上的内存所组成的计算资源模块,在SMP模块内部的处理器核对该SMP模块上的内存访问具有相同的访存性能;
SMP模块内存池,用于管理单个SMP模块内部的内存分配及释放。
一个实施例中,DSM内存管理模块具体用于:处理由SMP模块内存池发出的内存分配请求,调用操作系统提供的相关接口分配物理内存页,或,处理由SMP模块内存池发出的内存释放请求,调用操作系统提供的相关接口回收物理内存页;绑定内存页地址空间到相应的SMP模块;
SMP模块内存池包括:
PU(Process Unit,处理单元,及处理器核)空闲块缓存模块,用于存储可供分配给运行于当前PU上的执行线程的空闲块;处理运行于当前PU上的执行线程发出的内存申请请求:如果PU空闲块缓存模块中有可满足执行线程申请的内存块,则将相应内存块分配给相应的执行线程,否则向空闲块管理模块发出内存分配申请;
空闲块管理模块,用于处理由PU空闲块缓存模块发出的内存分配申请:查找所维护的空闲块管理数据结构,如果能够满足PU空闲块缓存模块提出的内存分配申请,则将相应的内存块返回给PU空闲块缓存模块并将相应的内存块从空闲块管理数据结构中剔除,否则向物理页面管理模块发出内存分配申请;
物理页面管理模块,用于管理当前SMP模块上各执行线程发出的内存分配及释放请求;处理空闲块管理模块发出的内存分配申请并记录已分配的内存页面,并处理各执行线程发出的内存分配及释放请求:查找所管理的连续空闲内存页,如果能够满足空闲块管理模块提出的内存申请需求,则取出空闲块管理模块申请的内存页面,按照空闲块管理模块的要求对内存页面进行切分并将切分后的内存页面加入到空闲块管理模块,记录被分配的内存页面;否则向DSM内存管理模块发出内存分配申请。
本发明实施例还提供一种上述多线程内存管理器的多线程内存管理方法,用以减少应用程序的远地访存行为,提高访存局部性,该方法包括:
根据上述高性能计算机NUMA感知的线程和内存资源优化方法检测到的硬件体系结构信息,获取当前DSM结点上的内存资源分布情况:当前DSM结点拥有的SMP模块数量,每个SMP模块的CPU数量,每块CPU的处理器核数量,每个SMP模块上的内存容量及已分配情况;使得当前计算结点上的物理内存与实际所属的SMP模块逐一对应;
根据所获取的内存资源分布信息,逐级创建DSM内存管理模块、物理页面管理模块、空闲块管理模块以及PU空闲块缓存模块;
对用户执行线程发起的内存分配请求进行处理;以及,对用户执行线程发起的内存回收请求进行处理。
一个实施例中,根据所获取的内存资源分布信息,逐级创建DSM内存管理模块、物理页面管理模块、空闲块管理模块以及PU空闲块缓存模块,包括:
创建DSM内存管理模块:使用操作系统提供的NUMA感知API在指定的SMP模块分配多个连续页面大小的物理内存,并存储到DSM内存管理模块中;
创建物理页面管理模块:根据检测到的SMP模块数目,为每一个SMP模块创建独立的物理页面管理模块,记录由DSM内存管理模块申请的本SMP模块的物理内存页,并初始化物理内存页的分配释放信息;
创建空闲块管理模块:根据检测到的SMP模块数目,为每一个SMP模块创建独立的空闲块管理模块,将物理页面管理模块中的内存按照既定的块大小进行切分,记录尚未分配给用户执行线程的内存块;
创建PU空闲块缓存模块:根据检测到的当前SMP模块包含的处理器核数目,为每一个处理器核创建独立的PU空闲块缓存模块,其中PU空闲块缓存模块是对于可供分配给当前PU执行线程的内存块的记录。
一个实施例中,对用户执行线程发起的内存分配请求进行处理,包括:
应用程序执行线程发起内存分配请求;
计算满足需求的最优内存块大小;
根据最优内存块大小以及发起的申请分配内存块数量,查找PU空闲块缓存模块是否拥有足够数量的既定尺寸的内存块,如果查找成功则返回相应的内存块给执行线程;否则:
根据PU空闲块缓存模块发起的申请内存块数量及尺寸,在空闲块管理模块中查找是否拥有满足条件的既定数量和既定尺寸的内存块,如果查找成功则返回相应的内存块给PU空闲块缓存模块,并将相应的内存块从空闲块管理数据结构中删除;否则:
空闲块管理模块向物理页面管理模块发出内存分配申请;
物理页面管理模块接收到空闲块管理模块提出的内存分配申请,检查自身管理的空闲内存页是否能够满足空闲块管理模块提出的内存申请需求,若是则取出空闲块管理模块申请的内存页面,按照空闲块管理模块的要求对内存页面进行切分并将切分后的内存页面加入到空闲块管理模块,记录被分配的内存页面;否则:
物理页面管理模块向DSM内存管理模块发出内存分配申请;
DSM内存管理模块则通过操作系统提供的内存分配接口,确定在指定的SMP模块是否能够分配相应长度的内存,如是则将相应内存地址空间绑定到相应的SMP模块,同时将物理内存页返回给物理页面管理模块,否则报错退出;
对用户执行线程发起的内存回收请求进行处理,包括:
应用程序执行线程发起内存释放请求;
查找分配相关内存块的物理页面管理模块;如果相关内存由该SMP模块所分配,则:将相关的内存块放入相应的执行线程所属的PU空闲块缓存模块中;PU空闲块缓存模块执行空间压缩操作;空闲块管理模块执行空间合并操作;物理页面管理模块执行空间压缩操作;DSM内存管理模块返还内存给操作系统;否则:
依次查找其它SMP模块的物理页面管理模块,如果查找到相应的SMP模块,则返还内存块到相应SMP模块的空闲块管理模块;否则通知应用程序内存释放异常。
本发明实施例的高性能计算机NUMA感知的线程和内存资源优化系统和方法可以解决操作系统对应用程序执行线程调度的盲目性,规避远地访存行为。NUMA感知的多线程内存管理器及多线程内存管理方法可以解决应用程序编程模型内存分配无法做到NUMA感知的问题,满足内存分配局部化的需求,提高访存局部性;解决First-Touch内存分配策略和Auto-Migration自动页迁移技术无法准确预知程序的访存行为的问题,从应用程序内部发起访存需求,并通过运行时环境满足应用程序的本地化访存需求;解决操作系统对内存管理粒度过大的问题,满足应用程序的细粒度访存需求;进一步的,还通过快速内存分配和回收解决现有NUMA感知内存调用接口开销高的问题,减少系统调用次数,提高内存管理性能。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。在附图中:
图1为现有技术中DSM体系结构示意图;
图2为本发明实施例中高性能计算机NUMA感知的线程和内存资源优化系统的示意图;
图3为本发明实施例中高性能计算机NUMA感知的线程和内存资源优化方法的示意图;
图4为本发明实施例中NUMA感知的多线程内存管理器的示意图;
图5为本发明实施例中NUMA感知的多线程内存管理器的多线程内存管理方法的示意图;
图6为本发明实施例中NUMA感知的多线程内存快速分配方法示意图;
图7为本发明实施例中NUMA感知的多线程内存高效回收方法示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚明白,下面结合附图对本发明实施例做进一步详细说明。在此,本发明的示意性实施例及其说明用于解释本发明,但并不作为对本发明的限定。
为解决现有技术中存在的问题,本发明实施例提出一种面向高性能计算机结点内NUMA感知的线程和内存资源优化技术,包括高性能计算机NUMA感知的线程和内存资源优化系统和方法、基于高性能计算机NUMA感知的线程和内存资源优化方法创建的NUMA感知的多线程内存管理器及其多线程内存管理方法。一方面将并行进程、一级并行区线程、二级并行区线程与DSM结点的硬件体系结构特征逐一映射,限定各执行线程的运行处理器核,规避由于操作系统调度导致的线程迁移,进而减少不必要的远地访存行为;另一方面满足应用程序对NUMA感知的多线程内存管理器的需求,将各执行线程的内存分配精确控制在执行线程所在CPU的本地内存上,有效提高内存分配的局部性。从而提高应用程序的访存局部性,充分发挥DSM体系结构的性能。
图2为本发明实施例中高性能计算机NUMA感知的线程和内存资源优化系统的示意图。如图2所示,本发明实施例中高性能计算机NUMA感知的线程和内存资源优化系统将“并行进程”、“一级并行区执行线程”、“二级并行区执行线程”与DSM体系结构特征紧密结合,建立“并行进程”、“一级并行区执行线程”、“二级并行区执行线程”到“DSM结点”、“SMP模块”以及“PU处理单元(即处理器核)”的映射,并为应用程序提供NUMA感知的并行编程接口。本发明实施例中高性能计算机NUMA感知的线程和内存资源优化系统,包含“运行时环境探测模块”、“计算资源分配管理模块”以及“并行编程接口及线程绑定模块”。
其中,运行时环境探测模块具有两方面的功能:
(1)探测并行程序所在计算结点的硬件资源及其分布情况。具体而言,可以探测当前计算结点包含几个SMP模块,每个SMP模块上有几块CPU,每块CPU有几个处理器核,每块CPU下挂载的内存容量及空闲内存信息统计。其中的SMP模块是指由多个CPU以及挂载在该SMP模块上的内存所组成的计算资源模块,在SMP模块内部的处理器核对该SMP模块上的内存访问具有相同的访存性能。
(2)探测并行程序分布在当前计算结点上的并行进程数。在实施例中,并行程序以MPI并行方式在高性能计算机上运行,每个计算结点上可能存在该并行程序的一个或多个MPI进程,该步骤可以探明程序在当前计算结点上的并行进程数。需要指出的是,并行进程采用MPI并行的方式仅为一例,实施时也可以采用其它并行方式;探测并行进程数的技术手段包括采用共享内存通信计数的方式获知运行于当前计算结点上的并行进程数,实施时也可以采用其它探测并行进程数的技术。
计算资源分配管理模块,用于根据运行时环境探测模块获知的计算结点资源分布情况以及并行进程数目,为各并行进程分配处理器和内存等计算资源,建立各并行进程及其子线程与实际处理器核和物理内存区域的映射关系;其中,由每个并行进程开启的并行区内的执行线程只会在本进程所属的处理器核上调度,各线程的内存资源分配请求也只在线程所属进程的内存资源区域内划分。
并行编程接口及线程绑定模块,用于向并行程序提供相应的并行编程接口开启和关闭并行区,在应用程序调用相应的并行编程接口之后,根据计算资源分配管理模块返回的映射关系,获取并行区内各线程的绑定位置掩码,将执行线程绑定到相应的CPU核上,从而限定该执行线程的可调度范围,避免操作系统的盲目调度产生的线程迁移。
实施例中高性能计算机NUMA感知的线程和内存资源优化方法如下:
探测并行程序所在计算结点的硬件资源及所述硬件资源的分布情况;
探测并行程序分布在当前计算结点上的并行进程数;
根据所述硬件资源的分布情况及所述并行进程数,为各并行进程分配处理器和内存计算资源,建立各并行进程及并行进程的子线程与实际处理器核和物理内存区域的映射关系;其中,由每个并行进程开启的并行区内的执行线程在该进程所属的处理器核上调度,各线程的内存资源分配请求在线程所属进程的内存资源区域内划分;
向并行程序提供相应的并行编程接口,在并行程序调用相应的并行编程接口后,根据所述映射关系,获取并行区内各线程的绑定位置掩码,将执行线程绑定到相应的CPU核上。
下面举例说明本发明实施例中高性能计算机NUMA感知的线程和内存资源优化方法的具体实施。图3为本例中高性能计算机NUMA感知的线程和内存资源优化方法的示意图。如图3所示,方法中可以包括:
步骤101、计算结点硬件资源探测。具体而言,包括探测并行程序所在计算结点的硬件资源及硬件资源的分布情况,即探测计算结点的处理器和内存资源分布情况。例如,包括当前计算结点包含几个SMP模块,每个SMP模块上有几块CPU,每块CPU有几个处理器核,每个SMP模块上挂载的内存容量及空闲内存信息统计。例如:对于一个典型的双路8核16GB内存的DSM计算结点,可以从操作系统获知当前结点包含2个SMP模块,每个SMP模块上具有1块CPU,每块CPU拥有4处理器核,并且在每个SMP模块上挂载了8GB内存,进一步地可获知每个SMP模块上的内存分配情况并逐一进行记录。
步骤102、运行时环境初始化。具体而言,包括探测并行程序分布在当前计算结点上的并行进程数,即,探测当前应用程序处于同一计算结点的并行进程数。例如,采用POSIX共享内存写入的方式统计当前计算结点上的并行进程数,运行于当前计算结点上的各个并行进程可采用如下流程执行统计操作:
1、初始化进程间信号量;
2、并行进程抢占信号量锁资源,若未抢占到则执行等待操作;
3、并行进程获得信号量锁资源,尝试创建共享内存:
若共享内存未创建,则申请共享内存;
若共享内存已分配,则直接获取共享内存;
设置共享内存长度,映射内存空间;
如果当前进程是创建共享内存的进程,初始化共享内存中的值;
将当前并行进程的进程号写入共享内存,增加计数器;
4、并行进程归还信号量锁资源,让当前计算结点上的其它并行进程继续抢占信号量锁资源;
5、执行全局进程同步,确保当前计算结点内的并行进程已更新完自己的信息;
6、将共享内存中的信息拷贝回当前进程并排序,排序后的进程号对应的序号即为该并行进程在计算结点内的ID号;
7、回收共享内存和信号量。
步骤103、计算资源分配及映射。即,具体而言,包括根据硬件资源的分布情况及并行进程数,为各并行进程分配处理器和内存计算资源,建立各并行进程及并行进程的子线程与实际处理器核和物理内存区域的映射关系。实施例中可以计算并行进程可创建的一级并行区和二级并行区内的线程数目以及各线程的绑定位置掩码,为DSM结点内开启两级嵌套并行环境做准备。具体而言,包括如下步骤:
1、获取用户的线程分配约束:记录由用户指定的一级并行区线程数目和二级并行区线程数目;
2、获取硬件资源信息:包括当前计算结点上的SMP模块数、每个SMP模块上的处理器核数目、当前计算结点上的并行进程数;
3、根据用户约束确定计算资源分配方案:
如果用户指定的二级并行区线程数超过了每个SMP模块实际拥有的处理器核数或者用户指定的二级并行区线程数小于0,则将二级并行区线程数设定为每个SMP模块实际拥有的处理器核数目;否则将二级并行区数目设置为用户指定的二级并行区线程数目;
如果探测到当前计算结点上的并行进程数超过了当前计算结点实际拥有的SMP模块数目,则无法做到将并行进程、一级并行线程、二级并行线程逐级映射到硬件资源而不破坏NUMA感知,此时将一级并行区线程数目和二级并行区的线程数目均置为1,以单线程方式执行;
如果探测到的当前结点并行进程数小于SMP模块数,则按照自然序将SMP模块分配给相应的并行进程,确定该并行进程可开启的一级并行区线程数目和二级并行区线程数目;
4、计算各并行进程内一级并行线程和二级并行线程的绑定位置掩码:
如果按照单线程方式执行,则将并行进程内的一级并行线程和二级并行线程按照并行进程在当前计算结点内的ID号设置相应的绑定位置掩码,此时的一级并行线程和二级并行线程数目均为1,且绑定到相同的处理器核上;
如果按照多线程方式执行,则为并行进程内的一级并行线程和二级并行线程按照自然序的方式设置绑定位置掩码。例如针对前述两路8核计算结点,假设在该结点上有一个MPI进程运行,则可将此MPI进程的一级并行区线程数设置为2(对应两个SMP模块),二级并行区线程数最大可设置为4(对应每个SMP模块上的4个处理器核),一级并行区的0号线程绑定位置掩码对应第0号处理器核,由该一级并行区开启的二级并行区线程,相应的绑定位置掩码可分别对应第0、1、2、3号处理器核,以此类推可以计算出一级并行区1号线程的绑定位置掩码一级由之开启的二级并行区线程绑定位置掩码。
步骤104、并行编程接口调用及线程绑定,包括:向并行程序提供相应的并行编程接口,在并行程序调用相应的并行编程接口后,根据映射关系,获取并行区内各线程的绑定位置掩码,将执行线程绑定到相应的CPU核上。实施例中,在应用程序中调用相应的并行编程接口之后,执行相应的绑定操作,具体而言,包括如下步骤:
1、用户调用相应的并行编程接口,开启一级并行区和二级并行区;
2、查询当前执行线程的一级并行区ID和二级并行区ID;
3、根据当前执行线程的一级并行区ID和二级并行区ID查询执行线程的绑定位置掩码;
4、调用操作系统提供的线程绑定接口API,执行线程绑定。这里所指的线程绑定接口API,可以是pthread_setaffinity_np()、sched_setaffinity()等接口。
如上所述,本发明实施例的高性能计算机NUMA感知的线程和内存资源优化系统及方法,即可实现应用程序并行进程、一级并行区、二级并行区与高性能计算结点体系结构特征的逐一映射。
基于上述高性能计算机NUMA感知的线程和内存资源优化方法,本发明实施例还提供一种NUMA感知的多线程内存管理器。图4为本发明实施例中NUMA感知的多线程内存管理器的示意图,如图4所示,本发明实施例中NUMA感知的多线程内存管理器包括:
DSM内存管理模块,用于管理MPI进程所属SMP模块上的内存分配、内存释放。具体的,DSM内存管理模块可以用于负责处理由SMP模块内存池发出的内存分配、内存释放请求,并调用操作系统提供的相关接口实际分配、回收物理内存页,绑定内存页地址空间到相应的SMP模块,从而满足SMP模块内存池的本地化内存分配请求。
SMP模块内存池,用于管理单个SMP模块内部的内存分配及释放。
具体实施时,SMP模块内存池可以包含“PU空闲块缓存模块”、“空闲块管理模块”以及“物理页面管理模块”三级子模块:
PU空闲块缓存模块,用于存储可供分配给运行于当前PU上的执行线程的空闲块,该模块直接处理运行于当前PU上的执行线程发出的内存申请请求。如果PU空闲块缓存模块中具有可满足执行线程申请的内存块,则直接将相应内存块分配给相应的执行线程,否则就向空闲块管理模块发出内存分配申请,由空闲块管理模块进一步处理执行线程的内存分配请求。
空闲块管理模块,用于处理由PU空闲块缓存模块发出的内存分配申请。该模块首先查找自身维护的空闲块管理数据结构,如果能够满足PU空闲块缓存模块提出的内存分配申请,则直接将相应的内存块返回给PU空闲块缓存模块并将相应的内存块从空闲块管理数据结构中剔除。否则由空闲块管理模块向物理页面管理模块发出申请,由物理页面管理模块进一步处理执行线程的内存分配请求。
物理页面管理模块,用于总体管理当前SMP模块上各执行线程发出的内存分配及释放请求。该模块直接处理空闲块管理模块发出的内存分配申请并记录已分配的内存页面,并处理各执行线程发出内存释放请求。当空闲块管理模块发出内存分配申请之后,物理页面管理模块首先查找自身管理的连续空闲内存页,是否能够满足空闲块管理模块提出的内存申请需求。如果能够满足,则从中取出空闲块管理模块申请的内存页面,按照空闲块管理模块的要求对内存页面进行切分并将其加入到空闲块管理模块,同时记录这些被分配的内存页面;否则由物理页面管理模块向DSM内存管理模块发出申请,分配足够数量的绑定到当前SMP模块的内存,从而满足执行线程的本地化内存分配请求。
由此可见,本发明实施例的NUMA感知的多线程内存管理器采用“DSM内存管理模块”、“SMP模块内存池”以及“PU空闲块缓存模块”三级管理结构,与高性能计算机结点内硬件体系结构的“DSM计算结点”、“SMP模块”、“PU处理单元”逐级对应。
本发明实施例中多线程内存管理器的多线程内存管理方法如下:
根据上述高性能计算机NUMA感知的线程和内存资源优化方法检测到的硬件体系结构信息,获取当前DSM结点上的内存资源分布情况:当前DSM结点拥有的SMP模块数量,每个SMP模块的CPU数量,每块CPU的处理器核数量,每个SMP模块上的内存容量及已分配情况;使得当前计算结点上的物理内存与实际所属的SMP模块逐一对应;
根据所获取的内存资源分布信息,逐级创建DSM内存管理模块、物理页面管理模块、空闲块管理模块以及PU空闲块缓存模块;
对用户执行线程发起的内存分配请求进行处理;以及,对用户执行线程发起的内存回收请求进行处理。
下面举例说明多线程内存管理器的多线程内存管理方法的具体实施。图5为多线程内存管理方法的示意图,如图5所示,包括:
步骤201、DSM结点内存资源分布探测,具体包括:根据本发明实施例提出的高性能计算机NUMA感知的线程和内存资源优化方法检测到的硬件体系结构信息,获取当前DSM结点上的内存资源分布情况。具体而言包括当前DSM结点拥有几个SMP模块,每个SMP模块的CPU数量,每块CPU的处理器核数量,每个SMP模块上的内存容量及已分配情况。使得当前计算结点上的物理内存与实际所属的SMP模块逐一对应,为NUMA感知的内存管理奠定基础。
步骤202、NUMA感知的内存池数据结构初始化,具体可以包括根据步骤201所获取的内存资源分布信息,逐级创建DSM内存管理模块、物理页面管理模块、空闲块管理模块以及PU空闲块缓存模块,关于各模块的功能已在上述实施例中进行说明,此处不再赘述,实施例中具体步骤可以如下:
创建DSM内存管理模块:使用操作系统提供的NUMA感知API在指定的SMP模块分配若干连续页面大小的物理内存,并存储到DSM内存管理模块中。其中的NUMA感知API包括first-touch、libnuma提供的内存分配接口等接口。
创建物理页面管理模块:根据本发明实施例中图3所示步骤101中检测到的SMP模块数目,为每一个SMP模块创建独立的物理页面管理模块,记录由DSM内存管理模块申请的本SMP模块的物理内存页,并初始化物理内存页的分配释放信息。
创建空闲块管理模块:根据本发明实施例中图3所示步骤101中检测到的SMP模块数目,为每一个SMP模块创建独立的空闲块管理模块,将物理页面管理模块中的内存按照既定的块大小进行切分,记录尚未分配给用户执行线程的内存块。
创建PU空闲块缓存模块:根据本发明实施例中图3所示步骤101中检测到的当前SMP模块包含的处理器核数目,为每一个处理器核创建独立的PU空闲块缓存模块。其中PU空闲块缓存模块是指对于可供分配给当前PU执行线程的内存块的记录。
至此,NUMA感知的多线程内存管理器已经准备就绪,等待用户执行线程发起内存分配请求和内存回收请求,相应地,由步骤203-1所述的NUMA感知的多线程内存快速分配方法对用户执行线程发起的内存分配请求进行处理,由步骤203-2所述的NUMA感知的多线程内存高效回收方法对用户执行线程发起的内存回收请求进行处理。
其中步骤203-1所述的NUMA感知的多线程内存快速分配方法,是依赖“PU空闲块缓存模块”、“SMP模块内存池”以及“DSM内存管理模块”三级管理结构实现的多线程内存分配方法。实施例中可以具体包括如图6所示的步骤,举例如下:
步骤301、应用程序执行线程发起内存分配请求。
步骤302、计算满足需求的最优内存块大小。具体可以包括PU空闲块缓存模块中的内存块大小是按照既定尺寸组织管理,如1KB,2KB,4KB,8KB,16KB等。在应用程序执行线程发起内存分配请求之后,内存管理模块首先计算能够满足需求的最优内存块的大小,例如用户程序申请分配3KB的内存,则结合PU空闲块缓存模块中的既定尺寸管理标准,选定4KB的内存块大小以满足应用程序执行线程的内存分配请求。
步骤303、查找PU空闲块缓存模块是否拥有足够数量的既定尺寸的内存块。具体可以包括根据步骤302计算出的最优内存块大小以及步骤301中发起的申请分配内存块数量,在PU空闲块缓存模块中进行查找。如果查找成功则执行步骤304,否则执行步骤305。
步骤304、返回内存块给执行线程。具体可以包括如果步骤303的查找中检索到足够数量的满足条件的内存块,则将相应的内存块返回给执行线程使用。
步骤305、查找空闲块管理模块。具体可以包括根据PU空闲块缓存模块发起的申请内存块数量及尺寸,在空闲块管理模块中查找是否拥有满足条件的既定数量和既定尺寸的内存块。如果查找成功则执行步骤306,否则执行步骤307。例如:某PU空闲块缓存模块向空闲块管理模块申请分配5个4KB的内存块。则在空闲块管理模块中查找是否具备足够数量的内存块并根据查找结果执行步骤306或者307。
步骤306、返回内存块给PU空闲块缓存模块。具体可以包括在对空闲块管理模块的查找成功之后,将一定数量的既定尺寸的内存块加入到PU空闲块缓存模块,并将这些内存块从空闲块管理数据结构中删除,然后再返回步骤303查找PU空闲块缓存模块。例如:如果空闲块管理模块查找成功返回,则将步骤305申请的5个4KB的内存块返回给PU空闲块缓存模块,并将这5个4KB的内存块从空闲块管理模块中剔除,然后执行步骤303。
步骤307、查找物理页面管理模块。具体可以包括在步骤305的查找失败之后,由空闲块管理模块向物理页面管理模块发出内存分配申请。例如:如果空闲块管理模块查找失败,则由空闲管理模块向物理页面管理模块发出申请,申请20个4KB的内存块,然后重复执行步骤305。多申请的内存块是为其它PU空闲块缓存模块提出内存分配申请做准备,以减少频繁的向物理页面管理模块发出内存分配申请。物理页面管理模块接到空闲块管理模块提出的内存分配申请(共计80KB)之后,首先检查自身管理的空闲内存页是否具备80KB的空闲内存页,并根据检查结果执行步骤308或者步骤309。
步骤308、返回内存块给空闲块管理模块。具体可以包括:物理页面管理模块在对自身管辖的空闲内存页检查成功返回之后,将空闲块管理模块申请的连续页面切出,记录物理页面管理模块剩余的连续页面,按照PU空闲块缓存模块申请的尺寸大小进行切分并放入空闲块管理模块,然后重复执行步骤305。例如:步骤307中空闲块管理模块申请分配80KB的连续内存,则物理页面管理模块从空闲内存页中切出80KB的内存页,并按照每个内存块4KB的尺寸进行切分,返回20个4KB大小的内存块给空闲块管理模块,同时记录这20个4KB大小的内存块为已分配状态。
步骤309、查找DSM内存管理模块。具体可以包括物理页面管理模块在对自身管辖的空闲内存页检查失败之后,向DSM内存管理模块申请分配一块位于本SMP模块下的连续空闲内存。根据本步骤的执行返回结果,选择执行步骤310或者311。例如:物理页面管理模块查找自身管理的连续空闲内存时发现不具备80KB的连续内存,则向DSM内存管理模块申请1MB大小的位于本SMP模块的空闲内存页。同理,这里申请更大的空闲内存是为将来满足空闲块管理模块发起的其它尺寸的内存分配申请做准备。DSM内存管理模块则通过操作系统提供的内存分配接口,在指定的SMP模块分配相应长度的内存。
步骤310、分配物理内存页给物理页面管理模块。具体可以包括步骤309中通过DSM内存管理模块成功分配到相应长度的内存之后,将相应内存地址空间绑定到相应的SMP模块,同时将物理内存页返回给物理页面管理模块,然后重复执行步骤307。
步骤311、报错退出。具体可以包括步骤309中通过DSM内存管理模块分配相应长度的内存失败之后,将相应的失败原因反馈给应用程序并进行出错处理。失败的原因可能是执行线程申请的空闲内存过大导致在指定的SMP结点上没有足够的空闲内存可以满足内存分配请求等。
其中步骤203-2所述的NUMA感知的多线程内存高效回收方法,是依赖“PU空闲块缓存模块”、“SMP模块内存池”以及“DSM内存管理模块”三级管理结构实现的多线程内存回收方法。实施例中可以具体包括如图7所示的步骤,例如:
步骤401、应用程序执行线程发起内存释放请求。
步骤402、查找分配相关内存块的物理页面管理模块。即查找线程所在SMP模块的物理页面管理模块。具体可以包括通过物理页面管理模块中记录的已分配内存页表,确定相关内存是否由该SMP模块分配。如果相关内存由该SMP模块所分配,则执行步骤403,否则执行步骤408。
步骤408、依次查找其它SMP模块的物理页面管理模块。如果查找到了相应的SMP模块,则执行步骤409,否则执行步骤410。
步骤403、返还内存给PU空闲块缓存模块。具体可以包括将相关的内存块放入相应的执行线程所属的PU空闲块缓存模块中。
步骤404、PU空闲块缓存模块执行空间压缩操作。具体可以包括PU空闲块缓存模块在接收应用程序执行线程返还的空闲块之后,确认当前PU空闲块缓存模块中存放的空闲内存块是否超过一定的阈值上限。如果没有超过阈值上限,则直接返回;如果超过了阈值上限,就从PU空闲块缓存模块中选择一定数量的空闲块返还给空闲块管理模块,继续执行步骤405。这样做一方面提高了PU空闲块的查找效率,另一方面也即时的将相应的内存块返回给上一级管理模块,以便其它PU空闲块缓存模块能更快的获得空闲内存块。
步骤405、空闲块管理模块执行空间合并操作。具体可以包括PU空闲块缓存模块或者其它SMP模块的执行线程返还一定数量的空闲块给空闲块管理模块之后,空闲块管理模块查找所有空闲块,并寻找能合并成若干连续页面的内存块。如果找到可合并的内存块,则将这些内存块移除并返还给物理页管理器,执行步骤406,否则返回。
步骤406、物理页面管理模块执行空间压缩操作。具体可以包括空闲块管理模块返还一定数量的内存页给物理页面管理模块之后,物理页面管理模块查找自身所辖的空闲内存页是否超出一定的阈值上限。如果超出阈值上限,则选择多个连续页面返还给DSM内存管理器,执行步骤407,否则返回。
步骤407、DSM内存管理模块返还内存给操作系统。具体是指物理页面管理模块执行空间压缩操作之后,通过DSM内存管理模块调用操作系统内存释放接口,将多个连续页面释放到系统中。
步骤409、返还内存块到相应SMP模块的空闲块管理模块。具体可以包括执行步骤408成功返回之后,将相应的内存块返还给对应的SMP模块的空闲块管理模块,并执行步骤406,触发物理页面管理模块执行空间压缩操作。
步骤410、通知应用程序内存释放异常。具体可以包括执行步骤408失败返回之后,通知应用程序所释放的内存不是由内存池分配的,该内存可能是一个非法的地址空间,也可能是程序中存在接口的误调用,将相关的异常信息反馈给应用程序。
至此,由应用程序执行线程发起的内存分配请求和内存释放请求的各种可能情况均得到合理的响应。应用程序执行线程发起的内存分配可以直接做到NUMA感知,同时由应用程序发起的内存分配和内存释放请求的绝大部分操作都将在用户态实现,从而减少系统调用的执行次数,提高内存管理的性能。
综上所述,本发明实施例对面向高性能计算机结点内NUMA感知的线程和内存资源进行了优化,具体的:
针对操作系统调度盲目性的问题,本发明实施例的高性能计算机NUMA感知的线程和内存资源优化系统和方法通过与硬件体系结构特征的映射,将相应的执行线程绑定到相应的处理器核,规避了操作系统调度的盲目性,去除了不必要的远地访存行为;
针对应用程序编程模型内存分配无法做到NUMA感知的问题,本发明实施例提出的NUMA感知的多线程内存管理器及多线程内存管理方法通过与DSM体系结构访存特征的结合,直接满足各执行线程的本地化内存分配请求,显著提高应用程序的访存局部性;
针对First-Touch内存分配策略和Auto-Migration自动页迁移技术无法准确预知程序的访存行为的问题,本发明实施例提出的NUMA感知的多线程内存管理器及多线程内存管理方法从应用程序内部发起访存需求,并通过NUMA感知的快速内存分配方法和高效内存回收方法满足应用程序的本地化访存需求;
针对操作系统对内存管理粒度过大的问题,本发明实施例提出的NUMA感知的多线程内存管理器及多线程内存管理方法通过不同尺寸的内存块,充分满足应用程序的细粒度访存需求;
针对现有NUMA感知内存调用接口开销高的问题,本发明实施例提出的快速内存分配方法和快速内存回收方法,将绝大部分的应用程序内存分配/释放请求行为在用户态进行响应,减少了系统调用的次数,提高了内存管理的性能。
本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的系统。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令系统的制造品,该指令系统实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
以上所述的具体实施例,对本发明的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本发明的具体实施例而已,并不用于限定本发明的保护范围,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (10)
1.一种高性能计算机非一致内存访问NUMA感知的线程和内存资源优化系统,其特征在于,包括:
运行时环境探测模块,用于探测并行程序所在计算结点的硬件资源及所述硬件资源的分布情况,探测并行程序分布在当前计算结点上的并行进程数;
计算资源分配管理模块,用于根据所述硬件资源的分布情况及所述并行进程数,为各并行进程分配处理器和内存计算资源,建立各并行进程及并行进程的子线程与实际处理器核和物理内存区域的映射关系;其中,由每个并行进程开启的并行区内的执行线程在该进程所属的处理器核上调度,各线程的内存资源分配请求在线程所属进程的内存资源区域内划分;
并行编程接口及线程绑定模块,用于向并行程序提供相应的并行编程接口,在并行程序调用相应的并行编程接口后,根据所述映射关系,获取并行区内各线程的绑定位置掩码,将执行线程绑定到相应的CPU核上。
2.如权利要求1所述的系统,其特征在于,运行时环境探测模块具体用于:
探测当前计算结点包含的对称多处理器共享存储结构SMP模块数量,每个SMP模块的CPU数量,每块CPU的处理器核数量,每块CPU下挂载的内存容量及空闲内存信息统计;其中,SMP模块是由多个CPU以及挂载在该SMP模块上的内存所组成的计算资源模块,在SMP模块内部的处理器核对该SMP模块上的内存访问具有相同的访存性能;
采用共享内存通信计数的方式获知以消息传递接口MPI并行方式运行于当前计算结点上的并行进程数。
3.一种高性能计算机NUMA感知的线程和内存资源优化方法,其特征在于,包括:
探测并行程序所在计算结点的硬件资源及所述硬件资源的分布情况;
探测并行程序分布在当前计算结点上的并行进程数;
根据所述硬件资源的分布情况及所述并行进程数,为各并行进程分配处理器和内存计算资源,建立各并行进程及并行进程的子线程与实际处理器核和物理内存区域的映射关系;其中,由每个并行进程开启的并行区内的执行线程在该进程所属的处理器核上调度,各线程的内存资源分配请求在线程所属进程的内存资源区域内划分;
向并行程序提供相应的并行编程接口,在并行程序调用相应的并行编程接口后,根据所述映射关系,获取并行区内各线程的绑定位置掩码,将执行线程绑定到相应的CPU核上。
4.如权利要求3所述的方法,其特征在于,探测并行程序所在计算结点的硬件资源及所述硬件资源的分布情况,包括:
探测当前计算结点包含的对称多处理器共享存储结构SMP模块数量,每个SMP模块的CPU数量,每块CPU的处理器核数量,每块CPU下挂载的内存容量及空闲内存信息统计;其中,SMP模块是由多个CPU以及挂载在该SMP模块上的内存所组成的计算资源模块,在SMP模块内部的处理器核对该SMP模块上的内存访问具有相同的访存性能;
探测并行程序分布在当前计算结点上的并行进程数,包括:
采用POSIX共享内存写入的方式统计当前计算结点上的并行进程数,对运行于当前计算结点上的各个并行进程按如下流程执行统计操作:
初始化进程间信号量;
并行进程抢占信号量锁资源,若未抢占到则执行等待操作;
并行进程获得信号量锁资源,尝试创建共享内存;
并行进程归还信号量锁资源,让当前计算结点上的其它并行进程继续抢占信号量锁资源;
执行全局进程同步,确保当前计算结点内的并行进程已更新完自己的信息;
将共享内存中的信息拷贝回当前进程并排序,将排序后的进程号对应的序号作为该并行进程在计算结点内的ID号;
回收共享内存和信号量。
5.如权利要求3所述的方法,其特征在于,根据所述硬件资源的分布情况及所述并行进程数,为各并行进程分配处理器和内存计算资源,建立各并行进程及并行进程的子线程与实际处理器核和物理内存区域的映射关系,包括:
按如下方式计算并行进程能够创建的一级并行区和二级并行区内的线程数目以及各线程的绑定位置掩码:
获取用户的线程分配约束;
获取硬件资源信息;
根据用户约束确定计算资源分配方案:如果用户指定的二级并行区线程数超过每个SMP模块实际拥有的处理器核数或者用户指定的二级并行区线程数小于0,则将二级并行区线程数设定为每个SMP模块实际拥有的处理器核数目,否则将二级并行区数目设置为用户指定的二级并行区线程数目;如果探测到当前计算结点上的并行进程数超过当前计算结点实际拥有的SMP模块数目,则将一级并行区线程数目和二级并行区的线程数目均置为1,以单线程方式执行;如果探测到的当前结点并行进程数小于SMP模块数,则按照自然序将SMP模块分配给相应的并行进程,确定该并行进程能够开启的一级并行区线程数目和二级并行区线程数目;
计算各并行进程内一级并行线程和二级并行线程的绑定位置掩码:如果按照单线程方式执行,则将并行进程内的一级并行线程和二级并行线程按照并行进程在当前计算结点内的ID号设置相应的绑定位置掩码;如果按照多线程方式执行,则为并行进程内的一级并行线程和二级并行线程按照自然序的方式设置绑定位置掩码;
向并行程序提供相应的并行编程接口,在并行程序调用相应的并行编程接口后,根据所述映射关系,获取并行区内各线程的绑定位置掩码,将执行线程绑定到相应的CPU核上,包括:
调用相应的并行编程接口,开启一级并行区和二级并行区;
查询当前执行线程的一级并行区ID和二级并行区ID;
根据当前执行线程的一级并行区ID和二级并行区ID查询执行线程的绑定位置掩码;
调用操作系统提供的线程绑定接口API,执行线程绑定。
6.一种基于权利要求3至5任一项所述高性能计算机NUMA感知的线程和内存资源优化方法创建的NUMA感知的多线程内存管理器,其特征在于,包括:
DSM内存管理模块,用于管理MPI进程所属SMP模块上的内存分配及释放;其中,SMP模块是由多个CPU以及挂载在该SMP模块上的内存所组成的计算资源模块,在SMP模块内部的处理器核对该SMP模块上的内存访问具有相同的访存性能;
SMP模块内存池,用于管理单个SMP模块内部的内存分配及释放。
7.如权利要求6所述的多线程内存管理器,其特征在于,DSM内存管理模块具体用于:处理由SMP模块内存池发出的内存分配请求,调用操作系统提供的相关接口分配物理内存页,或,处理由SMP模块内存池发出的内存释放请求,调用操作系统提供的相关接口回收物理内存页;绑定内存页地址空间到相应的SMP模块;
SMP模块内存池包括:
处理单元PU空闲块缓存模块,用于存储可供分配给运行于当前PU上的执行线程的空闲块;处理运行于当前PU上的执行线程发出的内存申请请求:如果PU空闲块缓存模块中有可满足执行线程申请的内存块,则将相应内存块分配给相应的执行线程,否则向空闲块管理模块发出内存分配申请;
空闲块管理模块,用于处理由PU空闲块缓存模块发出的内存分配申请:查找所维护的空闲块管理数据结构,如果能够满足PU空闲块缓存模块提出的内存分配申请,则将相应的内存块返回给PU空闲块缓存模块并将相应的内存块从空闲块管理数据结构中剔除,否则向物理页面管理模块发出内存分配申请;
物理页面管理模块,用于管理当前SMP模块上各执行线程发出的内存分配及释放请求;处理空闲块管理模块发出的内存分配申请并记录已分配的内存页面,并处理各执行线程发出的内存分配及释放请求:查找所管理的连续空闲内存页,如果能够满足空闲块管理模块提出的内存申请需求,则取出空闲块管理模块申请的内存页面,按照空闲块管理模块的要求对内存页面进行切分并将切分后的内存页面加入到空闲块管理模块,记录被分配的内存页面;否则向DSM内存管理模块发出内存分配申请。
8.一种权利要求7所述多线程内存管理器的多线程内存管理方法,其特征在于,包括:
根据权利要求3至5任一项所述高性能计算机NUMA感知的线程和内存资源优化方法检测到的硬件体系结构信息,获取当前DSM结点上的内存资源分布情况:当前DSM结点拥有的SMP模块数量,每个SMP模块的CPU数量,每块CPU的处理器核数量,每个SMP模块上的内存容量及已分配情况;使得当前计算结点上的物理内存与实际所属的SMP模块逐一对应;
根据所获取的内存资源分布信息,逐级创建DSM内存管理模块、物理页面管理模块、空闲块管理模块以及PU空闲块缓存模块;
对用户执行线程发起的内存分配请求进行处理;以及,对用户执行线程发起的内存回收请求进行处理。
9.如权利要求8所述的方法,其特征在于,根据所获取的内存资源分布信息,逐级创建DSM内存管理模块、物理页面管理模块、空闲块管理模块以及PU空闲块缓存模块,包括:
创建DSM内存管理模块:使用操作系统提供的NUMA感知API在指定的SMP模块分配多个连续页面大小的物理内存,并存储到DSM内存管理模块中;
创建物理页面管理模块:根据检测到的SMP模块数目,为每一个SMP模块创建独立的物理页面管理模块,记录由DSM内存管理模块申请的本SMP模块的物理内存页,并初始化物理内存页的分配释放信息;
创建空闲块管理模块:根据检测到的SMP模块数目,为每一个SMP模块创建独立的空闲块管理模块,将物理页面管理模块中的内存按照既定的块大小进行切分,记录尚未分配给用户执行线程的内存块;
创建PU空闲块缓存模块:根据检测到的当前SMP模块包含的处理器核数目,为每一个处理器核创建独立的PU空闲块缓存模块,其中PU空闲块缓存模块是对于可供分配给当前PU执行线程的内存块的记录。
10.如权利要求8所述的方法,其特征在于,对用户执行线程发起的内存分配请求进行处理,包括:
应用程序执行线程发起内存分配请求;
计算满足需求的最优内存块大小;
根据最优内存块大小以及发起的申请分配内存块数量,查找PU空闲块缓存模块是否拥有足够数量的既定尺寸的内存块,如果查找成功则返回相应的内存块给执行线程;否则:
根据PU空闲块缓存模块发起的申请内存块数量及尺寸,在空闲块管理模块中查找是否拥有满足条件的既定数量和既定尺寸的内存块,如果查找成功则返回相应的内存块给PU空闲块缓存模块,并将相应的内存块从空闲块管理数据结构中删除;否则:
空闲块管理模块向物理页面管理模块发出内存分配申请;
物理页面管理模块接收到空闲块管理模块提出的内存分配申请,检查自身管理的空闲内存页是否能够满足空闲块管理模块提出的内存申请需求,若是则取出空闲块管理模块申请的内存页面,按照空闲块管理模块的要求对内存页面进行切分并将切分后的内存页面加入到空闲块管理模块,记录被分配的内存页面;否则:
物理页面管理模块向DSM内存管理模块发出内存分配申请;
DSM内存管理模块则通过操作系统提供的内存分配接口,确定在指定的SMP模块是否能够分配相应长度的内存,如是则将相应内存地址空间绑定到相应的SMP模块,同时将物理内存页返回给物理页面管理模块,否则报错退出;
对用户执行线程发起的内存回收请求进行处理,包括:
应用程序执行线程发起内存释放请求;
查找分配相关内存块的物理页面管理模块;如果相关内存由该SMP模块所分配,则:将相关的内存块放入相应的执行线程所属的PU空闲块缓存模块中;PU空闲块缓存模块执行空间压缩操作;空闲块管理模块执行空间合并操作;物理页面管理模块执行空间压缩操作;DSM内存管理模块返还内存给操作系统;否则:
依次查找其它SMP模块的物理页面管理模块,如果查找到相应的SMP模块,则返还内存块到相应SMP模块的空闲块管理模块;否则通知应用程序内存释放异常。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410677736.2A CN104375899B (zh) | 2014-11-21 | 2014-11-21 | 高性能计算机numa感知的线程和内存资源优化方法与系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410677736.2A CN104375899B (zh) | 2014-11-21 | 2014-11-21 | 高性能计算机numa感知的线程和内存资源优化方法与系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104375899A true CN104375899A (zh) | 2015-02-25 |
CN104375899B CN104375899B (zh) | 2016-03-30 |
Family
ID=52554835
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410677736.2A Active CN104375899B (zh) | 2014-11-21 | 2014-11-21 | 高性能计算机numa感知的线程和内存资源优化方法与系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104375899B (zh) |
Cited By (34)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104850461A (zh) * | 2015-05-12 | 2015-08-19 | 华中科技大学 | 一种面向numa架构的虚拟cpu调度优化方法 |
CN105389211A (zh) * | 2015-10-22 | 2016-03-09 | 北京航空航天大学 | 一种适用于numa架构内多节点间访存延时平衡的内存分配方法及延时感知-内存分配装置 |
CN106250350A (zh) * | 2016-07-28 | 2016-12-21 | 浪潮(北京)电子信息产业有限公司 | 一种基于numa架构的页缓存读取方法及系统 |
CN106294190A (zh) * | 2015-05-25 | 2017-01-04 | 中兴通讯股份有限公司 | 一种存储空间管理方法及装置 |
CN106598724A (zh) * | 2015-10-14 | 2017-04-26 | 三星电子株式会社 | 用于在计算系统中管理内存的方法 |
CN107346267A (zh) * | 2017-07-13 | 2017-11-14 | 郑州云海信息技术有限公司 | 一种基于numa架构的cpu性能优化方法和装置 |
CN107479976A (zh) * | 2017-08-14 | 2017-12-15 | 郑州云海信息技术有限公司 | 一种多程序实例同时运行下cpu资源分配方法及装置 |
CN107704321A (zh) * | 2017-09-30 | 2018-02-16 | 北京元心科技有限公司 | 内存分配的方法、装置及终端设备 |
WO2018032519A1 (zh) * | 2016-08-19 | 2018-02-22 | 华为技术有限公司 | 一种资源分配方法、装置及numa系统 |
CN107748706A (zh) * | 2017-10-27 | 2018-03-02 | 郑州云海信息技术有限公司 | 一种绑定方法及装置 |
CN107832213A (zh) * | 2017-11-03 | 2018-03-23 | 郑州云海信息技术有限公司 | 一种基于内存亲和性的hpl测试优化方法 |
CN108536526A (zh) * | 2017-03-02 | 2018-09-14 | 腾讯科技(深圳)有限公司 | 一种基于可编程硬件的资源管理方法以及装置 |
CN108762929A (zh) * | 2018-05-30 | 2018-11-06 | 郑州云海信息技术有限公司 | 在sql数据库下管理处理器核心数的方法和装置 |
CN108932172A (zh) * | 2018-06-27 | 2018-12-04 | 西安交通大学 | 一种基于OpenMP/MPI混合并行CFD计算的细粒度共享内存通信同步方法 |
CN109413598A (zh) * | 2018-11-26 | 2019-03-01 | 京信通信系统(中国)有限公司 | 一种资源分配与管理的方法及设备 |
CN110209548A (zh) * | 2018-04-19 | 2019-09-06 | 深圳市腾讯计算机系统有限公司 | 服务控制方法、系统、电子设备及计算机可读存储介质 |
CN111078587A (zh) * | 2019-12-10 | 2020-04-28 | Oppo(重庆)智能科技有限公司 | 内存分配方法、装置、存储介质及电子设备 |
CN111104198A (zh) * | 2019-11-08 | 2020-05-05 | 苏州浪潮智能科技有限公司 | 一种提高扫描系统插件运行效率的方法、设备及介质 |
CN111443947A (zh) * | 2020-03-24 | 2020-07-24 | 山东大学 | 基于众核平台上面向二代测序数据的序列比对方法及系统 |
CN111444025A (zh) * | 2020-04-14 | 2020-07-24 | 中国人民解放军国防科技大学 | 一种提升计算子系统能效的资源分配方法、系统及介质 |
CN111708631A (zh) * | 2020-05-06 | 2020-09-25 | 深圳震有科技股份有限公司 | 基于多路服务器的数据处理方法、智能终端及存储介质 |
CN111897651A (zh) * | 2020-07-28 | 2020-11-06 | 华中科技大学 | 一种基于标签的内存系统资源管理方法 |
CN112162780A (zh) * | 2020-09-24 | 2021-01-01 | 联想(北京)有限公司 | 应用运行控制方法、装置及电子设备 |
CN112256598A (zh) * | 2020-10-27 | 2021-01-22 | 上海壁仞智能科技有限公司 | 一种内存分配的方法及装置、内存寻址的方法及装置 |
CN112380017A (zh) * | 2020-11-30 | 2021-02-19 | 成都虚谷伟业科技有限公司 | 一种基于松散内存释放的内存管理系统 |
CN112415307A (zh) * | 2020-11-03 | 2021-02-26 | 北京机电工程研究所 | 一种用于并行测试的ats仪器资源控制方法 |
CN113238870A (zh) * | 2021-05-31 | 2021-08-10 | 山东中科好靓科技有限公司 | 一种基于多节点存储装置算力再利用算法 |
WO2022062833A1 (zh) * | 2020-09-22 | 2022-03-31 | 深圳云天励飞技术股份有限公司 | 内存分配方法及相关设备 |
WO2022089452A1 (zh) * | 2020-10-31 | 2022-05-05 | 华为终端有限公司 | 内存管理方法、装置、电子设备以及计算机可读存储介质 |
WO2023274278A1 (zh) * | 2021-07-01 | 2023-01-05 | 华为技术有限公司 | 一种资源调度的方法、装置及计算节点 |
CN115617451A (zh) * | 2022-09-23 | 2023-01-17 | 长春吉大正元信息技术股份有限公司 | 一种数据处理方法和数据处理装置 |
CN115729716B (zh) * | 2023-01-10 | 2023-05-09 | 云和恩墨(北京)信息技术有限公司 | 多线程内存管理方法及系统、计算机设备、存储介质 |
CN117311988A (zh) * | 2023-11-27 | 2023-12-29 | 沐曦集成电路(南京)有限公司 | 一种带掩码的规约操作优化方法、装置、设备及介质 |
CN117573378A (zh) * | 2024-01-15 | 2024-02-20 | 摩尔线程智能科技(北京)有限责任公司 | 内存管理方法、装置、设备及存储介质 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2012083695A1 (zh) * | 2011-07-28 | 2012-06-28 | 华为技术有限公司 | 内存迁移的实现方法和装置 |
CN102567107A (zh) * | 2011-10-31 | 2012-07-11 | 广东电网公司电力科学研究院 | 高并行的实时内存资源管理调度方法 |
-
2014
- 2014-11-21 CN CN201410677736.2A patent/CN104375899B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2012083695A1 (zh) * | 2011-07-28 | 2012-06-28 | 华为技术有限公司 | 内存迁移的实现方法和装置 |
CN102567107A (zh) * | 2011-10-31 | 2012-07-11 | 广东电网公司电力科学研究院 | 高并行的实时内存资源管理调度方法 |
Cited By (49)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104850461B (zh) * | 2015-05-12 | 2018-05-11 | 华中科技大学 | 一种面向numa架构的虚拟cpu调度优化方法 |
CN104850461A (zh) * | 2015-05-12 | 2015-08-19 | 华中科技大学 | 一种面向numa架构的虚拟cpu调度优化方法 |
CN106294190B (zh) * | 2015-05-25 | 2020-10-16 | 中兴通讯股份有限公司 | 一种存储空间管理方法及装置 |
CN106294190A (zh) * | 2015-05-25 | 2017-01-04 | 中兴通讯股份有限公司 | 一种存储空间管理方法及装置 |
CN106598724A (zh) * | 2015-10-14 | 2017-04-26 | 三星电子株式会社 | 用于在计算系统中管理内存的方法 |
CN106598724B (zh) * | 2015-10-14 | 2022-01-14 | 三星电子株式会社 | 用于在计算系统中管理内存的方法 |
CN105389211B (zh) * | 2015-10-22 | 2018-10-30 | 北京航空航天大学 | 适用于numa架构的内存分配方法及延时感知-内存分配装置 |
CN105389211A (zh) * | 2015-10-22 | 2016-03-09 | 北京航空航天大学 | 一种适用于numa架构内多节点间访存延时平衡的内存分配方法及延时感知-内存分配装置 |
CN106250350A (zh) * | 2016-07-28 | 2016-12-21 | 浪潮(北京)电子信息产业有限公司 | 一种基于numa架构的页缓存读取方法及系统 |
CN107969153A (zh) * | 2016-08-19 | 2018-04-27 | 华为技术有限公司 | 一种资源分配方法、装置及numa系统 |
WO2018032519A1 (zh) * | 2016-08-19 | 2018-02-22 | 华为技术有限公司 | 一种资源分配方法、装置及numa系统 |
CN108536526A (zh) * | 2017-03-02 | 2018-09-14 | 腾讯科技(深圳)有限公司 | 一种基于可编程硬件的资源管理方法以及装置 |
CN108536526B (zh) * | 2017-03-02 | 2022-09-13 | 腾讯科技(深圳)有限公司 | 一种基于可编程硬件的资源管理方法以及装置 |
CN107346267A (zh) * | 2017-07-13 | 2017-11-14 | 郑州云海信息技术有限公司 | 一种基于numa架构的cpu性能优化方法和装置 |
CN107479976A (zh) * | 2017-08-14 | 2017-12-15 | 郑州云海信息技术有限公司 | 一种多程序实例同时运行下cpu资源分配方法及装置 |
CN107704321A (zh) * | 2017-09-30 | 2018-02-16 | 北京元心科技有限公司 | 内存分配的方法、装置及终端设备 |
CN107748706A (zh) * | 2017-10-27 | 2018-03-02 | 郑州云海信息技术有限公司 | 一种绑定方法及装置 |
CN107832213A (zh) * | 2017-11-03 | 2018-03-23 | 郑州云海信息技术有限公司 | 一种基于内存亲和性的hpl测试优化方法 |
CN110209548A (zh) * | 2018-04-19 | 2019-09-06 | 深圳市腾讯计算机系统有限公司 | 服务控制方法、系统、电子设备及计算机可读存储介质 |
CN108762929A (zh) * | 2018-05-30 | 2018-11-06 | 郑州云海信息技术有限公司 | 在sql数据库下管理处理器核心数的方法和装置 |
CN108762929B (zh) * | 2018-05-30 | 2022-03-22 | 郑州云海信息技术有限公司 | 在sql数据库下管理处理器核心数的方法和装置 |
CN108932172A (zh) * | 2018-06-27 | 2018-12-04 | 西安交通大学 | 一种基于OpenMP/MPI混合并行CFD计算的细粒度共享内存通信同步方法 |
CN108932172B (zh) * | 2018-06-27 | 2021-01-19 | 西安交通大学 | 一种基于OpenMP/MPI混合并行CFD计算的细粒度共享内存通信同步方法 |
CN109413598A (zh) * | 2018-11-26 | 2019-03-01 | 京信通信系统(中国)有限公司 | 一种资源分配与管理的方法及设备 |
CN109413598B (zh) * | 2018-11-26 | 2021-07-23 | 京信通信系统(中国)有限公司 | 一种资源分配与管理的方法及装置 |
CN111104198A (zh) * | 2019-11-08 | 2020-05-05 | 苏州浪潮智能科技有限公司 | 一种提高扫描系统插件运行效率的方法、设备及介质 |
CN111078587A (zh) * | 2019-12-10 | 2020-04-28 | Oppo(重庆)智能科技有限公司 | 内存分配方法、装置、存储介质及电子设备 |
CN111443947B (zh) * | 2020-03-24 | 2022-09-27 | 山东大学 | 基于众核平台上面向二代测序数据的序列比对方法及系统 |
CN111443947A (zh) * | 2020-03-24 | 2020-07-24 | 山东大学 | 基于众核平台上面向二代测序数据的序列比对方法及系统 |
CN111444025A (zh) * | 2020-04-14 | 2020-07-24 | 中国人民解放军国防科技大学 | 一种提升计算子系统能效的资源分配方法、系统及介质 |
CN111708631A (zh) * | 2020-05-06 | 2020-09-25 | 深圳震有科技股份有限公司 | 基于多路服务器的数据处理方法、智能终端及存储介质 |
CN111897651B (zh) * | 2020-07-28 | 2024-03-19 | 华中科技大学 | 一种基于标签的内存系统资源管理方法 |
CN111897651A (zh) * | 2020-07-28 | 2020-11-06 | 华中科技大学 | 一种基于标签的内存系统资源管理方法 |
WO2022062833A1 (zh) * | 2020-09-22 | 2022-03-31 | 深圳云天励飞技术股份有限公司 | 内存分配方法及相关设备 |
CN112162780B (zh) * | 2020-09-24 | 2022-03-25 | 联想(北京)有限公司 | 应用运行控制方法、装置及电子设备 |
CN112162780A (zh) * | 2020-09-24 | 2021-01-01 | 联想(北京)有限公司 | 应用运行控制方法、装置及电子设备 |
CN112256598A (zh) * | 2020-10-27 | 2021-01-22 | 上海壁仞智能科技有限公司 | 一种内存分配的方法及装置、内存寻址的方法及装置 |
WO2022089452A1 (zh) * | 2020-10-31 | 2022-05-05 | 华为终端有限公司 | 内存管理方法、装置、电子设备以及计算机可读存储介质 |
CN112415307B (zh) * | 2020-11-03 | 2023-01-17 | 北京机电工程研究所 | 一种用于并行测试的ats仪器资源控制方法 |
CN112415307A (zh) * | 2020-11-03 | 2021-02-26 | 北京机电工程研究所 | 一种用于并行测试的ats仪器资源控制方法 |
CN112380017A (zh) * | 2020-11-30 | 2021-02-19 | 成都虚谷伟业科技有限公司 | 一种基于松散内存释放的内存管理系统 |
CN112380017B (zh) * | 2020-11-30 | 2024-04-09 | 成都虚谷伟业科技有限公司 | 一种基于松散内存释放的内存管理系统 |
CN113238870A (zh) * | 2021-05-31 | 2021-08-10 | 山东中科好靓科技有限公司 | 一种基于多节点存储装置算力再利用算法 |
WO2023274278A1 (zh) * | 2021-07-01 | 2023-01-05 | 华为技术有限公司 | 一种资源调度的方法、装置及计算节点 |
CN115617451A (zh) * | 2022-09-23 | 2023-01-17 | 长春吉大正元信息技术股份有限公司 | 一种数据处理方法和数据处理装置 |
CN115729716B (zh) * | 2023-01-10 | 2023-05-09 | 云和恩墨(北京)信息技术有限公司 | 多线程内存管理方法及系统、计算机设备、存储介质 |
CN117311988A (zh) * | 2023-11-27 | 2023-12-29 | 沐曦集成电路(南京)有限公司 | 一种带掩码的规约操作优化方法、装置、设备及介质 |
CN117311988B (zh) * | 2023-11-27 | 2024-03-12 | 沐曦集成电路(南京)有限公司 | 一种带掩码的规约操作优化方法、装置、设备及介质 |
CN117573378A (zh) * | 2024-01-15 | 2024-02-20 | 摩尔线程智能科技(北京)有限责任公司 | 内存管理方法、装置、设备及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN104375899B (zh) | 2016-03-30 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104375899B (zh) | 高性能计算机numa感知的线程和内存资源优化方法与系统 | |
US11704020B2 (en) | Precisely tracking memory usage in multi-process computing environment | |
Panwar et al. | Making huge pages actually useful | |
KR102051282B1 (ko) | 선택적 리소스 이동을 이용하는 네트워크 결합 메모리 | |
Gidra et al. | NumaGiC: A garbage collector for big data on big NUMA machines | |
US9851918B2 (en) | Copy-on-write by origin host in virtual machine live migration | |
CN102460400B (zh) | 基于管理程序的本地和远程虚拟内存页面管理 | |
US20080215845A1 (en) | Methods, Systems, and Media for Managing Dynamic Storage | |
CN107864211B (zh) | 集群资源调度方法及系统 | |
CN111813710B (zh) | 避免Linux内核内存碎片方法、设备及计算机存储介质 | |
CN107368379B (zh) | 面向EVP的跨Guest OS进程间通信方法及系统 | |
CN111782397B (zh) | 一种Linux页面替换机制的屏蔽方法 | |
CN101968772A (zh) | 嵌入式系统高效内存池的实现方法 | |
CN1560746A (zh) | 基于操作系统反向页表的页迁移和复制方法 | |
CN103365784A (zh) | 内存回收与分配的方法及装置 | |
CN104391803A (zh) | 一种分区操作系统的存储管理方法 | |
CN103699435A (zh) | 负载均衡方法及装置 | |
CN105677481A (zh) | 一种数据处理方法、系统及电子设备 | |
Dhawalia et al. | Chisel++ handling partitioning skew in MapReduce framework using efficient range partitioning technique | |
US20060230242A1 (en) | Memory for multi-threaded applications on architectures with multiple locality domains | |
KR20130122326A (ko) | 가상 스토리지 이미지 경량화 시스템 및 가상 스토리지 이미지 경량화 시스템의 입출력 방법 및 가상 스토리지 이미지 생성 방법 | |
CN102662857A (zh) | 用于对于存储进行虚拟化的设备和方法 | |
GB2585543A (en) | Data migration in a hierarchical storage management system | |
CN107807851A (zh) | 一种虚拟机内存在numa节点间的迁移方法和装置 | |
CN104750561A (zh) | 寄存器堆缓存资源的动态释放方法、系统及一种处理器 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |