基于InfiniBand网络的分布式存储方法和系统的制作方法

文档序号:7700897阅读:166来源:国知局
专利名称:基于InfiniBand网络的分布式存储方法和系统的制作方法
技术领域
本发明涉及分布式存储领域,尤其涉及基于InfiniBand网络的分布式存储 方法和系统。
背景技术
目前,计算机集群系统上构建分布式的内存池,主要采取的方式是分布式 共享存储器(DSM, distributed shared memory),它是指使用一组互联的计 算机,尽管每台计算机拥有自己的存储器且在物理上是分布的,但看起来像具 有单一编址空间的单一存储器。 一旦实现了分布式共享存储器,那么在集群系 统中的任何一个节点的处理器都可以访问所有的存储单元,而不管存储器是否 在本地。使用DSM的引人之处在它的经济性和可扩展性,使用互联网就可以 构成存储空间巨大并且十分低廉的内存池。但是,在传统的DSM系统中,采用 全局统一编址,并且每个数据块在内存池中仅有一份数据拷贝,当多节点同时 访问同一数据块,就需要通过锁机制加以控制,在某一时刻只能有一个节点对 数据具有控制权,其余节点处于等待状态。这与内存池设计初衷相违背,内存 池设计的目的是用来缓存最热点的数据,多节点对同一数据访问会非常频繁 地出现,这直接导致了DSM实用价值不高。
于是,现有技术中包括提出了主拷贝的概念,在内存池中一个数据块可以 存在多份拷贝以减少对共享数据的等待时间,只有一个主拷贝,其余为副拷贝, 各个副拷贝如果对数据进行了更新,及时反馈给主拷贝。他们更进一步提出了 一套基于Hint的内存池优化策略,尤其是Best-Guess替换算法,极大地减 少了节点间通信,参见Hint-Based Cooperative Caching . ACM Transactions on Computer Systems, Vol. 18, No. 4, November 2000, Pages 387-419。但是他们设计的内存池是基于TCP/IP协议的以太网网络环境,以 太网的数据传输效率不高也阻碍了数据在存储节点间的传递速度,尤其对于数 据需要在各节点间频繁传递的应用时,内存池的数据缓存作用并不十分显著。但是如果现有技术的内存池移植到InfiniBand网络环境中,性能并不突出。 原因有二, 一是InfiniBand网络协议特有的优势发挥不出来,如RDMA和原子 操作,在操作前就应该知道数据块在远端节点上的具体位置,而在TCP/IP的 通信模式则是基于请求一响应的方式,需要通信双方z的协作配合来完成数据的 传输;二是,现有技术的内存池中的每个内存块是大小均等,虽然管理简单, 但是由于RDMA对大数据块的读写操作性能更佳,如果在InfiniBand网络环境 下仍然把内存划分为大小均等的±央,如果块划分得过小,就会造成RDMA操作 频繁,如果划分得过大,就会造成小数据也占有一整块,内存资源被严重浪费, 在理想情况下, 一个数据块,不论大小,占用一个等大小内存空间, 一次RDMA 操作即可完成读写,也就是说,内存块大小应该是不等长的,根据需要不同而 不同。

发明内容
为解决上述问题,本发明提供基于InfiniBand网络的分布式存储方法和 系统,能够充分发挥了 InfiniBand优点,实现了各节点间数据的快速转移。 本发明公开了基于InfiniBand网络的分布式存储方法,所述方法包括 步骤1,通过InfiniBand网络连接节点,所述节点包括管理主机和存储 节点;
步骤2,每两个所述节点间建立InfiniBand通信;步骤3,存储节点分配内存空间,对所述内存空间进行预注册,将分配的 内存空间的相关信息发送给其他节点,所述内存空间构建成内存池;
步骤4,管理主机通过InfiniBand通信接收所述存储节点的请求,提供 并维护所述节点从后端存储系统读入的主拷贝的全局位置信息;
步骤5,所述存储节点接收请求,根据从所述管理主机获得的同所述请求 相关的主拷贝的全局位置信息进行同所述请求对应的操作,或根据本地存储的 其他存储节点分配的内存空间相关信息进行所述请求对应的操作。
所述步骤1还包括,通过以太网络连接节点;
所述步骤2进一步为,
步骤21,建立以太网络通信;
步骤22,节点通过以太网络获得其他节点的InfiniBand通信句柄,并将所述InfiniBand通信句柄存储到所述节点的通信域。 所述步骤3进一步包括
步骤31,所述存储节点分配一块内存空间,将所述内存空间拴住,使所 述内存空间的数据不被交换到交换空间;
步骤32,对所述内存空间进行预注册,将与分配内存空间的位置和属性 相关信息记录到InfiniBand通信句柄中对应字段,并发送给其他节点;
步骤33,节点接收所述InfiniBand通信句柄中对应字段,并存储到所述 节点的通信域对应的通信句柄中。
所述步骤4中请求包括获取主拷贝位置信息请求和注册新主拷贝请求,
所述步骤4进一步为,
步骤51,所述管理主机将文件的数据块的主拷贝的全局位置信息以文件 名为索引存储到所述管理主机的主拷贝位置信息域;
步骤52,所述管理主机接收到包含文件名的获取主拷贝位置信息请求时, 通过所述文件名在所述主拷贝位置信息域中査找对应文件数据块的全局位置 信息,并返回给请求的存储节点;
步骤53,所述管理主机接收到从后端存储系统读入数据块的主拷贝的存 储节点发送的注册新主拷贝请求后,根据所述注册新主拷贝请求更新所述主拷 贝位置信息域。
在所述存储节点接收到读写请求时,所述步骤5进一步为,
步骤81,所述存储节点从请求中获得请求读取的数据块名字,所述数据 块名字包含数据块所在文件的文件名和所述数据块在所述文件中的偏移;
步骤82,根据所述数据块名字从所述管理主机中获得所述数据块的主拷 贝的全局位置信息,在所述内存池中査询所述数据块;
步骤83,如果所述数据块的主拷贝不在所述存储节点本地,则复制所述 主拷贝为一个副拷贝,存储到本地。
在所述存储节点接收到数据块查询请求时,所述步骤5进一步为, / 步骤91,所述存储节点获得数据块查询请求中包含的请求查询的数据块 名字;
步骤92,根据所述数据块名字从所述管理主机获得所述数据块的主拷贝 的全局位置信息,在所述内存池中查询所述数据块。在所述存储节点接收到替换请求时,所述步骤5进一步为, 步骤lll,所述存储节点从内存池中选择待用的内存子块; 步骤112,所述存储节点返回所述待用的内存子块位置信息。 所述步骤83还包括,z
步骤181,当存储节点对本地的一个副拷贝进行写操作完成后,发送多播 消息使其他存储节点上的副拷贝失效,将包含写操作中更新数据信息的Diff 结果发送给主拷贝所在存储节点,以使主拷贝进行同步更 新;
步骤182,当存储节点对本地的一个主拷贝进行写操作完成后,发送多播 消息,使每个副拷贝无效。 所述步骤83还包括,
步骤191,当存储节点对本地的一个副拷贝进行写操作前,发送多播消息, 其他存储节点上的副拷贝失效,将副拷贝对应的主拷贝加锁;
步骤192,当存储节点对所述副拷贝进行写操作完成后,将包含写操作中 更新数据信息的Diff结果发送给所述主拷贝所在存储节点,以使主拷贝解锁, 并进行同步更新;
步骤193,当存储节点对本地的一个主拷贝进行写操作前,对自身加锁, 并发送多播消息使每个副拷贝无效;
步骤194,当存储节点对本地的一个主拷贝进行写操作完成后,对自身解锁。
本发明还公开了基于InfiniBand网络的分布式存储系统,所述系统包括 通过InfiniBand网络连接的节点,所述节点包括一个管理主机和多个存储节 点;
每两个所述节点间建立InfiniBand通信; 所述存储节点包括内存分配模块和请求处理模块,
所述内存分配模块,用于分配内存空间,对所述内存空间进行预注册,将 分配的内存空间的相关信息发送给其他节点,所述内存空间构建成内存池;
所述请求处理模块,用于接收请求,根据从所述管理主机获得的同所述请 求相关的主拷贝的全局位置信息进行同所述请求对应的操作,或根据本地存储 的其他存储节点分配的内存空间相关信息进行所述请求对应的操作所述管理主机,用于通过InfiniBand通信接收所述存储节点的请求,提 供并维护所述节点从后端存储系统读入的主拷贝的全局位置信息。 所述节点还通过以太网络连接; 所述节点包括通信域;
所述每两个所述节点间建立InfiniBand通信进一步为,建立以太网络通 信;节点通过以太网络获得其他节点的InfiniBand通信句柄,并将所述 InfiniBand通信句柄存储到所述节点的通信域。
所述内存分配模块进一步用于分配一块内存空间,将所述内存空间拴住, 使所述内存空间的数据不被交换到交换空间;对所述内存空间进行预注册,将 与分配内存空间的位置和属性相关信息记录到InfiniBand通信句柄中对应字 段,并发送给其他节点;在接收其他存储节点发送的InfiniBand通信句柄中 对应字段时,将所述InfiniBand通信句柄中对应字段存储到所述存储节点的 通信域对应的通信句柄中;
所述管理主机还用于接收存储节点发送的InfiniBand通信句柄中对应字 段,并存储到所述管理主机的通信域对应的通信句柄中。
所述管理主机接收的请求包括获取主拷贝位置信息请求和注册新主拷贝 请求,
所述管理主机进一步包括信息存储模块、信息提供模块和信息更新模块,
所述信息存储模块,用于将文件的数据块的主拷贝的全局位置信息以文件 名为索引存储到所述管理主机的主拷贝位置信息域;
所述信息提供模块,用于所述管理主机接收到包含文件名的获取主拷贝位 置信息请求时,通过所述文件名在所述主拷贝位置信息域中査找对应文件数据 块的全局位置信息,并返回给请求的存储节点;
所述信息更新模块,用于所述管理主机接收到从后端存储系统读入数据块 的主拷贝的存储节点发送的注册新主拷贝请求后,根据所述注册新主拷贝请求 更新所述主拷贝位置信息域。
所述请求处理模块进一步包括读写请求处理模块和用于根据所述数据块 名字从所述管理主机中获得所述数据块的主拷贝的全局位置信息,在所述内存 池中査询数据块的査询模块,
所述读写请求处理模块,用于在所述存储节点接收到读写请求时,从请求中获得请求读取的数据块名字,所述数据块名字包含数据块所在文件的文件名 和所述数据块在所述文件中的偏移,将所述数据块名字发给所述查询模块; 所述査询模块在所述内存池中査询所述数据块;
所述读写请求处理模块,还用于根据查询结果,如果所述数据块的主拷^贝 不在所述存储节点本地,则复制所述主拷贝为一个副拷贝,存储到本地。 所述请求处理模块进一步包括査询请求处理模块,
所述査询请求处理模块,进一步用于在所述存储节点接收到数据块査询请 求时,获得数据块査询请求中包含的请求査询的数据块名字,将所述数据块名 字发给所述査询模块;
所述查询模块在所述内存池中査询所述数据块。
所述请求处理模块进一步包括替换请求处理模块,
所述替换请求处理模块,用于在所述存储节点接收到替换请求时,启动所 述替换模块从内存池中选择待用的内存子块;返回所述待用的内存子块位置信 息。
所述读写请求处理模块还用于当对本地的一个副拷贝进行写操作完成后, 发送多播消息使其他存储节点上的副拷贝失效,将包含写操作中更新数据信息 的Diff结果发送给主拷贝所在存储节点,以使主拷贝进行同步更新;当存储 节点对本地的一个主拷贝进行写操作完成后,发送多播消息,使每个副拷贝无 效。
所述读写请求处理模块还用于当存储节点对本地的一个副拷贝进行写操 作前,发送多播消息,其他存储节点上的副拷贝失效,将副拷贝对应的主拷贝 加锁;当存储节点对所述副拷贝进行写操作完成后,将包含写操作中更新数据 信息的Diff结果发送给所述主拷贝所在存储节点,以使主拷贝解锁,并进行 同步更新;当存储节点对本地的一个主拷贝进行写操作前,对自身加锁,并发 送多播消息使每个副拷贝无效;当存储节点对本地的一个主拷贝进行写操作完 成后,对自身解锁。
本发明的有益效果在于,通过利用RDMA(Remote Direct Memory Access) 和原子操作提高数据传输效率,降低存储CPU开销,并减少了节点间交互;通 过通讯机制的提前建立和内存预分配机制,最大程度地降低了通信开销,提高 数据传输效率;利用多数据拷贝减少节点间数据竞争,利用主副本区分管理,
19减轻维护数据一致性的复杂程度;利用基于本地的替换策略,减少了节点间交 互;以太网和InfiniBand网双网络连接,增强系统的健壮性。


图1是本发明基于InfiniBand网络的分布式存储方法的流程图2是本发明节点的连接结构图3是管理主机的数据结构图4是存储节点的数据结构图5是主拷贝和副拷贝关系示意图6是弱一致性的流程图7是强一致性的流程图8是存储节点的结构图9是管理主机的结构图。
具体实施例方式
下面结合附图,对本发明做进一步的详细描述。
本发明基于InfiniBand网络的分布式存储方法的流程如图1所示。 歩骤S101,通过InfiniBand网络连接节点。 所述节点包括管理主机和存储节点。
同时,通过以太网络连接节点,使得任意两个节点间的连接包括 InfiniBand网络和千兆以太网。管理主机和存储节点间的连接关系如图2所 示。
管理主机,用于存储并维护各存储节点内存子块的全局位置信息,并提供 通过文件名来检索该文件所有内存子块的位置信息,管理主机有两个守护线程 分别负责InfiniBand通信和以太网通信,每当有一个新请求到达时,创建一 个新线程来对请求进行响应。管理主机支持的请求包括获取主拷贝位置信息请 求和注册新主拷贝请求。
存储节点,每个存储节点在管理主机中注册一块内存,作为内存池的组成 部分。每个存储节点同样有两个守护线程分别负责InfiniBand通信和以太网 通信;支持的请求有对数据块的查询、读写和替换。存储节点同后端存储系统连接,可以从该后端存储系统提取数据。
其中管理主机为一台,存储节点为多台。
步骤S102,每两个节点间建立InfiniBand通信。 该步骤S10具体实施方式
如下。 z 步骤201,建立以太网络通信。
每个节点中包括通信域如图3和图4所示。管理主机中包括通信域和主拷 贝位置信息域,如图3所示。其中,通信域包括InfiniBand通信句柄和以太 网句柄。
以太网间通信使用Socket套接字,把Socket句柄信息存储到通信域的以 太网句柄中,网络中有N节点,每个节点与基余N—1个节点,包括管理主机, 都有一个有效Socket句柄,并把该节点与自身通信的句柄设为NULL,共N个 有效句柄。
步骤202,节点通过以太网络获得其他节点的InfiniBand通信句柄,并 将该InfiniBand通信句柄存储到该节点的通信域。
每个节点通过获取网络设备(IB HCA)及端口的属性,并创建保护域(PD)、 完成队列(CQ);再利用步骤201中的Socket句柄进行以太网通信,显式传 递队列对儿(QP)相关信息,包括Port LID和QP Number,给通信对方节点, 然后转变QP队列对儿状态,使其进入可通信状态,把得到的句柄信息存入通 信域的InfiniBand通信句柄空间中。InfiniBand通信句柄信息包括lid,qpn, psn rkey, vaddr,其中,rkey和vaddr的值暂时为空,在进行内存的预注册 时加入相关的值。因为InfiniBand网络协议也是点对点通信,所以,也有N 个有效的InfiniBand通信句柄。
lid, qpn, psn rkey, vaddr是InfiniBand协议中通讯所必须的要素,lid 本地节点的标识号,Qpn队列对儿号,psn包序列号,rkey远端注册的内存的 键值,vaddr远端注册内存的首地址偏移。
在任意两节点间都建立InfiniBand网络和以太网的双网络连接的目的包 括第一,InfAniBand网络建立初始化连接需要通过以太网来交换信息;第 二,增强系统的健壮性,如果InfiniBand网络传输失败,还可以通过以太网 进行传输。
步骤S103,存储节点分配内存空间,对该内存空间进行预注册,将分配的内存空间的相关信息发送给其他节点,该内存空间构建成内存池。
该步骤S10具体实施方式
如下所述。
步骤301,所述存储节点分配一块内存空间,将所述内存空间拴住(pin), 使所述内存空间的数据不被交换到交换空间(Swap)。
步骤302,对该内存空间进行预注册,将与分配内存位置和属性相关注册 信息记录到InfiniBand通信句柄中对应字段,并发送给其他节点,节点接收 所述InfiniBand通信句柄中对应字段,并存储到所述节点的通信域对应于所 述发送节点的通信句柄中。
在InfiniBand协议下,对分配的内存空间进行提前注册,把内存注册生 成句柄mr,再通过以太网通信,接收信息节点将远端内存键值(mr-〉rkey)、 内存空间首地址(vaddr )和内存空间大小(mem—size)等信息填入通信域相 关联的InfiniBand通信句柄中。
步骤303,存储节点采用Slab分配器管理内存空间的分配和释放。
通过步骤S103,只需要一次注册,在使用该内存池中任一内存子块时, 只需计算出该内存子块相对于所在节点的内存空间的首地址的偏移,便可以 和远端节点进行数据的相关操作。
为了更有效地使用内存,采用Slab分配器来对内存空间的分配释放等相 关操作进行管理。
InfiniBand通信协议支持三种通信方式,包括Send/Receive、 RDMA read/write和原子操作。
其中RDMA和原子操作是InfiniBand协议所特有的,RDMA不使用通信被 动方的CPU资料,原子操作保证执行的操作的原子性。该三种通信方式适用于 不同的应用情况,当需要利用通信被动方的CPU做进一步地处理时,只能用 Send/Receive操作;如果通信主动方已经知道它所需要资源在何处,不需要 通信被动方CPU做相关处理时,可以使用Send/Receive,也可以使用RDMA, 但RDMA节省CPU资源,提高通信效率,在此情况下,本发明都采用RDMA进行 通信;当通信主动方已经知道资源在何处y并要对资源的某些地方做少量的数 据修改,采用原子操作。
本发明的尽可能多地使用RDMA和原子操作,以发挥InfiniBand的优势。 在本发明中,对数据块的读写操作都是采用RDMA read/write;对各种结构体
22标志的修改,都采用原子操作。
为了支持RDMA和原子操作,通信前必须已经知道它所需要资源存储的具 体位置,并且读到数据后必须能判断出该数据是否已失效等相关信息,所以, 本发明的内存池与现有技术以太网的内存池有如下不同
第一,本发明中在内存池中任何一个内存子块都可以通过该节点的句柄信
息和内存子块相对于内存空间首地址偏移联合唯一决定,由此可确定内存子块 在内存池中的位置。
第二,任何一个内存子块都包含块头和数据,其中块头包括数据标志位, 分别记录,数据是否有效、是否是文件的数据块的主拷贝、是否加锁、是否是 向导标识以及向导地址(可以为空)相关信息,该块头中和各标志位相对于该 子块的首地址的偏移是固定的,也就是说,如果知道了内存子块的位置,通过 计算,就可以得到子块各标志位的位置。从而,在通信前便可以计算出资源存 储的具体位置,以及该资标志位的位置,可以通过RDMA读写数据或者原子操 作来修改该资源的标志位。
步骤S104,管理主机通过InfiniBand通信接收所述存储节点的请求,提
供并维护所述节点从后端存储系统读入的主拷贝的全局位置信息。
管理主机中包括两个信息域通信域和主拷贝位置信息域,如图3所示其 中主拷贝为内存节点从后端存储系统读入的数据块。
通信域的初始化工作在步骤S102和步骤S103中已经完成。 主拷贝位置信息域记录的是主拷贝的全局位置信息。如图3所示,主拷贝 的定位是以它所属文件的文件名为关键字索引,通过对文件名进行哈希计算, 根据哈希值,找到相对应文件信息,再在文件信息中找到文件的数据块的主拷 贝的全局位置信息。初始化时哈希表为空,在运行一段时间后,它会指向一系 列的文件名,再由文件名关联相应的数据块的主拷贝的全局位置信息。
管理主机启动两个通信线程作守护线程, 一个是InfiniBand通信线程, 一个是基于Socket的通信线程。当有新请求到达时,通信线程就会创建一个 新线程来处理相应的请求,处理结束,自动销毁该线程。由于要频繁^k创建和 删除线程,所以本发明使用线程池对线程进行管理。
管理主机支持的请求包括获取主拷贝位置信息请求和注册新主拷贝请求。 管理主机处理请求的过程具体如下所述。步骤401,管理主机接收到包含文件名的获取主拷贝位置信息请求时,通 过所述文件名在所述主拷贝位置信息域中査找对应文件数据块的全局位置信 息,并返回给请求的存储节点。
具体实施方式
为由文件名通过哈希计算在哈希表找到该文件所有数据i央
的主拷贝的全局位置信息,返回结果给请求的存储节点。
步骤402,管理主机接收到从后端存储系统读入数据块的主拷贝的存储节 点发送的注册新主拷贝请求后,根据所述注册新主拷贝请求更新所述主拷贝位 置信息域。
根据注册新主拷贝请求中文件名判断所述主拷贝位置信息域中是否存储 对应记录,如果是,则用新主拷贝的全局位置信息更新所述对应记录;否则,
建立基于所述文件名的结构体,在所述主拷贝位置信息域中存储所述新主拷贝 的全局位置信息。
管理主机InfiniBand通信采用Send/Receive操作。
因为,两种请求都需要管理主机做哈希计算和査询等相关工作,所以必须 知道请求是何时到达。
步骤S105,存储节点接收请求,从所述管理主机获得请求相关的主拷贝 的全局位置信息,根据所述全局位置信息进行同所述请求相应的操作或根据本 地存储的其他节点的分配的内存空间相关信息,进行所述请求相应的操作。
存储节点数据结构如图4所示,其中存储节点上有三个信息域通信域、 最老块时间域和本地内存子块的位置信息域。
通信域的初始化工作在步骤S102和步骤S103中已经完成。
最老块时间域,用来存储其它节点上最早最少使用块(LRU)的时间信息, 如图4所示,用以估算内存池全局最老块的位置信息。最老时间域中存储的信 息采用的是惰性更新机制,当某一节点的LRU发生变化时,它不会主动去通 知其它节点更新最老时间域,而是等到因为某种请求,两节点在通信时,才会 彼此交换LRU,更新各自的最老块时间域。每个存储节点都存储有其余存储节 点上LRU块的时间信息。因为每次进行替换时都要取其他存储节点的LRU和自 身的LRU比较,所以从效率上考虑,本发明采用了大顶堆排序方式来组织管理 最老块时间域中记录的其他存储节点的LRU。
本地内存子块的位置信息域,用于记录管理本地内存子块的相关信息,如
24图4所示。本地内存的每个内存子块都对应有一个位置信息区,记录该内存子 块查找路径。
对于不同内存子块连接,采作三种形式, 一种是普通的链式连接,把最近 新生成的子块加入到链表首部;第二种是接LRU方式把所有的子块连接成一个 LRU链表,并随着子块的使用,实时地调整该LRU链表,该链表是为了计算全 局最老时间块而设置的,该LRU链表为最老块时间表;第三种是把所有的子块 按子块名的排序建立平衡二叉树(AVL树),AVL树的有序的二叉树,査询时 间logN,査询效率较高。在本发明具体实施例中,该三种连接方式同时存在, 当有一个内存子块发生变化,该三种链表都要作对应的调整。
存储节点也启动两个通信线程,InfiniBand通信线程和基于Socket的通 信线线程。当有新请求到达时,通信线程就会创建一个新线程来处理相应的请 求,使用线程池对线程进行管理。
存储节点上支持的请求有三种分别为数据块査询请求,替换请求,读写请求。
步骤501,在存储节点接收到査询请求或接收到读写请求进行读取前,进 行査询操作。
在本发明中数据块名字包括数据块所在文件的文件名和该数据块在文件 中的偏移。具体査询步骤如下所述。
步骤511,所述存储节点通过向所述管理主机发送包含所述文件名的获取 主拷贝位置信息请求,将所述文件的所有数据块的主拷贝的全局位置信息预读 到本地。
对文件的所有数据块进行预读是为了减少同管理主机间的频繁通信。 步骤512,所述存储节点根据所述数据块的主拷贝的全局位置信息在内存 池中査询所述数据块的主拷贝,如果査询到,则返回査询到的主拷贝的位置信 息,否则,执行步骤513。
进行査询的具体实施方式
如下。 /根据获得的全局位置信息到相应节点上读取对应内存子块的块头,块头中 数据块名字和欲査询数据块名比较,如果匹配,査询成功,如果不匹配,査看 块头中的向导位,如果向导位有效,说明数据块已经被替换到另一个节点,则 按所述向导地址査找下一节点。如果最后査找到的内存子块向导位为无效或査询的节点数超过预设值,则查询失败。
配置预设值为5。设置一个向导计数器,初始值设为5次,每查询一个节 点,计数器值减一,减到零仍没查找到主拷贝,认为査询失败,从后端重新读 入数据块,在管理主机上修改主拷贝的全局位置信息。如此操作,虽然对一个 数据块会出现两个主拷贝,但在管理主机上只能査询到新主拷贝的位置信息, 旧的主拷贝被称为野数据,没有指针指向它,也不会再被节点访问,在长时间 不被使用,按S502的替换操作,其中数据被从内存池中删除。所以虽然在某 段时间会出现多个主拷贝,但不会影响数据一致性。
步骤513,所述存储节点根据数据块名字从所述后端存储系统读入所述数 据块的新主拷贝,从内存池中选择内存子块,将所述新主拷贝存储到所述内存 子块。
步骤514,所述存储节点返回所述数据块的新主拷贝的位置信息,并向所 述管理主机发送注册新主拷贝请求。
通过上述査询操作,不管数据以前是否缓存在内存池中,査询都能在内存 池中找到数据块的对应位置,除非该数据在后端存储系统中也不存在。
步骤502,存储节点接收到替换请求或从后端存储系统中读取新数据时, 从内存池中选择待用的内存子块。
选择完成后,如果是由替换请求引起选择的情况,该存储节点返回选择的 待用内存子块位置信息。
选择待用的内存子块具体实施方式
如下所述。
步骤521,所述存储节点根据通信域和本地内存子块位置信息域判断所述 内存池中是否存在空闲空间,如果所述存储节点本地存在,则从所述空闲空间 中选择的待用的内存子块;如果空闲空间不在所述存储节点本地,则将本地数 据块内容拷贝到所述空闲空间,本地腾出的内存空间为待用的内存子块;如果 内存池不存在空闲空间,执行步骤522。
步骤522,检查所述本地最老块时间表,判断所述本地最老块时间表中最 早最少使用的内存子块中存储数据是否为主拷贝,如果不是,选择所述内存子 块为待用的内存子块,执行步骤523,否则,执行步骤524。
步骤523,判断已选择的内存子块的空间加和是否小于要求选择的空间, 如果是,执行所述步骤521。步骤524,检査所述最老块时间域,选择所述最老块时间域中最早最少使 用的内存子块,确定所述内存子块所在节点,从该节点的本地最老块时间表中 选择一个或多个最早最少使用的内存子块,选择的内存子块的空间和大于或等 于要求选择的空间;在所述存储节点本地的内存子块的块头中设置向导标志位 为有效,记录向导地址为选择的最老内存子块位置,然后把本地数据块内容拷 贝到向导地址所指向的位置,在本地有腾出了足够的内存空间;腾出的内存空 间为待用的内存子块。
在进行读写时,本地腾空的位置用于新读取的数据块的写入。
新数据写入的具体操作为,把新到数据拷贝到本地腾空的内存空间,并把 子块头中子块名修改为新数据块的块名,并调整该块在LRU链表中位置至最 新;管理主机注册这个新数据块的位置。
如果找全局最早最少使用的块,即使花再高代价也不可能实现,因为每个 节点都在不停地运作,等收集到每个节点最老的块,决定出的全局最早最少使 用的块,可能已经过时。现有提出了一种次优而高效的算法Best-Guess R印lacement,只通过本节点存储的信息,来判断本节点认为的全局最早最少 使用的块。具体做法为每个节点都有一个最老时间存储域,存储其余节点上最 早最少使用数据块的使用时间,当其余节点上的最老时间发生变化时,不会主 动告诉其它节点,而是采用一种惰性策略,只有当两个节点在通信时,才会顺 便交换两个节点数据块最老时间给对方,对方对其最老时间存储域进行更新; 当计算全局最早最少使用的块时,从最老时间存储域找出最老的数据块和本地 的最早最少使用的数据块比较,时间最老的认为是全局最老的块。这样方法可 以减少大量的网络开销,对于有N个存储节点的系统来说,按这种策略决定出 来的块最坏情况下是第(N—1)(N — 2)/2老的块。详细计算过程见参考 Hint—Based Cooperative Caching . ACM Transactions on Computer Systems: Vol. 18, No. 4, November 2000, Pages 387-419。
但是,上述方法适用于内存池中子块为等大小情况,所以一个当数据块需 要替换时,只需要找到一块"最老时间块"出来就可以了。
本发明中内存子块是由slab管理,内存子块的长度为不等长,所以当两 个数据块大小不对等时, 一块数据要替换时,可能需要找好几个替换块。本发 明中通过其余节点最老时间和本节点中最老时间比较,确定出最老时间块所在节点,再从该节点的LRU中找到最早最少使用的若干个内存子块,使它们的 内存之和等于或大于欲替换的数据,如果找到的最早最少使用的内存子块的内 存与需要的内存空间差值超过某一常数,则把该若干内存子块中长度最大的块 分割成两个小块,把不使用的小块交给slab管理器的空闲链表,从而z保证一 个大的数据块不会被分割存储在不同的节点上。
例如,当一个大数据,假设大小为50M,需要从A节点转移到其它时,假 设计算得到全局最老时间块在C节点上,大小为30M,因为30M空间太小,还 要再找出20M的空间,这20M空间只能是C节点下一个最老块,尽管这个块可 能不如B节点的最老块老。这样做,是为了防止对一大数据转移时,还要分割, 存储在不同节点。
步骤503,存储节点接收到读写请求后按步骤501査询到请求读取的数据 块块在内存池中的位置,进行RDMA read/write操作,如果本节点没有空闲 内存,就要按步骤S502选择内存子块进行替换,进行数据的丢弃或转移,再 进行读写操作,如果所述数据块的主拷贝不在所述存储节点本地,则复制所述 主拷贝为一个副拷贝,存储到本地;读写操作后,要检査该数据块的信息头标 志位。
标志位如图4所示,标志位包括有效标志位,用于表示内存子块中数据是 否有效;主拷贝标志位,用于表示所存数据是否为数据块的主拷贝;锁标志, 用来防止多个请求同时对数据块修改,保证一致性;块长,数据块的长度;子 块名,用于记录存储的数据子块的数据块名字;向导位,用于记录主拷贝转移 的向导;向导地址,用于记录主拷贝转移的地址。
在内存池中相同的数据块可以有多份拷贝分别存储在不同的节点上,有效 减少数据在不同节点上的反复传递。
本发明把内存池中的内存块分为主拷贝和副拷贝。从后端存储系统中拷贝 到内存池中的块叫主拷贝块,由主拷贝块复制生成的副本叫做副拷贝。
当某一节点请求的数据块不在内存池中,则从后端存储系统中拷贝,生 成主拷贝;如果数据块在内存池中已存在主拷贝,但不在本地,则从主拷贝中 复制一个副拷贝。在内存池中, 一块数据只有一个主拷贝,和任意个副拷贝, 主拷贝和副拷贝关系如图5所示。对主拷贝块,在管理主机上建立全局的相关 信息对其进行注册维护和更新;对于副拷贝,由本地的存储节点负责维护,当数据不一致时,仅仅简单地使其无效。
查询到数据读取完成后进行的操作具体方式如下所示。
步骤531,如果该数据的标志位是有效的并且数据不是向导,则读写成功。 判断数据是不是向导的方法,将读取的数据块的块头中数据块名字和请求
操作的数据块名比较,如果匹配,说明不是向导,如果不匹配,说明是向导。 步骤532,如果标志位显示数据的无效的,则重新查询主拷贝的位置,再
重新进行读写。
步骤533,如果标志位显示数据有效但是向导,并且向导位标志为有效, 则取出向导地址,再按照该地址重新进行读写。
判断数据是不是向导的方法,将读取的数据块的块头中数据块名字和请求 操作的数据块名比较,判断是否匹配;如果匹配,则有效;否则,无效。向导 位有效,只是为了说明向导地址是有效地址;无效,说明向导地址是无效地址。
步骤534,如果标志位显示数据加锁,则说明数据正在更新中,等待随机 时长或预设时长,按原地址重新进行读写。
在存储节点上的InfiniBand通信中,数据块査询和数据块的替换采用 Send/Receive操作;数据块的读写采用RDMA read/write操作。
通过上述方法读写,不仅是RDMA操作降低CPU消耗,而且通信中不需要 使用发送缓冲和接收缓冲区在缓存数据,而直接写入到节点内存空间,实现数 据的零拷贝。
存储节点支持的两种一致性:弱一致性和强一致性。 弱一致性步骤如图6所示,
当存储节点对本地的一个副拷贝进行写操作完成后,发送多播消息使其他 存储节点上的副拷贝失效,将包含写操作中更新数据信息的Diff结果发送给 主拷贝所在存储节点,以使主拷贝进行同步更新。
当存储节点对本地的一个主拷贝进行写操作完成后,发送多播消息,使每 个副拷贝无效。
强一致性步骤如图7所示,
当存储节点对本地的一个副拷贝进行写操作前,发送多播消息,其他存储 节点上的副拷贝失效,将副拷贝对应的主拷贝加锁。
当存储节点对所述副拷贝进行写操作完成后,将包含写操作中更新数据信
29息的Diff结果发送给所述主拷贝所在存储节点,以使主拷贝解锁,并进行同 先审新
当存储节点对本地的一个主拷贝进行写操作前,对自身加锁,并发送多播 消息使每个副拷贝无效。
当存储节点对本地的一个主拷贝进行写操作完成后,对自身解锁。
Diff为同一数据的一个脏拷贝和一个干净拷贝的差异,脏拷贝是指对数 据进行了更改数据的操作。当数据的一个副拷贝进行了更新操作,把更新的数 据组成一个Diff报文,发送给主拷贝节点,主拷贝根据Diff更新自身数据。
使用Diff,可以大量减少冗余数据在节点间传输。
本发明基于InfiniBand网络的分布式存储系统,如图2所示,所述系统 包括通过InfiniBand网络连接的节点,所述节点包括一个管理主机和多个存 储节点。
每两个所述节点伺建立InfiniBand通信。 节点还通过以太网络连接;
节点包括通信域;每两个所述节点间建立InfiniBand通信进一步为,建 立以太网络通信;节点通过以太网络获得其他节点的InfiniBand通信句柄, 并将所述InfiniBand通信句柄存储到所述节点的通信域。
存储节点800的结构如图8所示,包括内存分配模块810和请求处理模块
820。
存储节点800具有所述通信域、用于记录本地内存子块的相关信息的本地 内存子块位置信息域、用于记录其他存储节点800上最早最少使用的内存子块 的时间信息的最老块时间域;所述本地内存子块位置信息域中还包括用于记录 本地最早最少使用的内存子块的时间信息的本地最老块时间表。
内存分配模块810,用于分配内存空间,对所述内存空间进行预注册,将 分配的内存空间的相关信息发送给其他节点,所述内存空间构建成内存池。
内存分配模块810进一步用于分配一块内存空间,将所述内存空间拴住, 使所述内存空间的数据不被交换到交换空间;对所述内存空间进行预注册,将 与分配内存空间的位置和属性相关信息记录到InfiniBand通信句柄中对应字 段,并发送给其他节点;在接收其他存储节点800发送的InfiniBand通信句 柄中对应字段时,将所述InfiniBand通信句柄中对应字段存储到所述存储节点800的通信域对应的通信句柄中。
内存分配模块810还用于采用Slab分配器管理内存空间的分配和释放。
请求处理模块820,用于接收请求,根据从管理主机900获得的同所述请 求相关的主拷贝的全局位置信息进行同所述请求对应的操作,或根据本地存储 的其他存储节点800分配的内存空间相关信息进行所述请求对应的操作。
请求处理模块820进一步包括读写请求处理模块821、査询请求处理模块 822、替换请求处理模块823、用于根据所述数据块名字从管理主机900中获 得所述数据块的主拷贝的全局位置信息,在所述内存池中査询数据块的査询模 块824,以及用于从内存池中选择待用的内存子块的替换模块825。
读写请求处理模块821,用于在所述存储节点800接收到读写请求时,从 请求中获得请求读取的数据块名字,所述数据块名字包含数据块所在文件的文 件名和所述数据块在所述文件中的偏移,将所述数据块名字发给査询模块 824;査询模块824在所述内存池中査询所述数据块。
读写请求处理模块821,还用于根据査询结果,如果所述数据块的主拷贝 不在存储节点800本地,则复制所述主拷贝为一个副拷贝,存储到本地。
査询请求处理模块822,进一步用于在存储节点800接收到数据块査询请 求时,获得数据块査询请求中包含的请求査询的数据块名字,将所述数据块名 字发给査询模块824;查询模块824在所述内存池中査询所述数据块。
査询模块824进一步包括
位置信息预读模块,用于通过向管理主机900发送包含所述文件名的获取 主拷贝位置信息请求,将所述文件的所有数据块的主拷贝的全局位置信息预读 到本地;
数据查找模块,用于根据所述数据块的主拷贝的全局位置信息在内存池中 査询所述数据块的主拷贝,如果查询到,则返回査询到的主拷贝的位置信息, 否则,根据数据块名字从所述后端存储系统读入所述数据块的新主拷贝,启动 替换模块825从内存池中选择待用的内存子块,将所述新主拷贝存储到所述内 存子块; y
位置信息更新模块,用于返回所述数据块的新主拷贝的位置信息,并向所 述管理主机900发送注册新主拷贝请求。
位置信息更新模块用于更新所述存储节点800的本地内存子块位置信息域。
替换请求处理模块823,用于在存储节点800接收到替换请求时,启动替 换模块825从内存池中选择待用的内存子块;返回所述待用的内存子块位置信 息。 z
替换模块825进一步包括空闲空间查找模块、本地最早最少使用内存査找 模块、完成判断模块、全局最早最少使用内存査找模块。
空闲空间査找模块,用于根据通信域和本地内存子块位置信息域判断所述 内存池中是否存在空闲空间,如果存储节点800本地存在空闲空间,则从所述 空闲空间中选择的待用的内存子块;如果空闲空间不在存储节点800本地,则 将存储节点800本地的内存子块的数据转存到所述空闲空间,本地腾出的内存 空间为待用的内存子块;如果内存池不存在空闲空间,则被腾空的本地的内存 子块为所述待用的内存子块;如果内存池中不存在空闲空间,则启动本地最早 最少使用内存査找模块。
本地最早最少使用内存查找模块,用于检査所述本地最老块时间表,判断 所述本地最老块时间表中最早最少使用的内存子块中存储数据是否为主拷贝, 如果不是,选择所述内存子块为所述待用的内存子块,启动所述完成判断模块, 否则,启动全局最早最少使用内存査找模块。
完成判断模块,判断已选择的内存子块的空间加和是否小于要求选择的空 间,如果是,则启动空闲空间查找模块。
全局最早最少使用内存查找模块,检査所述最老块时间域,选择所述最老 块时间域中最早最少使用的内存子块,确定所述内存子块所在节点,从所述节 点的本地最老块时间表中选择一个或多个最早最少使用的内存子块,选择的内 存子块的空间加和大于或等于要求选择的空间;将存储节点800本地的内存子 块的数据转存到所述选择的内存子块,被腾空的所述本地的内存子块为所述待 用的内存子块。
内存子块中包括用于记录标志位和管理控制信息的块头;
全局最早最少使用内存査找模块还用于在存储节点800本地的数据z被转 存的内存子块的块头中设置指向选择的内存子块的向导标志位,记录向导地 址。
数据查找模块在根据所述数据块的主拷贝的全局位置信息在内存池中查询所述数据块的主拷贝时进一步用于根据所述全局位置信息到相应节点上读 取对应内存子块的块头,将所述块头中数据块名字和被査询的数据块名比较, 如果匹配,查询成功;否则,如果所述块头中包含向导标志位,向导地址指向 另一个节点,则按所述向导地址查找下一节点;如果最后査找到的内存子块向 导为空或査询的节点数超过预设值,则查询失败。
所述块头中包括有效标志位和存储的数据的数据块名字, 读写请求处理模块821在根据査询结果复制所述主拷贝为一个副拷贝存 储到本地时进一步用于将査询到的内存子块的块头中的数据块名字同请求操 作的数据块名字比较,如果匹配,则读写成功,否则,根据所述有效标志位判 断内存子块中数据是否有效,如果无效,则重新査询主拷贝的位置,进行读写, 如果有效,则按向导地址指向的位置重新进行读写。
所述块头中还包括加锁标志位,如果加锁表明内存子块中数据正在更新; 读写请求处理模块821在读写时还用于判断内存子块的加锁标志位判断 是否加锁,如果是,则等待随机或预设时间,重新进行读写。
存储节点800进行査询和替换时,所用所述Infiniband通信采用 Send/Receive操作,进行读写时,所用所述Infiniband通信采用RDMA read/write操作。
在一个实施例中,为保持系统中数据一致,读写请求处理模块821还用于 当对本地的一个副拷贝进行写操作完成后,发送多播消息使其他存储节点800 上的副拷贝失效,将包含写操作中更新数据信息的Diff结果发送给主拷贝所 在存储节点800,以使主拷贝进行同步更新;当存储节点800对本地的一个主 拷贝进行写操作完成后,发送多播消息,使每个副拷贝无效。
在另一个实施例中为保持系统中数据一致,读写请求处理模块821还用于 当存储节点800对本地的一个副拷贝进行写操作前,发送多播消息,其他存储 节点800上的副拷贝失效,将副拷贝对应的主拷贝加锁;当存储节点800对所 述副拷贝进行写操作完成后,将包含写操作中更新数据信息的Diff结果发送 给所述主拷贝所在存储节点800,以使主拷贝解锁,并进行同步更新;当存储 节点800对本地的一个主拷贝进行写操作前,对自身加锁,并发送多播消息使 每个副拷贝无效;当存储节点800对本地的一个主拷贝进行写操作完成后,对 自身解锁。
33存储节点800对标志位进行修改时,所用所述Inf iniband通信采用原子 操作。
管理主机900,用于通过InfiniBand通信接收存储节点800的请求,提 供并维护所述节点从后端存储系统读入的主拷贝的全局位置信息。
管理主机900还用于接收存储节点800发送的InfiniBand通信句柄中对 应字段,并存储到所述管理主机的通信域对应的通信句柄中。
管理主机900接收的请求包括获取主拷贝位置信息请求和注册新主拷贝 请求,
管理主机900结构如图9所示,包括信息存储模块910、信息提供模块920 和信息更新模块930,
信息存储模块910,用于将文件的数据块的主拷贝的全局位置信息以文件 名为索引存储到管理主机900的主拷贝位置信息域;
信息提供模块920,用于管理主机900接收到包含文件名的获取主拷贝位 置信息请求时,通过所述文件名在所述主拷贝位置信息域中查找对应文件数据 块的全局位置信息,并返回给请求的存储节点800;
信息更新模块930,用于管理主机900接收到从后端存储系统读入数据块 的主拷贝的存储节点800发送的注册新主拷贝请求后,根据所述注册新主拷贝 请求更新所述主拷贝位置信息域。
信息更新模块930进一步用于根据注册新主拷贝请求中文件名判断所述 主拷贝位置信息域中是否存储对应记录,如果是,则用新主拷贝的全局位置信 息更新所述对应记录;否则,建立基于所述文件名的结构体,在所述主拷贝位 置信息域中存储所述新主拷贝的全局位置信息。
管理主机900所用的InfiniBand通信采用Send/Receive操作。
本领域的技术人员在不脱离权利要求书确定的本发明的精神和范围的条 件下,还可以对以上内容进行各种各样的修改。因此本发明的范围并不仅限于 以上的说明,而是由权利要求书的范围来确定的。
权利要求
1.一种基于InfiniBand网络的分布式存储方法,其特征在于,所述方法包括步骤1,通过InfiniBand网络连接节点,所述节点包括管理主机和存储节点;步骤2,每两个所述节点间建立InfiniBand通信;步骤3,存储节点分配内存空间,对所述内存空间进行预注册,将分配的内存空间的相关信息发送给其他节点,所述内存空间构建成内存池;步骤4,管理主机通过InfiniBand通信接收所述存储节点的请求,提供并维护所述节点从后端存储系统读入的主拷贝的全局位置信息;步骤5,所述存储节点接收请求,根据从所述管理主机获得的同所述请求相关的主拷贝的全局位置信息进行同所述请求对应的操作,或根据本地存储的其他存储节点分配的内存空间相关信息进行所述请求对应的操作。
2. 如权利要求1所述的基于InfiniBand网络的分布式存储方法,其特征 在于,所述步骤1还包括,通过以太网络连接节点;所述步骤2进一步为,步骤21,建立以太网络通信;步骤22,节点通过以太网络获得其他节点的InfiniBand通信句柄,并将 所述InfiniBand通信句柄存储到所述节点的通信域。
3. 如权利要求2所述的基于InfiniBand网络的分布式存储方法,其特征 在于,所述步骤3进一步包括步骤31,所述存储节点分配一块内存空间,将所述内存空间拴住,使所 述内存空间的数据不被交换到交换空间;步骤32,对所述内存空间进行预注册,将与分配内存空间的位置和属性 相关信息记录到InfiniBand通信句柄中对应字段,并发送给其他节点;步骤33,节点接收所述InfiniBand通信句柄中对应字段,并存储到所述 节点的通信域对应的通信句柄中。
4. 如权利要求3所述的基于InfiniBand网络的分布式存储方法,其特征在于,所述步骤3还包括,步骤41,所述存储节点采用Slab分配器管理内存空间的分配和释放。
5. 如权利要求3所述的基于InfiniBand网络的分布式存储方法,其特征 在于,,所述步骤4中请求包括获取主拷贝位置信息请求和注册新主拷贝请求, 所述步骤4进一步为,步骤51,所述管理主机将文件的数据块的主拷贝的全局位置信息以文件 名为索引存储到所述管理主机的主拷贝位置信息域;步骤52,所述管理主机接收到包含文件名的获取主拷贝位置信息请求时, 通过所述文件名在所述主拷贝位置信息域中査找对应文件数据块的全局位置 信息,并返回给请求的存储节点;步骤53,所述管理主机接收到从后端存储系统读入数据块的主拷贝的存 储节点发送的注册新主拷贝请求后,根据所述注册新主拷贝请求更新所述主拷 贝位置信息域。
6. 如权利要求5所述的基于InfiniBand网络的分布式存储方法,其特征 在于,所述步骤53进一步为,步骤61,根据注册新主拷贝请求中文件名判断所述主拷贝位置信息域中 是否存储对应记录,如果是,则用新主拷贝的全局位置信息更新所述对应记录; 否则,执行步骤62;步骤62,建立基于所述文件名的结构体,在所述主拷贝位置信息域中存 储所述新主拷贝的全局位置信息。
7. 如权利要求1所述的基于InfiniBand网络的分布式存储方法,其特征 在于,所述步骤4中InfiniBand通信采用Send/Receive操作。
8. 如权利要求5所述的基于InfiniBand网络的分布式存储方法,其特征在于,/在所述存储节点接收到读写请求时,所述步骤5进一步为, 步骤81,所述存储节点从请求中获得请求读取的数据块名字,所述数据 块名字包含数据块所在文件的文件名和所述数据块在所述文件中的偏移;步骤82,根据所述数据块名字从所述管理主机中获得所述数据块的主拷 贝的全局位置信息,在所述内存池中査询所述数据块;步骤83,如果所述数据块的主拷贝不在所述存储节点本地,则复制所述 主拷贝为一个副拷贝,存储到本地。
9. 如权利要求8所述的基于InfiniBand网络的分布式存储方法,其特征 在于,在所述存储节点接收到数据块査询请求时,所述步骤5进一步为, 步骤91,所述存储节点获得数据块査询请求中包含的请求查询的数据块 名字;步骤92,根据所述数据块名字从所述管理主机获得所述数据块的主拷贝 的全局位置信息,在所述内存池中査询所述数据块。
10. 如权利要求9所述的基于InfiniBand网络的分布式存储方法,其特 征在于,所述步骤82和所述步骤92进一步为,步骤101,所述存储节点通过向所述管理主机发送包含所述文件名的获取 主拷贝位置信息请求,将所述文件的所有数据块的主拷贝的全局位置信息预读 到本地;步骤102,所述存储节点根据所述数据块的主拷贝的全局位置信息在内存 池中查询所述数据块的主拷贝,如果查询到,则返回査询到的主拷贝的位置信 息,否则,执行步骤103;步骤103,所述存储节点根据数据块名字从所述后端存储系统读入所述数 据块的新主拷贝,从内存池中选择待用的内存子块,将所述新主拷贝存储到所 述内存子块;步骤104,所述存储节点返回所述数据块的新主拷贝的位置信息,并向所 述管理主机发送注册新主拷贝请求。
11. 如权利要求10所述的基于InfiniBand网络的分布式存储方法,其特 征在于, y在所述存储节点接收到替换请求时,所述步骤5进一步为, 步骤lll,所述存储节点从内存池中选择待用的内存子块; 步骤112,所述存储节点返回所述待用的内存子块位置信息。
12. 如权利要求11所述的基于InfiniBand网络的分布式存储方法,其特 征在于,所述存储节点包括所述通信域、用于记录本地内存子块的相关信息的本地 内存^子块位置信息域、用于记录其他存储节点上最早最少使用的内存子块的时 间信息的最老块时间域;所述本地内存子块位置信息域中还包括用于记录本地 最早最少使用的内存子块的时间信息的本地最老块时间表;所述步骤104还包括更新所述存储节点的本地内存子块位置信息域; 所述步骤103和所述步骤111中从内存池中选择待用的内存子块进一步为,步骤121,所述存储节点根据通信域和本地内存子块位置信息域判断所述 内存池中是否存在空闲空间,如果所述存储节点本地存在空闲空间,则从所述 空闲空间中选择的待用的内存子块;如果空闲空间不在所述存储节点本地,则 将所述存储节点本地的内存子块的数据转存到所述空闲空间,本地腾出的内存 空间为待用的内存子块;如果内存池不存在空闲空间,则被腾空的本地的内存 子块为所述待用的内存子块;如果内存池中不存在空闲空间,执行步骤122;步骤122,检查所述本地最老块时间表,判断所述本地最老块时间表中最 早最少使用的内存子块中存储数据是否为主拷贝,如果不是,选择所述内存子 块为所述待用的内存子块,执行步骤123,否则,执行步骤124;步骤123,判断已选择的内存子块的空间加和是否小于要求选择的空间, 如果是,执行所述步骤121;步骤124,检査所述最老块时间域,选择所述最老块时间域中最早最少使 用的内存子块,确定所述内存子块所在节点,从所述节点的本地最老块时间表 中选择一个或多个最早最少使用的内存子块,选择的内存子块的空间加和大于 或等于要求选择的空间;将所述存储节点本地的内存子块的数据转存到所述选 择的内存子块,被腾空的所述本地的内存子块为所述待用的内存子块。
13. 如权利要求12所述的基于InfiniBand网络的分布式存储方法,其特 征在于, -所述内存子块中包括用于记录标志位和管理控制信息的块头; 所述步骤124还包括在所述存储节点本地的数据被转存的内存子块的块 头中设置指向选择的内存子块的向导标志位,记录向导地址。
14. 如权利要求13所述的基于InfiniBand网络的分布式存储方法,其特 征在于,所述步骤102中所述存储节点根据所述数据块的主拷贝的全局位置信息 在内存池中査询所述数据块的主拷贝进一步为,步骤141,根据所述全局位置信息到相应节点上读取对应内存子块的块 头,将所述块头中数据块名字和被查询的数据块名比较,如果匹配,查询成功; 否则,执行步骤142;步骤142,如果所述块头中包含向导标志位,向导地址指向另一个节点, 则按所述向导地址査找下一节点;步骤143,如果最后查找到的内存子块向导为空或査询的节点数超过预设 值,则査询失败。
15. 如权利要求13所述的基于InfiniBand网络的分布式存储方法,其特 征在于,所述块头中包括有效标志位和存储的数据的数据块名字, 所述步骤83还包括,步骤151,将査询到的内存子块的块头中的数据块名字同请求操作的数据 块名字比较,如果匹配,则读写成功,否则,执行步骤152;步骤152,根据所述有效标志位判断内存子块中数据是否有效,如果无效, 则重新查询主拷贝的位置,进行读写,否则,执行步骤153;步骤153,按向导地址指向的位置重新进行读写。
16. 如权利要求15所述的基于InfiniBand网络的分布式存储方法,其特 征在于,所述块头中还包括加锁标志位,如果加锁表明内存子块中数据正在更新; 所述步骤82还包括,步骤161,判断内存子块的加锁标志位判断是否加锁,如果是,则等待待 随机或预设时间,重新进行读写。
17. 如权利要求15所述的基于InfiniBand网络的分布式存储方法,其特 征在于,存储节点进行查询和替换时,所用所述Infiniband通信采用 Send/Receive操作,进行读写时,所用所述Infiniband通信采用RDMAread/write操作。
18. 如权利要求15所述的基于InfiniBand网络的分布式存储方法,其特 征在于,所述步骤83还包括, z 步骤1S1,当存储节点对本地的一个副拷贝进行写操作完成后,发送多播 消息使其他存储节点上的副拷贝失效,将包含写操作中更新数据信息的Diff 结果发送给主拷贝所在存储节点,以使主拷贝进行同步更 新;步骤182,当存储节点对本地的一个主拷贝进行写操作完成后,发送多播 消息,使每个副拷贝无效。
19. 如权利要求16所述的基于InfiniBand网络的分布式存储方法,其特 征在于,所述步骤83还包括,步骤191,当存储节点对本地的一个副拷贝进行写操作前,发送多播消息, 其他存储节点上的副拷贝失效,将副拷贝对应的主拷贝加锁;步骤192,当存储节点对所述副拷贝进行写操作完成后,将包含写操作中 更新数据信息的Diff结果发送给所述主拷贝所在存储节点,以使主拷贝解锁, 并进行同步更新;步骤193,当存储节点对本地的一个主拷贝进行写操作前,对自身加锁, 并发送多播消息使每个副拷贝无效;步骤194,当存储节点对本地的一个主拷贝进行写操作完成后,对自身解锁。
20. 如权利要求18或19所述的基于InfiniBand网络的分布式存储方法, 其特征在于,存储节点对标志位进行修改时,所用所述Inf iniband通信采用原子操作。
21. —种基于InfiniBand网络的分布式存储系统,其特征在于,所述系统 包括通过InfiniBand网络连接的节点,所述节点包括一个管理主机和多个存 储节点;每两个所述节点间建立InfiniBand通信; 所述存储节点包括内存分配模块和请求处理模块,所述内存分配模块,用于分配内存空间,对所述内存空间进行预注册,将 分配的内存空间的相关信息发送给其他节点,所述内存空间构建成内存池;所述请求处理模块,用于接收请求,根据从所述管理主机获得的同所述请 求相关的主拷贝的全局位置信息进行同所述请求对应的操作,或根据本地存储 的其他存储节点分配的内存空间相关信息进行所述请求对应的操作;所述管理主机,用于通过InfiniBand通信接收所述存储节点的请求,提 供并维护所述节点从后端存储系统读入的主拷贝的全局位置信息。
22. 如权利要求21所述的基于InfiniBand网络的分布式存储系统,其特 征在于,所述节点还通过以太网络连接; 所述节点包括通信域; 所述每两个所述节点间建立InfiniBand通信进一步为,建立以太网络通 信;节点通过以太网络获得其他节点的InfiniBand通信句柄,并将所述 InfiniBand通信句柄存储到所述节点的通信域。
23. 如权利要求22所述的基于InfiniBand网络的分布式存储系统,其特 征在于,所述内存分配模块进一步用于分配一块内存空间,将所述内存空间拴住, 使所述内存空间的数据不被交换到交换空间;对所述内存空间进行预注册,将 与分配内存空间的位置和属性相关信息记录到InfiniBand通信句柄中对应字 段,并发送给其他节点;在接收其他存储节点发送的InfiniBand通信句柄中 对应字段时,将所述InfiniBand通信句柄中对应字段存储到所述存储节点的 通信域对应的通信句柄中;所述管理主机还用于接收存储节点发送的InfiniBand通信句柄中对应字 段,并存储到所述管理主机的通信域对应的通信句柄中。
24. 如权利要求23所述的基于InfiniBand网络的分布式存储系统,其特 征在于,所述内存分配模块还用于采用Slab分配器管理内存空间的分配和释 放。 乂
25. 如权利要求23所述的基于InfiniBand网络的分布式存储系统,其特 征在于,所述管理主机接收的请求包括获取主拷贝位置信息请求和注册新主拷贝请求,所述管理主机进一步包括信息存储模块、信息提供模块和信息更新模块,所述信息存储模块,用于将文件的数据块的主拷贝的全局位置信息以文件 名为索引存储到所述管理主机的主拷贝位置信息域;所述信息提供模块,用于所述管理主机接收到包含文件名的获取主拷贝位 置信息请求时,通过所述文件名在所述主拷贝位置信息域中查找对应文件数据 块的全局位置信息,并返回给请求的存储节点;所述信息更新模块,用于所述管理主机接收到从后端存储系统读入数据块 的主拷贝的存储节点发送的注册新主拷贝请求后,根据所述注册新主拷贝请求 更新所述主拷贝位置信息域。
26. 如权利要求25所述的基于InfiniBand网络的分布式存储系统,其特 征在于,所述信息更新模块进一步用于根据注册新主拷贝请求中文件名判断所述 主拷贝位置信息域中是否存储对应记录,如果是,则用新主拷贝的全局位置信 息更新所述对应记录;否则,建立基于所述文件名的结构体,在所述主拷贝位 置信息域中存储所述新主拷贝的全局位置信息。
27. 如权利要求21所述的基于InfiniBand网络的分布式存储系统,其特 征在于,所述管理主机所用的InfiniBand通信采用Send/Receive操作。
28. 如权利要求25所述的基于InfiniBand网络的分布式存储系统,其特 征在于,所述请求处理模块进一步包括读写请求处理模块和用于根据所述数据块 名字从所述管理主机中获得所述数据块的主拷贝的全局位置信息,在所述内存 池中査询数据块的査询模块,所述读写请求处理模块,用于在所述存储节点接收到读写请求时,从请求 中获得请求读取的数据块名字,所述数据块名字包含数据块所在文件的文件名 和所述数据块在所述文件中的偏移,将所述数据块名字发给所述查询模块;所述査询模块在所述内存池中査询所述数据块;所述读写请 处理模块,还用于根据査询 果,如果所述 据块的主拷贝 不在所述存储节点本地,则复制所述主拷贝为一个副拷贝,存储到本地。
29. 如权利要求28所述的基于InfiniBand网络的分布式存储系统,其特 征在于,所述请求处理模块进一步包括査询请求处理模块,所述査询请求处理模块,进一步用于在所述存储节点接收到数据块查询请 求时,获得数据块査询请求中包含的请求査询的数据块名字,将所述数据块名 字发给所述査询模块;所述查询模块在所述内存池中査询所述数据块。
30. 如权利要求29所述的基于InfiniBand网络的分布式存储系统,其特 征在于,所述存储节点还包括用于从内存池中选择待用的内存子块的替换模块, 所述査询模块进一步包括位置信息预读模块,用于通过向所述管理主机发送包含所述文件名的获取 主拷贝位置信息请求,将所述文件的所有数据块的主拷贝的全局位置信息预读 到本地;数据査找模块,用于根据所述数据块的主拷贝的全局位置信息在内存池中 査询所述数据块的主拷贝,如果查询到,则返回査询到的主拷贝的位置信息, 否则,根据数据块名字从所述后端存储系统读入所述数据块的新主拷贝,启动 所述替换模块从内存池中选择待用的内存子块,将所述新主拷贝存储到所述内 存子块;位置信息更新模块,用于返回所述数据块的新主拷贝的位置信息,并向所 述管理主机发送注册新主拷贝请求。
31. 如权利要求30所述的基于InfiniBand网络的分布式存储系统,其特 征在于,所述请求处理模块进一步包括替换请求处理模块,所述替换请求处理模块,用于在所述存储节点接收到替换请求时,启动所 述替换模块从内存池中选择待用的内存子块;返回所述待用的内存子块位置信 息。 z
32. 如权利要求31所述的基于InfiniBand网络的分布式存储系统,其特 征在于,所述存储节点包括所述通信域、用于记录本地内存子块的相关信息的本地内存子块位置信息域、用于记录其他存储节点上最早最少使用的内存子块的时间信息的最老块时间域;所述本地内存子块位置信息域中还包括用于记录本地 最早最少使用的内存子块的时间信息的本地最老块时间表;所述位置信息更新冲莫块还用于更新所述存储节点的本地内存子块位置信 息域;所述替换模块进一步包括空闲空间査找模块、本地最早最少使用内存査找 模块、完成判断模块、全局最早最少使用内存査找模块;所述空闲空间查找模块,用于根据通信域和本地内存子块位置信息域判断 所述内存池中是否存在空闲空间,如果所述存储节点本地存在空闲空间,则从 所述空闲空间中选择的待用的内存子块;如果空闲空间不在所述存储节点本 地,则将所述存储节点本地的内存子块的数据转存到所述空闲空间,本地腾出 的内存空间为待用的内存子块;如果内存池不存在空闲空间,则被腾空的本地 的内存子块为所述待用的内存子块;如果内存池中不存在空闲空间,则启动所 述本地最早最少使用内存査找模块;所述本地最早最少使用内存査找模块,用于检査所述本地最老块时间表, 判断所述本地最老块时间表中最早最少使用的内存子块中存储数据是否为主 拷贝,如果不是,选择所述内存子块为所述待用的内存子块,启动所述完成判 断模块,否则,启动所述全局最早最少使用内存査找模块;所述完成判断模块,判断已选择的内存子块的空间加和是否小于要求选择 的空间,如果是,则启动所述空闲空间査找模块;所述全局最早最少使用内存査找模块,检査所述最老块时间域,选择所述 最老块时间域中最早最少使用的内存子块,确定所述内存子块所在节点,从所 述节点的本地最老块时间表中选择一个或多个最早最少使用的内存子块,选择 的内存子块的空间加和大于或等于要求选择的空间;将所述存储节点本地的内 存子块的数据转存到所述选择的内存子块,被腾空的所述本地的内存子块为所 述待用的内存子块。
33.如权利要求32所述的基于InfiniBand网络的分布式存储系统,其特 征在于,所述内存子块中包括用于记录标志位和管理控制信息的块头; 所述全局最早最少使用内存査找模块还用于在所述存储节点本地的数据被转存的内存子块的块头中设置指向选择的内存子块的向导标志位,记录向导 地址。
34. 如权利要求33所述的基于InfiniBand网络的分布式存储系统,其特 征在于,所述数据査找模块在根据所述数据块的主拷贝的全局位置信息在内存池 中査询所述数据块的主拷贝时进一步用于根据所述全局位置信息到相应节点 上读取对应内存子块的块头,将所述块头中数据块名字和被查询的数据块名比 较,如果匹配,査询成功;否则,如果所述块头中包含向导标志位,向导地址 指向另一个节点,则按所述向导地址査找下一节点;如果最后查找到的内存子 块向导为空或査询的节点数超过预设值,则査询失败。
35. 如权利要求33所述的基于InfiniBand网络的分布式存储系统,其特 征在于,所述块头中包括有效标志位和存储的数据的数据块名字, 所述读写请求处理模块在根据査询结果复制所述主拷贝为一个副拷贝存 储到本地时进一步用于将査询到的内存子块的块头中的数据块名字同请求操 作的数据块名字比较,如果匹配,则读写成功,否则,根据所述有效标志位判 断内存子块中数据是否有效,如果无效,则重新査询主拷贝的位置,进行读写, 如果有效,则按向导地址指向的位置重新进行读写。
36. 如权利要求35所述的基于InfiniBand网络的分布式存储系统,其特 征在于,所述块头中还包括加锁标志位,如果加锁表明内存子块中数据正在更新; 所述读写请求处理模块在读写时还用于判断内存子块的加锁标志位判断 是否加锁,如果是,等待随机或预设时间,重新进行读写。
37. 如权利要求35所述的基于InfiniBand网络的分布式存储系统,其特 征在于,存储节点进行查询和替换时,所用所述Infiniband通信采用 Send/Rec"ve操作,进行读写时,所用所述Infiniband通信采用RDMA read/write操作。
38. 如权利要求35所述的基于InfiniBand网络的分布式存储系统,其特 征在于,所述读写请求处理模块还用于当对本地的一个副拷贝进行写操作完成后, 发送多播消息使其他存储节点上的副拷贝失效,将包含写操作中更新数据信息 的Diff结果发送给主拷贝所在存储节点,以使主拷贝进行同步更新;当存储 节点对本地的一个主拷贝进行写操作完成后,发送多播消息,使每个副拷贝无 效。
39. 如权利要求36所述的基于InfiniBand网络的分布式存储系统,其特 征在于,所述读写请求处理模块还用于当存储节点对本地的一个副拷贝进行写操 作前,发送多播消息,其他存储节点上的副拷贝失效,将副拷贝对应的主拷贝 加锁;当存储节点对所述副拷贝进行写操作完成后,将包含写操作中更新数据 信息的Diff结果发送给所述主拷贝所在存储节点,以使主拷贝解锁,并进行 同步更新;当存储节点对本地的一个主拷贝进行写操作前,对自身加锁,并发 送多播消息使每个副拷贝无效;当存储节点对本地的一个主拷贝进行写操作完 成后,对自身解锁。
40. 如权利要求38或39所述的基于InfiniBand网络的分布式存储系统, 其特征在于,存储节点对标志位进行修改时,所用所述Inf iniband通信采用原子操作。
全文摘要
本发明涉及基于InfiniBand网络的分布式存储方法及系统,方法包括步骤1,通过InfiniBand网络连接节点,节点包括管理主机和存储节点;步骤2,每两个节点间建立InfiniBand通信;步骤3,存储节点分配内存空间,对内存空间进行预注册,将分配的内存空间的相关信息发送给其他节点,内存空间构建成内存池;步骤4,管理主机通过InfiniBand通信接收存储节点的请求,提供并维护节点从后端存储系统读入的主拷贝的全局位置信息;步骤5,存储节点接收请求,根据从管理主机获得的同请求相关的主拷贝的全局位置信息进行同请求对应的操作,或根据本地存储的其他存储节点分配的内存空间相关信息进行请求对应的操作。本发明能够充分发挥了InfiniBand网络优点,实现了各节点间数据的快速转移。
文档编号H04L29/08GK101577716SQ200910086888
公开日2009年11月11日 申请日期2009年6月10日 优先权日2009年6月10日
发明者周永豪, 李金榜, 韩冀中 申请人:中国科学院计算技术研究所
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1