CN114979022A - 远程直接数据存取的实现方法、装置、适配器和存储介质 - Google Patents

远程直接数据存取的实现方法、装置、适配器和存储介质 Download PDF

Info

Publication number
CN114979022A
CN114979022A CN202210557208.8A CN202210557208A CN114979022A CN 114979022 A CN114979022 A CN 114979022A CN 202210557208 A CN202210557208 A CN 202210557208A CN 114979022 A CN114979022 A CN 114979022A
Authority
CN
China
Prior art keywords
sending
queue
target
receiving
shared
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN202210557208.8A
Other languages
English (en)
Other versions
CN114979022B (zh
Inventor
曹颖
钱远盼
李兆耕
程钢
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Beijing Baidu Netcom Science and Technology Co Ltd
Original Assignee
Beijing Baidu Netcom Science and Technology Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Beijing Baidu Netcom Science and Technology Co Ltd filed Critical Beijing Baidu Netcom Science and Technology Co Ltd
Priority to CN202210557208.8A priority Critical patent/CN114979022B/zh
Publication of CN114979022A publication Critical patent/CN114979022A/zh
Application granted granted Critical
Publication of CN114979022B publication Critical patent/CN114979022B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L47/00Traffic control in data switching networks
    • H04L47/50Queue scheduling
    • H04L47/62Queue scheduling characterised by scheduling criteria
    • H04L47/622Queue service order
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L49/00Packet switching elements
    • H04L49/90Buffering arrangements
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L49/00Packet switching elements
    • H04L49/90Buffering arrangements
    • H04L49/9021Plurality of buffers per packet

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Computer And Data Communications (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本公开提供了一种远程直接数据存取的实现方法、装置、适配器和存储介质,涉及计算机技术领域,尤其涉及数据传输技术领域。具体实现方案为:将请求端主机内多个发送队列中的发送WQE,调度至多个发送预取队列中;将多个发送预取队列中的发送WQE,调度到至少一个端对端共享发送队列中;根据每个端对端共享发送队列分别对应的共享发送上下文,对每个端对端共享发送队列中的发送WQE进行按序处理,形成发送报文,将发送报文发送至与发送报文中的对端地址标识匹配的响应端,以指示响应端将发送报文中的负载信息进行内存写入,本公开实施例的技术方案提供一种基于共享队列架构的RDMA的具体实现方式,提高了多任务的并发执行能力。

Description

远程直接数据存取的实现方法、装置、适配器和存储介质
技术领域
本公开涉及计算机技术领域,具体涉及数据传输技术领域,尤其涉及一种远程直接数据存取的实现方法、装置、适配器和存储介质。
背景技术
RDMA(Remote Direct Memory Access,远程直接数据存取)具有高带宽、低时延、bypass Kenerl等特点,采用RDMA通信技术可以提高系统吞吐量、降低系统的网络通信延迟,目前在数据中心存储与计算网络中已有广泛应用。
现有的RDMA通信技术,IB(Infiniband,无限带宽)协议提出的RC(ReliableConnections,可靠连接)服务在大规模部署RDMA网络中,对内存资源开销太大,对应用软件的部署不友好;IB协议提出的UD(Unreliable Datagram,不可靠数据包)服务,虽然能解决内存资源开销问题,但是其不可靠传输,需上层应用来确保数据传输可靠性的特点,对应用软件来说不友好。
目前,现有的基于IB协议的各类型的服务方式,已经无法满足人们日益增长的便捷性、高效性的RDMA需求,有必要提出一种新的RDMA的实现方式,满足用户实际需求。
发明内容
本公开提供了一种远程直接数据存取的实现方法、装置、适配器和存储介质。
根据本公开的一方面,提供了一种远程直接数据存取的实现方法,由请求端中的主机适配器执行,包括:
将请求端主机内多个发送队列中的发送WQE(Work Queue Element,工作队列元素),调度至主机适配器内多个发送预取队列中;
将多个发送预取队列中的发送WQE,调度到至少一个端对端共享发送队列中;
根据与每个端对端共享发送队列分别对应的共享发送上下文,对每个端对端共享发送队列中的发送WQE进行按序处理,形成与发送WQE匹配的发送报文;
将发送报文发送至与发送报文中的对端地址标识匹配的响应端;
其中,所述发送报文用于指示响应端将发送报文中的负载信息进行内存写入。
根据本公开的另一方面,提供了一种远程直接数据存取的实现方法,由响应端中的主机适配器执行,包括:
将响应端主机内多个接收队列中的接收WQE,调度至主机适配器内多个接收预取队列中;
在接收到目标请求端发送的目标发送报文时,确定与目标发送报文对应的目标端对端共享接收队列,并检测目标端对端共享接收队列中是否存储与目标发送报文对应的目标接收WQE;
若否,则从多个接收预取队列中获取与目标发送报文匹配的目标接收WQE,并将目标接收WQE调度至目标端对端共享接收队列中;
根据所述目标端对端共享接收队列中的目标接收WQE,将所述目标发送报文中的负载信息进行内存写入。
根据本公开的另一方面,提供了一种远程直接数据存取的实现装置,由请求端中的主机适配器执行,包括:
发送元素预取模块,用于将请求端主机内多个发送队列中的发送WQE,调度至主机适配器内多个发送预取队列中;
发送元素调度模块,用于将多个发送预取队列中的发送WQE,调度到至少一个端对端共享发送队列中;
发送报文生成模块,用于根据与每个端对端共享发送队列分别对应的共享发送上下文,对每个端对端共享发送队列中的发送WQE进行按序处理,形成与发送WQE匹配的发送报文;
报文发送模块,用于将发送报文发送至与发送报文中的对端地址标识匹配的响应端;
其中,所述发送报文用于指示响应端将发送报文中的负载信息进行内存写入。
根据本公开的另一方面,提供了一种远程直接数据存取的实现装置,由响应端中的主机适配器执行,包括:
接收元素预取模块,用于将响应端主机内多个接收队列中的接收WQE,调度至主机适配器内多个接收预取队列中;
接收元素检测模块,用于在接收到请求端发送的目标发送报文时,确定与目标发送报文对应的目标端对端共享接收队列,并检测目标端对端共享接收队列中是否存储与目标发送报文对应的目标接收WQE;
接收元素调度模块,用于若否,则从多个接收预取队列中获取与目标发送报文匹配的目标接收WQE,并将目标接收WQE调度至目标端对端共享接收队列中;
负载信息写入模块,用于根据所述目标端对端共享接收队列中的目标接收WQE,将所述目标发送报文中的负载信息进行内存写入。
根据本公开的另一方面,提供了一种请求端所适用的主机适配器,包括:
发送元素直接存储器访问引擎,配置为执行将请求端主机内多个发送队列中的发送WQE,调度至主机适配器内多个发送预取队列中;
发送元素调度引擎,配置为执行将多个发送预取队列中的发送WQE,调度到至少一个端对端共享发送队列中;
发送端对端进程引擎,配置为根据与每个端对端共享发送队列分别对应的共享发送上下文,对每个端对端共享发送队列中的发送WQE进行按序处理,形成与发送WQE匹配的发送报文,并将发送报文发送至匹配的响应端;
其中,所述发送报文用于指示响应端将发送报文中的负载信息进行内存写入;
其中,所述发送元素直接存储器访问引擎、发送元素调度引擎以及发送端对端进程引擎均为硬件模块。
根据本公开的另一方面,提供了一种响应端所适用的主机适配器,包括:
接收元素直接存储器访问引擎,配置为将响应端主机内多个接收队列中的接收WQE,调度至主机适配器内多个接收预取队列中;
接收元素调度引擎,配置为在接收到请求端发送的目标发送报文时,确定与目标发送报文对应的目标端对端共享接收队列,并检测目标端对端共享接收队列中是否存储与目标发送报文对应的目标接收WQE;若否,则从多个接收预取队列中获取与目标发送报文匹配的目标接收WQE,并将目标接收WQE调度至目标端对端共享接收队列中;
接收端对端进程引擎,用于根据所述目标端对端共享接收队列中的目标接收WQE,将所述目标发送报文中的负载信息进行内存写入;
其中,所述接收元素直接存储器访问引擎、接收元素调度引擎以及接收端对端进程引擎均为硬件模块。
根据本公开的另一方面,提供了一种存储有计算机指令的非瞬时计算机可读存储介质,其中,所述计算机指令用于使计算机执行本公开所提供的由请求端中的主机适配器执行的远程直接数据存取的实现方法,或者执行由响应端中的主机适配器执行的远程直接数据存取的实现方法。
根据本公开的另一方面,提供了一种计算机程序产品,包括计算机程序,所述计算机程序被处理器执行时实现本公开所提供的由请求端中的主机适配器执行的远程直接数据存取的实现方法,或者由响应端中的主机适配器执行的远程直接数据存取的实现方法。
本公开实施例的技术方案提供了一种基于共享队列架构的RDMA的具体实现方式,提高了多任务的并发执行能力。
应当理解,本部分所描述的内容并非旨在标识本公开的实施例的关键或重要特征,也不用于限制本公开的范围。本公开的其它特征将通过以下的说明书而变得容易理解。
附图说明
附图用于更好地理解本方案,不构成对本公开的限定。其中:
图1是根据本公开实施例提供的一种由请求端中的主机适配器执行的远程直接数据存取的实现方法的流程示意图;
图2a是根据本公开实施例提供的另一种远程直接数据存取的实现方法的流程示意图;
图2b是根据本公开实施例提供的一种从请求端侧的数据存储位置直接提取指定数据并发送至响应端的应用示意图;
图3是根据本公开实施例提供的一种由响应端中的主机适配器执行的远程直接数据存取的实现方法的流程示意图;
图4a是根据本公开实施例提供的另一种远程直接数据存取的实现方法的流程示意图;
图4b是根据本公开实施例提供的一种响应端侧接收发送报文并进行内存写入的应用示意图;
图5是根据本公开实施例提供的一种远程直接数据存取的实现装置的结构示意图;
图6是根据本公开实施例提供的另一种远程直接数据存取的实现装置的结构示意图;
图7是根据本公开实施例提供的一种请求端所适用的主机适配器的结构示意图;
图8是根据本公开实施例提供的一种响应端所适用的主机适配器的结构示意图。
具体实施方式
以下结合附图对本公开的示范性实施例做出说明,其中包括本公开实施例的各种细节以助于理解,应当将它们认为仅仅是示范性的。因此,本领域普通技术人员应当认识到,可以对这里描述的实施例做出各种改变和修改,而不会背离本公开的范围和精神。同样,为了清楚和简明,以下的描述中省略了对公知功能和结构的描述。
图1是根据本公开实施例提供的一种由请求端中的主机适配器执行的远程直接数据存取的实现方法的流程示意图,本实施例适用于从请求端侧的数据存储位置直接提取指定数据并发送至响应端的情况,该方法可以通过远程直接数据存取的实现装置来执行,该装置可以通过软件和/或硬件的方式实现,并一般可以集成于终端的主机适配器中。参考图1,该方法具体包括如下步骤:
S110、将请求端主机内多个发送队列中的发送WQE,调度至主机适配器内多个发送预取队列中。
其中,发送队列可以指存放发送WQE的队列,发送WQE可以理解为发送任务,发送任务可以指请求端所下发的对待发送数据的发送通知。具体的,一个发送WQE指向一块存储设定数据的内存或者缓存区。
例如,请求端侧的物理或者虚拟机上安装的App(Application,应用程序)需要发送位于第一内存地址的第一数据、位于第二内存地址的第二数据和位于第三内存地址的第三数据至其他终端的内存中,则App下发与第一数据匹配的第一发送WQE、与第二数据匹配的第二发送WQE和与第三数据匹配的第三发送WQE至与该App匹配的第一发送队列中。具体的,第一发送WQE中记录该第一内存地址,第二发送WQE中记录该第二内存地址,第三发送WQE中记录该第三内存地址。
其中,每个发送WQE用于指示从请求端的某一特定的内存地址获取数据打包成数据报文,发送至响应端。
需要说明,请求端侧的物理或者虚拟机上可以配置多个App,一个App可以对应一个匹配的发送队列。发送队列一般位于请求端侧安装App的物理或者虚拟机中。
发送预取队列可以是用于存放发送队列中的部分发送WQE的队列。发送预取队列一般位于请求端侧的HCA(Host Channel Adapte,主机适配器)中。
在本公开实施例中,为了保证发送WQE的处理速度,可以通过数据预取机制,将位于物理或者虚拟机的发送队列中的发送WQE,预先调度至位于HCA的发送预取队列中进行处理。其中,HCA可以理解为支持RDMA的网卡。
S120、将多个发送预取队列中的发送WQE,调度到至少一个端对端共享发送队列中。
其中,端对端共享发送队列可以是一种存放来自不同发送预取队列中发送WQE的队列,一个请求端可以包括至少一个端对端共享发送队列。
在本公开实施例中,可以对发送预取队列中的发送WQE再次进行调度,具体的,可以将多个发送预取队列中的发送WQE,调度到至少一个端对端共享发送队列中进行存放。
S130、根据与每个端对端共享发送队列分别对应的共享发送上下文,对每个端对端共享发送队列中的发送WQE进行按序处理,形成与发送WQE匹配的发送报文。
其中,共享发送上下文主要存储端对端共享发送队列的信息(共享发送队列的地址,PI指针以及CI指针等),同时也记录报文发送状态与完成状态。其中,PI指针用于记录一个端对端共享队列当前入队的发送WQE所在的存储位置,CI指针用于记录该端对端共享队列当前出队的发送WQE所在的存储位置。
在本公开实施例中,端对端共享发送队列中的存储的各发送WQE可以通过环形存储的方式进行入队处理,因此,需要在端对端共享发送队列对应的共享发送上下文,存储PI指针以及CI指针。
根据与端对端共享发送队列对应的发送上下文,可以从端对端共享发送队列中顺序获取一个待处理的发送WQE,进而,可以从该发送WQE中记录的内存地址中,获取待发送数据,并将该待发送数据打包得到发送报文。共享发送上下文与端对端共享发送队列可以具有一一对应的关系。
在本公开实施例中,发送队列和发送预取队列中存储的各发送WQE也可以通过环形存储的方式进行入队处理。因此,在与发送队列和发送预取队列分别对应的上下文中,同样需要存储与该发送队列和发送预取队列分别对应的PI指针和CI指针。
其中,发送报文可以用于指示响应端将发送报文中的负载信息进行内存写入。发送报文中的负载信息具体是指从发送WQE中记录的内存地址处取到的待发送数据。
其中,响应端可以是接收请求端发送的发送报文的终端,也即,与请求端共同实现RDMA的对端设备。
在本公开实施例中,可以根据每个端对端共享发送队列分别对应的共享发送上下文中所存储的信息,按序对每个端对端共享发送队列中的发送WQE进行处理,形成与各发送WQE匹配的发送报文。
S140、将发送报文发送至与发送报文中的对端地址标识匹配的响应端。
其中,对端地址标识可以用于指示响应端的地址。
在本公开实施例中,可以根据发送报文中携带的对端地址标识,将发送报文发送至与发送报文中的对端地址标识匹配的响应端。
本公开实施例的技术方案,通过将请求端主机内多个发送队列中的发送WQE,调度至主机适配器内多个发送预取队列中;将多个发送预取队列中的发送WQE,调度到至少一个端对端共享发送队列中;根据与每个端对端共享发送队列分别对应的共享发送上下文,对每个端对端共享发送队列中的发送WQE进行按序处理,形成与发送WQE匹配的发送报文,并将发送报文发送至匹配的响应端,所述发送报文用于指示响应端将发送报文中的负载信息进行内存写入,提供了一种基于共享队列架构的RDMA的具体实现方式,提高了多任务的并发执行能力。
需要说明的是,现有的基于IB的RD(Reliable Datagram,可靠数据报)服务类型,多个发送队列对应一个发送上下文,如果并发的处理每个发送队列中的发送WQE,则该发送上下文需要记录的信息会非常大,无法满足实际的并发要求,因此,现有的RD服务,一次只会处理一个发送队列中的一个发送WQE,当接收到响应端针对该发送WQE反馈的响应报文后,才会再从一个发送队列中获取一个新的发送WQE进行处理。也就是说,并发的各个发送WQE是无序的,因此必须针对每个发送WQE都记录非常详尽的信息。
相区别的,本公开实施例的技术方案则是创造性的将多个发送队列中的发送WQE在一个或者少数几个端对端共享队列中进行有序存储,进而,在发送上下文中记录的信息就可以大大被简化,例如,仅记录一个端对端共享队列中当前入队的发送WQE的信息(队列尾部发送WQE的信息),以及当前出队的发送WQE的信息(队列首个发送WQE信息)即可,而中间其余的多个发送WQE在该端对端共享发送队列中有序存储。
图2a是根据本公开实施例提供的另一种远程直接数据存取的实现方法的流程示意图,本实施例在上述各实施例的基础上,对将多个发送预取队列中的发送WQE,调度到至少一个端对端共享发送队列中分别进行细化。该方法可以由请求端中的主机适配器执行,参考图2a,该方法具体包括如下步骤:
S210、将请求端主机内多个发送队列中的发送WQE,调度至主机适配器内多个发送预取队列中。
在本实施例的一个可选实施方式中,将请求端主机内多个发送队列中的发送WQE,调度至主机适配器内多个发送预取队列中,可以包括:
实时获取各发送预取队列中的队列元素数量和与各发送队列分别对应的发送上下文;发送预取队列与发送队列具有一一对应关系;根据各队列元素数量和各发送上下文,获取满足数据预取条件的目标发送队列,并确定与目标发送队列对应的目标发送预取队列;将目标发送队列中的发送WQE,预取至目标发送预取队列中。
其中,队列元素数量可以是指已调度至发送预取队列中的发送WQE的数量。队列元素数量可以反应发送预取队列的空满状态。发送上下文可以是物理或者虚拟机侧存放的发送队列所分别对应的发送上下文信息,发送上下文可以用于存储发送队列的信息(如发送队列的地址,PI指针以及CI指针等)。数据预取条件可以是能够将发送队列中的发送WQE预取至一一对应的发送预取队列的条件。
在本公开实施例中,由于App向匹配的发送队列下发发送WQE后,发送队列对应的发送上下文的信息会实时进行更新(例如,PI指针值)。为将发送队列中的发送WQE预取至匹配的发送预取队列中,可以实时获取每个发送预取队列中已完成调度的发送WQE的数量得到每个发送预取队列的空满状态,并实时获取与每个发送预取队列具有一一对应关系的各发送队列分别对应的发送上下文得到各发送上下文中PI指针和CI指针的差值,从而根据每个发送预取队列的空满状态以及一一对应的各发送上下文中PI指针和CI指针的差值,将满足数据预取条件的发送队列中的发送WQE,预取至匹配的发送预取队列中。其中,PI指针和CI指针的差值用于确定一个发送队列中有多少发送WQE未被处理。
在一个具体的例子中,物理或者虚拟机侧安装有三个App,在物理或者虚拟机侧分别针对每个App建立匹配的发送队列,例如第一发送队列、第二发送队列和第三发送队列。相对应的,在主机适配器内,建立与各发送队列分别对应的发送预取队列,也即,与第一发送队列对应的第一发送预取队列、与第二发送队列对应的第二发送预取队列和与第三发送队列对应的第三发送预取队列。每个App在生成新的发送WQE时,会相应的存储在匹配的发送队列中,并相应发送更新队列的发送上下文。主机适配器根据自身建立的各发送预取队列的空满状态,以及由各发送队列的发送上下文确定的各发送队列中各未处理的发送WQE的数量值,确定将哪个或者哪几个发送队列的发送WQE预取至匹配的发送预取队列中,等待被主机适配器所处理。
S220、从当前处理的发送预取队列中获取一个待分配发送WQE,并提取所述待分配发送WQE中携带的地址句柄标识。
其中,所述地址句柄标识中可以包括:本端地址标识以及对端地址标识;本端地址标识可以是本请求端的地址标识,对端地址标识可以指响应端的地址标识。待分配发送WQE可以是指发送预取队列中存放的待分配发送任务。
在本公开实施例中,可以获取当前处理的发送预取队列,从当前处理的发送预取队列中获取待分配发送WQE,并从中提取该待分配发送WQE携带的地址句柄标识。
S230、在全部端对端共享发送队列中,获取与所述地址句柄标识匹配的目标端对端共享发送队列。
其中,目标端对端共享发送队列可以是与获取的地址句柄标识匹配的属于全部端对端共享发送队列中的一个队列。需要说明,端对端共享发送队列可以依据响应端进行划分,即,一个端对端共享发送队列中所存放的发送WQE是需要发送至同一个响应端的。
在本公开实施例中,具体可以根据S220中获取的地址句柄标识中的对端地址标识,在全部端对端共享发送队列中,获取与对端地址标识匹配的目标端对端共享发送队列。
S240、将所述待分配发送WQE调度至所述目标端对端共享发送队列中。
在本公开实施例中,可以将S220中获取的待分配发送WQE调度至在S230中获取的目标端对端共享发送队列中。
S220-S240的技术手段,可以提高多任务的并发执行能力。
S250、根据与每个端对端共享发送队列分别对应的共享发送上下文,对每个端对端共享发送队列中的发送WQE进行按序处理,形成与发送WQE匹配的发送报文。
其中,所述发送报文用于指示响应端将发送报文中的负载信息进行内存写入。
这样设置的好处在于,可以通过多队列任务调度到共享发送队列,实现多队列和多任务的并发,同时,通过将执行同一响应端的多个发送WQE存储于同一端对端共享发队列进行按序发送,相当于将通过同一条路径传输的多个发送报文进行了统一的调度,进而,当一条路径出现传输异常时,可以快速定位该传输异常,并对该路径下传输的各发送WQE(存储于同一端对端共享发送队列中)进行统一的重传处理。
S260、将发送报文发送至与发送报文中的对端地址标识匹配的响应端。
本公开实施例的技术方案,通过将请求端主机内多个发送队列中的发送WQE,调度至主机适配器内多个发送预取队列中;从当前处理的发送预取队列中获取一个待分配发送WQE,并提取所述待分配发送WQE中携带的地址句柄标识;在全部端对端共享发送队列中,获取与所述地址句柄标识匹配的目标端对端共享发送队列;将所述待分配发送WQE调度至所述目标端对端共享发送队列中;根据与每个端对端共享发送队列分别对应的共享发送上下文,对每个端对端共享发送队列中的发送WQE进行按序处理,形成与发送WQE匹配的发送报文;将发送报文发送至与发送报文中的对端地址标识匹配的响应端,提供了一种基于共享队列架构的RDMA的具体实现方式,提高了多任务的并发执行能力。
在上述技术方案的基础上,远程直接数据存取的实现方法还可以包括:
在检测到与目标应用程序对应的发送WQE提示信息时,获取与所述目标应用程序匹配的发送更新队列;根据所述发送WQE提示信息,对与发送更新队列对应的发送上下文进行更新。
其中,目标应用程序可以是物理或者虚拟机侧的某个App。发送WQE提示信息可以指用于提示目标应用程序生成新的发送WQE的信息,具体的,每个一个App存储一个WQE至匹配的发送队列后,会生成相应的发送WQE提示信息,该发送WQE提示信息可以为App发送的DB(Door Bell,门铃)信息,该DB信息中携带有用于确定WQE所存入的发送队列的队列标识。
具体的,目标应用程序在生成新的发送WQE存储至匹配的发送队列时,可以生成相应的提示信息提供给主机适配器,该提示信息被检测到时,主机适配器可以获取存储该新的发送WQE的发送队列(也即,发送更新队列),进而可以对于发送更新队列对应的发送上下文进行更新。
这样设置的好处在于,可以及时发送更新队列对应的发送上下文信息,为预取发送WQE至发送预取队列提供条件。
可选的,由请求端中的主机适配器执行的远程直接数据存取的实现方法还可以包括:
在接收到目标响应端反馈的应答报文时,生成与所述应答报文匹配的至少一个发送CQE(Completion Queue Element,完成队列元素);将生成的各发送CQE存储于请求端主机内与发送CQE匹配的发送完成队列中;在与目标响应端对应的端对端共享发送队列中,对与各发送CQE匹配的发送WQE进行内存释放。
其中,应答报文可以是响应端向请求端反馈的对发送报文的接收情况进行描述的报文,应答报文可以包括对至少一个发送报文的反馈,即,可以包括对至少一个发送WQE的反馈。发送CQE可以是对发送WQE的发送状态进行描述的信息。发送完成队列可以是请求端中用于存放发送CQE的一种队列。
具体的,在接收到目标响应端反馈的应答报文时,可以根据应答报文中对发送WQE的处理情况生成相应的发送CQE,并将发送CQE存储于请求端主机内匹配的发送完成队列中,从而在与目标响应端对应的端对端共享发送队列中,对具有匹配的发送CQE的发送WQE进行内存释放。需要说明,发送CQE中对匹配发送WQE的处理状态可以包括处理成功、处理不成功和丢包等状态,不论发送WQE匹配的发送CQE描述的处理状态如何,均可以对端对端共享发送队列中的发送WQE进行内存释放,如果发送WQE发生处理不成功或者丢包情况,可以在发送队列中重新生成一个新的发送WQE进行新一轮的处理。
示例性的,图2b提供一种从请求端侧的数据存储位置直接提取指定数据并发送至响应端的应用示意图。
在用户App下发SQ(Send Queue,发送队列)DB(Door Bell,门铃)后,通过QP(QueuePair,队列对)Engine(引擎)模块,更新HCA中维护的QPC(Send Queue Context,发送队列上下文)表项中SQ PI指针值;
SQ WQE DMA(Direct Memory Access,直接存储器访问)模块基于SQ Prefetch队列(发送预取队列)的空满状态与QPC表项中维护的PI指针和CI指针的差值,确定是否有需要DMA SQWQE(发送WQE)到QP的Prefetch队列中;
SQ WQE调度模块,基于SQWQE中携带的AH(Address Handle ID,地址句柄标识)信息,将该SQ WQE指针保存到对应的EE(End to End,端对端)SQ队列(端对端共享发送队列)中;
EE Process Engine(端对端进程引擎)执行SQ WQE任务,完成数据Payload(负载)DMA操作,组装并发送PKT(Packet,数据包),更新EE SQ状态信息;
当该SQWQE对应的ACK(Acknowledgement Packet,确认报文)报文返回后,EEProcess Engine通知CQ(Completion Queue,完成队列)Engine,生成CQE并完成CQE DMA到物理或者虚拟设备侧CQ的内存中;并释放EE SQ队列中的对应SQWQE;
如图2b所示,第一QP SQ的第一SQWQE入队第一EE SQ,第二SQWQE与第三SQWQE入队第二EE SQ,由于两个EE SQ队列的执行是互不干扰的,第一QP的第一SQWQE在第一EE SQ上执行,第一QP的第二SQWQE也会在第二EE SQ上执行时,进而实现并发执行第一QP的SQWQE;
同时,通过预取QP SQWQE、SQWQE调度入队EE SQ共享队列和EE Process Engine处理的方式,可以将QP SQWQE整个调度处理流程Pipeline(管线)起来,不存在断流水的问题;降低处理时延开销与提升传输带宽的作用;应当注意,本公开中所指的“预取QP SQWQE、SQWQE调度入队EE SQ共享队列和EE Process Engine的Pipeline方式”,仅仅作为示例并不进行限定。
图3是根据本公开实施例提供的一种由响应端中的主机适配器执行的远程直接数据存取的实现方法的流程示意图,本实施例适用于接收由请求端所发送的数据并直接存储至响应端的指定存储位置的情况,该方法可以通过远程直接数据存取的实现装置来执行,该装置可以通过软件和/或硬件的方式实现,并一般可以集成于终端的主机适配器中。参考图3,该方法具体包括如下步骤:
S310、将响应端主机内多个接收队列中的接收WQE,调度至主机适配器内多个接收预取队列中。
其中,接收队列可以指存放接收任务的队列,接收队列可以用于存放接收任务,接收任务可以响应端在接收到请求端所发送的发送报文中,将发送报文中的负载信息存储于响应端什么存储地址的内存中。一般来说,发送WQE和接收WQE是成对下发的,当终端A(请求端)中的第一App和终端B(响应端)的第一App约定好进行一次远程直接数据存取时,终端A的第一App向匹配的发送队列中下发一个第一发送WQE的同时,终端B的第一App向匹配的接收队列中下发一个第一接收WQE。上述成对的第一发送WQE和第一接收WQE,用于指定从终端A的第一内存地址中获取数据直接存储至终端B的第二内存地址中。接收队列可以存放于响应端侧安装App的物理或者虚拟机中。
示例性的,请求端1中的第一App需要发送的数据1、数据2和数据3至响应端1,则第一App下发与数据1匹配的发送任务1、与数据2匹配的发送任务2和与数据3匹配的发送任务3至与第一App匹配的发送队列1。相对应的,响应端1下发与数据1匹配的接收任务1、与数据2匹配的接收任务2和与数据3匹配的接收任务3至与响应端中第一App匹配的接收队列1。
接收WQE可以指接收任务,每个接收队列可以用于存放接收WQE,接收WQE与发送WQE之间可以存在一一对应关系。
接收预取队列可以是从接收队列中调度部分接收WQE进行存放所生成的队列。接收预取队列可以存放于响应端侧的HCA中。
在本公开实施例中,可以将物理或者虚拟机侧多个App分别对应的多个接收队列中的接收WQE,调度至主机适配器内的多个接收预取队列中。
S320、在接收到目标请求端发送的目标发送报文时,确定与目标发送报文对应的目标端对端共享接收队列,并检测目标端对端共享接收队列中是否存储与目标发送报文对应的目标接收WQE。
其中,端对端共享接收队列可以是一种存放来自不同接收预取队列中接收任务的队列,一个响应端可以包括至少一个端对端共享接收队列,一个响应端的多个端对端共享接收队列可以根据来自不同的请求端进行划分。目标端对端共享接收队列可以为全部端对端共享接收队列中的一个。
可选的,对一个发送WQE进行处理时,可以适应性的将相应的待发送数据分片打包成多个发送报文,且在响应端接收该多个发送报文时,还可以乱序接收,响应端接收到该多个发送报文中的一个时,可以及时将相应的接收WQE调度至对应的端对端共享接收队列中进行处理。
在本公开实施例中,响应端在接收到目标请求端发送的目标发送报文时,在确定于目标发送报文对应的目标端对端共享接收队列的同时,还可以检测其中是否已经存储于目标发送报文对应的目标接收WQE,这样可以避免重复在接收预取队列中进行调度操作。
示例性的,第一发送WQE对应的待发送数据1分片打包成发送报文1、发送报文2和发送报文3,对应的该3个发送报文在响应端侧对应于第一接收WQE,对应于端对端共享接收队列1。响应端侧在接收到其中的一个报文如发送报文1时,可以在端对端共享接收队列1中检测是否存储有第一接收WQE,以判断是否已经接收发送报文2或者发送报文3。
S330、若否,则从多个接收预取队列中获取与目标发送报文匹配的目标接收WQE,并将目标接收WQE调度至目标端对端共享接收队列中。
续S320示例,如果端对端共享接收队列1中没有第一接收WQE,可以从接收预取队列中将第一接收WQE调度至端对端共享接收队列1中,如果有,可以不执行调度操作,直接进行后续操作。
S340、根据所述目标端对端共享接收队列中的目标接收WQE,将所述目标发送报文中的负载信息进行内存写入。
续S330示例,可以根据第一接收WQE,将当前接收到的目标发送报文例如,发送报文1中的负载信息在响应端侧进行写入。
本公开实施例的技术方案,通过将响应端主机内多个接收队列中的接收WQE,调度至主机适配器内多个接收预取队列中;在接收到目标请求端发送的目标发送报文时,确定与目标发送报文对应的目标端对端共享接收队列,并检测目标端对端共享接收队列中是否存储与目标发送报文对应的目标接收WQE;若否,则从多个接收预取队列中获取与目标发送报文匹配的目标接收WQE,并将目标接收WQE调度至目标端对端共享接收队列中;根据所述目标端对端共享接收队列中的目标接收WQE,将所述目标发送报文中的负载信息进行内存写入,提供了一种基于共享队列架构的RDMA的具体实现方式,提高了多任务的并发执行能力。
图4a是根据本公开实施例提供的另一种远程直接数据存取的实现方法的流程示意图,本实施例在上述各实施例的基础上,将从多个接收预取队列中获取与目标发送报文匹配的目标接收WQE,并将目标接收WQE调度至目标端对端共享接收队列中进行细化。该方法可以由响应端中的主机适配器执行,参考图4a,该方法具体包括如下步骤:
S410、将响应端主机内多个接收队列中的接收WQE,调度至主机适配器内多个接收预取队列中。
S420、在接收到目标请求端发送的目标发送报文时,确定与目标发送报文对应的目标端对端共享接收队列,并检测目标端对端共享接收队列中是否存储与目标发送报文对应的目标接收WQE。
在本实施例的一个可选实施方式中,确定与目标发送报文对应的目标端对端共享接收队列,具体可以根据所述目标发送报文中包括的端对端共享发送队列标识,获取与所述端对端共享发送队列标识匹配的目标端对端共享接收队列。
其中,端对端共享发送队列标识可以是用于指明端对端共享发送队列身份的信息。
S430、若否,则根据所述目标发送报文中包括的收发队列对编号信息,从多个接收预取队列中识别目标接收预取队列。
其中,收发队列对编号信息例如可以是请求端侧的“第一QP SQ”和“第二QP SQ”,以及响应端侧的“第一QP RQ”和“第二QP RQ”。目标接收预取队列可以是响应端全部接收预取队列中的一个。
在本公开实施例中,如果目标端对端共享接收队列中没有存储目标接收WQE,可以根据目标发送报文中包括的收发队列对编号信息,从多个接收预取队列中识别到目标接收预取队列。
S440、从目标接收预取队列中,获取与所述目标发送报文对应的目标接收WQE。
进一步的,可以从目标接收预取队列中,获取于目标发送报文对应的目标接收WQE。
S450、根据与所述目标端对端共享发送队列对应的共享接收上下文,将目标接收WQE调度至所述目标端对端共享接收队列中。
其中,共享接收上下文可以存储端对端共享接收队列的信息(共享接收队列的地址,PI指针以及CI指针等)。
在本公开实施例中,可以根据与目标端对端共享发送队列对应的共享接收上下文,将目标接收WQE调度至目标端对端共享接收队列中。
S460、根据所述目标端对端共享接收队列中的目标接收WQE,将所述目标发送报文中的负载信息进行内存写入。
在本实施例的一个可选实施方式中,根据所述目标端对端共享接收队列中的目标接收WQE,将所述目标发送报文中的负载信息进行内存写入,包括:
获取与所述目标接收WQE对应的目标内存块;根据所述目标发送报文中的存储偏移量信息,在所述目标内存块内,定位与所述目标发送报文匹配的存储地址;按照所述存储地址,将所述目标发送报文中的负载信息存储在所述目标内存块中。
其中,目标内存块可以指目标接收WQE对应的负载信息写入所占用的全部内存。存储偏移量信息可以是目标发送报文和与目标发送报文相邻的前一个发送报文之间的存储位置的滞后值。
可选的,可以预先为每个接收WQE分配同样大小的内存块,且所述内存块的容量大于或者的等于发送任务(也即,发送WQE)中的最大负载量。
在本公开实施例中,由于一个待发送数据可以被分片打包成多个发送报文,则在匹配的响应端侧,每个发送报文的负载信息被写入的位置虽不相同但可以相连,即由同一个待发送数据得到的两个相邻的发送报文中,后一个发送报文相对于前一个发送报文的负载信息的起始写入位置与前一个发送报文的负载信息的起始写入位置存在一定的偏差。例如,一个待发送数据被分片依次打包成发送报文1、发送报文2和发送报文3,发送报文2的负载信息所占用起始写入位置为发送报文1的负载信息所占用的结束写入位置,发送报文3的负载信息所占用起始写入位置为发送报文2的负载信息所占用的结束写入位置。
示例性的,对于一个目标接收WQE,具有匹配的内存块,位置为0-150,且该目标接收WQE对应3个发送报文,每个发送报文对应的内存分别为50,则该3个发送报文中的目标发送报文2的存储偏移量信息为50,对应存储位置为50-100,目标发送报文3的的存储偏移量信息为100,存储位置为100-150。
进而,即使与同一发送WQE对应的多个分片报文以乱序的方式到达响应端,则可以基于每个分片报文中携带的存储偏移量信息,将该分片报文中包括的负载信息,准确的存储于与接收WQE匹配的内存块中。
本公开实施例的技术方案,通过将响应端主机内多个接收队列中的接收工作队列元素WQE,调度至主机适配器内多个接收预取队列中;在接收到目标请求端发送的目标发送报文时,确定与目标发送报文对应的目标端对端共享接收队列,并检测目标端对端共享接收队列中是否存储与目标发送报文对应的目标接收WQE;若否,则根据所述目标发送报文中包括的收发队列对编号信息,从多个接收预取队列中识别目标接收预取队列;从目标接收预取队列中,获取与所述目标发送报文对应的目标接收WQE;根据与所述目标端对端共享发送队列对应的共享接收上下文,将目标接收WQE调度至所述目标端对端共享接收队列中;根据所述目标端对端共享接收队列中的目标接收WQE,将所述目标发送报文中的负载信息进行内存写入,提供了一种基于共享队列架构的RDMA的具体实现方式,提高了多任务的并发执行能力。
在上述技术方案的基础上,由响应端中的主机适配器执行的远程直接数据存取的实现方法还可以包括:
在确定完成对目标接收WQE的处理后,生成与所述目标接收WQE对应的接收CQE;将所述接收CQE存储于响应端主机内与所述接收CQE匹配的接收完成队列中;在所述目标端对端共享发送队列中,对所述目标接收WQE进行内存释放。
其中,接收完成队列可以是响应端中用于存放接收CQE的一种队列。
在本公开实施例中,可以在确定完成对目标接收WQE的处理后,生成对应的接收CQE表示对目标接收WQE的处理状态,并将该接收CQE存储于响应端主机内匹配的接收完成队列中,对应的,在目标端对端共享接收队列中,对目标接收WQE进行内存释放。
示例性的,图4b提供一种响应端侧接收发送报文并进行内存写入的应用示意图。
在用户App下发RQ(Receive Queue,发送队列)DB(Door Bell,门铃)后,通过QPEngine模块,更新HCA中维护的QPC(Receive Queue Context,接收队列上下文)表项中RQPI指针值;
RQWQE DMA模块基于RQ Prefetch队列(接收预取队列)的空满状态与QPC表项中维护的PI指针和CI指针的差值,确定是否有需要DMA RQWQE(接收WQE)到QP的Prefetch队列中;
EE Process Engine(端对端进程引擎)执行RQ WQE任务,完成数据Payload DMA操作,接收并解析RXPKT(接收数据包),更新EE RQ状态信息;
当该RQWQE对应的负载信息进行内存写入后,EE Process Engine通知CQ Engine,生成CQE并完成CQE DMA到物理或者虚拟设备侧CQ的内存中;并释放EE RQ队列中的对应RQWQE;
由于Request(请求)操作是乱序到达Remote(远程)HCA响应端侧,在需要消耗RQWQE(接收WQE)的情况下,HCA只能通过原子操作从对应QP RQ预取队列中获取RQWQE指针放到EE RQ中,完成报文处理并消耗RQWQE;
由于Request操作是乱序到达HCA的,HCA并不知道取出的RQWQE指向的内存块的大小是否满足需求,因此,在下发RQWQE的操作时,固定RQWQE对应内存块的尺寸大小。
图5是根据本公开实施例提供的一种远程直接数据存取的实现装置的结构示意图。该装置可以用于执行本公开任意实施例提供的远程直接数据存取的实现方法。该装置可以由请求端中的主机适配器执行,参考图5,该装置包括:发送元素预取模块510、发送元素调度模块520、发送报文生成模块530和报文发送模块540。其中:
发送元素预取模块510,用于将请求端主机内多个发送队列中的发送WQE,调度至主机适配器内多个发送预取队列中;
发送元素调度模块520,用于将多个发送预取队列中的发送WQE,调度到至少一个端对端共享发送队列中;
发送报文生成模块530,用于根据与每个端对端共享发送队列分别对应的共享发送上下文,对每个端对端共享发送队列中的发送WQE进行按序处理,形成与发送WQE匹配的发送报文;
报文发送模块540,用于将发送报文发送至与发送报文中的对端地址标识匹配的响应端;
其中,所述发送报文用于指示响应端将发送报文中的负载信息进行内存写入。
上述装置中,可选的是,发送元素预取模块510,具体可以用于:
实时获取各发送预取队列中的队列元素数量和与各发送队列分别对应的发送上下文;发送预取队列与发送队列具有一一对应关系;
根据各队列元素数量和各发送上下文,获取满足数据预取条件的目标发送队列,并确定与目标发送队列对应的目标发送预取队列;
将目标发送队列中的发送WQE,预取至目标发送预取队列中。
上述装置中,可选的是,还包括,发送上下文更新模块,用于:
在检测到与目标应用程序对应的发送WQE提示信息时,获取与所述目标应用程序匹配的发送更新队列;
根据所述发送WQE提示信息,对与发送更新队列对应的发送上下文进行更新。
上述装置中,可选的是,发送元素调度模块520,具体可以用于:
从当前处理的发送预取队列中获取一个待分配发送WQE,并提取所述待分配发送WQE中携带的地址句柄标识;
其中,所述地址句柄标识中包括:本端地址标识以及对端地址标识;
在全部端对端共享发送队列中,获取与所述地址句柄标识匹配的目标端对端共享发送队列;
将所述待分配发送WQE调度至所述目标端对端共享发送队列中。
上述装置中,可选的是,还包括,发送元素释放模块,用于:
在接收到目标响应端反馈的应答报文时,生成与所述应答报文匹配的至少一个发送CQE;
将生成的各发送CQE存储于请求端主机内与发送CQE匹配的发送完成队列中;
在与目标响应端对应的端对端共享发送队列中,对与各发送CQE匹配的发送WQE进行内存释放。
本公开实施例所提供的远程直接数据存取的实现装置可执行本公开任意实施例所提供的由请求端中的主机适配器执行的远程直接数据存取的实现方法,具备执行方法相应的功能模块和有益效果。
图6是根据本公开实施例提供的另一种远程直接数据存取的实现装置的结构示意图。该装置可以用于执行本公开任意实施例提供的远程直接数据存取方法。该装置可以由响应端中的主机适配器执行,参考图6,该装置包括:接收元素预取模块610、接收元素检测模块620、接收元素调度模块630和负载信息写入模块640。其中:
接收元素预取模块610,用于将响应端主机内多个接收队列中的接收WQE,调度至主机适配器内多个接收预取队列中;
接收元素检测模块620,用于在接收到请求端发送的目标发送报文时,确定与目标发送报文对应的目标端对端共享接收队列,并检测目标端对端共享接收队列中是否存储与目标发送报文对应的目标接收WQE;
接收元素调度模块630,用于若否,则从多个接收预取队列中获取与目标发送报文匹配的目标接收WQE,并将目标接收WQE调度至目标端对端共享接收队列中;
负载信息写入模块640,用于根据所述目标端对端共享接收队列中的目标接收WQE,将所述目标发送报文中的负载信息进行内存写入。
上述装置中,可选的是,接收元素检测模块620,具体可以用于:
根据所述目标发送报文中包括的端对端共享发送队列标识,获取与所述端对端共享发送队列标识匹配的目标端对端共享接收队列。
上述装置中,可选的是,接收元素调度模块630,具体可以用于:
根据所述目标发送报文中包括的收发队列对编号信息,从多个接收预取队列中识别目标接收预取队列;
从目标接收预取队列中,获取与所述目标发送报文对应的目标接收WQE;
根据与所述目标端对端共享发送队列对应的共享接收上下文,将目标接收WQE调度至所述目标端对端共享接收队列中。
上述装置中,可选的是,负载信息写入模块640,具体可以用于:
获取与所述目标接收WQE对应的目标内存块;
根据所述目标发送报文中的存储偏移量信息,在所述目标内存块内,定位与所述目标发送报文匹配的存储地址;
按照所述存储地址,将所述目标发送报文中的负载信息存储在所述目标内存块中。
上述装置中,可选的是,预先为每个接收WQE分配同样大小的内存块,且所述内存块的容量大于或者的等于发送任务中的最大负载量。
上述装置中,可选的是,还包括,接收元素释放模块,用于:
在确定完成对目标接收WQE的处理后,生成与所述目标接收WQE对应的接收CQE;
将所述接收CQE存储于响应端主机内与所述接收CQE匹配的接收完成队列中;
在所述目标端对端共享接收队列中,对所述目标接收WQE进行内存释放。
本公开实施例所提供的远程直接数据存取的实现装置可执行本公开任意实施例所提供的由响应端中的主机适配器执行的远程直接数据存取的实现方法,具备执行方法相应的功能模块和有益效果。
本公开的技术方案中,所涉及的用户个人数据信息的收集、存储、使用、加工、传输、提供和公开等处理,均符合相关法律法规的规定,且不违背公序良俗。
图7是根据本公开实施例提供的一种请求端所适用的主机适配器的结构示意图。该主机适配器可以用于执行本公开任意实施例提供的由请求端中的主机适配器执行的远程直接数据存取的实现方法。参考图7,该主机适配器可以包括:发送元素直接存储器访问引擎710、发送元素调度引擎720和发送端对端进程引擎730。其中:
发送元素直接存储器访问引擎710,配置为执行将请求端主机内多个发送队列中的发送工作队列元素WQE,调度至主机适配器内多个发送预取队列中;
发送元素调度引擎720,配置为执行将多个发送预取队列中的发送WQE,调度到至少一个端对端共享发送队列中;
发送端对端进程引擎730,配置为根据与每个端对端共享发送队列分别对应的共享发送上下文,对每个端对端共享发送队列中的发送WQE进行按序处理,形成与发送WQE匹配的发送报文,以及,将发送报文发送至与发送报文中的对端地址标识匹配的响应端;
其中,所述发送报文用于指示响应端将发送报文中的负载信息进行内存写入;
其中,所述发送元素直接存储器访问引擎、发送元素调度引擎以及发送端对端进程引擎均为硬件模块。
上述主机适配器,可选的是,发送元素直接存储器访问引擎710、发送元素调度引擎720以及发送端对端进程引擎730采用管线的方式,并发的执行各自的处理任务。
图8是根据本公开实施例提供的一种响应端所适用的主机适配器的结构示意图。该主机适配器可以用于执行本公开任意实施例提供的由响应端中的主机适配器执行的远程直接数据存取的实现方法。参考图8,该主机适配器可以包括:接收元素直接存储器访问引擎810、接收元素调度引擎820和接收端对端进程引擎830。其中:
接收元素直接存储器访问引擎810,配置为将响应端主机内多个接收队列中的接收工作队列元素WQE,调度至主机适配器内多个接收预取队列中;
接收元素调度引擎820,配置为在接收到请求端发送的目标发送报文时,确定与目标发送报文对应的目标端对端共享接收队列,并检测目标端对端共享接收队列中是否存储与目标发送报文对应的目标接收WQE;若否,则从多个接收预取队列中获取与目标发送报文匹配的目标接收WQE,并将目标接收WQE调度至目标端对端共享接收队列中;
接收端对端进程引擎830,用于根据所述目标端对端共享接收队列中的目标接收WQE,将所述目标发送报文中的负载信息进行内存写入;
其中,所述接收元素直接存储器访问引擎、接收元素调度引擎以及接收端对端进程引擎均为硬件模块。
上述主机适配器,可选的是,接收元素直接存储器访问引擎810、接收元素调度引擎820以及接收端对端进程引擎830采用管线的方式,并发的执行各自的处理任务。
根据本公开的实施例,本公开还提供了一种可读存储介质和一种计算机程序产品。
在本公开实施例中,可读存储介质可以是一种存储有计算机指令的非瞬时计算机可读存储介质,所述计算机指令可以用于使计算机执行本公开实施例中涉及的由请求端中的主机适配器执行的远程直接数据存取的实现方法,或者由响应端中的主机适配器执行的远程直接数据存取的实现方法。
计算机程序产品可以包括计算机程序,所述计算机程序被处理器执行时实现由请求端中的主机适配器执行的远程直接数据存取的实现方法,或者由响应端中的主机适配器执行的远程直接数据存取的实现方法。
在本公开的上下文中,计算机可读存储介质可以是有形的介质,其可以包含或存储以供指令执行系统、装置或设备使用或与指令执行系统、装置或设备结合地使用的程序。计算机可读存储介质可以是机器可读信号介质或机器可读储存介质。计算机可读存储介质可以包括但不限于电子的、磁性的、光学的、电磁的、红外的、或半导体系统、装置或设备,或者上述内容的任何合适组合。计算机可读存储介质的更具体示例会包括基于一个或多个线的电气连接、便携式计算机盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦除可编程只读存储器(EPROM或快闪存储器)、光纤、便捷式紧凑盘只读存储器(CD-ROM)、光学储存设备、磁储存设备、或上述内容的任何合适组合。
为了提供与用户的交互,可以在计算机上实施此处描述的系统和技术,该计算机具有:用于向用户显示信息的显示装置(例如,CRT(阴极射线管)或者LCD(液晶显示器)监视器);以及键盘和指向装置(例如,鼠标或者轨迹球),用户可以通过该键盘和该指向装置来将输入提供给计算机。其它种类的装置还可以用于提供与用户的交互;例如,提供给用户的反馈可以是任何形式的传感反馈(例如,视觉反馈、听觉反馈、或者触觉反馈);并且可以用任何形式(包括声输入、语音输入或者、触觉输入)来接收来自用户的输入。
可以将此处描述的系统和技术实施在包括后台部件的计算系统(例如,作为数据服务器)、或者包括中间件部件的计算系统(例如,应用服务器)、或者包括前端部件的计算系统(例如,具有图形用户界面或者网络浏览器的用户计算机,用户可以通过该图形用户界面或者该网络浏览器来与此处描述的系统和技术的实施方式交互)、或者包括这种后台部件、中间件部件、或者前端部件的任何组合的计算系统中。可以通过任何形式或者介质的数字数据通信(例如,通信网络)来将系统的部件相互连接。通信网络的示例包括:局域网(LAN)、广域网(WAN)和互联网。
计算机系统可以包括客户端和服务器。客户端和服务器一般远离彼此并且通常通过通信网络进行交互。通过在相应的计算机上运行并且彼此具有客户端-服务器关系的计算机程序来产生客户端和服务器的关系。服务器可以是云服务器,又称为云计算服务器或云主机,是云计算服务体系中的一项主机产品,以解决了传统物理主机与VPS服务中,存在的管理难度大,业务扩展性弱的缺陷。服务器也可以为分布式系统的服务器,或者是结合了区块链的服务器。
人工智能是研究使计算机来模拟人的某些思维过程和智能行为(如学习、推理、思考、规划等)的学科,既有硬件层面的技术也有软件层面的技术。人工智能硬件技术一般包括如传感器、专用人工智能芯片、云计算、分布式存储、大数据处理等技术;人工智能软件技术主要包括计算机视觉技术、语音识别技术、自然语言处理技术及机器学习/深度学习技术、大数据处理技术、知识图谱技术等几大方向。
云计算(cloud computing),指的是通过网络接入弹性可扩展的共享物理或虚拟资源池,资源可以包括服务器、操作系统、网络、软件、应用和存储设备等,并可以按需、自服务的方式对资源进行部署和管理的技术体系。通过云计算技术,可以为人工智能、区块链等技术应用、模型训练提供高效强大的数据处理能力。
应该理解,可以使用上面所示的各种形式的流程,重新排序、增加或删除步骤。例如,本公开中记载的各步骤可以并行地执行也可以顺序地执行也可以不同的次序执行,只要能够实现本公开公开的技术方案所期望的结果,本文在此不进行限制。
上述具体实施方式,并不构成对本公开保护范围的限制。本领域技术人员应该明白的是,根据设计要求和其他因素,可以进行各种修改、组合、子组合和替代。任何在本公开的精神和原则之内所作的修改、等同替换和改进等,均应包含在本公开保护范围之内。

Claims (19)

1.一种远程直接数据存取的实现方法,由请求端中的主机适配器执行,包括:
将请求端主机内多个发送队列中的发送工作队列元素,调度至主机适配器内多个发送预取队列中;
将多个发送预取队列中的发送工作队列元素,调度到至少一个端对端共享发送队列中;
根据与每个端对端共享发送队列分别对应的共享发送上下文,对每个端对端共享发送队列中的发送工作队列元素进行按序处理,形成与发送工作队列元素匹配的发送报文;
将发送报文发送至与发送报文中的对端地址标识匹配的响应端;
其中,所述发送报文用于指示响应端将发送报文中的负载信息进行内存写入。
2.根据权利要求1所述的方法,其中,将请求端主机内多个发送队列中的发送工作队列元素,调度至主机适配器内多个发送预取队列中,包括:
实时获取各发送预取队列中的队列元素数量和与各发送队列分别对应的发送上下文;发送预取队列与发送队列具有一一对应关系;
根据各队列元素数量和各发送上下文,获取满足数据预取条件的目标发送队列,并确定与目标发送队列对应的目标发送预取队列;
将目标发送队列中的发送工作队列元素,预取至目标发送预取队列中。
3.根据权利要求2所述的方法,还包括:
在检测到与目标应用程序对应的发送工作队列元素提示信息时,获取与所述目标应用程序匹配的发送更新队列;
根据所述发送工作队列元素提示信息,对与发送更新队列对应的发送上下文进行更新。
4.根据权利要求1所述的方法,其中,将多个发送预取队列中的发送工作队列元素,调度到至少一个端对端共享发送队列中,包括:
从当前处理的发送预取队列中获取一个待分配发送工作队列元素,并提取所述待分配发送工作队列元素中携带的地址句柄标识;
其中,所述地址句柄标识中包括:本端地址标识以及对端地址标识;
在全部端对端共享发送队列中,获取与所述地址句柄标识匹配的目标端对端共享发送队列;
将所述待分配发送工作队列元素调度至所述目标端对端共享发送队列中。
5.根据权利要求1所述的方法,还包括:
在接收到目标响应端反馈的应答报文时,生成与所述应答报文匹配的至少一个发送完成队列元素;
将生成的各发送完成队列元素存储于请求端主机内与发送完成队列元素匹配的发送完成队列中;
在与目标响应端对应的端对端共享发送队列中,对与各发送完成队列元素匹配的发送工作队列元素进行内存释放。
6.一种远程直接数据存取的实现方法,由响应端中的主机适配器执行,包括:
将响应端主机内多个接收队列中的接收工作队列元素,调度至主机适配器内多个接收预取队列中;
在接收到目标请求端发送的目标发送报文时,确定与目标发送报文对应的目标端对端共享接收队列,并检测目标端对端共享接收队列中是否存储与目标发送报文对应的目标接收工作队列元素;
若否,则从多个接收预取队列中获取与目标发送报文匹配的目标接收工作队列元素,并将目标接收工作队列元素调度至目标端对端共享接收队列中;
根据所述目标端对端共享接收队列中的目标接收工作队列元素,将所述目标发送报文中的负载信息进行内存写入。
7.根据权利要求6所述的方法,其中,确定与目标发送报文对应的目标端对端共享接收队列,包括:
根据所述目标发送报文中包括的端对端共享发送队列标识,获取与所述端对端共享发送队列标识匹配的目标端对端共享接收队列。
8.根据权利要求6所述的方法,其中,从多个接收预取队列中获取与目标发送报文匹配的目标接收工作队列元素,并将目标接收工作队列元素调度至目标端对端共享接收队列中,包括:
根据所述目标发送报文中包括的收发队列对编号信息,从多个接收预取队列中识别目标接收预取队列;
从目标接收预取队列中,获取与所述目标发送报文对应的目标接收工作队列元素;
根据与所述目标端对端共享发送队列对应的共享接收上下文,将目标接收工作队列元素调度至所述目标端对端共享接收队列中。
9.根据权利要求6所述的方法,其中,根据所述目标端对端共享接收队列中的目标接收工作队列元素,将所述目标发送报文中的负载信息进行内存写入,包括:
获取与所述目标接收工作队列元素对应的目标内存块;
根据所述目标发送报文中的存储偏移量信息,在所述目标内存块内,定位与所述目标发送报文匹配的存储地址;
按照所述存储地址,将所述目标发送报文中的负载信息存储在所述目标内存块中。
10.根据权利要求9所述的方法,预先为每个接收工作队列元素分配同样大小的内存块,且所述内存块的容量大于或者的等于发送任务中的最大负载量。
11.根据权利要求6所述的方法,还包括:
在确定完成对目标接收工作队列元素的处理后,生成与所述目标接收工作队列元素对应的接收完成队列元素;
将所述接收完成队列元素存储于响应端主机内与所述接收完成队列元素匹配的接收完成队列中;
在所述目标端对端共享接收队列中,对所述目标接收工作队列元素进行内存释放。
12.一种远程直接数据存取的实现装置,由请求端中的主机适配器执行,包括:
发送元素预取模块,用于将请求端主机内多个发送队列中的发送工作队列元素,调度至主机适配器内多个发送预取队列中;
发送元素调度模块,用于将多个发送预取队列中的发送工作队列元素,调度到至少一个端对端共享发送队列中;
发送报文生成模块,用于根据与每个端对端共享发送队列分别对应的共享发送上下文,对每个端对端共享发送队列中的发送工作队列元素进行按序处理,形成与发送工作队列元素匹配的发送报文;
报文发送模块,用于将发送报文发送至与发送报文中的对端地址标识匹配的响应端;
其中,所述发送报文用于指示响应端将发送报文中的负载信息进行内存写入。
13.一种远程直接数据存取的实现装置,由响应端中的主机适配器执行,包括:
接收元素预取模块,用于将响应端主机内多个接收队列中的接收工作队列元素,调度至主机适配器内多个接收预取队列中;
接收元素检测模块,用于在接收到请求端发送的目标发送报文时,确定与目标发送报文对应的目标端对端共享接收队列,并检测目标端对端共享接收队列中是否存储与目标发送报文对应的目标接收工作队列元素;
接收元素调度模块,用于若否,则从多个接收预取队列中获取与目标发送报文匹配的目标接收工作队列元素,并将目标接收工作队列元素调度至目标端对端共享接收队列中;
负载信息写入模块,用于根据所述目标端对端共享接收队列中的目标接收工作队列元素,将所述目标发送报文中的负载信息进行内存写入。
14.一种请求端所适用的主机适配器,包括:
发送元素直接存储器访问引擎,配置为执行将请求端主机内多个发送队列中的发送工作队列元素,调度至主机适配器内多个发送预取队列中;
发送元素调度引擎,配置为执行将多个发送预取队列中的发送工作队列元素,调度到至少一个端对端共享发送队列中;
发送端对端进程引擎,配置为根据与每个端对端共享发送队列分别对应的共享发送上下文,对每个端对端共享发送队列中的发送工作队列元素进行按序处理,形成与发送工作队列元素匹配的发送报文,以及,将发送报文发送至与发送报文中的对端地址标识匹配的响应端;
其中,所述发送报文用于指示响应端将发送报文中的负载信息进行内存写入;
其中,所述发送元素直接存储器访问引擎、发送元素调度引擎以及发送端对端进程引擎均为硬件模块。
15.根据权利要求14所述的主机适配器,其中,所述发送元素直接存储器访问引擎、发送元素调度引擎以及发送端对端进程引擎采用管线的方式,并发的执行各自的处理任务。
16.一种响应端所适用的主机适配器,包括:
接收元素直接存储器访问引擎,配置为将响应端主机内多个接收队列中的接收工作队列元素,调度至主机适配器内多个接收预取队列中;
接收元素调度引擎,配置为在接收到请求端发送的目标发送报文时,确定与目标发送报文对应的目标端对端共享接收队列,并检测目标端对端共享接收队列中是否存储与目标发送报文对应的目标接收工作队列元素;若否,则从多个接收预取队列中获取与目标发送报文匹配的目标接收工作队列元素,并将目标接收工作队列元素调度至目标端对端共享接收队列中;
接收端对端进程引擎,用于根据所述目标端对端共享接收队列中的目标接收工作队列元素,将所述目标发送报文中的负载信息进行内存写入;
其中,所述接收元素直接存储器访问引擎、接收元素调度引擎以及接收端对端进程引擎均为硬件模块。
17.根据权利要求16所述的主机适配器,其中,所述接收元素直接存储器访问引擎、接收元素调度引擎以及接收端对端进程引擎采用管线的方式,并发的执行各自的处理任务。
18.一种存储有计算机指令的非瞬时计算机可读存储介质,其中,所述计算机指令用于使计算机执行根据权利要求1-5中任一项所述的由请求端中的主机适配器执行的远程直接数据存取的实现方法,或者执行根据权利要求6-11中任一项所述的由响应端中的主机适配器执行的远程直接数据存取的实现方法。
19.一种计算机程序产品,包括计算机程序,所述计算机程序被处理器执行时实现权利要求1-5中任一项所述方法的步骤,或者,实现权利要求6-11中任一项所述方法的步骤。
CN202210557208.8A 2022-05-20 2022-05-20 远程直接数据存取的实现方法、装置、适配器和存储介质 Active CN114979022B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202210557208.8A CN114979022B (zh) 2022-05-20 2022-05-20 远程直接数据存取的实现方法、装置、适配器和存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202210557208.8A CN114979022B (zh) 2022-05-20 2022-05-20 远程直接数据存取的实现方法、装置、适配器和存储介质

Publications (2)

Publication Number Publication Date
CN114979022A true CN114979022A (zh) 2022-08-30
CN114979022B CN114979022B (zh) 2023-07-28

Family

ID=82986154

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202210557208.8A Active CN114979022B (zh) 2022-05-20 2022-05-20 远程直接数据存取的实现方法、装置、适配器和存储介质

Country Status (1)

Country Link
CN (1) CN114979022B (zh)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN116226027A (zh) * 2023-05-04 2023-06-06 苏州浪潮智能科技有限公司 数据传输系统、方法、装置、通信设备及存储介质
WO2024140832A1 (zh) * 2022-12-30 2024-07-04 华为技术有限公司 一种队列管理方法、装置及网络节点

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103645994A (zh) * 2013-11-05 2014-03-19 华为技术有限公司 一种数据处理方法及设备
AU2014200239A1 (en) * 2013-11-08 2015-05-28 Tata Consultancy Services Limited System and method for multiple sender support in low latency fifo messaging using rdma
CN109983449A (zh) * 2018-06-30 2019-07-05 华为技术有限公司 数据处理的方法和存储系统
CN110647480A (zh) * 2018-06-26 2020-01-03 华为技术有限公司 数据处理方法、远程直接访存网卡和设备
CN113900972A (zh) * 2020-07-06 2022-01-07 华为技术有限公司 一种数据传输的方法、芯片和设备

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103645994A (zh) * 2013-11-05 2014-03-19 华为技术有限公司 一种数据处理方法及设备
AU2014200239A1 (en) * 2013-11-08 2015-05-28 Tata Consultancy Services Limited System and method for multiple sender support in low latency fifo messaging using rdma
CN110647480A (zh) * 2018-06-26 2020-01-03 华为技术有限公司 数据处理方法、远程直接访存网卡和设备
CN109983449A (zh) * 2018-06-30 2019-07-05 华为技术有限公司 数据处理的方法和存储系统
CN113900972A (zh) * 2020-07-06 2022-01-07 华为技术有限公司 一种数据传输的方法、芯片和设备

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2024140832A1 (zh) * 2022-12-30 2024-07-04 华为技术有限公司 一种队列管理方法、装置及网络节点
CN116226027A (zh) * 2023-05-04 2023-06-06 苏州浪潮智能科技有限公司 数据传输系统、方法、装置、通信设备及存储介质
CN116226027B (zh) * 2023-05-04 2023-08-15 苏州浪潮智能科技有限公司 数据传输系统、方法、装置、通信设备及存储介质

Also Published As

Publication number Publication date
CN114979022B (zh) 2023-07-28

Similar Documents

Publication Publication Date Title
US11876701B2 (en) System and method for facilitating operation management in a network interface controller (NIC) for accelerators
US20220309025A1 (en) Multi-path rdma transmission
CN114979022B (zh) 远程直接数据存取的实现方法、装置、适配器和存储介质
US9888048B1 (en) Supporting millions of parallel light weight data streams in a distributed system
CN109690510B (zh) 用于将数据分发到高性能计算网络和基于云的网络中的多个接收器的多播装置和方法
US8694701B2 (en) Recovering dropped instructions in a network interface controller
CN115002047B (zh) 一种远程直接数据存取方法、装置、设备以及存储介质
AU2011265444B2 (en) Low latency FIFO messaging system
CN105141603B (zh) 通信数据传输方法及系统
US10673983B2 (en) Processing a unit of work
CN113157465B (zh) 基于指针链表的消息发送方法及装置
US20160294926A1 (en) Using a single work item to send multiple messages
CN110515749B (zh) 信息发送的队列调度的方法、装置、服务器和存储介质
CN115361348B (zh) 由数据采集设备执行的与web浏览器通信的方法
US20240143527A1 (en) Remote direct memory access operations with integrated data arrival indication
US8006006B2 (en) System and method for aggregating transmit completion interrupts
CN108234595B (zh) 日志传输方法及系统
CN111327511B (zh) 即时通讯方法、系统、终端设备与存储介质
CN114979001B (zh) 基于远程直接数据存取的数据传输方法、装置以及设备
CN112399470A (zh) LoRa通信方法、LoRa网关、LoRa系统、计算机可读存储介质
US9674282B2 (en) Synchronizing SLM statuses of a plurality of appliances in a cluster
US20140139533A1 (en) Graphic processing unit virtual apparatus, graphic processing unit host apparatus, and graphic processing unit program processing methods thereof
CN106330498B (zh) 远程数据获取方法及装置
CN117675119A (zh) 数据包处理方法、装置及电子设备
Jiang et al. Cooperative Simulation of RDMA-based Network and Storage

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant