一种读数据的方法及设备的制造方法

文档序号:10534783阅读:671来源:国知局
一种读数据的方法及设备的制造方法
【专利摘要】一种读数据的方法及设备,用于解决因传输完成命令消息而造成传输资源浪费的技术问题。第一种读数据的方法包括:第一设备接收第二设备发送的基于RDMA协议的提交命令消息,所述提交命令消息用于请求通过所述第一设备读取第一数据;所述第一设备根据所述提交命令消息获取所述第一数据;所述第一设备将所述第一数据携带在至少一个数据包中,且所述第一设备将完成信息携带在所述至少一个数据包中的其中一个数据包中;所述完成信息用于指示所述第一数据已读取完成;所述第一设备向所述第二设备发送所述至少一个数据包。
【专利说明】
_种读数据的方法及设备
技术领域
[0001 ]本发明涉及通信技术领域,特别涉及一种读数据的方法及设备。
【背景技术】
[0002]承载在交换网上的非易失存储系统交互协议(NVMe over Fabrics,N0F)是承载在以太网上的基于闪存(flash)应用的协议标准,NOF定义了驱动软件与非易失存储子系统之间交互的命令集、队列和寄存器的接口。基于N0F,在以远程直接数据存取(Remote DirectMemory Access,RDMA)作为架构(Fabrics)承载NVMe交互的架构中,客户端在需要读取数据时,可以向数据的存储端发送用于读取数据的命令,客户端发送的命令一般被封装成提交命令消息(commond capsule)的格式,通过基于RDMA协议的网络完成交换发送到存储端的命令提交队列(Submiss1n Queue,SQ)队列中,存储端在读取数据后,会向客户端发送读取的数据,在数据发送完毕后,存储端还会向客户端发送用于表示读操作已完成的信息,例如该信息可以被封装为完成命令消息(response capsule)的格式,通过基于RDMA协议的网络发送给客户端,以表示操作完成。
[0003]可见,基于RDMA协议的网络需要传输多个完成命令消息,特别是在频繁读数据的场景下,传输大量的完成命令消息显然比较浪费传输资源,从而导致系统性能下降,

【发明内容】

[0004]本发明实施例提供一种读数据的方法及设备,用于解决因传输完成命令消息而造成传输资源浪费的技术问题。
[0005]第一方面,提供一种读数据的方法,该方法可以包括:第一设备接收第二设备发送的基于RDMA协议的提交命令消息,该提交命令消息用于请求通过第一设备读取第一数据。第一设备根据该提交命令消息获取第一数据,第一设备将第一数据携带在至少一个数据包中,且第一设备将完成信息携带在至少一个数据包中的其中一个数据包中,完成信息用于指示第一数据已读取完成。第一设备向第二设备发送至少一个数据包。
[0006]本发明实施例中,第一设备在读取第一数据后,可以将完成信息携带在用于承载数据的数据包中,即,可以将用于指示读取完毕的信息,即完成信息,和数据放在一起发送,无需在数据发送完毕后再额外发送完成信息,这样可以有效节省传输资源,对于两个设备来说也减少了交互过程,减轻设备负担,也可以在一定程度上提高系统性能。
[0007]结合第一方面,在第一方面的第一种可能的实现方式中,第一设备将第一数据携带在至少一个数据包中,可以通过以下方式实现:第一设备按照最大传输单元的大小将第一数据分成至少一个子数据,第一设备将至少一个子数据分别携带在与至少一个子数据一一对应的至少一个数据包中。
[0008]最大传输单元规定了通信协议的某一层所能通过的最大的数据包的大小,因此数据包的大小只有满足最大传输单元才能正常传输。而按照最大传输单元的大小来将第一数据分为至少一个子数据,可以在满足通信协议的规定的情况下,通过一个数据包传输尽可能多的数据,以尽量节省传输资源。
[0009]结合第一方面或第一方面的第一种可能的实现方式,在第一方面的第二种可能的实现方式中,第一设备将完成信息携带在至少一个数据包中的其中一个数据包中,可以通过以下方式实现:第一设备将完成信息携带在用于携带第一子数据的第一数据包中。其中,第一子数据为第一数据的至少一个子数据中的一个子数据,第一子数据的大小小于最大传输单元的大小,第一子数据中包括第一数据的尾地址所指向的数据。
[0010]S卩,可以将完成信息携带在承载了第一数据的尾切片的数据包中。一般来说,完成信息是用于指示第一数据已读取完成,那么将完成信息携带在承载了第一数据的尾切片的数据包中才最能说明数据已读取完成。另外,在将第一数据分为子数据时,一般都是按照最大传输单元的最大值在进行,例如最大传输单元最大支持4096字节,那么可以按照4096字节来将第一数据分成至少一个子数据,即除了第一数据的尾切片之外,其他子数据的大小都可以是4096字节,那么,也就尾切片的大小可能会小于或等于4096字节,直接选择将完成信息携带在承载了尾切片的数据包中,也是减少了判断其他数据包的大小以确定其他数据包是否能携带完成信息的过程,减轻设备的工作量。
[0011]结合第一方面的第二种可能的实现方式,在第一方面的第三种可能的实现方式中,第一设备在第一数据包的包头中携带指示信息,指示信息用于指示完成信息在第一数据包中的位置。
[0012]在第一数据包里携带完成信息后,可以在第一数据包的包头中携带指示信息,这样接收设备在接收第一数据包后就可以根据第一数据包的包头的指示信息从第一数据包里获取完成?目息。
[0013]第二方面,提供另一种读数据的方法,该方法可以包括:第二设备向第一设备发送基于RDMA协议的提交命令消息,该提交命令消息用于请求通过第一设备读取第一数据。第二设备根据该提交命令消息接收第一设备发送的携带第一数据的至少一个数据包。其中,至少一个数据包中的其中一个数据包中携带了完成信息,该完成信息用于指示第一数据已读取完成。
[0014]第一设备在读取第一数据后,可以将完成信息携带在用于承载数据的数据包中,即,可以将完成信息和数据放在一起发送,无需在数据发送完毕后再额外发送完成信息,第二设备也无需在数据接收完成后再额外接收专门承载完成信息的消息,这样可以有效节省传输资源,对于两个设备来说也减少了交互过程,减轻设备负担,也可以在一定程度上提高系统性能。
[0015]结合第二方面,在第二方面的第一种可能的实现方式中,完成信息携带在至少一个数据包中的第一数据包中,第一数据包携带的第一子数据为第一数据的一个子数据,第一子数据中包括第一数据的尾地址所指向的数据。
[0016]S卩,完成信息可以携带在承载了第一数据的尾切片的数据包中。一般来说,完成信息是用于指示第一数据已读取完成,那么将完成信息携带在承载了第一数据的尾切片的数据包中,第二设备通过第一数据包获得了第一数据的尾切片,又获得了完成信息,就可以确定数据已读取完成,后面可能无需再接收承载了第一数据的其他数据包。
[0017]结合第二方面的第一种可能的实现方式,在第二方面的第二种可能的实现方式中,该方法还可以包括:第二设备获取第一数据包的包头携带的指示信息,第二设备根据指示信息确定完成信息在第一数据包中的位置,第二设备根据确定的位置从第一数据包中获取完成信息。
[0018]在第一数据包里携带完成信息后,可以在第一数据包的包头中携带指示信息,这样第二设备在接收第一数据包后就可以根据第一数据包的包头的指示信息从第一数据包的相应位置获取完成信息。
[0019]第三方面,提供第一种读数据的设备,该设备可以包括存储器、处理器、接收器和发送器。其中,存储器可以用于存储处理器执行任务所需的指令,接收器可以用于接收第二设备发送的基于RDMA协议的提交命令消息,该提交命令消息用于请求通过该设备读取第一数据。处理器可以用于执行存储器所存储的指令,根据接收器接收的该提交命令消息获取第一数据,将第一数据携带在至少一个数据包中,且将完成信息携带在至少一个数据包中的其中一个数据包中,完成信息用于指示第一数据已读取完成,发送器可以用于向第二设备发送至少一个数据包。
[0020]结合第三方面,在第三方面的第一种可能的实现方式中,处理器可以用于将第一数据携带在至少一个数据包中,可以通过以下方式实现:按照最大传输单元的大小将第一数据分成至少一个子数据,将至少一个子数据分别携带在与至少一个子数据一一对应的至少一个数据包中。
[0021]结合第三方面或第三方面的第一种可能的实现方式,在第三方面的第二种可能的实现方式中,处理器可以用于将完成信息携带在至少一个数据包中的其中一个数据包中,可以通过以下方式实现:将完成信息携带在用于携带第一子数据的第一数据包中。其中,第一子数据为第一数据的至少一个子数据中的一个子数据,第一子数据的大小小于最大传输单元的大小,第一子数据中包括第一数据的尾地址所指向的数据。
[0022]结合第三方面的第二种可能的实现方式,在第三方面的第三种可能的实现方式中,处理器还可以用于在第一数据包的包头中携带指示信息,该指示信息用于指示完成信息在第一数据包中的位置。
[0023]第四方面,提供第二种读数据的设备,该设备可以包括发送器和接收器。发送器可以用于向第一设备发送基于RDMA协议的提交命令消息,该提交命令消息用于请求通过第一设备读取第一数据。接收器可以用于根据发送器发送的该提交命令消息接收第一设备发送的携带第一数据的至少一个数据包。其中,至少一个数据包中的其中一个数据包中携带了完成信息,完成信息用于指示第一数据已读取完成。
[0024]结合第四方面,在第四方面的第一种可能的实现方式中,完成信息携带在至少一个数据包中的第一数据包中,第一数据包携带的第一子数据为第一数据的一个子数据,第一子数据中包括第一数据的尾地址所指向的数据。
[0025]结合第四方面的第一种可能的实现方式,在第四方面的第二种可能的实现方式中,该设备还可以包括存储器和处理器。存储器可以用于存储处理器执行任务所需的指令,处理器可以用于执行存储器所存储的指令,获取第一数据包的包头携带的指示信息,根据指示信息确定完成信息在第一数据包中的位置,根据确定的位置从第一数据包中获取完成?目息O
[0026]第五方面,提供第三种读数据的设备,该设备可以包括用于执行第一方面的方法的模块。
[0027]第六方面,提供第四种读数据的设备,该设备可以包括用于执行第二方面的方法的模块。
[0028]第七方面,提供一种计算机存储介质,其中,该计算机存储介质可存储程序,该程序执行时包括第一方面中记载的任何一种读数据的方法的部分或全部步骤。
[0029]第八方面,提供另一种计算机存储介质,其中,该计算机存储介质可存储程序,该程序执行时包括第二方面中记载的任何一种读数据的方法的部分或全部步骤。
【附图说明】
[0030]为了更清楚地说明本发明实施例的技术方案,下面将对本发明实施例中所需要使用的附图作简单地介绍,显而易见地,下面所介绍的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
[0031 ]图1为本发明实施例的一种可能的应用场景不意图;
[0032]图2为本发明实施例提供的进行读数据的一种可能的硬件架构示意图;
[0033]图3为本发明实施例提供的一种读数据的方法的可能的流程图;
[0034]图4为本发明实施例提供的另一种读数据的方法的可能的流程图;
[0035]图5为本发明实施例提供的基于图4和图5的一种读数据的方法的可能的流程图;
[0036]图6A为本发明实施例提供的第二数据包的帧结构示意图;
[0037]图6B为本发明实施例提供的第一数据包的帧结构示意图;
[0038]图7A为现有技术中在NOF下读取数据的示意图;
[0039]图7B为本发明实施例提供的在NOF下读取数据的示意图;
[0040]图8为本发明实施例提供的第一种读数据的设备的结构示意图;
[0041 ]图9为本发明实施例提供的第二种读数据的设备的结构示意图;
[0042]图10为本发明实施例提供的第一种读数据的设备的结构框图;
[0043]图11为本发明实施例提供的第二种读数据的设备的结构框图。
【具体实施方式】
[0044]为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明实施例保护的范围。
[0045]本文中描述的技术可用于各种网络,例如基于RDMA协议的网络,或者也可以用于其他可能的网络。
[0046]以下,对本发明实施例中的部分用语进行解释说明,以便于本领域技术人员理解。
[0047]I)终端设备,是指向用户提供语音和/或数据连通性的设备,例如可以包括具有无线连接功能的手持式设备、或连接到无线调制解调器的处理设备。该终端设备可以经无线接入网(Rad1 Access Network,RAN)与核心网进行通信,与RAN交换语音和/或数据。该终端设备可以包括UE、无线终端设备、移动终端设备、订户单元(Subscriber Unit)、订户站(Subscriber Stat1n),移动站(Mobile Stat1n)、移动台(Mobile)、远程站(RemoteStat1n)、接入点(Access Point,AP)、远程终端设备(Remote Terminal)、接入终端设备(Access Terminal)、用户终端设备(User Terminal)、用户代理(User Agent)、或用户装备(User Device)等。例如,可以包括移动电话(或称为“蜂窝”电话),具有移动终端设备的计算机,便携式、袖珍式、手持式、计算机内置的或者车载的移动装置。例如,个人通信业务(Personal Communicat1n Service,PCS)电话、无绳电话、会话发起协议(SIP)话机、无线本地环路(Wireless Local Loop,WLL)站、个人数字助理(Personal Digital Assistant,PDA)等设备。
[0048]2)网络设备,例如包括基站(例如,接入点),具体可以是指接入网中在空中接口上通过一个或多个扇区与无线终端设备通信的设备。基站可用于将收到的空中帧与网际协议(IP)分组进行相互转换,作为无线终端设备与接入网的其余部分之间的路由器,其中接入网的其余部分可包括IP网络。基站还可协调对空中接口的属性管理。例如,基站可以是无线网络控制器(Rad1 Network Controller,RNC)或基站控制器(Base Stat1n Controller,BSC),或者也可以是演进的LTE系统(LTE-Advanced,LTE-A)中的演进型基站(NodeBSeNBSe-NodeB,evolut1nal Node B),本发明实施例并不限定。
[0049]3)第一设备,例如可以包括终端设备,或者也可以包括网络设备。
[0050]第二设备,例如可以包括终端设备,或者也可以包括网络设备。
[0051]其中,第一设备的类型和第二设备的类型可以相同,或者也可以不同。例如可以两个设备都是终端设备或者两个设备都是网络设备,或者也可以一个设备是终端设备另一个设备是网络设备。
[0052]4)本发明实施例中的术语“系统”和“网络”可被互换使用。“多个”是指两个或两个以上。“和/或”,描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。另外,字符,如无特殊说明,一般表示前后关联对象是一种“或”的关系。
[0053]请参见图1,首先介绍本发明实施例的一种可能的应用架构。
[0054]例如将需请求其他设备读取数据的设备称为客户端,将需读取数据并将读取的数据发送给请求数据的设备的设备称为存储端。例如客户端可以包括NVMe客户端软件(NVMeHost software)和RDMA模块,其中NVMe客户端软件可以用于生成用于请求数据的提交命令消息,RDMA模块可以通过基于RDMA协议的网络发送该提交命令消息。例如存储端可以包括RDMA模块、NVMe控制器(NVMe controIler)和存储模块,数据都存储在存储模块中,图1中以4个存储模块为例,在实际应用中存储模块的数量不限于此。另外为了区分,图1中将客户端的RDMA模块称为RDMA模块I,将存储端的RDMA模块称为RDMA模块2。图1中,以客户端和存储端之间的交换网是基于RDMA协议的网络为例。
[0055]在图1中可以看到,若按照现有技术的方式,例如客户端向存储端发送提交命令消息,则存储端除了向客户端发送提交命令消息所请求的数据之外,还要向客户端发送完成命令消息,较为浪费传输资源。
[0056]可选的,RDMA模块,可以包括能够实现RDMA协议的功能模块。
[0057]可选的,图1中的NVMe客户端软件、RDMA模块1、RDMA模块2、和NVMe控制器,都是既可以通过软件方式实现,也可以通过硬件方式实现,存储模块一般可以通过硬件方式实现。
[0058]请参见图2,介绍本发明实施例的另一种可能的应用架构。图2中的客户端可以包括中央处理器(CHJ)和网卡,CI3U和网卡例如可以通过一种总线和接口标准(PeripheralComponent Interconnect-Express,PCIe)连接,当然也可能通过其他方式连接。例如图2中的CPU能够实现图1中的NVMe客户端软件的功能,图2中的网卡能够实现图1中的RDMA模块I的功能。存储端可以包括RDMA模块和NVMe控制器,NVMe控制器连接存储模块,为了与图1保持连续,图2中存储端的RDMA模块继续标示为RDMA模块2。图2中的RDMA模块2能够实现图1中的RDMA模块2的功能,图2中的NVMe控制器能够实现图1中的NVMe控制器的功能。图2中的存储模块也继续以4个为例。在图2中,以RDMA模块和NVMe控制器都通过FPGA实现为例,即将RDMA的功能和NVMe控制器的功能融合在同一个FPGA内部,S卩FPGA兼容对客户端发送的基于RDMA协议的帧的解析以及兼容NVMe控制器,以及还承载向客户端发送基于RDMA协议的帧的功能和对存储模块进行读写的功能。在实际应用中当然不限于此,存储端的RDMA模块和NVMe控制器除了可以通过FPGA实现之外,还可以通过任意可能的硬件实现,例如在通过其他硬件实现时,存储端的RDMA模块和NVMe控制器可以通过不同的硬件实现,或者也可以通过同一硬件实现。
[0059]可选的,图2中的存储模块以flash为例,在实际应用中不限于此,例如存储模块还可以通过双倍速率同步动态随机存储器(Double Data Rate,DDR)实现,或者还可以通过其他可能的硬件模块实现。图2中的flash能够实现图1中的存储模块的功能。
[0060]可选的,存储端还可以包括CPU,FPGA与CPU例如可以通过PCIe连接,或者也可能通过其他方式连接。交换网例如可以是基于RDMA协议的网络。
[0061 ]可选的,例如客户端和存储端分别是两块独立的单板,这两块单板通过交换网,例如基于RDMA协议的网络实现拉远。在通信过程中,例如客户端和存储端可以通过客户端的CPU和存储端的CPU完成RDMA链路的协商,同时可以通过PCIe的接口完成对各自单板的硬件配置管理等。存储端即承载N0F,将RDMA和NVMe融合在同一个现场可编程门阵列(Field —Programmable Gate Array,FPGA)内部,兼容客户端的RDMA协议解析和flash的控制器,承载客户端RDMA帧的解析发送和flash的读写功能。
[0062]可选的,例如客户端的CPU可以实现图1中的NVMe客户端软件的功能,例如客户端的网卡可以实现图1中的RDMA模块I的功能。当然,在实际应用中也不限于此,例如客户端也可以通过其他可能的硬件模块来实现图1中的NVMe客户端软件的功能,例如可以通过微控制单元(MicrocontrolIer Unit,MOJ)来实现,客户端也可以通过其他可能的硬件模块来实现图1中的RDMA模块I的功能,只要能够实现RDMA协议的硬件模块即可。
[0063]可选的,例如存储端的通过FPGA实现的RDMA模块可以实现图1中的RDMA模块2的功能,存储端的通过FPGA实现的NVMe控制器能够实现图1中的NVMe控制器的功能。
[0064]图1和图2均是以将本发明实施例提供的方案应用在NOF为例,在实际应用中当然不限于此。
[0065]下面结合附图介绍本发明实施例提供的方法。
[0066]请参见图3,提供一种读数据的方法,该方法的流程描述如下:
[0067]步骤301:第一设备接收第二设备发送的基于RDMA协议的提交命令消息,提交命令消息用于请求通过第一设备读取第一数据;
[0068]步骤302:第一设备根据提交命令消息获取第一数据;
[0069]步骤303:第一设备将第一数据携带在至少一个数据包中,且第一设备将完成信息携带在至少一个数据包中的其中一个数据包中;完成信息用于指示第一数据已读取完成;
[0070]步骤304:第一设备向第二设备发送至少一个数据包。
[0071]请参见图4,提供另一种读数据的方法,该方法的流程描述如下:
[0072]步骤401:第二设备向第一设备发送基于RDMA协议的提交命令消息,提交命令消息用于请求通过第一设备读取第一数据;
[0073]步骤402:第二设备根据提交命令消息接收第一设备发送的携带第一数据的至少一个数据包;其中,至少一个数据包中的其中一个数据包中携带了完成信息;完成信息用于指示第一数据已读取完成。
[0074]可选的,图3和图4中所述的第一设备可以是图1或图2中的存储端,图3和图4中所述的第二设备可以是图1或图2中的客户端。
[0075]图3和图4是相应的方法,因此下面一起介绍。
[0076]请参见图5,介绍一种比较完整的在NOF下读取数据的例子,图5的例子可以依托于图1或图2的架构实现,即图5继续以将本发明实施例提供的方案应用在NOF为例,且在介绍过程中以依托于图1所示的架构为例。另外在下面的介绍过程中,以第一设备是存储端、第二设备是客户端为例。
[0077]1、客户端的NVMe客户端软件生成用于读取数据的提交命令信息,并将提交命令信息发送给客户端的RDMA模块,即图1中的RDMA模块I。
[0078]例如,若按照图2的架构,那么NVMe客户端软件可以承载在CPU中,NVMe客户端软件可以通过PCI e将提交命令信息发送给网卡。
[0079 ] 2、客户端的RDMA模块I将提交命令消息通过基于RDMA协议的网络,即客户端和存储端之间的交换网,发送给存储端的RDMA模块2,则存储端的RDMA模块2可以接收提交命令消息。
[0080 ]例如若按照图2的架构,则客户端的RDMA模块I可以承载在网卡中,该网卡例如可以是标准网卡,在该网卡中集成了 RDMA的标准协议。该网卡接收提交命令信息后,可以将接收的提交命令信息按照RDMA协议进行封装,得到提交命令消息,之后通过交换网将提交命令消息发送给存储端的RDMA模块2。根据协议的要求,被封装后的帧会携带目的地址。即在本实施例中,提交命令消息是基于RDMA协议的消息。
[0081 ]提交命令消息是NOF中规定的命令格式,提交命令消息可以是commond capsule格式的消息,因为客户端的RDMA模块I是将提交命令消息发送给存储端的SQ队列,因此又可以将提交命令消息称为SQ消息。在其他网络中,提交命令消息自然可以有其他的定义及格式,只要提交命令消息是用于请求其他设备读取数据的消息即可,提交命令消息的名称不构成对该消息本身的限制。
[0082]例如RDMA模块2可以通过发送(send)操作来发送封装后的帧,send操作是RDMA中的一种固有的操作类型。
[0083]3、存储端的RDMA模块2解析接收的提交命令消息,将提交命令消息所携带的读指令发送给存储端的NVME控制器,则NVME控制器可以接收该读指令。
[0084]其中,读指令可以理解为提交命令消息携带的有效信息,比如NVMe客户端软件发送给RDMA模块I的提交命令信息就可以用于指示该读指令,比如提交命令信息可以是该读指令本身,或者可以其他用于获得该读指令的指示信息,则RDMA模块I根据提交命令信息就可以获得该读指令,并可以将该读指令携带在提交命令消息中。一般来说,一个提交命令消息可以携带一个指令,或者携带读指令,或者携带写指令。
[0085]存储端的RDMA模块2接收来自交换网的命令帧,对其进行校验和解析,可以得到提交命令消息,以及可以从提交命令消息中得到读指令,从而可以将读指令发送给存储端的NVMe控制器。例如读指令中可以携带需读取的数据的长度、及需读取的数据的地址等信息。
[0086]4、存储端的NVMe控制器接收读指令后,可以从存储模块中读取数据,例如将该数据称为第一数据,并将读取的第一数据发送给存储端的RDMA模块2,则RDMA模块2可以接收第一数据,即RDMA模块2获取第一数据。
[0087]可选的,存储端的NVMe控制器中设置了多个并行的SQ处理引擎,也就是说,NVMe控制器在处理指令时可以并行处理,例如可以并行处理多个读指令和/或写指令,这样可以提高处理效率。
[0088]5、存储端的RDMA模块2将第一数据分成至少一个子数据,RDMA模块2将至少一个子数据和完成信息承载在数据包中。其中,完成信息可以用于指示第一数据已读取完成。
[0089]存储端的RDMA模块2接收第一数据后,可以按照RDMA协议支持的最大传输单元(Maximum Transmiss1n Unit,MTU)的大小来将第一数据分为至少一个部分,其中每个部分可以称为一个切片,也可以称为一个子数据,即至少一个部分,或者称为至少一个子数据,里面的每个子数据都是第一数据的一部分。RDMA模块2可以生成至少一个数据包,并将至少一个子数据分别携带在与至少一个子数据一一对应的至少一个数据包中,这里的一一对应,可以是指每个数据包携带一个子数据,而究竟哪个数据包携带哪个子数据,比如可以预先设定,或者也可以随机,或者还可以有其他分配方式,本发明实施例不作限制。
[0090]可选的,RDMA模块2在发送携带了第一数据的数据包时,可以将完成信息携带在数据包的净荷(payload)中一起发送给客户端的RDMA模块I,即,在数据包中可以将完成信息和数据放在一起,这种传输方式可以称为RDMA最后的写切片携带立即数(RDMA WRITE LASTwith Immediate)的方式。
[0091]存储端读取的第一数据需按照RDMA协议配置的MTU的大小进行发送,第一数据分成的每个子数据的大小都需小于等于MTU的大小。例如RDMA协议支持的MTU的大小为4096字节(Byte),那么如果第一数据的大小为2G,则RDMA模块2可以将第一数据分成2G/4096Byte个部分,每一个部分就是一个RDMA写(RDMA_WRITE)切片,也可以称为子数据,S卩,在本发明实施例中,切片的概念和子数据的概念可互换。可选的,根据读取的数据的长度不同,得到的子数据的数量可能不同,另外根据MTU的大小不同,得到的子数据的大小也可能不同。按照MTU来将第一数据分为至少一个子数据,可以在满足通信协议的规定的情况下,通过一个数据包传输尽可能多的数据,以尽量节省传输资源。
[0092]可选的,如果将完成信息封装在一个单独的消息中进行发送,则可以以responsecapsule格式进行封装,那么封装后得到的消息就可以是完成命令消息。因此可以认为,本发明实施例是将需要单独发送的完成信息放在数据中一并发送了,这样可以节省传输资源。
[0093]可选的,完成命令消息也是NOF中规定的命令格式,完成命令消息例如可以是response capsule格式的消息,因为存储端在向客户端发送完成命令消息之前,是将完成命令消息先存储到存储端的CQ队列,因此又可以将完成命令消息称为CQ消息。
[0094]可选的,RDMA模块2可以将完成信息携带在至少一个数据包中的其中一个数据包中进行发送。例如,RDMA模块2可以将完成信息携带在至少一个数据包中的最后一个数据包中进行发送,例如将最后一个数据包称为第一数据包,例如第一数据包携带的子数据可以称为第一数据的尾切片,这种方式形成新的帧格式(即第一数据包的帧格式)可以称为RDMAWRITE LAST with Immediate,这是RDMA协议中固有的命名规范,通俗地讲可以认为是搭“顺风车”的概念。那么在至少一个数据包中,第一数据包相当于携带了立即数,这中带立即数的帧可以携带立即数字节域,例如可以将立即数字节域携带在第一数据包的帧头部位,例如该立即数字节域的长度可以是4字节,可以用来指示完成信息在第一数据包中的位置,以便接收端可以正确读取完成信息。其中所谓的最后一个数据包,可以是指该数据包中携带的子数据的尾地址就是第一数据的尾地址,比如将第一数据包携带子数据称为第一子数据,那么第一子数据的尾地址就是第一数据的尾地址,第一子数据就是第一数据的尾切片。
[0095]一般来说,完成信息是用于指示第一数据已读取完成,那么将完成信息携带在最后一个数据包时才最能说明数据已读取完成。另外,RDMA模块2在将第一数据分为子数据时,一般都是按照MTU的最大值在进行,例如MTU的最大支持4096字节,那么RDMA模块2可以按照4096字节来将第一数据分成至少一个子数据,即除了第一数据的尾切片之外,其他子数据的大小都可以是4096字节,那么,也就尾切片的大小可能会等于4096字节,或者可能小于4096字节,那么这里也需要分情况,如果尾切片的大小小于4096字节,即小于MTU的最大值,则RDMA模块2可以将完成信息携带在承载尾切片的数据包中进行发送,而如果切分后得到的尾切片的大小等于4096字节,那么RDMA模块2也可以不将完成信息携带在承载最后尾切片的数据包中进行发送,而可以继续按照现有技术的方式,在发送完数据后再发送完成命令消息,以避免数据包的大小超过MTU的最大值。但切分后得到的尾切片的大小等于4096字节的这种情况毕竟是少数情况,因此本发明实施例能够在很大程度上节省传输资源。
[0096]当然,存储端也可以将完成信息携带在其他的数据包中进行发送,不限于只能携带在承载了尾切片的数据包中。
[0097]其中,RDMA_WRITE、及RDMAWRITE LAST with Immediate都是RDMA协议中固定的帧格式的名称,携带的内容不同,则名称就可能不同。
[0098]请参见图6A,为一种可能的用于承载子数据的数据包的帧结构示意图,例如图6A为至少一个数据包中的第二数据包的帧结构示意图,第二数据包可以是至少一个数据包中除了第一数据包之外的任意一个数据包,即,第二数据包中未承载完成信息。可以看到,该第二数据包可以包括RDMA头,其中,RDMA头中可以包括媒体接入控制(Media AccessControl,MAC)字段、全局路由报头(Global Route Header,GRH)字段和基本传输报头(Bacetransport Header,BTH)字段,MAC字段可以用于指示当前的网络类型,在网络不同时,MAC字段也可以更换为其他网络对应的字段,GRH字段可以携带该第二数据包的源网际协议(Internet Protocol,IP)地址和目的IP地址,BTH字段可以用于指示该第二数据包的操作类型,比如为发送(send)类型,还可以用于携带序列号,以尽量避免出现乱序的情况等。该第二数据包还可以包括净荷(payload)和校验字段,payload可以用于承载子数据,校验字段例如可以包括恒定循环冗余校验(Invariant Cyclic Redundancy Check,ICRC)字段和可变循环冗余校验(Volatile Cyclic Redundancy Check,VCRC)字段。
[0099]请参见图6B,为一种可能的用于承载子数据的数据包的帧结构示意图,例如图6B为第一数据包的帧结构示意图,即,第一数据包中承载了完成信息。可以看到,该第一数据包可以包括RDMA头,其中,RDMA头中可以包括MAC、,GRH字段、BTH字段和扩展传输报头(Extended transport Header,ΕΤΗ)字段,该第一数据包还可以包括pay load、即时数据(Immediate data,I data)字段和校验字段,校验字段例如可以包括ICRC字段和VCRC字段。与第二数据包相同的字段不再解释,I data字段可以用于承载本发明实施例所述的完成信息,ETH字段可以用于完成如前所述的立即数字节域的功能,S卩,ETH可以指示I data在第一数据包中的位置。
[0100]6、存储端的RDMA模块I将至少一个数据包发送给客户端的RDMA模块I,则客户端的RDMA模块I可以接收至少一个数据包。其中,至少一个数据包中的第一数据包中携带了完成
?目息O
[0101 ] 7、客户端的RDMA模块I接收至少一个数据包,可以通过第一数据包获取完成信息。
[0102]可选的,客户端的RDMA模块I接收RDMA WRITE LAST with I_ediate后,可以根据第一数据包的帧头中的立即数字节域的指示从第一数据包中读取完成信息。
[0103]8、RDMA模块I将完成信息发送给客户端的NVMe客户端软件。
[0104]9、客户端的NVMe客户端通过解析完成信息即可知道提交命令消息已经执行完成,读取第一数据的流程结束。
[0105]需注意的是,本发明实施例中图3-图5所介绍的方法中,各个步骤可以按照任意可能的顺序执行,步骤的编号不代表对步骤的执行顺序的限制。
[0106]为了更为明确地说明本发明实施例能够实现的效果,请参见图7A,为现有技术中在NOF下读取数据的示意图,及请参见图7B,为本发明实施例提供的在NOF下读取数据的示意图。图7A中,例如客户端向存储端发送提交命令消息,则存储端除了向客户端发送提交命令消息所请求的数据之外,还要向客户端发送完成命令消息,较为浪费传输资源,而图7B中,例如客户端向存储端发送提交命令消息,则存储端可以将完成信息携带在承载了数据的数据包中一起发送给客户端,即存储端可以将数据和完成信息一并进行发送,无需再额外专门发送完成命令消息,节省了传输资源,也减少了两个设备的交互过程,有利于提高系统性能。
[0107]下面结合附图介绍读数据的设备。
[0108]请参见图8,提供第一种读数据的设备,该设备例如可以是如前所述的第一设备,例如第一设备可以是图1或图2中的存储端,若再细化,则也可以将第一设备理解为图1或图2中的RDMA模块2。该设备可以包括存储器801、处理器802、接收器803和发送器804。
[0109]其中,处理器802例如可以包括中央处理器(CPU)或特定应用集成电路(Applicat1n Specific Integrated Circuit,ASIC),可以包括一个或多个用于控制程序执行的集成电路,可以包括使用现场可编程门阵列(Field Programmable Gate Array,FPGA)开发的硬件电路。可选的,若该设备是如前所述的RDMA模块2,则处理器802可以是RDMA模块2中用于实现RDMA协议的功能模块,比如可以通过FPGA实现处理器802的功能。
[0110]存储器801的数量可以是一个或多个。存储器801可以包括只读存储器(Read OnlyMemory,ROM)、随机存取存储器(Random Access Memory,RAM)和磁盘存储器,等等。存储器801可以用于存储处理器802执行任务所需的指令,还可以用于存储数据等。
[0111]接收器803可以用于与外部设备进行网络通信,例如可以通过以太网、无线接入网、无线局域网、或有线网等网络与外部设备进行通信。
[0112]发送器804可以用于与外部设备进行网络通信,例如可以通过以太网、无线接入网、无线局域网、或有线网等网络与外部设备进行通信。
[0113]可选的,接收器803和发送器804可以是一个功能模块,比如一个功能模块可以既实现发送功能又实现接收功能,或者可以是一个功能模块中的不同的子模块,或者接收器803和发送器804也可以是两个彼此独立的功能模块。
[0114]存储器801、接收器803和发送器804可以通过总线800与处理器802相连接(图8以此为例),或者也可以通过专门的连接线与处理器802连接。
[0115]通过对处理器802进行设计编程,将前述所示的方法所对应的代码固化到芯片内,从而使芯片在运行时能够执行前述实施例中的所示的方法。如何对处理器802进行设计编程为本领域技术人员所公知的技术,这里不再赘述。
[0116]该设备可以用于执行上述图3-图5、图7所述的方法,例如可以是如前所述的第一设备。因此,对于该设备中的各单元所实现的功能等,可参考如前方法部分的描述,不多赘述。
[0117]请参见图9,提供第二种读数据的设备,该设备例如可以是如前所述的第二设备,例如第二设备可以是图1或图2中的客户端,若再细化,则也可以将第二设备理解为图1中的RDMA模块I或图2中的网卡。该设备可以包括存储器901、处理器902、接收器903和发送器904。
[0118]其中,处理器902例如可以包括CPU或ASIC,可以包括一个或多个用于控制程序执行的集成电路,可以包括使用FPGA开发的硬件电路。可选的,若该设备是如前所述的RDMA模块I,则处理器902可以是RDMA模块I中用于实现RDMA协议的功能模块,若该设备是如前所述的网卡,则处理器902可以是网卡中用于实现RDMA协议的功能模块。
[0119]存储器901的数量可以是一个或多个。存储器901可以包括R0M、RAM和磁盘存储器,等等。存储器901可以用于存储处理器902执行任务所需的指令,还可以用于存储数据等。
[0120]发送器904可以用于与外部设备进行网络通信,例如可以通过以太网、无线接入网、无线局域网、或有线网等网络与外部设备进行通信。
[0121]接收器903可以用于与外部设备进行网络通信,例如可以通过以太网、无线接入网、无线局域网、或有线网等网络与外部设备进行通信。
[0122]可选的,接收器903和发送器904可以是一个功能模块,比如一个功能模块可以既实现发送功能又实现接收功能,或者可以是一个功能模块中的不同的子模块,或者接收器903和发送器904也可以是两个彼此独立的功能模块。
[0123]存储器901、接收器903和发送器904可以通过总线900与处理器902相连接(图9以此为例),或者也可以通过专门的连接线与处理器902连接。
[0124]通过对处理器902进行设计编程,将前述所示的方法所对应的代码固化到芯片内,从而使芯片在运行时能够执行前述实施例中的所示的方法。如何对处理器902进行设计编程为本领域技术人员所公知的技术,这里不再赘述。
[0125]该设备可以用于执行上述图3-图5、图7所述的方法,例如可以是如前所述的第二设备。因此,对于该设备中的各单元所实现的功能等,可参考如前方法部分的描述,不多赘述。
[0126]请参见图10,提供第一种读数据的设备,该设备可以包括接收模块1001、处理模块1002和发送模块1003。
[0127]在实际应用中,接收模块1001对应的实体设备可以是图1中的RDMA模块2或图2中的RDMA模块2,更细一步,接收模块1001对应的实体设备可以是图8中的接收器803,处理模块1002对应的实体设备可以是图1中的RDMA模块2或图2中的RDMA模块2,更细一步,处理模块1002对应的实体设备可以是图8中的处理器802,发送模块1003对应的实体设备可以是图1中的RDMA模块2或图2中的RDMA模块2,更细一步,发送模块1003对应的实体设备可以是图8中的发送器804。
[0128]该设备可以用于执行上述图3-图5、图7所述的方法,例如可以是第一设备。因此,对于该设备中的各单元所实现的功能等,可参考如前方法部分的描述,不多赘述。
[0129]请参见图11,提供第二种读数据的设备,该设备可以包括接收模块1101和发送模块1102。可选的,该设备还可以包括处理模块1103,在图11中一并示出。
[0130]在实际应用中,接收模块1101对应的实体设备可以是图1中的RDMA模块I或图2中的网卡,更细一步,接收模块1101对应的实体设备可以是图9中的接收器903,处理模块1103对应的实体设备可以是图1中的RDMA模块I或图2中的RDMA模块I,更细一步,处理模块1103对应的实体设备可以是图9中的处理器902,发送模块1102对应的实体设备可以是图1中的RDMA模块I或图2中的网卡,更细一步,发送模块1102对应的实体设备可以是图9中的发送器904。
[0131]该设备可以用于执行上述图3-图5、图7所述的方法,例如可以是第二设备。因此,对于该设备中的各单元所实现的功能等,可参考如前方法部分的描述,不多赘述。
[0132]本发明实施例还提供一种计算机存储介质,其中,该计算机存储介质可存储有程序,该程序执行时包括上述图3、图5或图7的方法实施例中记载的任何一种读数据的方法的部分或全部步骤。
[0133]本发明实施例还提供另一种计算机存储介质,其中,该计算机存储介质可存储有程序,该程序执行时包括上述图4、图5或图7的方法实施例中记载的任何一种读数据的方法的部分或全部步骤。
[0134]本发明实施例中,第一设备在读取第一数据后,可以将用于指示第一数据已读取完成的信息携带在用于携带数据的数据包中,即,可以将用于指示读取完毕的信息和数据放在一起发送,无需在数据发送完毕后再额外发送用于指示数据已读取完成的信息,这样可以有效节省传输资源,对于两个设备来说也减少了交互过程,减轻设备负担,也可以在一定程度上提尚系统性能。
[0135]在本发明中,应该理解到,所揭露的设备和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元或单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性或其它的形式。
[0136]所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本发明实施例。
[0137]在本发明实施例中的各功能单元可以集成在一个处理单元中,或者各个单元也可以均是独立的物理模块。
[0138]所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备,例如可以是个人计算机,服务器,或者网络设备等,或处理器(processor)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:通用串行总线闪存盘(Universal Serial Bus flash drive)、移动硬盘、只读存储器(Read-Only Memory,ROM)、随机存取存储器(random access memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
[0139]以上所述,以上实施例仅用以对本发明的技术方案进行了详细介绍,但以上实施例的说明只是用于帮助理解本发明实施例的方法,不应理解为对本发明实施例的限制。本技术领域的技术人员可轻易想到的变化或替换,都应涵盖在本发明实施例的保护范围之内。
【主权项】
1.一种读数据的方法,其特征在于,包括: 第一设备接收第二设备发送的基于远程直接数据存取RDMA协议的提交命令消息,所述提交命令消息用于请求通过所述第一设备读取第一数据; 所述第一设备根据所述提交命令消息获取所述第一数据; 所述第一设备将所述第一数据携带在至少一个数据包中,且所述第一设备将完成信息携带在所述至少一个数据包中的其中一个数据包中;所述完成信息用于指示所述第一数据已读取完成; 所述第一设备向所述第二设备发送所述至少一个数据包。2.如权利要求1所述的方法,其特征在于,所述第一设备将所述第一数据携带在至少一个数据包中,包括: 所述第一设备按照最大传输单元的大小将所述第一数据分成至少一个子数据; 所述第一设备将所述至少一个子数据分别携带在与所述至少一个子数据一一对应的所述至少一个数据包中。3.如权利要求1或2所述的方法,其特征在于,所述第一设备将完成信息携带在所述至少一个数据包中的其中一个数据包中,包括: 所述第一设备将所述完成信息携带在用于携带第一子数据的第一数据包中;其中,所述第一子数据为所述第一数据的至少一个子数据中的一个子数据,所述第一子数据的大小小于最大传输单元的大小,所述第一子数据中包括所述第一数据的尾地址所指向的数据。4.如权利要求3所述的方法,其特征在于,所述方法还包括: 所述第一设备在所述第一数据包的包头中携带指示信息,所述指示信息用于指示所述完成信息在所述第一数据包中的位置。5.一种读数据的方法,其特征在于,包括: 第二设备向第一设备发送基于远程直接数据存取RDMA协议的提交命令消息,所述提交命令消息用于请求通过所述第一设备读取第一数据; 所述第二设备根据所述提交命令消息接收所述第一设备发送的携带所述第一数据的至少一个数据包;其中,所述至少一个数据包中的其中一个数据包中携带了完成信息;所述完成信息用于指示所述第一数据已读取完成。6.如权利要求5所述的方法,其特征在于,所述完成信息携带在所述至少一个数据包中的第一数据包中,所述第一数据包携带的第一子数据为所述第一数据的一个子数据,所述第一子数据中包括所述第一数据的尾地址所指向的数据。7.如权利要求6所述的方法,其特征在于,所述方法还包括: 所述第二设备获取所述第一数据包的包头携带的指示信息; 所述第二设备根据所述指示信息确定所述完成信息在所述第一数据包中的位置; 所述第二设备根据确定的位置从所述第一数据包中获取所述完成信息。8.一种读数据的设备,其特征在于,包括: 接收模块,用于接收第二设备发送的基于远程直接数据存取RDMA协议的提交命令消息,所述提交命令消息用于请求通过所述第一设备读取第一数据; 处理模块,用于根据所述接收模块接收的所述提交命令消息获取所述第一数据,将所述第一数据携带在至少一个数据包中,且将完成信息携带在所述至少一个数据包中的其中一个数据包中;所述完成信息用于指示所述第一数据已读取完成; 发送模块,用于向所述第二设备发送所述处理模块处理后的所述至少一个数据包。9.如权利要求8所述的设备,其特征在于,所述处理模块用于将所述第一数据携带在至少一个数据包中,包括: 所述处理模块按照最大传输单元的大小将所述第一数据分成至少一个子数据; 所述处理模块将所述至少一个子数据分别携带在与所述至少一个子数据一一对应的所述至少一个数据包中。10.如权利要求8或9所述的设备,其特征在于,所述处理模块用于将完成信息携带在所述至少一个数据包中的其中一个数据包中,包括: 所述处理模块将所述完成信息携带在用于携带第一子数据的第一数据包中;其中,所述第一子数据为所述第一数据的至少一个子数据中的一个子数据,所述第一子数据的大小小于最大传输单元的大小,所述第一子数据中包括所述第一数据的尾地址所指向的数据。11.如权利要求10所述的设备,其特征在于,所述处理模块还用于: 在所述第一数据包的包头中携带指示信息,所述指示信息用于指示所述完成信息在所述第一数据包中的位置。12.一种读数据的设备,其特征在于,包括: 发送模块,用于向第一设备发送基于远程直接数据存取RDMA协议的提交命令消息,所述提交命令消息用于请求通过所述第一设备读取第一数据; 接收模块,用于根据所述发送模块发送的所述提交命令消息接收所述第一设备发送的携带所述第一数据的至少一个数据包;其中,所述至少一个数据包中的其中一个数据包中携带了完成信息;所述完成信息用于指示所述第一数据已读取完成。13.如权利要求12所述的设备,其特征在于,所述完成信息携带在所述至少一个数据包中的第一数据包中,所述第一数据包携带的第一子数据为所述第一数据的一个子数据,所述第一子数据中包括所述第一数据的尾地址所指向的数据。14.如权利要求13所述的设备,其特征在于,所述设备还包括处理模块,用于: 获取所述第一数据包的包头携带的指示信息; 根据所述指示信息确定所述完成信息在所述第一数据包中的位置;根据确定的位置从所述第一数据包中获取所述完成信息。
【文档编号】H04L29/08GK105893323SQ201610343792
【公开日】2016年8月24日
【申请日】2016年5月23日
【发明人】高栋栋, 石仔良, 王 琦
【申请人】华为技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1