一种基于RDMA的分布式内存文件系统的制作方法

文档序号:14910760发布日期:2018-07-10 23:20阅读:478来源:国知局

本发明涉及分布式存储系统领域,特别涉及一种基于RDMA的分布式内存文件系统。



背景技术:

远程直接内存访问(Remote Direct Memory Access,RDMA)是指在没有双方主机操作系统直接参与下,直接访问远端内存,从而提供高带宽、低延迟的特性。

分布式环境下的数据传输决定了系统整体的I/O性能,这类技术被广泛的应用在分布式文件系统和数据库系统中。传统的分布式系统大多以磁盘作为存储介质,并通过基于TCP/IP的远程过程调用模块进行数据传输,由于磁盘带宽低,延迟高,因此网络传输模块本身不会成为瓶颈,近年来,内存日益廉价,将存储和计算转移到内存的内存计算已经成为一种趋势,存储介质性能提升的同时,网络传输也面临极大的挑战。

目前,尚不存在通用的数据传输模块,用于高效处理不同的网络I/O特性,同时,在并发控制上,仍采用集中式的同步模型,严重影响系统的可扩展性。



技术实现要素:

本发明旨在至少解决上述技术问题之一。

为此,本发明的目的在于提出一种基于RDMA的分布式内存文件系统,以减少文件在读写时的数据复制、降低响应延迟,并在程序软件中提高文件访问的整体效率。

为了实现上述目的,本发明的实施例公开了一种基于RDMA的分布式内存文件系统,所述分布式内存文件系统将各节点内存通过RDMA进行网络互联,所述文件系统包括客户端和服务端,所述客户端提供文件访问接口,供上层应用调用,所述服务端提供元数据服务和数据服务,所述分布式内存文件系统执行以下动作:S1:在所述分布式内存文件系统初始化阶段,将集群用于文件存储的内存统一划分,并注册到网卡,以支持远端节点进行内存直接访问,进而构建分布式共享内存池;S2:在所述分布式内存共享池之上,通过两级哈希索引分别进行文件索引及文件数据块索引,为所述文件系统提供查询服务;S3:通过自识别远程过程调用方法处理所述客户端的请求,并返回处理结果。

根据本发明实施例的基于RDMA的分布式内存文件系统,减少文件在读写时的数据复制、降低响应延迟,并在程序软件中提高文件访问的整体效率。

另外,根据本发明上述实施例的基于RDMA的分布式内存文件系统,还可以具有如下附加的技术特征:

进一步地,所述分布式共享内存池依次存放超级块、消息池、链式哈希索引表、元数据存储块和数据存储块。

进一步地,数据布局区域中接收远程节点的直接访问;所述链式哈希索引表和所述元数据存储区中,服务节点响应所述客户端并发请求,对元数据执行查询和更新;元数据根据文件路径名哈希分散到整个集群,各节点独立维护文件的元数据和数据。

进一步地,所述超级块用于存放元数据块数量、元数据块大小、数据块数量和数据块大小,所述超级块在所述文件系统系统启动时被各节点远程读取。

进一步地,所述消息池包括多个消息区,所述多个消息区分配给连入系统的不同客户端,以便当客户端有新请求时,所述客户端将新请求远程地写入服务节点的所属消息区,服务端接收线程监测到新请求后,利用自识别方法快速定位消息并处理返回。

进一步地,所述链式哈希索引表用于在查询文件元数据时,计算文件全路径名的哈希值;将所述哈希值作为索引表索引号,查询该索引号下的表项,进行文件名匹配,成功则获取元数据地址并根据地址访问元数据;如果文件名不匹配,则继续查找下一个表项,直到匹配成功。

进一步地,所述元数据存储块和所述数据存储块分别用于存放元数据和数据,所述元数据区和所述数据区被分割为固定大小元数据块和数据块,在所述元数据区和所述数据区的首部存放对应区域的空闲块元数据,以描述内存使用情况。

进一步地,所述两级哈希索引的步骤包括:在客户端发起文件访问请求时,根据文件全路径名计算存放该文件元数据的元数据服务器ID,其中,元数据服务器ID由系统配置文件决定;客户端将请求信息发往对应ID的元数据服务器,元数据服务器检测到新消息后,解析出请求内容,根据所述请求内容中的文件路径名进行第二次哈希值计算,根据第二次的哈希值访问所述链式哈希索引表,获取元数据信息,并做出相应的逻辑处理,返回请求结果。

进一步地,所述自识别远程过程调用方法包括:在所述客户端向所述服务端发送消息时,使用RDMA_WRITE_WITH_IMM原语携带消息内容,并在报文头部存放客户端元数据;在所述服务端返回请求结果时,通过RDMA原语将返回结果直接写回到所述客户端指定的内存区域,所述客户端将轮询地监测用于存放返回结果的内存区域,直到数据成功返回。

进一步地,所述客户端将自身ID以及时间戳存放到所述报文头部,所述客户端ID在连接建立时由服务端主节点分配,且全局唯一。

进一步地,在RDMA_WRITE_WITH_IMM消息成功送达之后,服务端根据完成信息获取报文头部的客户端元数据,并解析出客户端ID,根据客户端ID直接查询本地消息池的固定偏移位置,获取新的请求信息。

进一步地,当客户端数量超过所述服务端提前分配的消息池数量时,所述服务端查询已经断开连接的客户端并将其所占用的消息区转移给当前客户端;如果所有客户端均保持连接状态,则需重新申请消息区,注册到网卡并通知所述当前客户端。

本发明的附加方面和优点将在下面的描述中部分给出,部分将从下面的描述中变得明显,或通过本发明的实践了解到。

附图说明

本发明的上述和/或附加的方面和优点从结合下面附图对实施例的描述中将变得明显和容易理解,其中:

图1是本发明实施例的基于RDMA的分布式内存文件系统的执行动作流程图;

图2是本发明一个实施例的RDMA数据传输示意图;

图3是本发明一个实施例的服务节点共享内存的布局图;

图4是本发明一个实施例的数据收发时拷贝次数统计示意图;

图5是本发明一个实施例的自识别远程过程调用示意图。

具体实施方式

下面详细描述本发明的实施例,所述实施例的示例在附图中示出,其中自始至终相同或类似的标号表示相同或类似的元件或具有相同或类似功能的元件。下面通过参考附图描述的实施例是示例性的,仅用于解释本发明,而不能理解为对本发明的限制。

参照下面的描述和附图,将清楚本发明的实施例的这些和其他方面。在这些描述和附图中,具体公开了本发明的实施例中的一些特定实施方式,来表示实施本发明的实施例的原理的一些方式,但是应当理解,本发明的实施例的范围不受此限制。相反,本发明的实施例包括落入所附加权利要求书的精神和内涵范围内的所有变化、修改和等同物。

以下结合附图描述本发明。在介绍本发明的实施例之前,先对本发明的出现的术语进行说明。

直接内存访问(Direct Memory Access,DMA)允许某些硬件装置独立地直接读写内存,而不需要CPU的大量的参与,该技术用于缓解CPU对外设的处理压力,整个数据传输过程只需CPU在最开始进行初始化传输操作,然后将整个传输动作交给DMA控制器来执行完成。

远程直接内存访问(Remote Direct Memory Access,RDMA)是一种新型的网络通讯技术,它能实现在双方操作系统不直接参与的情况下直接访问远端内存,并实现高吞吐、低延迟的特性。RDMA通过让网络适配器将数据直接传输到对方的内存实现数据传输的零拷贝,从而消除了CPU和Cache的直接参与,并减少了冗余的现场切换。目前支持RDMA技术的网络协议栈包括Infiniband、RoCE(RDMA over Converged Ethernet)和iWARP,前两者由Mellanox提供硬件技术支持,特别地,后两者由于采用了普通以太网的数据链路层,因此均可与以太网完全兼容。图2展示了RDMA通信的具体流程:首先由本地CPU以MMIO的方式向网卡发起通信命令,本地网卡检测到新的命令之后,以DMA的方式从内存中读取待传输的数据,将数据打包,并在RDMA网络进行数据传输,对方网卡接收到数据之后,将数据以DMA的方式直接写入到内存对应的地址区域,并将相应的完成信息写入到完成队列,整个过程不涉及对方CPU参与,并绕过了双方的内核,实现了数据传输的零拷贝。通讯双方在建立通讯之前需要经过一下步骤:打开网卡设备;创建保护域,该保护域会与在后面阶段创建的对象绑定,以保障数据传输安全,任何跨域的操作将会引发通讯错误;注册内存,该阶段将通讯的内存进行注册,具体方法是建立该段内存用户态地址和内存地址的映射,并将映射表存到网卡缓存,同时生成该内存段的密钥对(lkey和rkey),网卡在本地或远程访问内存时需携带相应的密钥进行身份确认;创建CQ(Completion Queue),发送方在消息发送成功后或者接收方接收消息成功后均会将相应的完成信息放入完成队列,用户可以反复检测完成队列来验证消息发送是否完成;创建QP(Queue Pair),QP可以对等到TCP/IP的socket,QP由Send Queue和Receive Queue构成,发送方把要发送的消息放入发送队列,同时接收方将接收请求放入接收队列,双方通过这种方式进行网络通信;QP状态初始化,通讯双方创建一一对应的QP之后,需要进行一系列的握手状态转换,直到成功建立起通讯链路。QP可以建立不同的连接类型,包括RC(Reliable Connection)、UC(Unreliable Connection)和UD(Unreliable Datagram),RC模式下,QP只能进行一对一可靠传输,数据包发送成功后会有相应的确认信息反馈,UC模式下,QP进行一对一传输,无确认信息反馈,UD模式则无一对一的界定,也没有确认信息反馈,以上三种传输模式具有不同的特点,同时对通信原语的支持程度也各不相同。

内存计算是指,面对海量的数据以及高实时性处理的需求,传统的以磁盘为存储介质的存储系统因缓慢的访问速度而很难应对新的挑战,从而将存储系统转移到内存进行实时处理的新型处理模式。内存存储系统主要包含两类,分别是内存数据库系统和内存文件系统。本发明结合RDMA网络通讯对内存文件系统进行重构。目前比较主流的内存文件系统包括Alluxio、IGFS等。Alluxio主要用于解决Spark计算框架现存的问题,加速数据处理性能,并使用lineage实现数据的单份存储和可靠恢复。IGFS是一个介于计算框架和HDFS之间的缓存文件系统,向上层提供了兼容于HDFS的接口,但是不同于HDFS的是,IGFS没有单独的元数据服务器,而是采用了哈希的方式进行数据分布。

远程过程调用(Remote Procedure Call,RPC)是一种远程通讯协议,它能实现让运行在一台计算机上的程序远程地调用另一台计算机上面的函数,而用户无需关心底层的通讯交互策略。远程过程调用被广泛的应用在分布式系统领域,它采用了客户端-服务器的模型,调用过程总是由客户端发起,具体包括将调用函数序列号,调用函数参数等信息打包发送到服务端,然后服务端接收请求并执行,服务端执行完毕后将执行结果返回给客户端。

图1是本发明实施例的一种基于RDMA的分布式内存文件系统的执行动作流程图。如图1所示,根据本发明实施例的基于RDMA的分布式内存文件系统,首先将各节点内存通过RDMA进行网络互联,分布式内存文件系统包括客户端和服务端,客户端提供文件访问接口,供上层应用调用,服务端提供元数据服务和数据服务,分布式内存文件系统执行以下动作:

S1:在分布式内存文件系统初始化阶段,将集群用于文件存储的内存统一划分,并注册到网卡,以支持远端节点进行内存直接访问,进而构建分布式共享内存池。

S2:在分布式内存共享池之上,通过两级哈希索引分别进行文件索引及文件数据块索引,为文件系统提供查询服务;

S3:通过自识别远程过程调用方法处理客户端的请求,并返回处理结果。

需要说明的是,分布式共享内存池由各节点共享内存构成,各节点共享内存具有统一的数据布局,具体地,共享内存依次存放超级块、消息池、链式哈希索引表、元数据存储块和数据存储块(如图3),该共享内存池用于文件存储和消息传递,因此本文件系统的存储介质和通讯方式均发生改变,通过这种统一管理方式,使得软件栈整体变薄,处理速度更高。

在本发明的一个实施例中,数据布局区域中,超级块、消息池和数据区被注册到网卡,该区域可被远程节点直接访问,进而减少内存拷贝以提高效率;链式哈希索引表和元数据存储区由本地服务线程独立维护,具体方法是,服务节点响应所有的元数据请求,并完成相应的索引以及元数据的查询和更新;元数据根据文件路径名哈希分散到整个集群,各节点独立维护文件的元数据和数据,以提升文件系统的整体性能。

在本发明的一个实施例中,超级块用于存放文件系统的核心数据结构,具体包括元数据块数量、元数据块大小、数据块数量、数据块大小等。该区域在文件系统系统启动时将会被各节点远程读取,用于初始识别和定位。

在本发明的一个实施中,消息池用于客户端与服务端通讯,具体做法是,将消息池划分相同大小的消息区,每个消息区被一个客户端单独占有,即客户端绑定到该服务节点消息池的固定偏移,当客户端有新请求时,客户端新请求远程地写入该服务节点的所属消息区,服务端接收线程监测到新请求后,利用客户端独有的ID号查询对应消息区,识别消息类别并处理返回。

在本发明的一个实施例中,链式哈希索引表用于本地元数据索引,该索引表设置全局的统一入口,以线性表的形式排布,用于索引具体的链式表项,每个表项包含三个字段,分别是文件名、元数据地址、下一入口地址,具体方法是:在查询文件元数据时,首先计算文件全路径名的哈希值,将该值作为索引表索引号,查询线性表,读取对应表项的文件名并进行匹配,成功则获取元数据地址并根据地址访问元数据;如果文件名不匹配,则根据下一入口地址继续查找,直到匹配成功。

在本发明的一个实施例中,元数据存储块和数据存储块分别用于存放元数据和数据。在上述两个区域的首部存放对应区域的位图,用于表示该区域的占用情况。

在本发明的一个实施例中,链式哈希索引表用于本地元数据索引,每个入口包含三个字段,分别是文件名、元数据地址、下一入口地址,具体方法是:在查询文件元数据时,首先计算文件全路径名的哈希值,将该值作为索引表索引号,查询对应入口的文件名并进行匹配,成功则获取元数据地址并根据地址访问元数据;如果文件名不匹配,则根据下一入口地址继续查找,直到匹配成功。

根据本发明的内存文件系统在RDMA网络中的重构方法,使得系统整体性能大幅提升。传统的分布式文件系统,以缓慢的磁盘作为存储介质,用千兆网进行网络通讯,由于磁盘和千兆网本身延迟较高(毫秒级别),因此文件系统本身带来的性能损失较小,当把这类文件系统以内存作为存储介质,在整个数据通路中,文件系统本身占据了大量的延迟,期间引入了大量的数据拷贝(如图4)和冗余的现场切换,使得整体性能不能线性提升,为此本发明结合RDMA技术,专门提出了针对内存介质的优化方案,提出了更薄的数据管理层,构建分布式内存共享池,以哈希的方式定位文件并进行快速获取,使得整个数据通路的延迟变得极低,同时也保证了很高的系统吞吐量。

图5示例了本发明实施例的自识别远程调用技术,方法基于支持RDMA硬件技术网络互连的大内存集群,RDMA技术是指节点可以在无需远程CPU直接参与下实现远程内存的直接读写,大内存集群是指集群内各节点配备大容量内存且有空余内存用来构建分布式内存文件系统,方法包括:

在客户端向服务端发送消息时,采用了RDMA_WRITE_WITH_IMM原语进行数据发送和自识别,在服务端返回请求结果时,使用RDMA原语将返回数据写回。具体做法是:

在客户端向服务端发送消息时,RDMA_WRITE_WITH_IMM原语允许客户端在发送请求时携带客户端元数据,特别地,客户端将自身ID以及时间戳存放到该区域,以方便服务端快速识别定位;

在服务端返回请求结果时,通过RDMA原语将返回结果直接写回到客户端指定的内存区域,此时,客户端将轮询地监测用于存放返回结果的内存区域,直到数据成功返回。

在本发明的一个实施例中,客户端ID在连接建立时由服务端主节点分配,且全局唯一,这使得客户端可以通过其ID在服务端的消息池中自动占据一个消息区。

在本发明的一个实施例中,自识别无需服务端扫描整个消息池,RDMA_WRITE_WITH_IMM消息成功送达之后,服务端接收队列中的接收请求完成,并将完成信息放入完成队列,服务端通过独立线程循环访问完成队列,用于检测新的请求,服务端发现新消息之后,首先根据完成信息获取该消息携带的辅助信息,并解析出客户端ID,根据客户端ID直接查询本地消息池的固定偏移位置,获取新的请求信息,然后解析请求内容,在服务端执行相应函数,然后将执行结果返回。

在本发明的一个实施例中,当客户端数量达到一定数量,超过了服务端提前分配的消息池数量时,服务端查询已经断开连接的客户端并将其所占用的消息区转移给当前客户端;如果所有客户端均保持活跃状态,则需新申请消息区,注册到网卡并通知客户端。

根据本发明的自识别远程调用技术,远程请求得以及时响应。该技术具有如下优点:选用了RDMA_WRITE_WITH_IMM原语来发送消息,在保证较低延迟的前提下,通过携带辅助信息使得服务端可以快速检测识别,并做出及时处理;服务端选用了RDMA原语将请求结果写回,具有极低延迟的特性,使得整个往返延迟变得更低,同时,客户端在发出远程请求之前会提前分配存放返回结果的内存区域,并将对应地址附到请求信息中,因此服务端可直接按照所给地址进行远程写,在客户端内部可以很好的进行内存区域的并发控制,因此该技术能很好的适应高并发场景。

另外,本发明实施例的基于RDMA的分布式内存文件系统的其它构成以及作用对于本领域的技术人员而言都是已知的,为了减少冗余,不做赘述。

在本说明书的描述中,参考术语“一个实施例”、“一些实施例”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本发明的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不一定指的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任何的一个或多个实施例或示例中以合适的方式结合。

尽管已经示出和描述了本发明的实施例,本领域的普通技术人员可以理解:在不脱离本发明的原理和宗旨的情况下可以对这些实施例进行多种变化、修改、替换和变型,本发明的范围由权利要求及其等同限定。

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