Numa平台的内存缓存方法及系统的制作方法

文档序号:10654333阅读:295来源:国知局
Numa平台的内存缓存方法及系统的制作方法
【专利摘要】本发明公开了一种NUMA平台的内存缓存方法,所述方法包括:通过派发者线程接收来自网卡的任务请求,NUMA平台中每个分区中运行一个对网卡进行监听的派发者线程;将所述派发者线程的任务队列中的所述任务请求派发给工作者线程,通过所述工作者线程从所述任务队列中取出所述任务请求并进行处理,所述工作者线程为所述派发者线程下属的线程;通过所述工作者线程将缓存对象通过与缓存对象处于同一分区的网卡发出。本发明还公开了一种NUMA平台的内存缓存系统,能够最大限度减少远端IO访问,并且在线程之间进行相应的负载均衡,提高内存缓存系统的吞吐量和降低系统延迟。
【专利说明】
NUMA平台的内存缓存方法及系统
技术领域
[0001]本发明涉及互联网技术领域,尤其涉及一种NUMA平台的内存缓存方法及系统。
【背景技术】
[0002]在非一致性内存访问(NUMA,NonUniform Memory Access Architecture)平台上,不仅仅存在访存的不对称性,而且在输入输出(10)访问方面也具有不对称性。10访问不对称性对内存缓存系统的性能有重要的影响。内存缓存系统利用内存来存储访问代价昂贵的数据,在需要的时候直接返回暂存的数据,能够作为中间层加速系统的整体性能。目前并没有一种针对NUMA平台特点而设计的内存缓存系统。
[0003]对于包含8个节点、2个分区的双网卡NUMA平台,节点0-3属于分区I,节点4-7属于分区2。由于NUMA平台的特点,当工作者线程和其处理的数据缓存在不同分区中时,例如工作者线程运行在节点7(分区2)而对象缓存在节点0(分区I),由于分区间的数据传输开销比较大,造成网络数据传输速度比较慢。
[0004]因此,针对NUMA平台上的非对称1访问问题,需要一种能够适应NUMA特点的、多网卡情况下的内存缓存方案。

【发明内容】

[0005]为解决现有存在的技术问题,本发明实例提供一种NUMA平台的内存缓存方法及系统。
[0006]为达到上述目的,本发明实施的技术方案是这样实现的:
[0007]—种NUMA平台的内存缓存方法,所述方法包括:
[0008]通过派发者线程接收来自网卡的任务请求,NUMA平台中每个分区中运行一个所述派发者线程,所述分区是网卡与其临近的NUMA节点构成的区域;
[0009]将所述派发者线程的任务队列中的所述任务请求派发给工作者线程,通过所述工作者线程从所述任务队列中取出所述任务请求并进行处理,所述工作者线程为所述派发者线程下属的线程;
[0010]通过所述工作者线程将缓存对象通过与所述缓存对象所在同一分区的网卡发出。[0011 ]其中,通过派发者线程接收来自网卡的任务请求之前,所述方法还包括:建立所述派发者线程及其下属的所述工作者线程,所述派发者线程与所述NUMA平台的分区一一对应,一个所述派发者线程下属有至少一个所述工作者线程。
[0012]其中,所述方法还包括:检测到有派发者线程空闲时,则从检测为繁忙的派发者线程或者工作者线程拉取任务到所述空闲的派发者线程或者工作者线程。
[0013]其中,所述方法还包括:实时监测每个所述派发者线程任务队列的任务数;在所述任务数低于预设的低水印时,则认为所述派发者线程为空闲;在所述任务数高于预设的高水印时,则认为所述派发者线程为繁忙。
[0014]其中,所述NUMA平台包括两个或两个以上的网卡。
[0015]其中,所述将所述派发者线程的任务队列中的所述任务请求派发给工作者线程,包括:所述派发者线程根据任务请求的数据包含的所属分区位置信息,优先选择与数据所在位置处于同一分区的工作者线程进行处理。
[0016]一种NUMA平台的内存缓存系统,所述系统包括:
[0017]接收模块,用于通过派发者线程接收来自网卡的任务请求,NUMA平台中每个分区上运行一个所述派发者线程,所述分区是网卡与其临近的NUMA节点构成的区域;
[0018]处理模块,用于将所述派发者线程的任务队列中的所述任务请求派发给工作者线程,通过所述工作者线程从所述任务队列中取出所述任务请求并进行与数据相关处理,所述工作者线程为所述派发者线程下属的线程;
[0019]发送模块,用于通过所述工作者线程将缓存对象通过与所述缓存对象所在同一分区的网卡发出。
[0020]其中,所述系统还包括:建立模块,用于建立所述派发者线程及其下属的工作者线程,所述派发者线程与所述NUMA平台的分区一一对应,一个所述派发者线程下属有至少一个所述工作者线程。
[0021]其中,所述系统还包括:负载均衡模块,用于检测到有派发者线程空闲时,则从检测为繁忙的派发者线程或者工作者线程拉取任务到所述空闲的派发者线程或者工作者线程。
[0022]其中,所述负载均衡模块还用于实时监测每个所述派发者线程任务队列的任务数;在所述任务数低于预设的低水位时,则认为所述派发者线程为空闲;在所述任务数高于预设的高水位时,则认为所述派发者线程为繁忙。
[0023]其中,所述NUMA平台包括两个或两个以上的网卡。
[0024]其中,所述处理模块,用于将所述派发者线程的任务队列中的所述任务请求派发给工作者线程,包括:所述派发者线程根据任务请求的数据包含的所属分区位置信息,优先选择与数据所在位置处于同一分区的工作者线程进行处理。
[0025]本发明实例针对NUMA平台上的非对称1访问问题,通过对应不同网卡的派发者线程及其下属的工作线程,充分利用NUMA平台的特点,首次提出一种在NUMA平台下的内存缓存方法及系统,本发明实例能够最大限度减少远端1访问,并且在线程之间进行相应的负载均衡,提高内存缓存系统的吞吐量和降低系统延迟。
【附图说明】
[0026]在附图(其不一定是按比例绘制的)中,相似的附图标记可在不同的视图中描述相似的部件。具有不同字母后缀的相似附图标记可表示相似部件的不同示例。附图以示例而非限制的方式大体示出了本文中所讨论的各个实施例。
[0027]图1为本发明实施例基于NUMA平台的内存缓存方法的流程示意图;
[0028]图2为本发明实例双网卡情况下内存缓存系统的架构示意图;
[0029]图3为本发明实施例基于NUMA平台的内存缓存系统的组成结构示意图;
[0030]图4为双网卡NUMA平台的架构示意图。
【具体实施方式】
[0031 ]本发明实施例的主要思想是:根据NUMA平台下1访问的非对称性,充分利用NUMA平台的特点,减少内存缓存系统中线程的非对称访问,提出一种在NUMA平台下的内存缓存方法及系统,以最大限度减少远端1访问,并且本发明实施例的内存缓存方法及系统任务处理时在线程之间还进行相应的负载均衡,以提高系统吞吐量并降低系统延迟。
[0032]如图1所示,本发明实例还提供了一种基于NUMA平台的内存缓存方法,在NUMA平台机构的基础上实现,主要可以包括如下步骤:
[0033]步骤101:通过派发者线程(Dispatcher)接收来自网卡(NIC,Network InterfaceCard)的任务请求,NUMA平台中每个分区上运行一个所述派发者线程;
[0034]这里,所述NUMA平台包括含有至少两个或两个以上网卡的NUMA平台。派发者线程接收同一分区的网卡的任务请求。派发者线程在每个分区中运行的。所谓分区就是网卡与其临近的NUMA节点所构成的区域。在图4中所示的互联模块连接的两部分,这两部分分别运行一个派发者线程监听。分区中可以有一个或者多个NUMA节点。所述分区是网卡与其临近的NUMA节点构成的区域。步骤102:将所述派发者线程的任务队列中的所述任务请求派发给工作者线程(Worker),通过所述工作者线程从所述任务队列中取出所述任务请求并进行处理,所述工作者线程为所述派发者线程下属的线程;
[0035]这里,通过派发者线程接收任务请求后,将所述任务请求(Request)加入到所述派发者线程的任务队列中,之后,通过派发者线程将所述任务队列中的任务请求派发给下属的工作者线程。所述派发者线程下属有至少一个工作者线程,一般来说,一个派发者线程下属有多个工作者线程。例如,在如图2所示的双网卡实例中,每个分区中运行一个所述派发者线程,每个所述派发者线程下属有四个工作者线程。
[0036]其中,不同派发者线程之间能够相互通信。当派发者线程任务繁忙时,空闲的派发者线程可以主动从该派发者线程拉取任务进行处理。派发者线程有各自的任务队列;当任务队列中的任务数低于预设的某个低数值(低水印),即此派发者线程比较空闲,查看另外一个派发者线程的队列的任务数是否高于预设的某个高数值(高水印),如果高了,即此派发者线程比较繁忙,比较空闲的派发者线程就从该比较繁忙的任务队列中拉取任务过来处理。
[0037]步骤103:通过所述工作者线程将缓存对象通过与所述缓存对象处于同处一个分区的网卡发出。
[0038]这里,在步骤101之前,所述方法还包括:建立所述派发者线程及其下属的工作者线程,所述派发者线程与NUMA平台的分区一一对应。
[0039]被请求的数据中含有所属分区位置信息,派发者线程根据数据中的位置信息,优先选择数据所在分区的工作者线程进行处理;当派发者线程繁忙的时候进行负载均衡。
[0040]如图3所示,本发明实例还提供了一种基于NUMA平台的内存缓存系统,所述系统可以包括:接收模块,用于通过派发者线程接收来自网卡的任务请求,NUMA平台中每个分区上运行一个所述派发者线程;处理模块,用于将所述派发者线程的任务队列中的所述任务请求派发给工作者线程,通过所述工作者线程从所述任务队列中取出所述任务请求并进行处理,所述工作者线程为所述派发者线程下属的线程;发出模块,用于通过所述工作者线程将缓存对象通过与所述缓存对象所在分区的网卡发出。这里,所述NUMA平台包括含有两个或两个以上网卡的NUMA平台。
[0041]其中,所述系统还包括:建立模块,用于建立所述派发者线程及其下属的工作者线程,所述派发者线程与所述NUMA平台的分区一一对应,一个所述派发者线程下属有至少一个所述工作者线程。
[0042]其中,所述系统还包括:负载均衡模块,用于在检测到有派发者线程的任务队列为空时,则从其他的派发者线程拉取任务到任务队列为空的派发者线程中。这里,所述负载均衡模块还用于实时监测每个所述派发者线程的任务队列。
[0043]这里,所述处理模块,用于将所述派发者线程的任务队列中的所述任务请求派发给工作者线程,包括:所述派发者线程根据任务请求的数据包含的所属分区位置信息,优先选择与数据所在位置处于同一分区的工作者线程进行处理。
[0044]下面以双网卡的NUMA平台的情况为例,对本发明实施例的具体实现过程进行详细说明。
[0045]如图4所示,为双网卡情况下的NUMA平台架构示意图。其中,QPI表示QuickPathInterconnect,HT表示HyperTransport,两者都是芯片间的互联方式。芯片间的连接方式不限于QPI和HT,也可以是其他方式。
[0046]对于如图4所示的双网卡NUMA平台,如图2所示,其内存缓存方法具体实现过程如下:
[0047]A:针对每个分区运行一个派发者线程,如图2所示,两个派发者线程分别接收来自对应分区的网卡的任务请求。
[0048]B:每个派发者线程通过任务队列将任务请求派发给下属的工作者线程,工作者线程从任务队列中取出任务,分析任务内容,进行相应的处理工作。
[0049]C:工作者线程在任务请求处理完毕后,将相应缓存对象从与缓存对象所在同一分区的网卡发送出去。
[0050]D:负载均衡:两个任务派发者线程之间可以相互通信;当其中一个派发者线程比较繁忙的时候,另外一个空闲的派发者线程或者工作者线程可以主动拉取任务进行处理。
[0051]本发明实施例的内存缓存系统及方法在网站加速方面具有重要应用:将本发明实施例的内存缓存系统置于网站前端应用程序和后端数据库之间,用于缓存数据库的访问结果,减少数据库访问次数和访问延迟。例如,Facebook、YouTube、Wikipedia、Yahoo等等都在使用分布式缓存(Memcached)来支持其每天数亿级的页面访问。本发明实施例的内存缓存系统也可以作为Hadoop、MapReduce甚至虚拟机的加速系统。
[0052]以上所述,仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。
【主权项】
1.一种非一致性内存访问NUMA平台的内存缓存方法,其特征在于,所述方法包括: 通过派发者线程接收来自网卡的任务请求,NUMA平台中每个分区中运行一个所述派发者线程,所述分区是网卡与其临近的NUMA节点构成的区域; 将所述派发者线程的任务队列中的所述任务请求派发给工作者线程,通过所述工作者线程从所述任务队列中取出所述任务请求并进行处理,所述工作者线程为所述派发者线程下属的线程; 通过所述工作者线程将缓存对象通过与所述缓存对象处于同处一个分区的网卡发出。2.根据权利要求1所述的方法,其特征在于,通过派发者线程接收来自网卡的任务请求之前,所述方法还包括:建立所述派发者线程及其下属的所述工作者线程,所述派发者线程与所述NUMA平台的分区一一对应,一个所述派发者线程下属有至少一个所述工作者线程。3.根据权利要求1所述的方法,其特征在于,所述方法还包括: 检测到有派发者线程空闲时,则进行负载均衡操作。4.根据权利要求3所述的方法,其特征在于,所述方法还包括:实时监测每个所述派发者线程任务队列的任务数;在所述任务数低于预设的低水位时,则认为所述派发者线程为空闲;在所述任务数高于预设的高水位时,则认为所述派发者线程为繁忙。5.根据权利要求1所述的方法,其特征在于,所述NUMA平台包括两个或两个以上分属于不同分区的网卡。6.根据权利要求1所述的方法,其特征在于,所述将所述派发者线程的任务队列中的所述任务请求派发给工作者线程,包括: 所述派发者线程根据任务请求的缓存数据包含的所属分区位置信息,优先选择与数据所在位置处于同一分区的工作者线程进行处理。7.—种非一致性内存访问NUMA平台的内存缓存系统,其特征在于,所述系统包括: 接收模块,用于通过派发者线程接收来自网卡的任务请求,NUMA平台中每个分区上运行一个所述派发者线程,所述分区是网卡与其临近的NUMA节点构成的区域; 处理模块,用于将所述派发者线程的任务队列中的所述任务请求派发给工作者线程,通过所述工作者线程从所述任务队列中取出所述任务请求并进行处理,所述工作者线程为所述派发者线程下属的线程; 发出模块,用于通过所述工作者线程将缓存对象通过与所述缓存对象所在同一分区的网卡发出。8.根据权利要求7所述的系统,其特征在于,所述系统还包括:建立模块,用于建立所述派发者线程及其下属的工作者线程,所述派发者线程与所述NUMA平台的分区一一对应,一个所述派发者线程下属有至少一个所述工作者线程。9.根据权利要求7所述的系统,其特征在于,所述系统还包括:负载均衡模块,用于检测到有派发者线程空闲时,则从检测为繁忙的派发者线程或者工作者线程拉取任务到所述空闲的派发者线程或者工作者线程。10.根据权利要求9所述的系统,其特征在于,所述负载均衡模块还用于实时监测每个所述派发者线程任务队列的任务数;在所述任务数低于预设的低水印时,则认为所述派发者线程为空闲;在所述任务数高于预设的高水印时,则认为所述派发者线程为繁忙。11.根据权利要求7所述的系统,其特征在于,所述NUMA平台包括两个或两个以上的网卡。12.根据权利要求6所述的系统,其特征在于,所述处理模块,用于将所述派发者线程的任务队列中的所述任务请求派发给工作者线程,包括:所述派发者线程根据任务请求的数据包含的所属分区位置信息,优先选择与数据所在位置处于同一分区的工作者线程进行处理。
【文档编号】G06F9/50GK106020974SQ201610308324
【公开日】2016年10月12日
【申请日】2016年5月11日
【发明人】罗秋明, 王梅, 张义军, 刘杰
【申请人】深圳大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1