一种内存共享的系统和装置及方法
技术领域
本发明涉及多核处理器技术领域,特别是涉及一种在多核处理器系统非一致内存访问(Non Uniform Memory Access,NUMA)中节点之间实现内存共享的系统和装置及方法。
背景技术
非一致内存访问(NUMA)是一个在多处理器系统中配置微处理器的簇的方法,这样可以在本地共享内存,提高系统扩展的性能和能力。
非一致内存访问被用于对称多处理系统(Symmetric Multi-Processing,SMP)中。对称多处理系统是″紧紧联系″、″共享一切″的系统,在这个系统里单一操作系统下的多重处理器通过公用总线或″互联″路径访问彼此的内存。对称多处理的一个局限性是当微处理器增加时,共享总线和数据路径变得超载并且成为性能瓶颈。非一致内存访问增加一个在几个微处理器中共享的内存媒介水平,这样一来不用所有的数据访问都在主要的总线上传输。
非一致内存访问一般是以“簇”的形式进行的。这个簇一般由四个微处理器(例如四个奔腾微处理器)组成,这四个微处理器通过一条局域总线(例如外围组件互联总线)与一个单独主板(也可能是一个卡)上的共享内存(叫做″L3缓存″)连接。这个单元可以添加到相似的单元,形成一个对称多处理系统,其中一条公用对称多处理总线连接所有的簇。这样一个系统典型的包含16到256个微处理器。对一个运行在对称多处理系统中的应用程序来说,所有单独的处理器内存看起来就像一个内存。但一个处理器在特定内存地址寻找数据的时候,它首先察看微处理器本身的L1缓存,然后是附近的稍微大些的L2缓存,再然后是本地处理器附近的“本地内存”,最后是位于另一个微处理器附近的″远程内存″。在互联网络里非一致内存访问把这些簇的每一个都看作一个″节点″。非一致内存访问维持所有节点上的数据的分级视图。使用可升级连贯接口(SCI)技术,数据被通过总线在非一致内存访问对称多处理系统的簇间移动。SCI在多重簇的节点之间与叫做″缓存一致″或一致性的东西相配。SMP和非一致内存访问系统典型的被用于像数据挖掘和决策支持系统这样的应用软件,在这些软件中处理任务可以被分配给许多在一个公用数据库上集体工作的处理器。
但是,在非一致内存访问管理的多核处理器系统中,处理器之间经常由于负载不平衡,造成内存资源不能被充分的利用。在现有的技术中,为了充分利用内存资源,技术人员往往要修改应用程序,这样做的不足在于增加了技术人员的工作量,而且效果也不好。
发明内容
本发明的目的在于提供一种内存共享的系统和装置及方法,其能够充分利用内存资源,提高整个系统的吞吐率和并行性能。
为了达到上述目的,本发明采取如下技术方案:
一种内存共享系统,包括具有至少一个处理器核和/或至少一个处理器的多个节点;每个所述节点的操作系统包括内存共享装置,所述内存共享装置包括:
内存信息收集及处理模块,用于收集其他节点发送来的远端内存空闲信息并从中找出有空闲内存的节点;
内存申请模块,用于向有空闲内存的节点发送内存申请信息来申请使用远端内存;
建立远端内存动态管理结构的模块,用于对从其他节点申请来的远端内存建立动态管理;
通信模块,与所述内存信息收集及处理模块、所述内存申请模块和所述建立远端内存动态管理的模块相连接,用于节点之间的通信。
较佳地,所述内存共享装置还包括:
内存归还模块,用于向其他节点归还使用完的内存;所述内存归还模块与所述通信模块连接。
较佳地,,所述内存共享装置还包括:
内存信息广播模块,用于向其他节点广播本地内存空闲信息;
内存分配模块,用于在接到远端节点的内存申请信息时,将本地空闲内存分配给远端节点使用,并更新本地的内存空闲信息;
所述内存信息广播模块和所述内存分配模块与所述通信模块连接。
较佳地,所述内存信息收集及处理模块,还用于从有空闲内存的节点中找出空闲内存最多的节点;
所述内存申请模块,用于向空闲内存最多的节点发送内存申请信息来申请使用远端内存。
较佳地,所述内存申请信息中包含申请的内存数量,所述申请的内存数量大于本地实际需要的内存数量。
较佳地,所述内存共享装置还包括内存回收模块,用于发送内存回收信息并接收其他节点归还的内存。
较佳地,所述内存归还模块还设定有一个预定时间,用于本地节点在使用完远端内存后,如果在所述预定时间内接收到原来拥有所述远端内存的节点发来的内存回收信息,则所述内存归还模块归还所述远端内存;否则,所述内存归还模块延迟所述预定时间后再归还所述远端内存。
较佳地,所述内存申请模块和所述内存归还模块被设为操作系统最高进程优先级。
一种内存共享装置,用于多核心的非一致内存访问中,包括:
内存信息收集及处理模块,用于收集其他节点发送来的远端内存空闲信息并从中找出有空闲内存的节点;
内存申请模块,用于向有空闲内存的节点发送内存申请信息来申请使用远端内存;
建立远端内存动态管理结构的模块,用于对从其他节点申请来的远端内存建立动态管理;
通信模块,与所述内存信息收集及处理模块、所述内存申请模块和所述建立远端内存动态管理的模块相连接,用于节点之间的通信。
较佳地,还包括:内存归还模块,用于向其他节点归还使用完的内存;所述内存归还模块与所述通信模块连接。
较佳地,还包括:
内存信息广播模块,用于向其他节点广播本地内存空闲信息;
内存分配模块,用于在接到远端节点的内存申请信息时,将本地空闲内存分配给远端节点使用,并更新本地的内存空闲信息;
所述内存信息广播模块和所述内存分配模块与所述通信模块连接。
较佳地,所述内存信息收集及处理模块,还用于从有空闲内存的节点中找出空闲内存最多的节点;
所述内存申请模块,用于向空闲内存最多的节点发送内存申请信息来申请使用远端内存。
较佳地,所述内存申请信息中包含申请的内存数量,所述申请的内存数量大于本地实际需要的内存数量。
较佳地,所述内存共享装置还包括内存回收模块,用于发送内存回收信息并接收其他节点归还的内存。
较佳地,所述内存归还模块还设定有一个预定时间,用于本地节点在使用完远端内存后,如果在所述预定时间内接收到原来拥有所述远端内存的节点发来的内存回收信息,则所述内存归还模块归还所述远端内存;否则,所述内存归还模块延迟所述预定时间后再归还所述远端内存。
较佳地,所述内存申请模块和所述内存归还模块被设为操作系统最高进程优先级。
一种内存共享方法,用于多核心的非一致内存访问中,包括如下步骤:
步骤S1,当前节点的内存不足时,向其他节点发出内存不足信息,收集其他节点中有空闲内存的节点信息,然后向所述有空闲内存的节点发出内存申请信息,请求使用远端内存;
步骤S2,所述有空闲内存的节点在收到所述内存申请信息后为当前节点分配远端内存并让当前节点动态管理并独占使用所述远端内存。
较佳地,所述内存共享方法还包括:
步骤S3,所述当前节点使用完所述远端内存后,归还所述远端内存。
较佳地,所述内存共享方法还包括:
步骤S4,原来拥有远端内存的节点对当前节点归还的内存进行回收。
较佳地,在步骤S1中,具体包括如下步骤:
步骤S11,当前节点的进程发生内存不足时,先在本地内存区里寻找空闲内存,若找到空闲内存,则使用该空闲内存;若没有找到,则进入步骤S12;
步骤S12,在分配给其他节点的内存区中寻找空闲内存,若找到,则发送内存回收信息并将该空闲内存收回;若没有找到,则进入步骤S13;
步骤S13,当前节点向其他节点发出内存不足的信息,收集其他节点中有空闲内存的节点信息,然后向所述有空闲内存的节点发出内存申请信息,请求使用远端内存。
较佳地,所述步骤S13具体包括:
步骤S131,当前节点向其他节点发出内存不足的信息,当其他节点收到当前节点发出的内存不足信息时,其他节点向当前节点发送内存空闲消息;
步骤S132,当前节点收集其他节点的内存空闲信息,并选择出空闲内存最多的节点;
步骤S133,当前节点向所述空闲内存最多的节点发送内存申请消息来申请使用远端内存;
并且包括所述步骤S2中,所述空闲内存最多的节点为当前节点分配远端内存,让当前节点动态管理并独占使用所述远端内存。
较佳地,在步骤S133中,所述内存申请消息包含申请的内存数量,所述申请的内存数量大于所述当前节点实际需要的内存数量。
较佳地,所述步骤S3中,在当前节点使用完所述远端内存后,还包括一个延迟归还步骤:如果在一个预定时间内接收到原来拥有所述远端内存的节点发来的内存回收信息,则当前节点归还所述远端内存;否则,当前节点延迟所述预定时间后再归还所述远端内存。
较佳地,将执行步骤S133的进程设为系统最高进程优先级。
较佳地,将执行步骤S3的进程设为系统最高进程优先级。
本发明产生的有益效果是:
(1)在对用户透明的情况下,通过借用远端空闲内存,以达到整个系统的负载平衡,即应用程序无需作任何修改,且应用程序并不知道也无需知道当前所使用的内存是本地内存还是远端内存,除了访问速度的差异,并无任何实质区别。
(2)本发明是基于一种租赁关系的动态共享,即内存客户端和内存服务器端的关系是内存租赁的关系,当内存服务器的某块内存被借给内存客户端以后,它就被该内存客户端独自占有,服务器端和其他客户端都不得使用该段内存,直至该段内存使用完后,才可由服务器分配给其他客户端,从而提高内存资源的利用率。
(3)本发明的内存租借是分布式的。每个节点既可以作为内存服务器,又可以作为内存客户端,且每个服务器均使用完全相同的算法完成远端内存的分配及定位。同时,由于每个节点都可以作为内存服务器,那么即使某个节点出现故障,整个系统也会正常工作,提高了整个系统的可靠性。
(4)本发明的内存租赁的实时性。在内存紧张时,并在进行任务调度时,内存服务器优先调度以缓解内存使用压力。
(5)本发明采用了动态内存预分配技术和延迟归还技术等优化技术,提高本内存租赁系统的性能。
附图说明
图1为本发明一个实施例的内存共享系统和装置示意图;
图2为本发明一个实施例的内存共享方法流程图。
图3为图2中步骤S1的具体步骤;
图4为图3中步骤S13的具体步骤。
具体实施方式
下面结合附图与具体实施方式对本发明作进一步详细描述。
本发明是基于多核心的非一致内存访问平台,提出一种对用户透明的基于租借的多个处理器核或者多个处理器间内存共享系统及装置和方法。
本发明的内存共享的系统,包括具有至少一个处理器核和/或至少一个处理器的多个节点(Node)。作为一种可实施方式,如图1所示,图中仅表示出非一致内存访问(NUMA)中的两个节点,标号100表示节点i,标号200表示另一个节点j,两个节点的操作系统上都采用了本发明的内存共享装置10,在图中的节点j中的内存共享装置没有完全示出。
节点100上还有应用程序101和操作系统的换页部件102。其中,该操作系统的换页部件102用于向内存共享装置申请空闲内存,用于提供给上层空闲的物理内存页面;
采用本发明的内存共享装置,应用程序并不知道当前访问的是本地内存还是远端内存。
如图1所示,节点100的本地内存可以自由分配,对于节点100而言,处于节点200上的内存是远端内存,节点100支配远端内存需要与节点200协商后才可分配,在这种情况下,节点100是内存客户端,节点200是内存服务器。节点之间是相对的,对于节点200而言,位于节点100上的内存是远端内存。
本发明的内存共享装置10,其基于多核心的非一致内存访问平台,包括:
通信模块17,用于节点操作系统间通信,该通信模块17可以采用本领域的常规技术来实现。
通信模块17与下述内存信息收集及处理模块12、所述内存申请模块13和所述建立远端内存动态管理结构的模块14相连接,用于节点之间的通信。
内存信息收集及处理模块12,用于收集外部节点发送来的远端内存空闲信息并从中找出有空闲内存的节点。
较佳地,所述内存信息收集及处理模块12从有空闲内存的节点中找出空闲内存最多的节点。
内存申请模块13,用于向所述有空闲内存的节点发送内存申请消息来申请使用远端内存。
较佳地,内存申请模块13向所述空闲内存最多的节点发送内存申请消息来申请使用远端内存。
较佳地,所述内存申请消息中含有要申请的内存数量的信息,所述要申请的内存数量大于当前节点实际需要的内存数量,这可以称作内存页面预分配技术,采用该技术能够一次获得多个远端内存页面,从而隐藏内存租赁的时间开销,并且能够在节点物理内存资源极度紧缺时加速页面的申请过程,使得系统的性能得到一定的优化。
较佳地,所述内存申请模块被设为操作系统最高进程优先级,使得系统在内存紧缺时能及时地获得远端内存以缓解内存压力。
远端内存动态管理模块14,用于对从其他节点申请来的远端内存动态的建立管理结构;
较佳地,所述内存共享装置还包括内存回收模块18,用于在本地节点内存不足时发送内存回收信息,和接收其他节点归还的内存。
较佳地,所述内存共享装置还包括内存归还模块15,用于向其他节点归还使用完的内存;所述内存归还模块15与所述通信模块17连接。
较佳地,所述内存归还模块15还设定有一个预定时间,用于本地节点在使用完远端内存后,如果在所述预定时间内接收到原来拥有所述远端内存的节点发来的内存回收信息,则所述内存归还模块归还所述远端内存;否则,所述内存归还模块15延迟所述预定时间后再归还所述远端内存。这可以称作延迟归还技术。
在获取远程内存的过程中需要花费一定的时间开销,可以维护一个远端内存池,即每次使用完远端内存后先归还到内存池中,以备下一次使用或者提供给其他进程使用。如果在一段预定时间范围内没有进程来使用这段远程内存,再将其归还,除非在这段时间内,原来拥有这段远端内存的节点发出内存归还消息。这种技术减少了内存申请的次数,所以减少了通信开销。
所述预定时间是由技术人员预先设置好的,一般是通过实验的方法使内存共享的性能达到所需要的状况来确定该预定时间的大小。
较佳地,所述内存归还模块15也被设为操作系统最高进程优先级,使得远端节点在内存紧缺时能及时地收回它租借出去的远端内存以缓解内存压力。
较佳地,所述内存共享装置还包括:内存信息广播模块11,用于向其他节点广播内存状态信息;和内存分配模块16,用于将本地空闲内存分配给远地节点使用,并更新本地的内存空闲信息;所述内存信息广播模块11和所述内存分配模块16与所述通信模块连接。
如图2所示为本发明的内存共享方法的流程图,包括如下步骤:
步骤S1,当前节点的内存不足时,向其他节点发出内存不足信息,收集其他节点中有空闲内存的节点信息,然后向所述有空闲内存的节点发出内存申请信息,请求使用远端内存。
较佳地,如图3所示,在步骤S1中,具体包括如下步骤:
步骤S11,当前节点的进程发生内存不足时,先在本地内存区里寻找空闲内存,若找到空闲内存,则使用该空闲内存;若没有找到,则进入步骤S12;
步骤S12,在分配给其他节点的内存区中寻找空闲内存,若找到,则发送内存回收信息并将该空闲内存收回;若没有找到,则进入步骤S13;
步骤S13,当前节点向其他节点发出内存不足的信息,收集其他节点中有空闲内存的节点信息,然后向所述有空闲内存的节点发出内存申请信息,请求使用远端内存。
较佳地,如图4所示,所述步骤S13具体包括:
步骤S131,当前节点向其他节点发出内存不足的信息,当其他节点收到当前节点发出的内存不足信息时,其他节点向当前节点发送内存空闲消息;
步骤S132,当前节点收集其他节点的内存空闲信息,并选择出空闲内存最多的节点;
步骤S133,当前节点向所述空闲内存最多的节点发送内存申请消息来申请使用远端内存;
较佳地,在步骤S133中,所述内存申请消息包含申请的内存数量,所述申请的内存数量大于所述当前节点实际需要的内存数量。
较佳地,将执行步骤S133的进程设为系统最高进程优先级。这样做的好处是使得系统在内存紧缺时能及时地申请到远端内存以缓解内存压力。
步骤S2,所述有空闲内存的节点在收到所述内存申请信息后为当前节点分配远端内存并让当前节点动态管理并独占使用所述远端内存。
较佳地,所述步骤S2中,所述空闲内存最多的节点为当前节点分配远端内存,让当前节点动态管理并独占使用所述远端内存。
较佳地,所述的内存共享方法,还包括:步骤S3,所述当前节点使用完所述远端内存后,归还所述远端内存。
较佳地,所述步骤S3中,在当前节点使用完所述远端内存后,还包括一个延迟归还步骤,即如果在一个预定时间内接收到原来拥有所述远端内存的节点发来的内存回收信息,则当前节点归还所述远端内存;否则,当前节点延迟所述预定时间后再归还所述远端内存。这样做的好处是:在该预定时间内,该远端内存能够被下一次使用或者提供给其他进程适用。所述预定时间是由技术人员预先设置好的,一般是通过实验的方法使内存共享的性能达到所需要的状况来确定该预定时间的大小。
较佳地,将执行步骤S3的进程也设为系统最高进程优先级。这样做的好处是使得远端节点在内存紧缺时能及时地收回它租借出去的远端内存以缓解内存压力。
较佳地,所述的内存共享方法,还包括:步骤S4,原来拥有远端内存的节点对当前节点归还的内存进行回收。
按照所述的内存共享方法,下面以在Linux系统中一个内存申请的例子来具体说明本发明的分布式内存租借的内存共享方法工作流程:
步骤(1)当节点j上的某个进程发生缺页中断时,缺页中断处理函数先在本地内存区里寻找空闲内存页面,若找到,则直接返回系统上层一个空闲页面;若失败则在分配给其他节点的内存区中寻找空闲内存页面,若找到,则将该空闲内存页面收回并返回上层该空闲页面;若没有找到,则向其他节点发出内存不足的消息;
步骤(2)其他节点向当前节点j发送内存状态消息;
步骤(3)当前节点j获取其他节点的内存空闲信息,并选择出空闲内存最多的节点i,向其内存服务器发送内存申请的消息;
步骤(4)节点i收到来自节点j的消息,解析消息内容,若为内存请求消息,则进入步骤(5);
步骤(5)从节点i本地内存区分配节点j所申请大小的内存,并更新本地内存空闲信息;
步骤(6)若分配成功则向节点j发送分配成功的消息,并告知分配内存的起始地址以及大小,若分配失败则向节点j发送分配失败的消息;
步骤(7)节点j收到来自节点i的消息,若是分配失败的消息则选择另外一个节点重复以上过程,若是分配成功的消息,则进入步骤(8);
步骤(8)节点j建立对远端内存的动态管理结构,独占使用该远端内存,并更新本地内存空闲消息;
步骤(9)节点j的缺页中断处理函数从上述远端内存中获得所需的空闲内存返回给上层。
按照上面介绍的内存共享方法,下面再以在Linux系统中一个内存归还的例子来具体说明分布式内存租借的内存共享方法的工作流程:
步骤(a)节点j使用完(从节点i租借的)远端内存后,将该远端内存释放到位于本地的远端内存池中,暂不归还,并启动计时器计时,在计时器达到设定的阈值之前,节点j的进程可以重新使用该段远端内存,并重置计时器;
步骤(b)若在计时器达到设定阈值之前,节点i向节点j发出内存归还消息,则节点j立即把远端内存归还给节点i,释放本地动态建立的远端内存的管理结构,更新本地内存空闲信息,并跳到步骤(d);
步骤(c)若计时器达到设定的阈值,节点j就把远端内存归还给节点i,释放本地动态建立的远端内存的管理结构,更新本地内存空闲信息;
步骤(d)节点i重新建立已归还的内存的管理结构,独占使用该段内存,并更新本地内存空闲信息。
由以上的详细介绍,可见本发明是基于多核心NUMA平台,提出了一种对用户透明的基于租借的内存共享系统和装置及方法。本发明使得在不修改应用程序的条件下,高负载的节点可以借用低负载节点的空闲内存资源,以提高整个系统的吞吐率和并行性能;同时,内存租赁的分布式特征使得本发明具有良好的稳定性和可靠性;最后,本发明的实时性和动态内存预分配技术以及延迟归还技术等优化技术提高了本内存租赁系统的性能。
以上所述内容,仅为本发明具体的实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围内。