一种基于RDMA协议的内存分配使用方法及系统与流程

文档序号:14156285阅读:346来源:国知局

本发明涉及存储技术领域,特别是涉及一种基于rdma协议的内存分配使用方法及系统。



背景技术:

利用远程直接内存访问(remotedirectmemoryaccess,简称pdma)协议进行消息通信,发送端和接收端需要分配一定量的内存并且将这些内存通过驱动接口ibv_reg_mr注册给ib网卡,才能实现消息的发送和接收。ibv_reg_mr接口的主要功能是告诉ib网卡可以访问的内存资源地址空间及其访问权限,如本地读写权限及远端读写权限。

图1示出了现有的基于rdma协议消息收发流程:步骤一,接收端分配足够的接收内存并调用ibv_reg_mr接口注册给无线宽带技术(infiniband,简称ib)网卡,然后调用驱动接口ibv_post_recv等待接收发送端发送的数据;步骤二、发送端分配发送内存并调用ibv_reg_mr接口注册给ib网卡,然后将待发送数据拷贝到发送内存中,最后调用驱动接口ibv_post_send将数据发送出去;步骤三、当接收端接收到数据后,可以通过驱动接口ibv_poll_cq获取接收到的数据内存存储空间,然后接收端就可以获取这些数据。需要注意的是,步骤一必须在步骤二之前完成,即接收端必须预先注册足够的用于接收数据的内存,如果接收端接收内存不足或没执行步骤一,那么步骤二中发送端调用ibv_post_send接口会失败。

现有的技术发送端和接收端进程启动后,首先就需要分配大量的接收内存和发送内存并注册给ib卡,并且这些内存资源都是一次性分配完成,后续两个进程间数据收发都依赖于这些注册内存。而在大规模集群存储系统中,一个存储节点将会有大约40个进程,每个进程都需要分配这些注册内存资源,因此不仅会造成存储节点内存消耗过快,而且会严重影响单个进程的启动效率。



技术实现要素:

有鉴于此,本发明的目的在于提供一种基于rdma协议的内存分配使用方法及系统,可以提高进程启动效率,减少启动后发送压力小情况下系统内存资源消耗。其具体方案如下:

一种基于rdma协议的内存分配使用方法,包括:

进程启动后分配设定个数值的发送注册内存单元;所述设定个数值小于所述发送注册内存单元个数的最大值;

进程发送数据时消耗已分配的所述发送注册内存单元;

若已分配的所述发送注册内存单元不足,重新动态分配设定个数值的所述发送注册内存单元。

优选地,在本发明实施例提供的上述基于rdma协议的内存分配使用方法中,若已分配的所述发送注册内存单元不足,重新动态分配设定个数值的所述发送注册内存单元之后,还包括:

进程总共分配的所述发送注册内存单元的个数为最大值后,停止分配所述发送注册内存单元。

优选地,在本发明实施例提供的上述基于rdma协议的内存分配使用方法中,所述设定个数值为所述发送注册内存单元个数的最大值的1/n;其中n>1且n为正整数。

优选地,在本发明实施例提供的上述基于rdma协议的内存分配使用方法中,所述设定个数值为所述发送注册内存单元个数的最大值的1/10。

优选地,在本发明实施例提供的上述基于rdma协议的内存分配使用方法中,进程启动后分配设定个数值的发送注册内存单元的同时,还包括:

分配固定个数值的接收注册内存单元。

本发明实施例还提供了一种基于rdma协议的内存分配使用系统,包括:

初始分配模块,用于进程启动后分配设定个数值的发送注册内存单元;所述设定个数值小于所述发送注册内存单元个数的最大值;

消耗模块,用于进程发送数据时消耗已分配的所述发送注册内存单元;

动态分配模块,用于若已分配的所述发送注册内存单元不足,重新动态分配设定个数值的所述发送注册内存单元。

优选地,在本发明实施例提供的上述基于rdma协议的内存分配使用系统中,所述动态分配模块,还用于进程总共分配的所述发送注册内存单元个数为最大值后,停止分配所述发送注册内存单元。

优选地,在本发明实施例提供的上述基于rdma协议的内存分配使用系统中,所述设定个数值为所述发送注册内存单元个数的最大值的1/n;其中n>1且n为正整数。

优选地,在本发明实施例提供的上述基于rdma协议的内存分配使用系统中,所述设定个数值为所述发送注册内存单元个数的最大值的1/10。

优选地,在本发明实施例提供的上述基于rdma协议的内存分配使用系统中,所述初始分配模块,还用于分配固定个数值的接收注册内存单元。

本发明所提供的一种基于rdma协议的内存分配使用方法及系统,包括:进程启动后分配设定个数值的发送注册内存单元;设定个数值小于发送注册内存单元个数的最大值;进程发送数据时消耗已分配的发送注册内存单元;若已分配的发送注册内存单元不足,重新动态分配设定个数值的发送注册内存单元。本发明随着发送数据压力的增加而动态地增加发送注册内存单元的分配,这样在保证基于rdma协议正常的消息收发功能前提下,大大减少进程启动后注册内存分配数量,并且当进程收发消息压力较小时能够维持较少的内存资源占用,从而提高单个进程的启动效率,避免集群节点的长期处于较高的内存消耗状态,改善节点内存消耗过快情况。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。

图1为现有的基于rdma协议消息收发流程示意图;

图2为本发明实施例提供的基于rdma协议的内存分配使用方法流程图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

本发明提供一种基于rdma协议的内存分配使用方法,如图2所示,包括以下步骤:

s201、进程启动后分配设定个数值的发送注册内存单元;设定个数值小于发送注册内存单元个数的最大值;

s202、进程发送数据时消耗已分配的发送注册内存单元;

s203、若已分配的发送注册内存单元不足,重新动态分配设定个数值的发送注册内存单元。

在本发明实施例提供的上述基于rdma协议的内存分配使用方法中,首先进程启动后分配设定个数值的发送注册内存单元;此时设定个数值小于发送注册内存单元个数的最大值;然后进程发送数据时消耗已分配的发送注册内存单元;若已分配的发送注册内存单元不足,重新动态分配设定个数值的发送注册内存单元。本发明随着发送数据压力的增加而动态地增加发送注册内存单元的分配,这样在保证基于rdma协议正常的消息收发功能前提下,大大减少进程启动后注册内存分配数量,并且当进程收发消息压力较小时能够维持较少的内存资源占用,从而提高单个进程的启动效率,避免集群节点的长期处于较高的内存消耗状态,改善节点内存消耗过快情况。

需要说明的是,现有的采用rdma协议进行数据传输过程中,需要预先注册大量的发送注册内存和接收注册内存,这些内存如果都在进程启动后一次性分配,将大大影响进程的启动效率,并且节点内存占用也会一直维持在较高的状态,本发明改进后这两方面将得到较大的改善,既保证了正常的消息收发功能,又减少了初始注册内存分配数量,从而提高了进程启动效率,大大减少了多个进程启动后发送压力小情况下系统内存资源消耗。

进一步地,在具体实施时,在本发明实施例提供的上述基于rdma协议的内存分配使用方法中,在执行步骤s203若已分配的发送注册内存单元不足,重新动态分配设定个数值的发送注册内存单元之后,还包括以下步骤:

进程总共分配的发送注册内存单元的个数为最大值后,停止分配发送注册内存单元。

也就是说,为了保证不影响正常的消息收发功能,随着发送数据压力的增加,动态地增加发送注册内存单元的分配,直至分配数量达到发送注册内存单元个数的最大值后应不再分配发送注册内存单元。

在具体实施时,在本发明实施例提供的上述基于rdma协议的内存分配使用方法中,为了保证每次分配的发送注册内存单元的个数保持一致,设定个数值可以为发送注册内存单元个数的最大值的1/n;其中n>1且n为正整数。

具体地,设定个数值可以设置为发送注册内存单元个数的最大值的1/10。这样除了初始注册内存单元的分配,可以动态地至少九次增加发送注册内存单元的分配。

在具体实施时,在本发明实施例提供的上述基于rdma协议的内存分配使用方法中,进程启动后分配设定个数值的发送注册内存单元的同时,还包括:

分配固定个数值的接收注册内存单元。

例如,进程启动后可以分配m个接收注册内存单元和n/10个发送注册内存单元;其中n为发送注册内存单元个数的最大值。

基于同一发明构思,本发明实施例还提供了一种基于rdma协议的内存分配使用系统,由于该系统解决问题的原理与前述一种基于rdma协议的内存分配使用方法相似,因此该系统的实施可以参见基于rdma协议的内存分配使用方法的实施,重复之处不再赘述。

在具体实施时,本发明实施例提供的基于rdma协议的内存分配使用系统,具体包括:

初始分配模块,用于进程启动后分配设定个数值的发送注册内存单元;设定个数值小于发送注册内存单元个数的最大值;

消耗模块,用于进程发送数据时消耗已分配的发送注册内存单元;

动态分配模块,用于若已分配的发送注册内存单元不足,重新动态分配设定个数值的发送注册内存单元。

在本发明实施例提供的上述基于rdma协议的内存分配使用系统中,通过上述三个模块的相互作用,对于单个进程而言,减少了初始注册内存分配数量,从而提高了进程启动效率;对于整个存储节点而言,大大减少了多个进程启动后发送压力小情况下系统内存资源消耗。

进一步地,在具体实施时,在本发明实施例提供的上述基于rdma协议的内存分配使用系统中,为了保证不影响正常的消息收发功能,动态分配模块,还用于进程总共分配的发送注册内存单元个数为最大值后,停止分配发送注册内存单元。

在具体实施时,在本发明实施例提供的上述基于rdma协议的内存分配使用系统中,为了保证每次分配的发送注册内存单元的个数保持一致,设定个数值可以为发送注册内存单元个数的最大值的1/n;其中n>1且n为正整数。

具体地,设定个数值可以设置为发送注册内存单元个数的最大值的1/10。

在具体实施时,在本发明实施例提供的上述基于rdma协议的内存分配使用系统中,初始分配模块,还用于分配固定个数值的接收注册内存单元。

本发明实施例提供的一种基于rdma协议的内存分配使用方法及系统,包括:进程启动后分配设定个数值的发送注册内存单元;设定个数值小于发送注册内存单元个数的最大值;进程发送数据时消耗已分配的发送注册内存单元;若已分配的发送注册内存单元不足,重新动态分配设定个数值的发送注册内存单元。本发明随着发送数据压力的增加而动态地增加发送注册内存单元的分配,这样在保证基于rdma协议正常的消息收发功能前提下,大大减少进程启动后注册内存分配数量,并且当进程收发消息压力较小时能够维持较少的内存资源占用,从而提高单个进程的启动效率,避免集群节点的长期处于较高的内存消耗状态,改善节点内存消耗过快情况。

最后,还需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。

以上对本发明所提供的基于rdma协议的内存分配使用方法及系统进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1