本申请涉及计算机技术领域,具体涉及网络技术领域,尤其涉及用于处理远程直接内存访问请求的方法和装置。
背景技术:
RDMA(Remote Direct Memory Access,远程直接内存访问),是为了解决网络传输中服务器端数据处理的延迟而产生的。RDMA与传统以太网的区别主要在于,数据由适配器从源端内存直接读出,经传输介质到达远端后被适配器直接写入目的区域。在使用RDMA技术时,发起者只需指定远端内存读写地址,开启传输并等待传输完成即可。整个传输过程几乎无需两端操作系统参与,无需复杂的协议层处理,亦无需多余数据拷贝,因此RDMA的延时能比传统以太网快一个数量级。此外,RDMA的传输介质一般是光纤,能提供极高的通信带宽,以满足业务巨大的吞吐量需求。
然而,在使用RDMA技术时,在保证小数据包微秒级延时的前提下,如何增大小数据包的传输QPS从而提高光纤链路的带宽利用率以及改善应用业务的处理能力和实时性,是一个亟需解决的技术问题。
技术实现要素:
本申请的目的在于提出一种改进的用于处理远程直接内存访问请求的方法和装置,来解决以上背景技术部分提到的技术问题。
第一方面,本申请提供了一种用于处理远程直接内存访问请求的方法,所述方法包括:响应于用户空间发送批量远程直接内存访问RDMA请求,在RDMA网卡中为所述批量RDMA请求分配链路;将所述批量RDMA请求中的每个RDMA请求封装成供RDMA网卡的链路识别的描述符;将所封装成的多个描述符的描述符物理地址构造成链表;将所述链表的起始物理地址下发至所分配的链路,以使用所分配的链路依次读取所述链表中的描述符物理地址并对描述符物理地址对应的描述符中所封装的RDMA请求进行处理。
在一些实施例中,所述将所封装成的多个描述符的描述符物理地址构造成链表,包括:对所述多个描述符的描述符物理地址进行分组,得到至少一个分组;将每个分组作为链表的节点,构造成链表。
在一些实施例中,所述对所述多个描述符的描述符物理地址进行分组,得到至少一个分组,包括:按照预先为每个分组设置的描述符物理地址数量,对所述多个描述符的描述符物理地址进行分组,得到至少一个分组。
在一些实施例中,所述将所封装成的多个描述符的描述符物理地址构造成链表,还包括:在所述链表的每个节点中记录下一个节点中描述符物理地址的数量;以及所述方法还包括:将所述链表中第一个节点中描述符物理地址的数量下发给所分配的链路。
在一些实施例中,所述方法还包括:检测所述RDMA网卡对批量RDMA请求的处理是否超时;向所述用户空间返回用于指示正常或超时的指示信息。
在一些实施例中,所述方法还包括:检测所述RDMA网卡是否接收到目标节点或转发节点在发生传输异常时发回的否定回答NACK包;当接收到NACK包时,解析所述NACK包以确定异常类型,并向所述用户空间返回用于指示异常类型的指示信息。
在一些实施例中,所述方法还包括:判断所述异常类型是否为预设异常类型;若所述异常类型为预设异常类型,使用所述RDMA网卡进行数据重传。
第二方面,本申请提供了一种用于处理远程直接内存访问请求的装置,所述装置包括:分配单元,用于响应于用户空间发送批量远程直接内存访问RDMA请求,在RDMA网卡中为所述批量RDMA请求分配链路;封装单元,用于将所述批量RDMA请求中的每个RDMA请求封装成供RDMA网卡的链路识别的描述符;构造单元,用于将所封装成的多个描述符的描述符物理地址构造成链表;第一下发单元,用于将所述链表的起始物理地址下发至所分配的链路,以使用所分配的链路依次读取所述链表中的描述符物理地址并对描述符物理地址对应的描述符中所封装的RDMA请求进行处理。
在一些实施例中,所述构造单元包括:分组子单元,用于对所述多个描述符的描述符物理地址进行分组,得到至少一个分组;构造子单元,用于将每个分组作为链表的节点,构造成链表。
在一些实施例中,所述分组子单元进一步用于:按照预先为每个分组设置的描述符物理地址数量,对所述多个描述符的描述符物理地址进行分组,得到至少一个分组。
在一些实施例中,所述构造单元还包括:记录单元,用于在所述链表的每个节点中记录下一个节点中描述符物理地址的数量;以及所述装置还包括:第二下发单元,用于将所述链表中第一个节点中描述符物理地址的数量下发给所分配的链路。
在一些实施例中,所述装置还包括:超时检测单元,用于检测所述RDMA网卡对批量RDMA请求的处理是否超时;返回单元,用于向所述用户空间返回用于指示正常或超时的指示信息。
在一些实施例中,所述装置还包括:包检测单元,用于检测所述RDMA网卡是否接收到目标节点或转发节点在发生传输异常时发回的否定回答NACK包;解析单元,用于当接收到NACK包时,解析所述NACK包以确定异常类型,并向所述用户空间返回用于指示异常类型的指示信息。
在一些实施例中,所述装置还包括:判断单元,用于判断所述异常类型是否为预设异常类型;重传单元,用于若所述异常类型为预设异常类型,使用所述RDMA网卡进行数据重传。
本申请提供的用于处理远程直接内存访问请求的方法和装置,在RDMA网卡中为批量RDMA请求分配链路,并将批量RDMA请求中多个RDMA请求所封装的描述符对应的物理地址构造成链表,并将该链表的起始物理地址下发给RDMA网卡,从而使RDMA网卡使用所分配的链路依次读取链表中各个节点以对上述多个RDMA请求进行处理,从而实现了RDMA请求的批量处理,在针对远程主机中离散的等长内存区段的多个RDMA请求进行处理时,处理器可以一次性批量处理,避免多次处理对处理器资源的消耗,从而提高处理效率。
附图说明
通过阅读参照以下附图所作的对非限制性实施例所作的详细描述,本申请的其它特征、目的和优点将会变得更明显:
图1是本申请可以应用于其中的示例性系统架构图;
图2是根据本申请的用于处理远程直接内存访问请求的方法的一个实施例的流程图;
图3是图2实施例中所处理的批量RDMA请求的一个示例;
图4a、4b、4c分别是根据图2实施例及可选实现方式中所构造的链表的示意图;
图5是根据本申请的用于处理远程直接内存访问请求的方法的又一个实施例的流程图;
图6是根据本申请的用于处理远程直接内存访问请求的装置的一个实施例的结构示意图;
图7是适于用来实现本申请实施例的终端设备或服务器的计算机系统的结构示意图。
具体实施方式
下面结合附图和实施例对本申请作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释相关发明,而非对该发明的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与有关发明相关的部分。
需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。下面将参考附图并结合实施例来详细说明本申请。
图1示出了可以应用本申请的用于处理远程直接内存访问请求的方法或装置的实施例的示例性系统架构100。
如图1所示,系统架构100可以包括主机101和主机105。其中主机101包括CPU(Central Processing Unit,中央处理器)102、存储器103和RDMA网卡104,主机105包括CPU106、RDMA网卡107和存储器108。此外,存储器103包括用户空间1031和内核空间1032,存储器108包括用户空间1081和内核空间1082。
主机101或主机105可以通过各自的RDMA网卡接收和发送数据,RDMA网卡也可以与用户空间进行数据交互。以主机101为例,RDMA网卡104可以直接对用户空间1031中的数据进行处理后发送出去,也可以对从外部接收到的数据进行处理后缓存到用户空间1031中。此外,RDMA网卡104可以通过网络与主机105中的RDMA网卡107进行数据交互,以接收或发送数据。
需要说明的是,本申请实施例所提供的用于处理远程直接内存访问请求的方法可以由主机101或主机102执行,相应地,用于处理远程直接内存访问请求的装置一般设置于主机101或主机102中。
应该理解,图1中的主机、CPU、RDMA网卡等设备的数目仅仅是示意性的。根据实现需要,可以具有任意数目的主机、CPU、RDMA网卡以及存储器。
继续参考图2,示出了根据本申请的用于处理远程直接内存访问请求的方法的一个实施例的流程200。所述的用于处理远程直接内存访问请求的方法,包括以下步骤:
步骤201,响应于用户空间发送批量远程直接内存访问RDMA请求,在RDMA网卡中为上述批量RDMA请求分配链路。
在本实施例中,用于处理远程直接内存访问请求的方法运行于其上的电子设备(例如图1所示的主机101或主机102)可以接收用户空间的RDMA请求。其中,所接收的RDMA请求可以是批量RDMA请求,即包括多个RDMA请求。这些RDMA请求可以是读请求,也可以是写请求。例如,批量RDMA请求可以是如图3所示将远端进程多个离散的等长内存区段传输至本地进程的一个连续大区段的操作。
RDMA网卡是支持RDMA功能的网卡,RDMA网卡中可以设置有多个用于对RDMA请求进行处理的链路Link。可选的,RDMA网卡可以是基于FPGA实现的。商用RDMA解决方案需要专门的适配器和交换机,费用昂贵,因此RDMA网卡可以是参考RDMA标准并利用FPGA(Field Programmable Gate Array)实现的兼容系统。使用基于FPGA实现的RDMA网卡,可以降低成本,提高可定制性。
对于上述批量RDMA请求,电子设备可以在RDMA网卡中为该批量RDMA请求分配链路,以使用所分配的链路进行后续处理。
步骤202,将上述批量RDMA请求中的每个RDMA请求封装成供RDMA网卡的链路识别的描述符。
在本实施例中,基于步骤201中得到的批量RDMA请求中的每个RDMA请求,上述电子设备(例如图1所示的主机101或主机105)可以将对应的RDMA请求封装为供RDMA网卡的链路识别的描述符。
步骤203,将所封装成的多个描述符的描述符物理地址构造成链表。
在本实施例中,基于步骤203中针对每个RDMA请求封装成的描述符,电子设备上可以将这些描述符的描述符物理地址构成链表。所构造的链表可以参照图4a。如图4a所示,链表中每个节点除了记录当前节点对应的描述符外,还会有一个地址域,用于指向下一个节点,该地址域可以命名为nxt_addr。
步骤204,将链表的起始物理地址下发至所分配的链路,以使用所分配的链路依次读取链表中的描述符物理地址并对描述符物理地址对应的描述符中所封装的RDMA请求进行处理。
在本实施例中,针对步骤203所构造的链表,电子设备将链表的起始物理地址下发至所分配的链路,以使用所分配的链路依次读取上述链表中的描述符物理地址并对描述符物理地址对应的描述符中所封装的RDMA请求进行处理。
由于所分配的链路得到链表的起始物理地址,RDMA网卡中所分配的链路可以通过链表的起始物理地址依次读取作为链表各个节点的描述符物理地址,从而可以根据描述符物理地址访问到对应的描述符。如此,RDMA网卡可以对各个描述符进行识别,从而处理描述符所封装的RDMA请求。
在现有技术中,RDMA网卡中每个链路需要管理一系列信息。对于远程读操作,本地终端需要记录的信息包括:请求标识、序列号、轮询地址、控制信息;远程终端则需要记录请求标识和长度计数等信息。而对远程终端,本地需要记录:请求标识、序列号、轮询地址、控制信息、长度计数;远程终端则可以不记录信息。其中,由于网络有最大传输单元(MTU,Max Transfer Unit)限制,需要用长度计数进行分组包计数,同时,需要请求标识、序列号来判断数据包是否为一个过期请求。其中,上述信息中对应单个RDMA请求。
在本实施例中,RDMA网卡中每个链路只需重新定义以上信息域即可。其中,请求标识、序列号、轮询地址均对应一个批量RDMA请求。例如,每新增一个批量RDMA请求,请求标识增加1。此外,对于长度计数,RDMA网卡需要使用第一计数信息(例如rdma_length)表示一次RDMA所需操作的数据长度,并使用第二计数信息(例如batch_length)表示一次批量RDMA请求中所有第一计数信息的加和。如此,只需额外增加第二计数信息,即可以将一个链路的生命周期从一次RDMA操作,扩展到一次批量RDMA操作。此外,对于远程写操作,在本地需要存储第一计数信息,将第二计数信息置入RDMA数据包,并在目的端进行存储和分组计数。对于远程读操作,将第一计数信息置入RDMA数据包发送给目的节点,在本地存储第二计数信息以进行分组计数。
在本实施例的一些可选的实现方式中,上述步骤203包括:对上述多个描述符的描述符物理地址进行分组,得到至少一个分组;将每个分组作为链表的节点,构造成链表。在该实现方式中,可以对描述符进行分组,每个节点可以对应一组描述符,这样RDMA网卡可以每次读取一组描述符,从而可以提高读取效率。
在本实施例的一些可选的实现方式中,上述对上述多个描述符的描述符物理地址进行分组,得到至少一个分组,包括:按照预先为每个分组设置的描述符物理地址数量,对上述多个描述符的描述符物理地址进行分组,得到至少一个分组。在该实现方式中,所构造的链表中每个节点对应的分组中描述符的数量可以设定为相同的数值。这样,RDMA网卡即可以每次读取固定数目的描述符,实现较为容易。可选的,每个分组中描述符数量可以设置为4,对应的链表结构如图4b所示。在图4b中所示的链表中,描述符进行4个一组,RDMA网卡可以每次读取4个描述符,如果链表的长度不是4的整数倍,则在结尾进行补零。假设每个描述符需要占用64字节空间,一次批量RDMA请求最多支持读取128个离散数据块,则需要64×128=8KB空间,对应两个物理页。因此,需要为RDMA网卡中的每个链路分配8KB的空间,则一共需要8KB×256=2MB大小的连续内存空间。
在本实施例的一些可选实现方式中,上述步骤203还包括:在上述链表的每个节点中记录下一个节点中描述符物理地址的数量。同时,上述方法还包括:将上述链表中第一个节点中描述符物理地址的数量下发给所分配的链路。该实现方式中,所构造的链表可以参照图4c。如图4c所示,可以将每个分组的数量设定为不同的数值,各个节点对应分组中描述符物理地址的数量分别为2、4、3。该实现方式中,由于每个节点中描述符物理地址的数量不固定,因此每个节点需要通过描述符数目域表明下一个节点对应的分组中描述符的个数,该描述符数目域可以命名为nxt_adj_num。如果采用这种方法,软件每次下发一次批量RDMA操作,不仅需要下发一个起始地址,还需要多写一个寄存器下发给RDMA网卡,表明第一个节点的分组中描述符的个数。该实现方式更灵活,在出现跨页时可以将跨页前后分成两个不同的分组,从而可以解决一个分组中描述符的物理地址跨页时RDMA网卡无法一次性读取一组描述符的问题。
本申请的上述实施例提供的方法在RDMA网卡中为批量RDMA请求分配链路,并将批量RDMA请求中多个RDMA请求所封装的描述符对应的物理地址构造成链表,并将该链表的起始物理地址下发给RDMA网卡,从而使RDMA网卡使用所分配的链路依次读取链表中各个节点以对上述多个RDMA请求进行处理,从而实现了RDMA请求的批量处理,在针对远程主机中离散的等长内存区段的多个RDMA请求进行处理时,处理器可以一次性批量处理,避免多次处理对处理器资源的消耗,从而提高处理效率。
进一步参考图5,其示出了用于处理远程直接内存访问请求的方法的又一个实施例的流程500。该用于处理远程直接内存访问请求的方法的流程500,包括以下步骤:
步骤501,响应于用户空间发送批量远程直接内存访问RDMA请求,在RDMA网卡中为上述批量RDMA请求分配链路。
在本实施例中,步骤501的具体处理可以参考图2对应实施例的步骤201,这里不再赘述。
步骤502,将上述批量RDMA请求中的每个RDMA请求封装成供RDMA网卡的链路识别的描述符。
在本实施例中,步骤502的具体处理可以参考图2对应实施例的步骤202,这里不再赘述。
步骤503,将所封装成的多个描述符的描述符物理地址构造成链表。
在本实施例中,步骤503的具体处理可以参考图2对应实施例的步骤203,这里不再赘述。
步骤504,将链表的起始物理地址下发至所分配的链路,以使用所分配的链路依次读取链表中的描述符物理地址并对描述符物理地址对应的描述符中所封装的RDMA请求进行处理。
在本实施例中,步骤504的具体处理可以参考图2对应实施例的步骤204,这里不再赘述。
步骤505,检测RDMA网卡对批量RDMA请求的处理是否超时。
在实际处理批量RDMA请求时,可能会出现如下异常。第一,链路层链路中断。这种情况下,对应的节点发送拓扑异常中断,整个网络重新发起拓扑,然后更新路由表。相关节点的发送缓冲区中的数据一直残留,从而导致一些数据包超时。第二,链路层误码。这种情况可以通过循环冗余校验(CRC,Cyclic Redundancy Check)检查来去除99%的误码情况,检查到CRC误码后,可以选择硬件重传,也可以选择NACK(否定回答)。CRC检查可以在相邻节点直接做,也可以在源节点和目的节点之间做。第三,网络层的路由信息错误。FPGA逻辑异常或者代理异常导致路由信息错误,从而使一些数据包被丢弃,进一步导致传输超时。第四,网络层死锁。网络层形成环形依赖死锁,需要进行数据包删除,从而导致一些数据包操作,可以选择在删除数据包时发送NACK。第五,FPGA逻辑异常。发生单粒子效应等情况导致FPGA逻辑错误,进而导致一个或多个RDMA操作超时。第六,FPGA发生PCIE逻辑错误。FPGA和主机的PCIE(总线和接口标准)链路故障,导致大量请求超时。本实施例通过步骤405和步骤406可以提供超时机制,在超时后会返回给用户一个异常返回值。该超时机制可以在硬件由于误码、死锁、断路等情况产生丢包时触发,不会给源节点返回任何信息,命令发起者最终会发现请求超时,返回值只有正常和超时两种情况。
在本实施例中,电子设备可以通过RDMA网卡检测批量RDMA请求的处理是否超时。
步骤506,向用户空间返回用于指示正常或超时的指示信息。
在本实例中,基于步骤505中进行的检测,电子设备可以确定批量RDMA请求的处理是正常还是超时,电子设备可以将指示正常还是超时的指示信息返回给用户空间。运行在用户空间的应用程序即可根据该指示信息执行对应的策略。
此外,电子设备也可以在发生超时时执行对应的异常策略。例如,由于引入批量RDMA请求处理,超时可能导致软硬件状态不一致。当硬件(RDMA网卡)超时后,软件将该链路分配给其他请求,同时该链路对应的链表空间会被新的批量RDMA请求所更新,而硬件之前旧的批量RDMA请求并没有执行结束。所以,硬件需要为每个链路维护一个最新的序列信息,如果当前待读取描述符的序列信息已经过期,则丢弃该请求。软件在每次下发RDMA命令之前,首先将链路标识和对应的序列下发下来,当前序列占用48位,所以只要写一次64位寄存器即可,而且下发描述符链表的地址寄存器之间不需要加锁。当发生超时后,驱动需要立即将当前的序列加一并下发给硬件,通过这种方式可以通知硬件对应链路的请求已经过期,从而避免过期的描述符链表被继续执行。
在本实施例的一些可选实现方式中,上述方法还包括:检测上述RDMA网卡是否接收到目标节点或转发节点在发生传输异常时发回的否定回答NACK包;当接收到NACK包时,解析上述NACK包以确定异常类型,并向上述用户空间返回用于指示异常类型的指示信息。
当发生误码时,目的节点给源节点发送一个NACK包,表明数据包CRC校验错误。当发生死锁删包时,转发节点给源节点发送一个NACK包,表明数据包由于死锁被删除。当目的节点拒绝RDMA请求时,给源节点发送一个NACK包,表明请求被拒绝。此时,该实现方式中提供的机制会被触发。该实现方式中,返回值有正常、超时、误码异常、死锁异常、请求拒绝异常等。
在本实施例的一些可选实现方式中,上述方法还包括:判断上述异常类型是否为预设异常类型;若上述异常类型为预设异常类型,使用上述RDMA网卡进行数据重传。该实现方式在上一实现方式的基础上,对一些可恢复的异常进行重传尝试,比如误码和死锁删包等。
从图5中可以看出,与图2对应的实施例相比,本实施例中的用于处理远程直接内存访问请求的方法的流程500突出了对异常进行处理的步骤。由此,本实施例描述的方案可以通过对RDMA请求的批量处理从而提高效率的同时,也尽可能地对有可能引入的处理异常进行处理,提高了处理的可靠性。
进一步参考图6,作为对上述各图所示方法的实现,本申请提供了一种用于处理远程直接内存访问请求的装置的一个实施例,该装置实施例与图2所示的方法实施例相对应,该装置具体可以应用于各种电子设备中。
如图6所示,本实施例所述的用于处理远程直接内存访问请求的装置600包括:分配单元601、封装单元602、构造单元603和第一下发单元604。其中,分配单元601用于响应于用户空间发送批量远程直接内存访问RDMA请求,在RDMA网卡中为上述批量RDMA请求分配链路;封装单元602用于将上述批量RDMA请求中的每个RDMA请求封装成供RDMA网卡的链路识别的描述符;构造单元603用于将所封装成的多个描述符的描述符物理地址构造成链表;而第一下发单元604用于将上述链表的起始物理地址下发至所分配的链路,以使用所分配的链路依次读取上述链表中的描述符物理地址并对描述符物理地址对应的描述符中所封装的RDMA请求进行处理。
在本实施例中,分配单元601、封装单元602、构造单元603和第一下发单元604的具体处理可以参考图2对应实施例的步骤201、步骤202、步骤203以及步骤204,这里不再赘述。
在本实施例的一些可选实现方式中,构造单元603包括:分组子单元,用于对上述多个描述符的描述符物理地址进行分组,得到至少一个分组;构造子单元,用于将每个分组作为链表的节点,构造成链表。该实现方式的具体处理可以参考图2对应实施例中相应的实现方式,这里不再赘述。
在本实施例的一些可选实现方式中,分组子单元进一步用于:按照预先为每个分组设置的描述符物理地址数量,对上述多个描述符的描述符物理地址进行分组,得到至少一个分组。该实现方式的具体处理可以参考图2对应实施例中相应的实现方式,这里不再赘述。
在本实施例的一些可选实现方式中,构造单元603还包括:记录子单元(未示出),用于在上述链表的每个节点中记录下一个节点中描述符物理地址的数量。以及,装置600还包括:第二下发单元(未示出),用于将上述链表中第一个节点中描述符物理地址的数量下发给所分配的链路。该实现方式的具体处理可以参考图2对应实施例中相应的实现方式,这里不再赘述。
在本实施例的一些可选实现方式中,装置600还包括:超时检测单元(未示出),用于检测上述RDMA网卡对批量RDMA请求的处理是否超时;返回单元(未示出),用于向用户空间返回用于指示正常或超时的指示信息。该实现方式的具体处理可以参考图5对应实施例中相应的步骤,这里不再赘述。
在本实施例的一些可选实现方式中,装置600还包括:包检测单元(未示出),用于检测上述RDMA网卡是否接收到目标节点或转发节点在发生传输异常时发回的否定回答NACK包;解析单元(未示出),用于当接收到NACK包时,解析NACK包以确定异常类型,并向上述用户空间返回用于指示异常类型的指示信息。该实现方式的具体处理可以参考图5对应实施例中相应的实现方式,这里不再赘述。
在本实施例的一些可选实现方式中,装置600还包括:判断单元(未示出),用于判断上述异常类型是否为预设异常类型;重传单元(未示出),用于若上述异常类型为预设异常类型,使用上述RDMA网卡进行数据重传。该实现方式的具体处理可以参考图5对应实施例中相应的实现方式,这里不再赘述。
下面参考图7,其示出了适于用来实现本申请实施例的终端设备或服务器的计算机系统700的结构示意图。
如图7所示,计算机系统700包括中央处理单元(CPU)701,其可以根据存储在只读存储器(ROM)702中的程序或者从存储部分708加载到随机访问存储器(RAM)703中的程序而执行各种适当的动作和处理。在RAM 703中,还存储有系统700操作所需的各种程序和数据。CPU 701、ROM 702以及RAM 703通过总线704彼此相连。输入/输出(I/O)接口705也连接至总线704。
以下部件连接至I/O接口705:包括键盘、鼠标等的输入部分706;包括诸如阴极射线管(CRT)、液晶显示器(LCD)等以及扬声器等的输出部分707;包括硬盘等的存储部分708;以及包括诸如LAN卡、调制解调器等的网络接口卡的通信部分709。通信部分709经由诸如因特网的网络执行通信处理。驱动器510也根据需要连接至I/O接口705。可拆卸介质511,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要安装在驱动器510上,以便于从其上读出的计算机程序根据需要被安装入存储部分708。
特别地,根据本公开的实施例,上文参考流程图描述的过程可以被实现为计算机软件程序。例如,本公开的实施例包括一种计算机程序产品,其包括有形地包含在机器可读介质上的计算机程序,所述计算机程序包含用于执行流程图所示的方法的程序代码。在这样的实施例中,该计算机程序可以通过通信部分709从网络上被下载和安装,和/或从可拆卸介质511被安装。
附图中的流程图和框图,图示了按照本申请各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,所述模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
描述于本申请实施例中所涉及到的单元可以通过软件的方式实现,也可以通过硬件的方式来实现。所描述的单元也可以设置在处理器中,例如,可以描述为:一种处理器包括分配单元、封装单元、构造单元和第一下发单元。其中,这些单元的名称在某种情况下并不构成对该单元本身的限定,例如,构造单元还可以被描述为“将所封装成的多个描述符的描述符物理地址构造成链表的单元”。
作为另一方面,本申请还提供了一种非易失性计算机存储介质,该非易失性计算机存储介质可以是上述实施例中所述装置中所包含的非易失性计算机存储介质;也可以是单独存在,未装配入终端中的非易失性计算机存储介质。上述非易失性计算机存储介质存储有一个或者多个程序,当所述一个或者多个程序被一个设备执行时,使得所述设备:响应于用户空间发送批量远程直接内存访问RDMA请求,在RDMA网卡中为所述批量RDMA请求分配链路;将所述批量RDMA请求中的每个RDMA请求封装成供RDMA网卡的链路识别的描述符;将所封装成的多个描述符的描述符物理地址构造成链表;将所述链表的起始物理地址下发至所分配的链路,以使用所分配的链路依次读取所述链表中的描述符物理地址并对描述符物理地址对应的描述符中所封装的RDMA请求进行处理。
以上描述仅为本申请的较佳实施例以及对所运用技术原理的说明。本领域技术人员应当理解,本申请中所涉及的发明范围,并不限于上述技术特征的特定组合而成的技术方案,同时也应涵盖在不脱离所述发明构思的情况下,由上述技术特征或其等同特征进行任意组合而形成的其它技术方案。例如上述特征与本申请中公开的(但不限于)具有类似功能的技术特征进行互相替换而形成的技术方案。