发明内容
本发明的目的在于,针对上述问题,提出一种多***数据拷贝的RDMA架构,以实现快速、稳定的传输数据的优点。
为实现上述目的,本发明采用的技术方案是:
一种多***数据拷贝的RDMA架构,包括RDMA状态机模块、A端DMA状态机模块、A端地址状态机模块、B端DMA状态机模块、B端地址状态机模块、数据CRC校验模块、数据做异或校验模块、数据做PQ计算模块和多端口接口(MUIF)模块;
所述RDMA状态机(RDMA_FSM)模块:是RDMA架构的主状态机,是RDMA架构的主控制模块,访问RDMA架构硬件的寄存器接口通过RDMA_FSM模块,并执行相关命令来进行管道两端内存的访问,从而实现两端***的数据拷贝;
所述A端DMA状态机(A_DMA_FSM)模块:是数据拷贝的执行者,分为读内存和写内存两个方向:在读内存时,它接收上述RDMA_FSM模块的控制命令,并从A_Addr_FSm模块获得数据的映射的内存地址,直接把内存数据搬移到B_DMA_FSM模块的输入接口;在写内存时,它接收到上述RDMA_FSM的控制命令,并从A_Addr_FSM模块获得数据的映射的内存地址,把从B_DMA_FSM模块读取过来的数据写到内存位置;
所述A端地址状态机(A_Addr_FSM)模块:定义了一个FPGA内部的RAM来缓存RDMA架构数据拷贝时发送和接收的数据和和地址信息,定义了内存的扇区作内存拷贝的储存空间;
所述B端DMA状态机(B_DMA_FSM)模块:是作数据拷贝的执行者,分为读内存和写内存两个方向:在读内存时,它接收到上述RDMA_FSM模块的控制命令,并从B_Addr_FSm模块获得数据的映射的内存地址,直接把内存数据搬移到A_DMA_FSM模块的输入接口;在写内存时,它接收到RDMA_FSM的控制命令,并从上述B_Addr_FSM模块获得数据的映射的内存地址,把从A_DMA_FSM模块读取过来的数据写到内存位置;
所述B端地址状态机(B_Addr_FSM)模块:定义了一个FPGA内部的RAM来缓存RDMA数据拷贝时发送和接收的数据和和地址信息,定义了内存的扇区作内存拷贝的储存空间;
多端口接口(MUIF)模块:是硬件寄存器访问的接口以及数据传输的接口;
所述数据的CRC校验(CRC)模块:预留的数据做CRC校验接口,当对传输数据作CRC检验时,可以直接通过该CRC模块的接口进行添加硬件逻辑来实现CRC校验功能;
所述数据做异或校验(XOR)模块:预留的数据做异或检验接口,当对传输数据做异或检验时,可以直接通过该XOR模块的接口进行添加硬件逻辑来实现异或校验功能;
所述数据做PQ计算(PQ)模块:预留的数据做P检验和Q检验接口,当对传输数据做P检验或者Q检验时,可以直接通过该PQ模块的接口进行添加硬件逻辑来实现异或校验功能。
本发明的技术方案,通过设置RDMA架构,在RDMA架构中采用DMA控制数据的传输,从而解放了CPU,而采用DMA专门负责数据的传输,保证了多***间大数据量传输时数据传输的稳定性和可靠性,同时减少了CPU的负担,提高了CPU的性能和效率。实现了快速、稳定的传输数据的优点。
下面通过附图和实施例,对本发明的技术方案做进一步的详细描述。
具体实施方式
以下结合附图对本发明的优选实施例进行说明,应当理解,此处所描述的优选实施例仅用于说明和解释本发明,并不用于限定本发明。
如图2所示,一种多***数据拷贝的RDMA架构,包括RDMA状态机模块、A端DMA状态机模块、A端地址状态机模块、B端DMA状态机模块、B端地址状态机模块、数据CRC校验模块、数据做异或校验模块、数据做PQ计算模块和多端口接口(MUIF)模块;
RDMA状态机(RDMA_FSM)模块:是RDMA架构的主状态机,是RDMA架构的主控制模块,访问RDMA架构硬件的寄存器接口通过RDMA_FSM模块,并执行相关命令来进行管道两端内存的访问,从而实现两端***的数据拷贝;
A端DMA状态机(A_DMA_FSM)模块:是数据拷贝的执行者,分为读内存和写内存两个方向:在读内存时,它接收上述RDMA_FSM模块的控制命令,并从A_Addr_FSM模块获得数据的映射的内存地址,直接把内存数据搬移到B_DMA_FSM模块的输入接口;在写内存时,它接收到上述RDMA_FSM的控制命令,并从A_Addr_FSM模块获得数据的映射的内存地址,把从B_DMA_FSM模块读取过来的数据写到内存位置;
A端地址状态机(A_Addr_FSM)模块:定义了一个FPGA内部的RAM来缓存RDMA架构数据拷贝时发送和接收的数据和和地址信息,定义了内存的扇区作内存拷贝的储存空间;
B端DMA状态机(B_DMA_FSM)模块:是作数据拷贝的执行者,分为读内存和写内存两个方向:在读内存时,它接收到上述RDMA_FSM模块的控制命令,并从B_Addr_FSM模块获得数据的映射的内存地址,直接把内存数据搬移到A_DMA_FSM模块的输入接口;在写内存时,它接收到RDMA_FSM的控制命令,并从上述B_Addr_FSM模块获得数据的映射的内存地址,把从A_DMA_FSM模块读取过来的数据写到内存位置;
B端地址状态机(B_Addr_FSM)模块:定义了一个FPGA内部的RAM来缓存RDMA数据拷贝时发送和接收的数据和和地址信息,定义了内存的扇区作内存拷贝的储存空间;
多端口接口(MUIF)模块:是硬件寄存器访问的接口以及数据传输的接口;
数据的CRC校验(CRC)模块:预留的数据做CRC校验接口,当对传输数据作CRC检验时,可以直接通过该CRC模块的接口进行添加硬件逻辑来实现CRC校验功能;
数据做异或校验(XOR)模块:预留的数据做异或检验接口,当对传输数据做异或检验时,可以直接通过该XOR模块的接口进行添加硬件逻辑来实现异或校验功能;
数据做PQ计算(PQ)模块:预留的数据做P检验和Q检验接口,当对传输数据做P检验或者Q检验时,可以直接通过该PQ模块的接口进行添加硬件逻辑来实现异或校验功能。
在数据传输中所述RDMA状态机模块状态跳转如下:
S_IDLE状态:开始状态机是空闲状态,等待填写描述符数据结构控制符开始,初始化硬件寄存器,然后判断ctrl_valid 和ctrl_sof 信号状态,当ctrl_valid 和ctrl_sof 同时有效时状态跳转到 S_CTRL状态;
S_CTRL 状态:填写描述符控制符状态,等待填充描述符数据结构完成;判断ctrl_valid 和 ctrl_eof信号状态,当ctrl_valid 和 ctrl_eof同时有效时,状态跳转到S_DESC状态;
S_DESC 状态:描述符数据请求状态,请求A端DMA状态机和B端DMA状态机去读两端内存的描述符信息, desc_done(读描述符操作完成)有效时,状态跳转到S_DMA状态;
S_DMA 状态:DMA操作请求状态,请求A端DMA状态机和B端DMA状态机准备做数据拷贝工作,当两端DMA响应工作完成后,判断dma_done有效时(两端DMA响应工作完成),状态跳转到S_EDMA状态;
S_EDMA状态:DMA数据拷贝状态,直接跳转到S_WAIT状态;
S_WAIT状态:DMA数据拷贝等待状态,等待数据拷贝完成,判断dma_done有效时,跳转到S_DONE状态;
S_DONE状态:DMA数据拷贝完成状态,判断数据拷贝完成则跳转到S_MSG状态;
S_MSG状态:描述符状态信息输出状态,输出描述符状态信息,跳转到S_IDLE状态。
如图1所示,数据在主机端服务器模块和子服务器模块间传输,包括主机端服务器(A)模块,DMA_A模块,数据管道,DMA_B模块,子***(B)模块以及RDMA模块。
主机端服务器(A)模块:多***数据拷贝的RDMA架构的远端***(主机端服务器),RDMA架构可以访问远端***的内存,而不需要有CPU的参与,可以直接拷贝服务器数据到子***(B)模块。主机端服务器可以通过光纤或者网络连接到RDMA架构的DMA_A模块。
DMA_A模块:是执行主机端服务器数据搬运的执行者,前端是主机端服务器,后端是DMA_B模块。数据拷贝在前端和后端进行,数据拷贝方向是双向的,数据可以是从前端到后端,也可以是从后端到前端。
数据管道:实现的DMA拷贝数据的数据通路。数据管道的两侧分别是主机端和子***端的DMA模块,两个DMA模块DMA_A和DMA_B分别作为对方DMA的后端来实现接收和发送数据的交互。DMA_A模块后端的发送数据信息接到DMA_B模块的接收端;DMA_B模块后端的发送数据信息接到DMA_A模块的接收端。数据管道还提供数据传输的硬件计算和数据恢复的校验接口。
DMA_B模块:是执行子***数据搬运的执行者,前端是子***,后端是DMA_A模块。数据拷贝在前端和后端进行,数据拷贝方向是双向的,数据可以是从前端到后端,也可以是从后端到前端。
子***(B)模块:多***数据拷贝的RDMA架构的远端***(主机端服务器),RDMA架构可以直接访问远端***的内存,而不需要有CPU的参与,可以直接拷贝服务器数据到子***。主机端服务器可以通过光纤或者网络连接到RDMA架构的DMA_A模块。
RDMA模块:RDMA模块是整个RDMA架构的核心模块,实现主要的RDMA硬件逻辑功能,两端内存访问接口和调试信息接口输出。RDMA模块定义了RDMA描述符的数据结构,以及访问主机***内存和从机子***内存的NPI(Native Port Interface )接口和调试信息接口。RDMA模块分析RDMA描述符数据结构,请求管道两端的DMA_A模块和DMA_B模块开始作DMA操作,并控制数据流向,输出描述符数据结构信息到调试信息接口上。
图2所示,多***数据拷贝的RDMA架构实现即其设计方法,架构的设计方法实际就是通过各个模块实现与不同***间建立内存访问机制,同时通过整体的RDMA模块来实现各个访问机制的数据在不同***间能很好的访问和进行数据拷贝工作。RDMA架构实现设计分为RDMA状态机模块,A端的DMA状态机模块,A端地址状态机模块,B端DMA状态机模块,B端地址状态机模块,多端口接口模块,数据的CRC校验模块,数据做异或校验模块,数据做PQ计算模块。
RDMA状态机模块:是整个RDMA设计的主状态机,是各个信号的主控制模块,负责解析硬件与应用软件访问的寄存器模块接口实现,访问RDMA硬件的寄存器接口通过RDMA_FSM模块并执行相关命令来进行管道两端内存的访问,从而实现两端***的数据拷贝。
A端的DMA状态机模块:是作数据拷贝的执行者,分为读内存和写内存两个方向。在读内存时,它接收到RDMA_FSM的控制命令,并从A_Addr_FSM模块获得数据的映射的内存地址,直接把内存数据搬移到B_DMA_FSM模块的输入接口;在写内存时,它接收到RDMA_FSM的控制命令,并从A_Addr_FSM模块获得数据的映射的内存地址,把从B_DMA_FSM模块过来的数据写到内存位置。
A端地址状态机模块:定义了一个FPGA内部的RAM来缓存RDMA数据拷贝时发送和接收的数据和和地址信息,定义了内存的扇区作内存拷贝。
B端DMA状态机模块:跟A_DMA_FSM作用相同,都是作数据拷贝的执行者,分为读内存和写内存两个方向。在读内存时,它接收到RDMA_FSM的控制命令,并从B_Addr_FSm模块获得数据的映射的内存地址,直接把内存数据搬移到A_DMA_FSM模块的输入接口;在写内存是,它接收到RDMA_FSM的控制命令,并从B_Addr_FSM模块获得数据的映射的内存地址,把从A_DMA_FSM模块过来的数据写到内存位置。
B端地址状态机模块:定义了一个FPGA内部的RAM来缓存RDMA数据拷贝时发送和接收的数据和和地址信息,定义了内存的扇区作内存拷贝。
多端口接口(MUIF)模块:是硬件寄存器访问接口和数据管道两端的数据传输接口。
数据的CRC校验模块:预留的数据做CRC校验接口,当我们需要对传输数据作CRC检验时,我们可以直接通过这个模块的接口进行添加硬件逻辑来实现CRC校验功能。
数据做异或校验模块:预留的数据做异或检验接口,当我们需要对传输数据做异或检验时,我们可以直接通过这个模块的接口进行添加硬件逻辑来实现异或校验功能。
数据做PQ计算模块:预留的数据做P检验和Q检验接口,当我们需要对传输数据做P检验或者Q检验时,我们可以直接通过这个模块的接口进行添加硬件逻辑来实现异或校验功能。PQ检验是在存储***中做数据RAID(磁盘阵列)存储时用到的一种同位检查(Parity Check)或者奇偶校验的观念,在数组中任一颗硬盘发生故障时,仍可通过同位校验位(即称为PQ校验位)读出数据,在数据重构时,将数据经计算后重新置入新硬盘中。
NPI :本地端口接口 用来访问***内存。
在RDMA整体架构设计的实现方法中,RDMA模块中调用了两个DMA顶层模块分别是A_TOP和B_TOP模块。这两个模块的主要功能是实现了数据管道中数据的流向控制和访问两端***内存的接口,对发送和接收数据的内存地址进行映射和缓存,通过A_Addr_FSM和B_Addr_FSM硬件逻辑来实现,这两个模块还是数据搬移的执行者,通过A_DMA _FSM和B_DMA_FSM这两个模块的硬件逻辑来实现。RDMA_FSM模块实现了软件访问描述符数据结构的硬件寄存器接口控制和数据的传输控制,控制整个DMA操作的读写数据的方向,对多***间数据拷贝过程进行监控,输出状态调试信息;定义了数据拷贝过程中的RDMA工作状态。多***数据拷贝的设计实现就是通过硬件完成对RDMA的各个状态的控制和处理读写数据过程,整个过程实现通过RDMA状态机来完成。
如图3所示,多***数据拷贝的RDMA架构实现***结构图是一个简单的基于RDMA架构设计的多***间进行直接数据拷贝的***。RDMA架构分成上端访问***内存接口和下端访问***内存接口两部分,通过RDMA架构设计可以在上端和下端的两个***间进行数据拷贝,而很少需要CPU的干预,可以实现大数据量数据的快速拷贝,增加***性能和数据传输的稳定性和效率。主机远端服务器,RDMA上端,RDMA下端和RAID控制器,DISK磁盘。
RDMA上端***:包括RDMA上端模块和主机远端服务器,RDMA上端模块通过NPI接口访问主机远端服务器的内存,RDMA上端和主机远端服务器物理介质可以通过光纤或网线链接。主机远端服务器包含有数据应用程序对RDMA访问机制提供中断处理或者响应。RDMA上端通过NPI接口直接访问主机远端服务器内存,对内存进行读写操作而不需要主机端服务器的CPU干预,从而实施对主机远端服务器的数据拷贝。
RDMA下端***:包括RDMA下端模块,RAID控制器和DISK磁盘,RDMA下端模块通过NPI接口访问下端***的内存,下端***能够通过RAID控制器并发操作DISK磁盘来完成读写磁盘数据。RAID控制器是独立磁盘冗余阵列(Redundant Array of Independent Disk)控制器,它是在物理和逻辑阵列中管理数据存取的装置,通过RAID控制器能够并发的读写多个磁盘,从而实现对RDMA下端***磁盘的数据拷贝。
RDMA上端和下端模块构成的RDMA架构设计模块内部通过硬件逻辑实现上端***和下端***数据的拷贝,实现了数据拷贝的稳定传输,提高了***的性能。
图4所示,RDMA状态机描述了在多***间进行数据拷贝的流程和实现步骤,通过硬件逻辑实现各个状态的判断和跳转。首先等待填写描述符数据结构控制符开始信号ctrl_valid 和ctrl_sof,如果这两个信号有效则会初始化硬件寄存器并填写描述符控制符状态的值;当检测到ctrl_valid和ctrl_eof信号同时有效时,说明填写描述符控制符寄存器已近完成。
初始化描述符控制符硬件寄存器的之后RDMA状态机会通过RDMA管道两端的DMA模块请求读***的内存描述符,如果读描述符请求得到响应则开始请求DMA做数据拷贝动作,如果DMA请求也得到响应则会一直等待数据拷贝完成,数据拷贝完成后会把数据描述符状态信息输出到RDMA模块的调试信息接口,进入到初始状态等待下一次数据拷贝动作。
多***数据拷贝的RDMA架构设计实现的RDMA状态机结构框图如图4所示,RDMA状态机描述了整个数据搬移即在多***间进行数据拷贝的流程和实现步骤。RDMA状态机各个状态模块如下:
S_IDLE状态:开始状态机是空闲状态,等待填写描述符数据结构控制符开始,初始化硬件寄存器。然后判断ctrl_valid 和ctrl_sof 信号状态,当ctrl_valid 和ctrl_sof 同时有效时状态跳转到 S_CTRL状态。
S_CTRL 状态:填写描述符控制符状态,等待填充描述符数据结构完成。判断ctrl_valid 和 ctrl_eof信号状态,当ctrl_valid 和 ctrl_eof同时有效时,状态跳转到S_DESC状态。
S_DESC 状态:描述符数据请求状态,请求管道两端的DMA去读两端***内存的描述符信息,读描述符操作完成也就是desc_done有效时,状态跳转到S_DMA状态。
S_DMA 状态:DMA操作请求状态,请求管道两端的DMA准备做数据拷贝工作,当两端DMA响应工作完成后,也就是判断dma_done有效时,状态跳转到S_EDMA状态。
S_EDMA状态:DMA数据拷贝状态,直接跳转到S_WAIT状态。
S_WAIT状态:DMA数据拷贝等待状态,等待数据拷贝完成,判断dma_done有效时,跳转到S_DONE状态。
S_DONE状态:DMA数据拷贝完成状态,判断数据拷贝完成则跳转到S_MSG状态。
S_MSG状态:描述符状态信息输出状态,输出描述符状态信息,跳转到S_IDLE状态。
表一:RDMA架构中的描述符数据结构:
其中:scnt:表示有多少个扇区
bcnt:表示有多少个硬盘
dma_op:dma操作选项,有P,Q,C三个操作
tag:预留标记状态信息
表二:RDMA架构中描述符主要控制状态接口信号:
表三:RDMA访问***内存的NPI接口信息:
最后应说明的是:以上所述仅为本发明的优选实施例而已,并不用于限制本发明,尽管参照前述实施例对本发明进行了详细的说明,对于本领域的技术人员来说,其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。