数据处理的方法、网卡和服务器与流程

文档序号:22141241发布日期:2020-09-08 13:42阅读:292来源:国知局
数据处理的方法、网卡和服务器与流程
本申请涉及计算机
技术领域
,尤其涉及数据处理的方法、网卡和服务器。
背景技术
:在远程直接数据存取(remotedirectmemoryaccess,rdma)技术中,发送端服务器的网卡(networkinterfacecard,nic)可以先从缓存中获取发送队列条目(sentrequestentry,sqe),再根据sqe从内存中获取sqe对应的数据,向接收端服务器发送所述数据。在发送端服务器的网卡获取sqe之前,发送端服务器的处理器先将sqe划分为多个分段,并将所述sqe的所有分段存储到缓存中。若sqe的长度大于预设阈值,处理器可以采用门铃机制通知网卡处理sqe。例如,网卡采用直接内存存取技术(directmemoryaccess,dma)从缓存中获取sqe的所有分段。若sqe的长度小于或等于预设阈值,处理器将存储到缓存中的sqe的所有分段发送给网卡时,可能出现乱序。为了解决乱序问题,传统技术中处理器划分多个分段过程中,按照分块顺序,每获取一个分段指令下发到处理器内部的缓存,再通过高速通用串行总线(peripheralcomponentinterconnectexpress,pcie)报文将该分段指令发送给网卡,然后,处理器给缓存发送一个pciebarrier指令,清空缓存中已发送给网卡的该分段指令。以此类推,处理器按顺序再向缓存下发下一个分段指令。从而,通过pciebarrier的函数,保证sqe的分段指令之间的顺序。上述方法虽然克服了sqe的所有分段之间的乱序问题,但是又会造成pcie带宽的浪费。而且,上述处理过程中,处理器需要等待前一个分段指令成功发送给网卡,才会通过barrier函数清理缓存,整个数据传输过程是串行的,降低了处理器和网卡之间数据传输的速率,进而增加了整个数据处理过程处理时延,影响了系统的数据处理的效率。技术实现要素:本申请提供的数据处理的方法、网卡及服务器,解决了传统的sqe保序处理过程中技术方法所造成的系统数据处理效率低,时延高的问题。第一方面,本申请提供了一种数据处理方法,该方法可应用于网卡,或者该方法可应用于支持网卡实现该方法的通信装置,例如该通信装置包括芯片系统,该方法可以包括:接收到第i个pcie报文之后,将第i个pcie报文包括的第j段指令存储至第一存储区域的第j个存储单元。其中,第一sqe按照预置大小划分为n段,n为整数,n大于或等于1。第i个pcie报文还包括第一地址段,第一地址段用于指示第j段指令在第一sqe中分段位置。i为整数,i∈[1,n],j为整数,j∈[1,n]。第一存储区域为网卡中用于存储第一sqe的存储区域,第一存储区域包括m个存储单元,每个存储单元用于存储第一sqe的一段指令,m为整数,n≤m。该技术方案,是将第一sqe的多个分段指令的保序操作完全卸载至发送端服务器的网卡内部完成,发送端服务器的处理器不需要进行第一sqe的多个分段指令的保序操作,可以一次性下发第一sqe的多个分段指令。有效地提高了pcie带宽的利用率,并提高了处理器的运行速度,降低了数据处理过程的时延,提升了整个通信系统的数据传输效率。进一步的,当第一sqe的n段指令全部存储至第一存储区域时,可以根据第一存储区域中n个存储单元的指令获取第一sqe,以及第一sqe归属的队列对qp的标识和第一sqe在qp的位置标识,并根据第一sqe归属的qp的标识和第一sqe在qp的位置标识执行数据处理。在一种可能的实现方式中,当i=1时,在所述网卡将所述第j段指令存储至第一存储区域的第j个存储单元之前,该方法还可以包括:判断第一地址段是否是第一存储区域所在的存储空间的地址范围内的地址;若第一地址段是第一存储区域所在的存储空间的地址范围内的地址,确定第j段指令为blueframe的数据,将第1个pcie报文包括的第j段指令存储至第一存储区域的第j个存储单元;若第一地址段不是第一存储区域所在的存储空间的地址范围内的地址,确定第j段指令不是blueframe的数据,根据非blueframe的方法获取第一sqe。在一种可能的实现方式中,该方法还可以包括:当j=1时,在所述网卡将所述第j段指令存储至第一存储区域的第j个存储单元之前,获取第1段指令包括的第一sqe的总长度,比较第一sqe的总长度和预设阈值;若第一sqe的总长度小于或等于预设阈值,确定第一sqe的第1段指令为blueframe的数据,将第1个pcie报文包括的第1段指令存储至第一存储区域的第1个存储单元;若第一sqe的总长度大于预设阈值,确定第一sqe的第1段指令不是blueframe的数据,根据非blueframe的方法获取第一sqe。在一种可能的实现方式中,在将第j段指令存储至第一存储区域的第j个存储单元之后,该方法还可以包括:判断第一sqe是否接收完成;若第一sqe接收完成,生成结束符,若第一sqe未接收完成,继续接收。例如,接收第i+1个pcie报文,将第i+1个pcie报文包括的第k段指令存储至第一存储区域的第k个存储单元。第i+1个pcie报文还包括第二地址段,第二地址段用于指示第k段指令在第一sqe中分段位置,第k段指令为接收到的第一sqe中的分段指令之外的其他分段指令中的任意一个分段指令,k为整数。可选地,判断第一sqe是否接收完成,包括:判断累计值是否等于第一sqe的总长度,若累计值等于第一sqe的总长度,确定第一sqe接收完成,若累计值不等于第一sqe的总长度,确定第一sqe未接收完成。累计值用于指示已接收到的第一sqe的分段指令的长度,累计值的初始值可以为0。在一种可能的实现方式中,网卡根据第一sqe归属的qp的标识和第一sqe在qp的位置标识执行数据处理,包括:根据第一sqe归属的qp的标识和第一sqe在qp的位置标识确定存储第一sqe的第一存储区域,然后,从第一存储区域的起始地址开始,依次读取第一sqe的n个分段指令,并根据第一sqe的n个分段指令获取并发送第一sqe对应的数据。在一种可能的实现方式中,若第一sqe的总长度小于或等于预设阈值,该方法还可以包括:获取第1段指令包括的第一sqe归属的qp的标识和第一sqe在qp的位置标识,建立第一sqe归属的qp的标识、第一sqe在qp的位置标识和第一存储区域的标识间的对应关系,以便于当第一sqe的n段指令全部存储至第一存储区域时,根据第一sqe归属的qp的标识、第一sqe在qp的位置标识和第一存储区域的标识间的对应关系获取第一sqe。在一种可能的实现方式中,当i=1时,即接收到第1个pcie报文之后,该方法还可以包括:为第一sqe分配第一存储区域。上述第一方面或上述第一方面的任一种可能的实现方式的执行主体可以是发送端服务器的网卡。其中,发送端服务器是指用于发送数据的服务器。对于一个服务器来说,当该服务器用于发送数据时,该服务器被称为是发送端服务器,当该服务器用于接收数据时,该服务器被称为是接收端服务器。第二方面,本申请提供了一种数据处理装置,所述装置包括用于执行第一方面或第一方面任一种可能实现方式中的数据处理的方法的各个模块。第三方面,本申请提供了一种网卡,包括存储器和处理器,存储器用于用于存储计算机执行指令,所述网卡运行时,所述处理器执行所述存储器中的计算机执行指令以利用所述数据处理装置中的硬件资源执行第一方面或第一方面任一种可能实现方式中所述方法的操作步骤。第四方面,本申请还提供了一种计算机可读存储介质,其上储存有计算机程序,当该计算机程序在计算机上运行时,使得计算机执行上述第一方面或第一方面任一种可能的实现方式中任一种可能的方法的操作步骤。第五方面,本申请还提供了一种计算机程序产品,当其在计算机上运行时,使得第一方面或第一方面任一种可能的实现方式中的任一种可能的方法的操作步骤。可以理解的是,上述提供的任一种装置或计算机可读存储介质或计算机程序产品等均用于执行上文所提供的对应的方法,因此,其所能达到的有益效果可参考对应的方法中的有益效果,此处不再赘述。附图说明图1为本申请提供的一种通信系统的结构示例图;图2为本申请提供的一种数据处理的方法的流程图;图3为本申请提供的一种blueframebuffer的结构示例图;图4为本申请提供的另一种数据处理的方法的流程图;图5为本申请提供的又一种数据处理的方法的流程图;图6为本申请提供的一种数据处理装置的结构示例图;图7为本申请提供的一种网卡的结构示例图;图8为本申请提供的一种服务器的结构示例图。具体实施方式图1为本申请提供的一种通信系统的结构示例图。如图1所示,通信系统包括服务器100和服务器200。服务器100和服务器200之间可以通过网络300进行消息通信。发送数据的服务器可以称为发送端服务器,接收数据的服务器可以称为接收端服务器。对于一个服务器来说,当该服务器用于发送数据时,该服务器可以被称为发送端服务器,当该服务器用于接收数据时,该服务器可以被称为接收端服务器。网络300可以是以太网,也就是说服务器之间可以使用传输控制协议/互连的协议(transmissioncontrolprotocol/internetprotocol,tcp/ip)协议进行通信;网络300也可以是基于远程直接数据存取技术的网络。远程直接数据存取技术是为了解决在网络中服务器处理数据的时延问题而产生的。服务器可以根据远程直接数据存取技术通过服务器的网卡将数据从一个系统快速移动到远程系统存储器中,而不需要服务器中处理器的参与,由此减少服务器的处理器的负载,提升服务器之间数据传输效率。例如,基于远程直接数据存取技术的网络可以是无线宽带(infiniband,ib)网络,通过以太网使用远程直接内存访问(rdmaoverconvergedethernet,roce)网络、iwapp网络等,本申请对此不作限定。服务器100和服务器200中的每个服务器均包括硬件层和软件层,图1中仅示意出了服务器100的结构。其中,服务器100的硬件层包括网卡、存储器和处理器。所述处理器可以是中央处理器(centralprocessingunit,cpu),该处理器还可以是其他通用处理器、数字信号处理器(digitalsignalprocessor,dsp)、专用集成电路(applicationspecificintegratedcircuit,asic)、现场可编程门阵列(fieldprogrammablegatearray,fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者是任何常规的处理器等。值得说明的是,图1中仅以服务器硬件层中网卡、存储器和处理器的数量均为1为例,本申请实施例对于同一服务器中网卡、存储器和处理器的数量并不构成对本申请实施例的限定。网卡,可以是支持rdma技术的网络接口卡,也可以是主机通道适配器(hostchanneladapter,hca),其主要功能是将多个服务器连接至网络,使得服务器之间能够通过支持rdma技术的网络互相通信。网卡可以通过外接光纤、电缆等连接到网络中。网卡可以插于计算机的pcie插槽上,并通过pcie与服务器连接。或者网卡可以通过某种特定的(或私有的)总线与服务器连接,本申请实施例对此不进行限定。可以理解的是,在物理实现上,网卡可以作为服务器的一部分,也可以是独立于服务器的一个器件/设备。为了便于描述,下文中均将网卡描述为服务器的网卡。网卡可以包括一个或多个端口,具体是指用于接收数据的端口。网卡可以包括处理器、缓存、内存和寄存器。网卡内的内存或缓存可以利用随机存取存储器(randomaccessmemory,ram)类型的存储介质实现。软件层是运行在硬件层上的程序代码。具体地,软件层又可以分成若干个层,层与层之间通过软件接口通信。软件层包括应用层、驱动层和操作系统层。其中,应用层包括一系列运行应用程序的程序代码。驱动层用于实现硬件层和软件层之间消息交互。驱动层包含网卡驱动等。操作系统层包括操作系统程序代码和协议栈。操作系统可以是linux、windows或vxwarks等。协议栈是指按照通信协议所涉及的不同层级划分,并处理对应层级数据处理的程序代码的集合。在一种可能的实现方式中,例如,在ib网络架构中,协议栈可以包括应用层、传输层、网络层、链路层和物理层。应用层的功能可以在软件层实现。传输层、网络层、链路层和物理层的功能可以在网卡中实现。为了更好理解本申请实施例提供的技术方案,接下来,对本申请实施例涉及的术语和技术概念进行简单说明。在服务器传输数据之前,可以为服务器预先配置多个队列对(queuepair,qp),每个qp可以包括发送队列(sendqueue,sq)和接收队列(receivequeue,rq)。每个sq用于存储至少一个sqe。每个rq用于存储至少一个接收队列条目(receivequeueentry,rqe)。sqe和rqe可以统称为传输指令(命令)条目(workrequestentry,wqe)。可以理解的是,所谓sqe为服务器的网卡从内存中获取数据所需的指令信息。所谓rqe为服务器接收到数据之后存储数据所需的指令信息。还可以理解的是,每个sqe和rqe仅用于传输指令信息,并不包含数据,因此,接收端服务器或发送端服务器需要根据sqe或rqe中指令信息,从其他存储介质(例如,内存)中获取数据。接收端服务器和发送端服务器基于qp进行通信,每个服务器中包括一个或多个qp,不同服务器中qp的数量可以相同,也可以不同。示例地,以图1所述通信系统为例,当服务器100作为发送端服务器,服务器200作为接收端服务器时,服务器100中建立一个qp11,qp11中包括sq11和rq11,服务器200中建立有一个qp21,qp21中包括sq21和rq21。服务器100和服务器200通信过程中,预先建立qp11和qp21的对应关系,相应地,发送端服务器可以基于sq11中的sqe从内存中获取数据,接收端服务器可以基于rq11中的rqe存储接收到的所述数据。需要说明的是,接收端服务器和发送端服务器预先确定的用于通信的两个qp,以及qp中sq和rq的名称可以相同,也可以不同,本申请对此不做限定。还需要说明的是,不同的接收端服务器可以配置不同个数的qp,每个接收端服务器配置的qp包括的sqe和rqe的个数也可以不同。服务器还可以配置完成队列(completequeue,cq),cq用于存储完成队列条目(completequeueentry,cqe)。在服务器的网卡从内存中读取完成数据或向内存写入完成数据之后,网卡可以向处理器发送cqe。需要说明的是,服务器的处理器与服务器的网卡之间通常是通过pcie总线连接的,由于pcie协议本身限制,造成内存写限制,即服务器的处理器向网卡每次最多下发8字节(byte)数据。而每个sqe的长度至少为64byte,且不同的业务对应的sqe的长度可能不同。若sqe的长度较长,服务器的处理器直接将sqe下发给服务器的网卡,会造成传输效率降低,增加处理器的占用率。因此,服务器的处理器可以通过敲门铃方式指示服务器的网卡采用直接内存存取技术进行大块数据搬移。依据服务器的处理器和服务器的网卡的pcie属性限制,例如,服务器的处理器受存储属性寄存器的限制,大块数据的粒度可以为4k。大块数据的粒度可以是指读的最大值和写的最大值。在一些可能的实施例中,由于sqe的长度较小,如果网卡仍然以直接内存存取技术方式从内存中读取sqe,反而会增加数据传输的时延。因此,当sqe的长度小于或者等于预设阈值时,可以由发送端服务器的处理器直接将sqe以分段指令的形式下发至发送端服务器的网卡。在本申请中,可以将sqe的长度小于或者等于预设阈值的sqe称为blueframe。但是,发送端服务器的处理器将blueframe的所有分段发送给网卡时,可能出现乱序。传统技术中,虽然可以克服blueframe的所有分段之间的乱序问题,但是又会造成pcie带宽的浪费,而且降低了发送端服务器的处理器向发送端服务器的网卡发送blueframe的速率,增加了整个数据处理过程处理时延,影响了系统的数据处理的效率。本申请提供的数据处理的方法,可以将blueframe的多个分段指令的保序操作完全卸载至发送端服务器的网卡内部完成,发送端服务器的处理器不需要进行blueframe的多个分段指令的保序操作,且发送端服务器的处理器可以一次性下发一个blueframe的多个分段指令,只需要保证不同的blueframe之间通过pciebarrier隔离不同sqe即可。从而,能够连续下发同一个blueframe的多个分段指令,有效地减少处理器和网卡之间报文的数量,提高了pcie带宽的利用率。而且,由于处理器可以并行发送多个分段指令,也就是说处理器可以同时处理不同sqe的分段指令,以及同一sqe的不同分段指令,无需关注各个sqe的分段指令的保序问题,减少了处理器的负载,同时又降低了处理器和网卡之间数据处理的时延,提升了的数据处理效率。接下来,结合附图对本申请实施例提供的数据处理的方法进行详细说明。图2为本申请实施例提供的一种数据处理的方法的流程图。图2所示的方法的执行主体可以是发送端服务器的网卡。本申请实施例可以针对发送端服务器的网卡的各个sqe进行保序处理,对于每个sqe的分段指令进行保序处理的方法相同。为便于描述,以一个sqe的第j个分段指令为例进行描述。如图所示,所述方法包括:s201、发送端服务器的处理器将第一sqe划分为n段,并存放到缓存中。发送端服务器的处理器可以先将第一sqe划分为n个分段指令,并将第一sqe的n个分段指令存储到缓存中,n为整数,n大于或等于1。例如,假设每个分段指令可以是8byte,若sqe的长度是64byte,发送端服务器的处理器可以先将sqe划分为8个分段指令,即n=8;若sqe的长度是256byte,发送端服务器的处理器可以先将sqe划分为32个分段指令,即n=32。缓存可以是发送端服务器的处理器中的缓存。为方便描述,在下文中,以第一sqe的长度是64byte,第一sqe划分为8段为例进行说明。s202、发送端服务器的处理器向发送端服务器的网卡发送第i个pcie报文,第i个pcie报文包括第一sqe的第j段指令。第i个pcie报文还可以包括第一地址段,第一地址段用于指示第j段指令在第一sqe中分段位置。其中,i为整数,i∈[1,n],j为整数,j∈[1,n]。i和j可以相等,也可以不等。示例的,假设n=8,i可以取1至8,j可以取1至8。s203、发送端服务器的网卡将第j段指令存储至第一存储区域的第j个存储单元。在发送端服务器的网卡接收blueframe的分段指令之前,可以在网卡中预先配置一个用于存储blueframe的buffer区域。blueframebuffer可以是由ram一段存储区域实现,当然,也可以由其他存储介质实现,本申请对此不作限定。为便于表述,本申请的以下实施例以内存中一段存储区域实现blueframebuffer功能为例进行进一步介绍。blueframe的buffer区域可以根据预设规则进行划分。例如,blueframe的buffer区域可以根据预设阈值划分为多个存储区域,每个存储区域的存储容量大于或等于预设阈值。每个存储区域可以根据预设分段指令的大小划分为多个存储单元。每个存储单元的存储容量大于或等于预设分段指令的大小,一个存储单元可以按顺序存储一个或多个分段指令。预设阈值可以是256byte,当然,还可以是其他大小的数值,本申请对此不作限定。为了便于描述,本申请的以下实施例中以一个存储单元用于存储一个分段指令为例进行说明。如图3所示,blueframebuffer可以包括128块存储区域。若预设阈值时256byte,128块存储区域中每个存储区域的存储容量可以是256byte。假设预设分段指令的大小是8byte,每个存储区域又可以包括32个存储单元,32个存储单元中每个存储单元的存储容量可以是8byte。为便于描述,可以采用0至127对128块存储区域进行编号。例如,第1个存储区域的编号为0,第2个存储区域的编号为1,以此类推,第128个存储区域的编号为127。同理,可以采用0至31对32个存储单元进行编号。例如,第1个存储单元的编号为0,第2个存储单元的编号为1,以此类推,第32个存储单元的编号为31。第一存储区域可以是blueframebuffer中任意一个空闲的存储区域。第一存储区域中包括多个存储单元。而且,每个存储单元带有唯一一个标识,该标识与待存储sqe的各个分段的顺序相关联。例如,sqe1按照顺序依次被分成3个分段指令,分别为指令1、指令2和指令3,存储区域1用于存储sqe1的各个分段指令,其包括3个存储单元:存储单元1,存储单元2和存储单元3,其中,存储单元1用于存储指令1、存储单元2用于存储指令2、存储单元3用于存储指令3。发送端服务器的网卡接收到发送端服务器的处理器发送的第i个pcie报文之后,解析第i个pcie报文得到第j段指令和第一地址段,发送端服务器的网卡可以根据第一地址段确定第j段指令在第一sqe中的分段位置,即是第一sqe中的第几个分段指令,将第j段指令存储至第一存储区域的第j个存储单元。例如,当j=1时,将第1段指令存储至第一存储区域的第1个存储单元。当j=2时,将第2段指令存储至第一存储区域的第2个存储单元。当j=3时,将第3段指令存储至第一存储区域的第3个存储单元。当j=4时,将第4段指令存储至第一存储区域的第4个存储单元。当j=5时,将第5段指令存储至第一存储区域的第5个存储单元。当j=6时,将第6段指令存储至第一存储区域的第6个存储单元。当j=7时,将第7段指令存储至第一存储区域的第7个存储单元。当j=8时,将第8段指令存储至第一存储区域的第8个存储单元。s204、当第一存储区域中已存储第一sqe的n段指令时,发送端服务器的网卡根据第一存储区域中n个存储单元的指令获取第一sqe,以及第一sqe归属的qp的标识和第一sqe在qp的位置标识。当第一sqe的n段指令全部存储至第一存储区域后,发送端服务器的网卡可以产生一个响应(ack)。在发送端服务器的网卡的处理器调度到第一sqe归属的qp之后,则发送端服务器的网卡可以根据第一sqe归属的qp的标识和第一sqe在qp的位置标识确定存储第一sqe的第一存储区域;从第一存储区域的起始地址开始,依次读取第一sqe的n个分段指令。可选的,发送端服务器的网卡也可以根据第一sqe归属的qp的标识、第一sqe在qp的位置标识和第一存储区域的标识间的对应关系确定存储第一sqe的第一存储区域。例如,根据第一sqe归属的qp的标识、第一sqe在qp的位置标识查询blueframebuffer对应的表,得到第一存储区域的标识,根据第一存储区域的标识确定第一存储区域的地址后,直接从第一存储区域中按顺序取出blueframe进行处理。示例的,发送端服务器的网卡可以预先配置表,该表用于记录blueframebuffer中存储区域的标识和存入的blueframe的相关信息,如sqe归属的qp的标识、sqe在qp的位置标识和存储区域的标识间的对应关系。第一存储区域的标识可以是存储区域的编号或存储区域的起始地址。表可以由逻辑内部寄存器构成,记录有空闲的存储区域和被占用的存储区域。还可以根据存储区域的标识读出存储区域的地址,根据存储区域的标识返回是否匹配等。如表1为申请提供的一种示例,该表中包括存储区域的标识、sqe归属的qp的标识和sqe在qp的位置。表1存储区域的标识sqe归属的qp的标识sqe在qp的位置0qpn1pi1qpn2pi2qpn3pi3qpn4pi………127发送端服务器的网卡在需要将分段指令写入blueframebuffer中存储区域时,可以先查询表,获取一个空闲的存储区域,空闲的存储区域可以是指未建立sqe归属的qp的标识、sqe在qp的位置标识和存储区域的标识间的对应关系的存储区域。若发送端服务器的网卡查询到空闲的存储区域,获取空闲的存储区域的地址,将第一sqe的第j段指令存储至空闲的存储区域的第j个存储单元。作为一种可能的实施例,如果发送端服务器的网卡未查询到空闲的存储区域,则说明blueframebuffer已经存满了,则丢弃此blueframe,按普通门铃处理,即发送端服务器的网卡需要采用直接内存存取技术方式从缓存中获取sqe的其他分段指令。另外,其他已经存储有数据的存储区域可以存储满,也可以未存储满,本申请实施例不予限定。在本申请实施例中发送端服务器的网卡分配的第一存储区域是未存储任何数据的存储区域。s205、发送端服务器的网卡根据第一sqe归属的qp的标识和第一sqe在qp的位置标识执行数据处理。发送端服务器的网卡根据第一sqe从发送端服务器的内存中读取第一sqe对应的数据,并向接收端服务器发送数据,即执行s206至s209。在一种可能的实现方式中,在需要发送的数据的数据量也较小的情况下,可以将需要发送的数据直接放在sqe中,发送端服务器的处理器直接将包括数据的sqe以分段指令的形式下发至发送端服务器的网卡,无需发送端服务器的网卡再从发送端服务器的内存中读取数据,从而,进一步降低数据传输的时延。在本申请实施例中,可以将sqe中的数据称为inline数据。若第一sqe中包括数据,发送端服务器的网卡无需再从发送端服务器的内存中读取数据,从blueframebuffer中读取的第一sqe之后,直接将第一sqe中包括的数据发送至接收端服务器即可。s206、发送端服务器的网卡向接收端服务器的网卡发送数据。s207、接收端服务器的网卡从接收端服务器的内存中读取第一sqe对应的rqe。接收端服务器的网卡接收到发送端服务器的网卡发送的数据之后,可以先将数据存储到缓存中,然后,接收端服务器的网卡从接收端服务器的内存中读取第一sqe所属的qp对应的rqe。接收端服务器的网卡接收到数据后,可以读取数据头里的qpnumber,然后根据qpnumber先读取对应qp的信息(也可以称为qpcontext),qp的信息可以存在处理器的内存里也可以存在接收端服务器的网卡的缓存里,根据qp信息获取rq的地址和指针,然后从处理器的内存里读取rqe。s208、接收端服务器的网卡将数据存储到rqe指示的内存中。s209、接收端服务器的网卡向接收端服务器的处理器发送cqe。对s206至s209的具体的实现方式可以参考现有技术,本申请不予赘述。作为一种可能的实施例,发送端服务器中可能同时存在多个待处理的sqe,每个sqe的数据处理过程均可以采用上述操作过程,每个sqe的最后一个分段可以添加隔断标识,该隔断标识用于标记该sqe的最后一个分段,用于网卡识别不同sqe的最后一个分段。另外,多个sqe的分段可以并行处理,每个分段中只需要添加归属sqe的标识即可,此时,网卡可以根据该标识识别且对应的存储区域,并将其存储至对应的存储单元,以此进一步提升系统的数据处理效率。本申请实施例提供的数据处理的方法,发送端服务器的网卡通过pcie报文的地址对blueframe的乱序的分段指令进行保序处理,直接将分段指令存入blueframebuffer的对应存储单元,使得发送端服务器的处理器无需关注各个分段的保序问题,由发送端服务器的网卡利用空闲的存储区域实现分段指令的保序处理,减少了发送端服务器的处理过程和负载。另一方面,发送端服务器的处理器可以同时向网卡发送不同sqe多个分段指令或同一sqe的不同分段指令,提升了数据处理的效率。而且,在同一个sqe的多个分段指令的发送过程中,无需利用现有技术中barrier函数将各个分段隔离,减少了pcie报文的个数。接下来,结合图4进一步介绍本申请实施例提供的数据处理的方法,所述方法包括:s401、发送端服务器的网卡判断当前接收到的第i个pcie报文是否是第一sqe的首个pcie报文。若发送端服务器的网卡确定当前接收到的第i个pcie报文不是第一sqe的首个pcie报文,即当i不等于1,则执行s402。若发送端服务器的网卡确定当前接收到的第i个pcie报文是第一sqe的首个pcie报文,即当i=1,则执行s403。s402、发送端服务器的网卡将第i个pcie报文包括的第j段指令存储至第一存储区域的第j个存储单元。具体的解释可以参考s203的阐述,本申请不予赘述。s403、发送端服务器的网卡判断第j段指令是否是第一sqe的首个分段指令。在一些实施例中,发送端服务器的网卡可以判断第一地址段的低8为是否全为0,若第一地址段的低8为全为0,可以确定第j段指令是第一sqe的第1段指令,若第一地址段的低8为不全为0,第j段指令不是第一sqe的第1段指令,即是第一sqe的第2段指令至第8段指令中的任意一段指令。需要说明的是,由于当第一sqe是blueframe时,发送端服务器的处理器才会向发送端服务器的网卡发送除了第一sqe的第1段指令之外的其他分段指令。因此,发送端服务器的网卡还可以确定第一sqe是blueframe,第j段指令是blueframe的数据。若发送端服务器的网卡确定第j段指令不是第一sqe的首个分段指令,即j不等于1,执行s404和s402。若发送端服务器的网卡确定第j段指令是第一sqe的首个分段指令,即j=1,执行s405。s404、发送端服务器的网卡分配第一存储区域。可选的,发送端服务器的网卡可以记录第一存储区域的编号,以便于发送端服务器的网卡再次接收到pcie报文之后,将第一sqe的其他分段指令存储到第一存储区域。s405、发送端服务器的网卡判断第j段指令是否是blueframe的数据。第1段指令可以是第一sqe的前8byte的内容。第1段指令可以包括以下内容:1)操作码(opcode):表示传输指令类型。示例的,操作码可以包括发送(send)、rdma写(write)、sendfirst和sendonly。sendfirst表示发送的指令为sqe的第一个分段。sendonly表示发送的指令为sqe;2)sqe_index:表示软件产生的sqe在队列中的位置,也就是指针(pi);3)操作码模式(opc_mod):比如原子(atomic)操作中可以表示对数据如何处理,如加(add)\或(or)\和(and)等。4)ds:表示对应sqe的总长度;5)qpnumber:表示sqe所在qp的编号。6)sl:表示服务等级,也就是对应qp的调度优先级。发送端服务器的网卡可以从第1段指令中获取第一sqe的总长度。发送端服务器的网卡比较第一sqe的总长度和预设阈值,若第一sqe的总长度小于或等于预设阈值,发送端服务器的网卡确定第一sqe的第1段指令为blueframe的数据。若第一sqe的总长度大于预设阈值,发送端服务器的网卡可以确定第一sqe的第1段指令为门铃,根据非blueframe的方法获取第一sqe。例如,需要采用直接内存存取技术方式从缓存中获取第一sqe的其他分段指令。若发送端服务器的网卡判断第j段指令是blueframe的数据,执行s404和s402。进一步的,若发送端服务器的网卡判断第j段指令是blueframe的数据,还可以执行s406至s408。s406、发送端服务器的网卡获取第一sqe归属的qp的标识和第一sqe在qp的位置标识。发送端服务器的网卡可以从第1段指令中获取第一sqe归属的qp的标识和第一sqe在qp的位置标识。第一sqe归属的qp的标识可以是qpnumber的值,第一sqe在qp的位置标识可以是sqe_index的值。s407、发送端服务器的网卡建立第一sqe归属的qp的标识、第一sqe在qp的位置标识和第一存储区域的标识间的对应关系。示例的,发送端服务器的网卡可以预先配置如s204所述的表,表用于记录blueframebuffer中存储区域的标识和存入的blueframe的相关信息。具体的可以参考s204的阐述,本申请不予赘述。s408、发送端服务器的网卡判断第一sqe是否接收完成。在一种可能的实现方式中,发送端服务器的网卡可以判断累计值是否等于第一sqe的总长度,来确定第一sqe是否接收完成。累计值可以用于指示已接收到的第一sqe的分段指令的长度。累计值的初始值可以为0。示例的,发送端服务器的网卡每接收到1个分段指令后,累计值可以增加8byte;或者,发送端服务器的网卡每接收到1个分段指令后,累计值累加1。例如,若发送端服务器的网卡接收到1个分段指令,累计值为8byte;若发送端服务器的网卡接收到2个分段指令,累计值为16byte;以此类推。需要说明的是,可以由实现blueframebuffer的ram存储累计值。当然,也可以由其他存储介质实现,本申请对此不作限定。若更新后的累计值等于第一sqe的总长度,确定第一sqe接收完成,执行s409。若更新后的累计值不等于第一sqe的总长度,确定第一sqe未接收完成,继续接收下一个pcie报文,即接收第一sqe的下一段指令。例如,发送端服务器的网卡还可以继续接收第i+1个pcie报文,第i+1个pcie报文包括第一sqe的第k段指令和第二地址段,其中,第二地址段用于指示第k段指令在第一sqe中分段位置。并将第k段指令存储至第一存储区域的第k个存储单元。第k段指令为发送端服务器的网卡接收到的第一sqe中的分段指令之外的其他分段指令中的任意一个分段指令。例如,当i=1时,第1个pcie报文包括第一sqe的第1段指令,第k段指令可以是第2段指令至第8段指令中的任意一个分段指令。当i=2时,第1个pcie报文包括第一sqe的第2段指令,第2个pcie报文包括第一sqe的第3段指令,第k段指令可以是第1段指令、第4段指令至第8段指令中的任意一个分段指令。对于n个pcie报文中的每个pcie报文包括的分段指令而言,均可以根据本申请实施例提供的数据处理的方法进行处理,不予赘述。需要说明的是,若发送端服务器的网卡确定第一sqe未接收完成,在继续接收到其他分段指令之后,均需要判断第一sqe是否接收完成,直到第一sqe接收完成,生成结束符。s409、发送端服务器的网卡生成结束符。例如,结束符可以是eop,结束符可以用于分隔不同的blueframe。需要说明的是,在发送端服务器的网卡确定第j段指令不是第一sqe的首个分段指令,即j不等于1,执行完成s404和s402之后,发送端服务器的网卡接收到第1段指令之后,还可以将第1段指令存储至第一存储区域的第1个存储单元,以及执行s406至s408。此外,在发送端服务器的网卡确定当前接收到的第i个pcie报文不是第一sqe的首个pcie报文,即i不等于1的情况下,若j等于1,即第i个pcie报文包括第1段指令。可理解的,在发送端服务器的网卡接收第1段指令之前,发送端服务器的网卡接收到了除了第一sqe的第1段指令之外的其他分段指令。发送端服务器的网卡还可以将第1段指令存储至第一存储区域的第1个存储单元,以及执行s406至s408。需要说明的是,本申请提供的数据处理方法步骤的先后顺序可以进行适当调整,步骤也可以根据情况进行相应增减。示例的,如s403和s405之间的前后顺序可以互换,即发送端服务器的网卡可以先判断第j段指令是否是blueframe的数据,再判断第j段指令是否是第一sqe的首个分段指令,任何熟悉本
技术领域
的技术人员在本申请揭露的技术范围内,可轻易想到变化的方法,都应涵盖在本申请的保护范围之内,因此不再赘述。示例的,发送端服务器的网卡可以根据第一地址段确定第1个pcie报文包括的第j段指令是否为blueframe的数据。例如,发送端服务器的网卡可以包括多个寄存器,多个寄存器用于存储不同的数据。在本申请中,发送端服务器的网卡可以包括的多个寄存器中的一个或多个寄存器可以作为blueframe的buffer区域,即该区域用于存储blueframe。blueframe的buffer区域的地址可以是寄存器的地址。发送端服务器的网卡获取到第一地址段之后,首先可以判断第一地址段是否是寄存器的地址范围内的地址,若第一地址段是寄存器的地址范围内的地址,可以确定第j段指令是blueframe的数据。然后,发送端服务器的网卡再判断第一地址段的低8为是否全为0,若第一地址段的低8为全为0,可以确定第j段指令是第一sqe的第1段指令,若第一地址段的低8为不全为0,第j段指令不是第一sqe的第1段指令,即是第一sqe的第2段指令至第8段指令中的任意一段指令。若第一地址段不是寄存器的地址范围内的地址,可以确定第j段指令不是blueframe的数据。另外,在第一sqe接收完成,存储到第一第一存储区域之后,可以执行s204至s209。为了理解本申请实施例提供的数据处理的方法,现举例说明。示例的,如图5所示,假设发送端服务器的处理器以2、4、5、3、1、8、6、7的顺序向发送端服务器的网卡发送blueframe的8个分段指令,即第1个pcie报文包括第2段指令,第2个pcie报文包括第4段指令,第3个pcie报文包括第5段指令,第4个pcie报文包括第3段指令,第5个pcie报文包括第1段指令,第6个pcie报文包括第8段指令,第7个pcie报文包括第6段指令,第8个pcie报文包括第7段指令。发送端服务器的网卡接收到发送端服务器的处理器发送的blueframe的8个分段指令的顺序为2、4、5、3、1、8、6、7。当发送端服务器的网卡接收到发送端服务器的处理器发送的第1个pcie报文之后,解析第1个pcie报文,得到第2段指令和第一地址段。然后,发送端服务器的网卡根据第一地址段可以确定第2段指令在blueframe的第2个分段位置。因此,发送端服务器的网卡可以确定接收到的第2段指令是blueframe的数据,然后,发送端服务器的网卡将第2段指令存储到第一存储区域的第2个存储单元。同理,当发送端服务器的网卡接收到发送端服务器的处理器发送的第1段分段指令、第3段指令至第8段指令之后,分别将第1段分段指令、第3段指令至第8段指令存储到第一存储区域的第1个存储单元、第3个存储单元至第8个存储单元。另外,在发送端服务器的网卡每接收到一个分段指令之后,更新累计值。例如,累计值可以增加8byte;或者,发送端服务器的网卡每接收到1个分段指令后,累计值累加1。累计值的初始值可以为0。需要说明的是,当发送端服务器的网卡接收到发送端服务器的处理器发送的第1段指令之后,进一步的,发送端服务器的网卡还可以获取blueframe归属的qp的标识和blueframe在qp的位置标识。假设blueframe归属的qp的标识为qp2,blueframe在qp的位置标识为pi3。发送端服务器的网卡建立qp2、pi3和第一存储区域间的对应关系。另外,发送端服务器的网卡还可以获取blueframe的总长度,判断第五更新后的累计值是否等于blueframe的总长度。在本申请实施例中,由于blueframe包括8个分段指令,blueframe的总长度为64byte,因此,更新后的累计值小于blueframe的总长度。继续接收blueframe的其他分段指令。上述主要从方法的角度对本申请实施例提供的方案进行了介绍。为了实现上述功能,其包含了执行各个功能相应的硬件结构和/或软件模块。本领域技术人员应该很容易意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,本申请能够以硬件或硬件和计算机软件的结合形式来实现。某个功能究竟以硬件还是计算机软件驱动硬件的方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。本申请实施例可以根据上述方法示例对数据处理装置进行功能模块的划分,例如,可以对应各个功能划分各个功能模块,也可以将两个或两个以上的功能集成在一个处理模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。需要说明的是,本申请实施例中对模块的划分是示意性的,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式。上文中结合图2和图4,详细描述了本申请所提供的数据处理的方法,下面将结合图6和图8,描述本申请所提供的数据处理装置、网卡和服务器。图6为本申请实施例提供的一种数据处理装置60的结构示意图。该装置60可以用于执行图2和图4任一附图所示的数据处理的方法。该装置60可以包括:接收单元601和处理单元602。其中,接收单元601,用于接收第i个pcie报文,第i个pcie报文包括第一sqe的第j段指令和第一地址段。处理单元602,用于将第j段指令存储至第一存储区域的第j个存储单元。当第一sqe的n段指令全部存储至第一存储区域时,根据第一存储区域中n个存储单元的指令获取第一sqe,以及第一sqe归属的队列对qp的标识和第一sqe在qp的位置标识,并根据第一sqe归属的qp的标识和第一sqe在qp的位置标识执行数据处理。例如,结合图2,处理单元602可以用于执行s203至s205。又如,结合图4,处理单元601可以用于执行s401至s409。在本申请实施例中,进一步的,如图6所示,该装置还可以包括:发送单元603。发送单元603,用于发送数据,例如用于支持通信装置执行图2所示的方法中的s206。需要说明的是,上述方法实施例涉及的各步骤的所有相关内容均可以援引到对应功能模块的功能描述,在此不再赘述。本申请实施例提供的装置,用于执行上述任意实施例的方法,因此可以达到与上述实施例的方法相同的效果。应理解的是,本申请实施例的装置60可以通过专用集成电路(application-specificintegratedcircuit,asic)实现,或可编程逻辑器件(programmablelogicdevice,pld)实现,上述pld可以是复杂程序逻辑器件(complexprogrammablelogicaldevice,cpld),现场可编程门阵列(field-programmablegatearray,fpga),通用阵列逻辑(genericarraylogic,gal)或其任意组合。也可以通过软件实现图2和图4所示的方法时,装置60及其各个模块也可以为软件模块。本实施例中相关内容的解释以及有益效果的描述等均可参考上述方法实施例。图7为本申请实施例提供的一种网卡70的硬件结构示意图。如图所示,网卡70包括:至少一个处理器701、通信线路702、存储器703以及通信接口704。其中,通信线路702可以包括一通路,用于在该至少一个处理器701、存储器702以及通信接口704之间传送信息。这里的通信接口704用于网卡704与其他设备或器件进行通信。通信接口704可以包括有线收发器或无线收发器。无线收发器可以包括通信芯片。其中,至少一个处理器701与通信芯片可以集成在一起,也可以是独立设置的。存储器703用于存储执行本申请方案的计算机执行指令,并由处理器701来控制执行。处理器701用于执行存储器703中存储的计算机执行指令,从而实现本申请上述实施例提供的数据处理的方法。本实施例中相关内容的解释以及有益效果的描述等均可参考上述方法实施例。图8为本申请实施例提供的一种服务器80的结构示意图。如图所示,服务器80包括至少一个处理器801、通信线路802、存储器803、网卡804以及通信接口805。通信接口805可以包括有线收发器或无线收发器。无线收发器可以包括通信芯片。其中,至少一个处理器801与通信芯片可以集成在一起,也可以是独立设置的。处理器801可以是一个通用cpu,该处理器801还可以是其他通用处理器、数字信号处理器(dsp)、专用集成电路(asic)、现场可编程门阵列(fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者是任何常规的处理器等。处理器801还可以是图形处理器(graphicsprocessingunit,gpu)、神经网络处理器(neuralnetworkprocessingunit,npu)、微处理器、特定应用集成电路(application-specificintegratedcircuit,asic)、或一个或多个用于控制本申请方案程序执行的集成电路。通信线路802可以包括一通路,用于在上述组件(如处理器801、存储器803、网卡804和通信接口805)之间传送信息。存储器803可以是只读存储器(read-onlymemory,rom)或可存储静态信息和指令的其他类型的静态存储设备,随机存取存储器(randomaccessmemory,ram)或者可存储信息和指令的其他类型的动态存储设备,也可以是电可擦可编程只读存储器(electricallyerasableprogrammableread-onlymemory,eeprom)、只读光盘(compactdiscread-onlymemory,cd-rom)或其他光盘存储、光碟存储(包括压缩光碟、激光碟、光碟、数字通用光碟、蓝光光碟等)、磁盘存储介质或者其他磁存储设备、或者能够用于携带或存储具有指令或数据结构形式的期望的程序代码并能够由计算机存取的任何其他介质,但不限于此。存储器803可以是独立存在的,通过通信线路802与处理器801相连接。存储器803也可以和处理器802集成在一起。本申请实施例提供的存储器803通常可以具有非易失性。存储器803用于存储执行本申请方案的计算机执行指令,并由处理器801来控制执行。处理器801用于执行存储器803中存储的计算机执行指令,从而实现本申请上述实施例提供的数据处理的方法。网卡804的结构可以参考上述图7,此处不再描述。通信接口805,可以是任何收发器一类的装置,用于服务器80与其他设备通信。可选地,本申请实施例中的计算机执行指令也可以称之为应用程序代码。作为一个示例,处理器801可以包括一个或多个cpu。作为一个示例,服务器80可以包括多个处理器。这些处理器中的每一个可以是一个单核(single-cpu)处理器,也可以是一个多核(multi-cpu)处理器。这里的处理器可以指一个或多个设备、电路、和/或用于处理数据(例如计算机程序指令)的处理核。上述服务器80可以是一个通用设备或者是一个专用设备。例如,服务器80可以是基于x86、arm的服务器,也可以为其他的专用服务器,如策略控制和计费(policycontrolandcharging,pcc)服务器等。本申请实施例不限定服务器80的类型。arm是高级精简指令处理器(advancedriscmachines)的英文缩写,risc是精简指令集计算机(reducedinstructionsetcompute)的英文缩写。本申请实施例还提供了一种通信系统,该通信系统可以包括服务器80,其中服务器80可以作为发送端服务器。另外,该通信系统还包括接收端服务器,用于接收发送端服务器发送数据,以使得接收端服务器执行上文所述的数据处理的方法。在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件程序实现时,可以全部或部分地以计算机程序产品的形式来实现。该计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行计算机执行指令时,全部或部分地产生按照本申请实施例的流程或功能。计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,计算机指令可以从一个网站站点、计算机、服务器或者数据中心通过有线(例如同轴电缆、光纤、数字用户线(digitalsubscriberline,dsl))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可以用介质集成的服务器、数据中心等数据存储设备。可用介质可以是磁性介质(例如,软盘、硬盘、磁带),光介质(例如,dvd)、或者半导体介质(例如固态硬盘(solidstatedisk,ssd))等。以上所述,仅为本申请的具体实施方式。熟悉本
技术领域
的技术人员根据本申请提供的具体实施方式,可想到变化或替换,都应涵盖在本申请的保护范围之内。当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1