CN109936510B - 多路径rdma传输 - Google Patents

多路径rdma传输 Download PDF

Info

Publication number
CN109936510B
CN109936510B CN201711352625.4A CN201711352625A CN109936510B CN 109936510 B CN109936510 B CN 109936510B CN 201711352625 A CN201711352625 A CN 201711352625A CN 109936510 B CN109936510 B CN 109936510B
Authority
CN
China
Prior art keywords
packet
path
rdma
field
sequence number
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.)
Active
Application number
CN201711352625.4A
Other languages
English (en)
Other versions
CN109936510A (zh
Inventor
陈果
陆元伟
程鹏
T·莫斯希布罗达
熊勇强
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.)
Microsoft Technology Licensing LLC
Original Assignee
Microsoft Technology Licensing LLC
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
Priority to CN201711352625.4A priority Critical patent/CN109936510B/zh
Application filed by Microsoft Technology Licensing LLC filed Critical Microsoft Technology Licensing LLC
Priority to CN202211379280.2A priority patent/CN115941616A/zh
Priority to US16/765,389 priority patent/US11308024B2/en
Priority to EP18839782.2A priority patent/EP3707882B1/en
Priority to PCT/US2018/064148 priority patent/WO2019118255A1/en
Priority to EP22191007.8A priority patent/EP4123997A3/en
Publication of CN109936510A publication Critical patent/CN109936510A/zh
Priority to US17/717,897 priority patent/US11934340B2/en
Application granted granted Critical
Publication of CN109936510B publication Critical patent/CN109936510B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/16Combinations of two or more digital computers each having at least an arithmetic unit, a program unit and a register, e.g. for a simultaneous processing of several programs
    • G06F15/163Interprocessor communication
    • G06F15/173Interprocessor communication using an interconnection network, e.g. matrix, shuffle, pyramid, star, snowflake
    • G06F15/17306Intercommunication techniques
    • G06F15/17331Distributed shared memory [DSM], e.g. remote direct memory access [RDMA]
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L47/00Traffic control in data switching networks
    • H04L47/10Flow control; Congestion control
    • H04L47/11Identifying congestion
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L47/00Traffic control in data switching networks
    • H04L47/10Flow control; Congestion control
    • H04L47/34Flow control; Congestion control ensuring sequence integrity, e.g. using sequence numbers
    • 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
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/01Protocols
    • H04L67/10Protocols in which an application is distributed across nodes in the network
    • H04L67/1097Protocols in which an application is distributed across nodes in the network for distributed storage of data in networks, e.g. transport arrangements for network file system [NFS], storage area networks [SAN] or network attached storage [NAS]
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L69/00Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
    • H04L69/14Multichannel or multilink protocols
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L69/00Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
    • H04L69/22Parsing or analysis of headers
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L69/00Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
    • H04L69/10Streamlined, light-weight or high-speed protocols, e.g. express transfer protocol [XTP] or byte stream

Abstract

根据本公开的实现,提出了一种多路径RDMA传输的方案。在该方案中,基于要从第一设备向第二设备发送的RDMA消息来生成至少一个分组。第一设备与第二设备之间具有经由多个路径的RDMA连接。至少一个分组中的第一分组至少包括多个字段,该多个字段包含用于在多个路径中的第一路径上传输第一分组的信息。根据本公开的多路径RDMA传输方案能够有效地利用丰富的网络路径同时保持对网络接口卡中的存储器的较低占用。

Description

多路径RDMA传输
背景技术
现代数据中心应用要求高吞吐率和低延迟的网络传输以满足客户日益增长的需求。与诸如传输控制协议(TCP)的传统传输层协议相比,远程直接存储器访问(RDMA)在网络接口卡(NIC)中实现整个传输逻辑,并且允许在不需要中央处理单元(CPU)或者操作系统参与的情况下对远程存储器的直接访问。因此,RDMA能够在几乎没有CPU参与的情况下实现极高吞吐率和极低延迟的网络传输。
然而,现有RDMA通常仅支持单路径传输。也即,发送设备和接收设备之间仅具有经由单个网络路径的RDMA连接。当单个网络路径发生故障时,发送设备和接收设备之间的RDMA连接可能无法正常工作。此外,单路径传输无法充分利用数据中心网络中的丰富网络路径。
发明内容
根据本公开的实现,提出了一种多路径RDMA传输的方案。在该方案中,基于要从第一设备向第二设备发送的RDMA消息来生成至少一个分组。第一设备与第二设备之间具有经由多个路径的RDMA连接。至少一个分组中的第一分组至少包括多个字段,该多个字段包含用于在多个路径中的第一路径上传输第一分组的信息。根据本公开的多路径RDMA传输方案能够有效地利用丰富的网络路径同时保持对网络接口卡中的存储器的较低占用。
提供发明内容部分是为了以简化的形式来介绍对概念的选择,其在下文的具体实施方式中将被进一步描述。发明内容部分无意标识要求保护的主题的关键特征或主要特征,也无意限制要求保护的主题的范围。
附图说明
图1示出了能够在其中实施本公开的实现的示例环境的框图;
图2示出了根据本公开的实现的用于MP-RDMA的示例分组的示意图;
图3示出了根据本公开的实现的用于MP-RDMA的示例肯定应答(ACK)的示意图;
图4示出了根据本公开的实现的用于跟踪接收到的分组的示例数据结构的示意图;
图5示出了根据本公开的实现的用于MP-RDMA的示例否定应答(NACK)的示意图;
图6示出了根据本公开的实现的用于MP-RDMA的多个控制信息的示意图;
图7示出了根据本公开一些实现的用于MP-RDMA的过程的流程图;
图8示出了根据本公开一些实现的用于MP-RDMA的过程的流程图;以及
图9示出了能够实施本公开的多个实现的计算设备的框图。
这些附图中,相同或相似参考符号用于表示相同或相似元素。
具体实施方式
现在将参照若干示例实现来论述本公开。应当理解,论述了这些实现仅是为了使得本领域普通技术人员能够更好地理解且因此实现本公开,而不是暗示对本主题的范围的任何限制。
如本文所使用的,术语“包括”及其变体要被解读为意味着“包括但不限于”的开放式术语。术语“基于”要被解读为“至少部分地基于”。术语“一个实现”和“一种实现”要被解读为“至少一个实现”。术语“另一个实现”要被解读为“至少一个其他实现”。术语“第一”、“第二”等等可以指代不同的或相同的对象。下文还可能包括其他明确的和隐含的定义。
RDMA简述
RDMA通过NIC硬件来实现对于远程系统的直接存储器访问。因此,RDMA能够在几乎没有本地或者远程CPU参与的情况下实现极高吞吐率和极低延迟的网络传输。RDMA可以被实现在无限带宽(InfiniBand)网络和以太网两种传输网络上。在以太网上,根据与以太网融合的不同协议栈,RDMA协议可以被分为基于TCP的RDMA协议(iWARP)和融合以太网上的RDMA协议(RoCE,包括RoCEv1和RoCEv2)。在本文中,将以RoCEv2协议为例进行描述。然而,应当理解,这仅出于说明的目的,而不旨在暗示对本公开的范围的任何限制。本公开的实现也适用于iWARP协议或者基于无限带宽网络的RDMA协议。
在RDMA中,RDMA连接可以由一对工作队列标识,也称为队列对(QP)。一个QP由一个发送队列和一个接收队列组成,两者分别被维护在发送设备和接收设备的NIC上。当应用发起RDMA操作(也称“RDMA原语”)以发送或取得数据时,该应用会向发送队列或者接收队列指派工作队列元素(WQE)。此外,为了向应用通知操作完成,通常还存在与每个QP相关联的完成队列(CQ)。在完成WQE时,相应的完成队列元素(CQE)将被递交给CQ。
在RDMA中通常存在四种RDMA操作(也称为RDMA原语):发送、接收、写和读。其中,发送和接收是双侧操作,这意味着在一侧的发送操作始终要求在另一侧的接收操作。读和写是单侧操作,这意味着应用可以在不涉及远程CPU的情况下直接读取或写入远程存储器。
RDMA传输是基于消息的,即RDMA操作被转译成RDMA消息进行传输。RDMA消息可以被进一步划分成多个同等大小的段,以被封装成用户数据报协议(UDP)分组。在RoCEv2中,所有RDMA数据分组可以使用相同的UDP目标端口(例如,4791),而UDP源端口是任意的。针对不同的RDMA连接,UDP源端口各不相同,其允许负载平衡路由协议进行区分。在UDP有效载荷中,RDMA头部被插入到每个数据分组中。RDMA头部包含分组序列号(PSN),其提供RDMA连接中的RDMA数据分组的连续序列号。在接收设备处,RDMA消息根据PSN被恢复。此外,接收设备可以生成肯定应答(ACK)或否定应答(NACK),以向发送设备通知收到或丢失的数据分组。
RDMA传输要求无损网络,其通过基于优先级的流量控制(PFC)来提供。具体地,PFC可以利用预先配置的优先级在通信业务上采取逐跳流量控制。在PFC中,当下游交换机检测到其输入队列中的数据量超过阈值时,其将向上游交换机回传暂停帧,以减缓数据转发速度。PFC能够有效地防止交换机分组丢失,但是这种通过回传暂停帧来进行流量控制的行为可能会传播拥塞,并且降低整个网络的速度。
如之前所描述的,现有RDMA通常仅支持单路径传输。具体而言,一个RDMA连接上的所有RDMA消息将使用相同的UDP源端口和相同的UDP目的端口。这样的单路径RDMA传输主要存在以下缺点:首先,单路径传输对于路径故障而言是不健壮的,路径中的一些小故障可能显著影响上层应用的性能。其次,单个路径无法实现对整个网络带宽的有效利用。
发明人认识到,可以通过实现多路径RDMA(MP-RDMA)传输来解决上述问题。此外,发明人进一步认识到,MP-RDMA传输可能存在许多挑战。
RDMA传输在NIC中被实现,而NIC的片上存储器是小而昂贵的。在NIC上安装大容量存储器不仅可能占用较大裸片空间而且还可能增加其功率消耗,从而导致诸如散热等其他问题。因此,NIC的片上存储器通常充当主机存储器的缓存,以存储RDMA连接的信息。当发生缓存缺失时,NIC需要从主机存储器读取缺失的数据(例如,经由外围组件快速互联(PCIe)总线)。频繁的缓存缺失将导致NIC吞吐率下降。因此,为了避免由于频繁缓存缺失而导致的性能下降,用于每个路径的存储器占用应当足够小以在片上存储器中支持更多路径。然而,在多路径RDMA传输中降低存储器占用将是困难的。
首先,多路径传输需要跟踪每条路径上的传输和拥塞状态,以便根据拥塞情况将网络负载动态地分布到各路径中。但是,这些状态的数量将随着所使用的路径的数量增加而线性增加。
其次,多路径可能导致数据分组无序到达接收设备。因此,接收设备需要记录附加信息以用于跟踪数据分组是否已经到达。如果不同路径的情况显著不同,这些附加信息的大小可能会很大。
此外,接收端的NIC可能没有足够的存储器来缓冲无序的数据分组,从而不得不将部分数据分组存放在主机存储器中。因此,数据向主机存储器的更新可能是乱序的。例如,应用可能使用第一写操作来更新远程存储器,然后发出第二写操作来设置远程标志以通知远程应用读取由第一写操作更新后的数据。然而,如果第二个写操作在第一写操作之前更新远程主机存储器,则远程应用可能会过早地读取部分尚未由第一写操作更新的数据。
以上讨论了在目前的RDMA传输中存在的一些问题。根据本公开的实现,提供了一种多路径RDMA传输方案,旨在解决上述问题以及其他潜在问题中的一个或多个。以下参考附图来说明本公开的基本原理和若干示例实现。
示例环境
图1示出了能够在其中实施本公开的实现的示例环境100的框图。应当理解,仅出于示例性的目的描述环境100的结构和功能,而不暗示对于本公开的范围的任何限制。本公开的实现还可以被应用到具有不同的结构和/或功能的环境中。
如图1所示,环境100可以包括主机110和主机120。主机110可以包括CPU 111、存储器112和NIC 113。主机110可以是任何物理计算机、虚拟机、服务器等等。用户应用(图1中未示出)可以在CPU 111上运行。主机110可以经由NIC 113被连接至网络130。同样,主机120可以包括CPU 121、存储器122和NIC 123。用户应用(图1中未示出)可以在CPU 121上运行。主机120可以经由NIC 123被连接至网络130。
在环境100中,主机110和主机120可以经由网络130被互连。网络130可以是例如以太网或者无线带宽网络等。特别地,如图1所示,在NIC 113和NIC 123之间可以具有多个网络路径140-1、140-2……140-N(统称为或者单独地称为网络路径140,其中N>1)。尽管在图1中未示出,但是应当理解,在一些实现中,网络路径140中的每个网络路径140上可以包括或者不包括附加网络设备,诸如交换机、路由器等等。
在一些实现中,NIC 113和NIC 123可以经由多个网络路径140建立RDMA连接,以使得在主机110和主机120之间能够实现多路径RDMA操作。例如,当主机110中由CPU 111执行的应用程序发起针对RDMA写操作的请求时,该RDMA请求可以被发送至NIC113。NIC 113可以基于该RDMA请求从存储器112读取相应数据并且生成要向NIC 123发送的RDMA消息。例如,该RDMA消息可以包括要发送的数据和要写入的目标存储器122中的地址。该RDMA消息可以经由多个网络路径140被发送至NIC 123。响应于接收到由NIC 113发送的RDMA消息,NIC123可以将其中包含的相应数据直接写入到存储器122中。又如,当主机110中由CPU 111执行的应用程序发起针对RDMA读操作的请求时,该RDMA请求可以被发送至NIC 113。NIC 113可以基于该RDMA请求从远程存储器122中读取相应数据。例如,所读取的数据连同要写入的目标存储器112中的地址可以被包括在RDMA消息中。该RDMA消息可以从NIC 123经由多个网络路径140被发送至NIC 113。响应于接收到由NIC 123发送的RDMA消息,NIC 113可以将其中包含的相应数据直接写入到存储器112中。RDMA发送/接收操作与读/写操作类似。也即,充当发送设备的NIC将RDMA消息经由多个网络路径140传递至充当接收设备的NIC,并且充当接收设备的NIC将接收到的RDMA消息中的数据直接写入到目标存储器中,由此在没有CP420U 111和/或121参与的情况下实现主机110和主机120之间的零拷贝数据传输。
以下将对本公开的示例实现作进一步的详细描述。为了便于描述,以下将以NIC113作为发送设备的示例,而将NIC 123作为接收设备的示例。在本文中,充当发送设备的NIC 113与“第一设备”可互换地使用,并且充当接收设备的NIC 123与“第二设备”可互换地使用。
分组结构
在一些实现中,NIC 113可以基于要从NIC 113向NIC 123发送的RDMA消息来生成至少一个分组。例如,NIC 113可以将RDMA消息划分为同等大小的至少一个段,以被封装在至少一个UDP/IP/以太网分组中。然后,NIC 113可以在多个路径140中经由RDMA协议将所生成的至少一个分组从NIC 113被发送至NIC 123。
图2示出了根据本公开的实现的用于MP-RDMA传输的示例分组200的示意图。在图2中,将结合RoCEv2协议来描绘从NIC 113向NIC 123发送的分组200的结构。然而,应当理解,这仅出于说明的目的,而不旨在暗示对本公开的范围的任何限制。本公开的实现也可以被应用于iWARP协议或者基于无限带宽网络的RDMA协议。出于说明的目的,在图2中仅示出了分组200的头部。
如图2所示,在一些实现中,NIC 113可以通过重用UDP和RoCEv2中的若干字段来生成分组200。被重用的字段例如可以包括:以太网头部210、IP头部220、UDP头部230以及被插入到UDP有效载荷中的RoCEv2数据头部240。
UDP头部230可以包括字段231,其原本指示UDP源端口。在一些实现中,NIC 113可以利用分组200中的字段231(在本文中也被称为“第一字段”)来标识用于传输该分组的网络路径。例如,由字段231指示的网络路径可以是虚拟网络路径(VP),其可以被映射到相应的物理路径(诸如,如图1所示的路径140之一)。通常,具有相同VP的分组将被映射到同一物理路径上进行传输。在一些实现中,在生成分组200时,NIC 113可以确定用于传输分组200的VP,并且将该VP的标识符(ID)写入到字段231中。例如,在尚未接收到任何ACK的初始情况下或者在进行新路径探测时,NIC 113可以随机选择用于传输分组200的VP。附加地或者备选地,在接收到ACK的情况下,NIC 113可以基于接收到ACK的VP来确定用于传输分组200的VP。关于VP的选择,以下还将在“拥塞控制及多路径分发”部分中作进一步的详细描述。
RoCEv2数据头部240可以包括分组200在NIC 113和NIC 123之间的RDMA连接中的PSN(在本文中也被称为“第二字段”)。此外,RoCEv2数据头部240可以包括字段241和242。
在一些实现中,NIC 113可以利用字段241来指示分组200是否为重传分组。例如,当字段241为‘1’时,可以指示分组200为重传分组;当字段241为‘0’时,可以指示分组200不是重传分组。关于分组的重传,以下还将在“分组丢失恢复”部分中作进一步的详细描述。
附加地或者备选地,在一些实现中,NIC 113还可以利用字段242(在本文中也被称为“第九字段”)来指示分组200是否为同步分组。在此所述的“同步分组”指代不允许被乱序递交到目标存储器的分组。例如,当字段242为‘1’时,可以指示分组200为同步分组。也即,仅当在分组200之前的分组(也即,其序列号小于分组200的序列号的分组)被存储到目标存储器(例如,存储器122)之后,分组200才能被递交到目标存储器。当字段242为‘0’时,可以指示分组200不是同步分组。关于同步分组的处理,以下还将在“同步分组处理”部分中作进一步的详细描述。
在一些实现中,如图2所示,分组200还可以包括扩展字段250(在本文中也被称为“第三字段”)和扩展字段260(在本文中也被称为“第四字段”)。例如,扩展字段250可以指示分组200所属的RDMA消息的序列号。扩展字段260可以指示分组200在所属的RDMA消息内的序号。特别地,扩展字段250和260可以被用于RDMA发送/接收操作。
如前所述,在分组200不是同步分组的情况下,当NIC 123接收到分组200时,NIC123可以将分组200中的数据直接存储在存储器122的相应地址中。针对RDMA读操作或者写操作而言,RoCEv2数据头部240例如已经包括要写入的存储器122中的目标地址,因此NIC123可以解析RoCEv2数据头部240以获得该目标地址,并且将分组200中的数据直接存储在该目标地址处。然而,对于RDMA发送/接收操作而言,接收设备NIC 123需要附加信息来确定放置数据的目标地址。例如,该目标地址被包含在特定的接收工作队列元素(WQE)中,并且NIC 123可以基于分组200中的字段250来确定该特定WQE。NIC 123可以进一步基于字段260来确定分组200在RDMA消息内的地址偏移。
在接收侧,当NIC 123接收到从NIC 113发送的分组200时,NIC 123可以生成针对分组200的ACK。然后,NIC 123可以在接收到分组200的路径上向NIC 113返回针对分组200的ACK。
图3示出了根据本公开的实现的用于MP-RDMA传输的示例ACK 300的示意图。出于说明的目的,在图3中仅示出了ACK 300的头部。
如图3所示,在一些实现中,NIC 123可以通过重用UDP和RoCEv2中的若干字段来生成ACK 300。被重用的字段例如可以包括:以太网头部310、IP头部320、UDP头部330以及被插入到UDP有效载荷中的RoCEv2 ACK头部340。
UDP头部330可以包括字段331(在本文中也被称为“第五字段”),其原本指示UDP源端口。在一些实现中,NIC 123可以将分组200中的字段231拷贝到字段331中,以标识用于传输ACK 300的网络路径。
RoCEv2 ACK头部340可以包括字段341(在本文中也被称为“第六字段”),其原本由接收方用于向发送方指示哪些分组丢失、哪些分组被重传以及哪些分组已经提前收到等信息。在一些实现中,NIC123可以利用字段341来指示所接收到的分组200的PSN。此外,RoCEv2ACK头部340还可以包括字段342、343和344。
在一些实现中,字段342(在本文中也被称为“第七字段”)可以用于指示显式拥塞通知(在本文中被表示为“ECN”)。例如,ECN可以由分组200的传输路径中的路由器生成,以指示由该路由器检测到的该传输路径中的拥塞情况。ECN可以被提供给NIC 113以用于后续拥塞控制。关于ECN的应用,以下还将在“拥塞控制及多路径分发”部分中作进一步的详细描述。
在一些实现中,NIC 123可以将分组200中的字段241拷贝到字段343中,以指示ACK300是针对重传分组的ACK。附加地或者备选地,在一些实现中,NIC 123可以将分组200中的字段242拷贝到字段344中,以指示ACK 300是针对同步分组的ACK。
在一些实现中,如图3所示,ACK 300还可以包括扩展字段350(在本文中也被称为“第八字段”)。例如,NIC 123可以利用扩展字段350向NIC 113指示在NIC 123处接收到的分组的最大顺序序列号。由扩展字段350指示的最大顺序序列号可以由NIC 113用于后续拥塞控制。关于最大顺序序列号的应用,以下还将在“拥塞控制及多路径分发”部分中作进一步的详细描述。
以上结合图2和图3描绘了根据本公开的实现的示例分组和示例ACK的结构。应当理解,这仅出于示例的目的,而不暗示对本公开的范围的任何限制。本公开的实现也可以利用具有不同结构的分组和/或ACK来被体现。
拥塞控制及多路径分发
如之前所描述的,MP-RDMA需要跟踪多个路径中的每个路径上的传输和拥塞状态,以便根据拥塞情况将分组动态地分布到各路径中。为了使对NIC中的片上存储器的占用最小化,在充当发送设备的NIC 113处可以基于针对多个路径的拥塞控制信息来执行拥塞控制。在一些实现中,该拥塞控制信息可以通过针对多个路径的唯一拥塞控制窗口来表示,该拥塞控制窗口例如指示能够在多个路径上传输的分组的总数(在下文中,拥塞控制窗口被表示为“cwnd”)。
当NIC 113尚未接收到任何ACK的初始情况下,cwnd可以具有大于零的初值,例如16。假设待发送的分组序列号从0开始编号,则NIC 113可以将第0~15号分组(以下被表示为分组#0~分组#15)随机地分布在16个VP中,以向NIC 123发送。
当NIC 113从NIC 123处接收到ACK时,NIC 113可以基于接收到的ACK来更新cwnd。例如,NIC 113所接收到的ACK可以具有如图3所示的结构。
在一些实现中,NIC 113可以基于ACK中的字段342(即,ECN)来更新cwnd。例如,NIC113可以按如下公式(1)来更新cwnd:
Figure BDA0001510548680000111
在一些实现中,NIC 113可以进一步基于更新后的cwnd来确定可用窗口(在本文中被表示为“awnd”),可用窗口可以指示当前允许向NIC 123发送的分组的数量。当所确定的可用窗口大于0时,NIC113可以在接收到ACK的路径上发送下一分组。
在一些实现中,在不存在乱序接收的情况下(也即,分组按其发送顺序依次到达NIC 123,并且针对分组的ACK也按其发送顺序依次到达NIC 113),NIC 113可以按如下公式(2)来确定awnd:
awnd=cwnd-(snd_next-snd_una)公式(2)
其中snd_next指示NIC 113将要发送的下一分组的序列号,snd_una指示NIC 113尚未接收到ACK的分组的最小序列号。也即,snd_next-snd_una可以指示NIC 113已经发送但尚未接收到ACK的分组的数量。
例如,假设初始的cwnd为16,NIC 113已向NIC 123发出分组#0~分组#15,因此snd_next=16并且snd_una=0。此时NIC 113从NIC 123收到针对分组#0的ACK(在本文中被表示为“ACK#0”),ACK#0中的ECN为0,因此cwnd被更新为16+1/16并且snd_una被更新为1。因此,awnd=16+1/16-(16-1)=1+1/16。由于awnd大于0,因此NIC 113可以在接收到ACK#0的路径上向NIC 123发送分组#16,并且snd_next被更新为17。
备选地,在一些实现中,考虑到可能出现的乱序接收的情况(也即,分组不一定按其发送顺序到达NIC 123,并且针对分组的ACK也不一定按其发送顺序到达NIC 113),NIC113可以按如下公式(3)来确定awnd:
awnd=cwnd+inflate-(snd_next-snd_una)公式(3)
其中snd_next表示NIC 113将要发送的下一分组的序列号,snd_una指示NIC 113尚未接收到ACK的分组的最小序列号。也即,snd_next-snd_una可以表示NIC 113已经发送但尚未接收到ACK的分组的数量。inflate表示用于可用窗口awnd的膨胀系数,其估计NIC123已经接收到的乱序数据分组(例如,NIC 113已经接收到针对这些乱序数据分组的ACK)的数量,并且将这些分组的数量加入到可用窗口awnd中,从而能够尽可能多地发送分组。inflate可以基于如下方式来被计算:针对每个接收到的ACK递增inflate;然后在基于该ACK更新snd_una之前,从经递增的inflate减去(ack_aack-snd_una),其中ack_aack表示该ACK中的字段350的值(例如,在实践中其可以等于在NIC 123处接收到的分组的最大序列号加1)。
例如,假设初始的cwnd为16,NIC 113已向NIC 123发出分组#0~分组#15。此时,snd_next=16,snd_una=0并且inflate=0。然后,NIC 113从NIC 123接收到针对分组#1的ACK#1,ACK#1中的ECN为0并且ack_aack为0(因为未收到ACK#1之前的ACK#0),因此cwnd被更新为16+1/16。inflate首先被递增1,然后减去(ack_aack-snd_una)。因此,更新后的inflate为1,其表示NIC 123已经接收到1个乱序的数据分组,也即分组#1。根据公式(3),awnd=16+1/16+1-(16-0)=1+1/16。由于awnd大于0,因此NIC 113可以在接收到ACK#1的路径上向NIC 123发送分组#16,并且snd_next被更新为17。假设NIC 113进一步从NIC 123接收到针对分组#2的ACK#2,其ECN为0。根据上述规则,inflate将被更新为2,并且awnd=16+1/8+2-(17-0)=1+1/8。由于awnd大于0,因此NIC 113可以在接收到ACK#2的路径上向NIC123发送分组#17,并且snd_next被更新为18。
由此可见,本公开的实现能够在多路径之间适当地平衡分组流量。同时,由于仅采用一个拥塞控制窗口来对多个路径进行拥塞控制,本公开的实现能够使对NIC的片上存储器的占用最小化。
突发控制
在一些实现中,针对一个返回的ACK,NIC 113可以发送多于一个分组。例如,当所确定的可用窗口awnd大于1时,NIC 113可以发送多于一个分组。在一些情况下,如果多于一个分组都在接收到ACK的单个路径上被发送,则容易导致拥塞情况的发生或者恶化。在一些实现中,为了解决上述问题,可以针对突发分组预先设定阈值。例如,该预定阈值指示允许在单个路径上一次发送的最大分组的数量。当NIC 113确定当前允许向NIC 123发送的分组的数量超过该预定阈值时,NIC 113在接收到ACK的单个路径上仅发送该预定阈值数量的分组。剩余分组的发送将由后续收到的ACK来触发。
在一些情况下,如果没有后续的ACK到来,则剩余分组可能始终无法被发送。在一些实现中,可以针对这些剩余分组设置定时器。例如,定时器的长度可以被设置为预先估计的NIC 113与NIC 123之间的往返延时(在本文中被表示为“RTT”)的一半。如果定时器超时并且尚未接收到后续ACK,可以在随机路径上分别发送这些剩余分组。
拥塞控制窗口收缩
在一些实现中,当没有数据要被传输时,NIC 113可以逐渐收缩拥塞控制窗口cwnd。例如,当NIC 113接收到触发下一分组的发送的ACK但是没有待发送的数据时,NIC113可以使cwnd递减1,以相应地降低在多个路径上的发送速率从而节省网络资源。此外,在一些实现中,当发送端缺少待发送数据的时间超过预定阈值(例如,3倍的RTT)时,上述的拥塞控制窗口及相关状态可以被重置,也即重新返回到初始情况。以此方式,拥塞控制窗口能够更准确地反映当前多个路径上的拥塞情况。
新路径探测
如之前所描述的,在初始情况下,NIC 113可以随机选择用于传输分组的路径。在接收到ACK的情况下,NIC 113可以基于接收到ACK的路径来选择用于传输后续分组的路径。附加地或者备选地,在一些实现中,NIC 113还可以基于预定概率来主动探测新路径。例如,NIC 113可以基于预定分组间隔周期性地在新的随机路径上发送分组,而非始终基于ACK来确定用于传输分组的路径。由于不需要针对每个路径来进行拥塞控制,因此本公开的实现允许许多路径同时被使用而不会带来额外的存储器占用开销。此外,通过周期性的新路径探测以及之前描述的针对慢速路径的淘汰,根据本公开的实现MP-RDMA能够始终利用较好的路径来进行RDMA传输,从而进一步提高吞吐率并且降低传输延时。
乱序处理
如之前所描述的,由于多路径传输的并行性,有可能导致数据分组无序到达接收设备的情况。当数据分组乱序到达接收端时,接收端的NIC可能没有足够的存储器来缓冲无序的数据分组。本公开的实现能够将MP-RDMA的乱序程度控制在可接受的范围内,使得对NIC的片上存储器的占用最小化。
接收端乱序处理
在一些实现中,在充当接收设备的NIC 123处可以采用位图数据结构来跟踪到达的分组。图4示出了根据本公开的实现的用于跟踪接收到的分组的示例位图数据结构400的示意图。如图4所示,位图400可以被组织成循环数组。例如,位图400可以具有L个槽,其中的每个槽例如包含两个比特,用来记录一个分组的状态。位图400的头部410对应于序列号为rcv_next的分组,rcv_next表示接收设备期望接收的下一分组的序列号。也即,位图400可以记录序列号从rcv_next到rcv_next+L-1的分组的状态。
在一些实现中,根据RDMA消息的类型(例如,该类型被包含在如图2所示的RoCEv2数据头部240中),每个分组可以具有如下四种状态之一:1)“未接收”状态(在图4中被表示为“E”),用于指示该分组尚未收到;2)“已接收”状态(在图4中被表示为“R”),用于指示该分组已被接收;3)“消息结尾”状态(在图4中被表示为“T”),用于指示该分组已被接收,并且该分组是所属RDMA消息的最后一个分组;以及4)“需要完成通知的消息结尾”状态(在图4中被表示为“TC”),用于指示该分组已被接收并且是所属RDMA消息的最后一个分组,并且该RDMA消息要求完成通知。位图400中的每个槽的初始状态可以被设置为“未接收”状态。
响应于从NIC 113接收到分组,NIC 123可以基于该分组的PSN(例如,其被包含在如图2所示的RoCEv2数据头部240中)来确定位图400中是否存在与该分组对应的槽。例如,如果该分组的PSN小于rcv_next+L,则NIC 113可以确定位图400中存在与该分组对应的槽;否则,则NIC 113可以确定位图400中不存在与该分组对应的槽。如果位图400中存在与该分组对应的槽,则NIC 113可以在与该分组对应的槽处更新该分组的状态。
在一些实现中,NIC 113可以基于分组中的如图2所示的字段250来确定接收到的该分组是否为RDMA消息的最后一个分组。如果该分组不是RDMA消息的最后一个分组,则该分组的状态可以被更新为“已接收”状态。如果该分组是RDMA消息的最后一个分组,NIC 113可以进一步检查RoCEv2数据头部240中的消息类型字段以确定该RDMA消息是否要求完成通知。例如,如果RDMA消息指示RDMA操作为读操作或者发送操作,则NIC 113可以确定该分组要求完成通知,并且由此将该分组的状态更新为“需要完成通知的消息结尾”状态;否则,NIC 113可以将该分组的状态更新为“消息结尾”状态。
在一些实现中,NIC 113可以持续地扫描位图400,以确定RDMA消息是否被完整地接收。例如,被完整接收的RDMA消息可以由被标记为“已接收”状态的连续的多个槽连同一个被标记为“需要完成通知的消息结尾”状态或者“消息结尾”状态的槽来指示,如图4所示的消息420和430。当NIC 113确定RDMA消息已被完整地接收时,NIC 113可以将与该RDMA消息对应的槽的状态设置为“未接收”状态,并且更新rcv_next以将指示循环数组400的头部的指针410移动到指向该RDMA消息之后的槽440。例如,如图4所示,指示循环数组400的头部的指针可以被移动到消息430之后的槽,并且与消息420和430对应的槽的状态可以被设置为“E”,使得这些槽可以被用于记录之后到达的分组的状态。附加地,如果消息需要完成通知(例如,消息420),NIC 113可以从接收工作队列中弹出WQE并且在CQ中生成相应的CQE。
发送端乱序处理
以上讨论了在接收端处执行的乱序处理。如上所述,为了尽可能减少对接收端NIC片上存储器的占用,用于跟踪接收到的分组的状态的位图大小(也即,L)可能是有限。也即,如果NIC 123收到的分组的PSN超过rcv_next+L,则该分组的状态无法在位图中被记录。如果NIC 123因此丢掉该分组,则将损害整体性能。本公开的实现能够通过发送端的路径选择来将MP-RDMA的乱序程度控制在可接受的范围内,从而解决上述问题。
在一些实现中,当充当发送设备的NIC 113从NIC 123接收到ACK时,NIC 113可以确定已经接收到ACK的分组的最大分组序列号(在本文中,其被表示为“snd_ooh”)。NIC 113可以基于snd_ooh和预先确定的针对MP-RDMA的乱序容忍程度(在本文中,乱序容忍程度被表示为“Δ”),来确定允许在接收到ACK的路径上发送的分组的阈值序列号。例如,该阈值序列号snd_ool可以按如下公式(4)来被确定:
snd_ool=snd_ooh-Δ公式(4)
其中,Δ≤L。当NIC 113确定ACK所针对的分组的序列号(例如,由如图3所示的字段341指示)小于阈值序列号snd_ool时,NIC 113可以通过更新拥塞控制窗口cwnd(例如,使cwnd递减)来避免在接收到ACK的路径上发送下一分组。
从以上描述能够看出,本公开的实现利用snd_ooh来标记通过快速路径而较早到达接收设备的无序分组。为了控制MP-RDMA的乱序程度,需要通过去除导致乱序程度超过预定阈值Δ的慢速路径。当ACK所针对的分组的PSN小于snd_ool,其标识了这样的慢速路径。通过避免在这样的慢速路径上发送后续分组,本公开的实现能够将MP-RDMA的乱序程度控制在可接受的范围内。
应当注意,在以上描述中未考虑重传分组的情况。由于重传分组的序列号很有可能小于snd_ool,因此针对重传分组而言仅通过ACK所针对的分组的PSN无法标识出慢速路径。因此,在一些实现中,针对带有重传标记的ACK(例如,由如图3所示的字段342指示),可以不执行上述操作。也即,始终将接收到针对重传分组的ACK的路径当作正常路径,并且针对重传分组的ACK能够触发在该路径上传输下一分组。关于重传分组的处理,在下文中还将进一步详细描述。
同步分组处理
如之前所描述的,由于NIC 123可能没有足够的存储器来缓冲无序到达的数据分组,其可能不得不将至少部分数据分组存放在主机存储器122中。因此,数据在存储器122中的更新可能是乱序的。对于普通操作而言,这样的乱序更新可能没有问题。然而,对于一些依赖特定传输顺序的操作(本文中被称为“同步操作”)而言,这样的乱序更新可能导致应用无法获取所期望的正确数据。本公开的实现能够通过将同步操作延迟特定时间间隔来解决上述问题。
如之前结合图2所描述的,NIC 113可以利用分组中的字段242来指示该分组是否为同步分组,也即不允许被乱序递交到目标存储器的分组。在一些实现中,NIC 113可以确定用于发送这样的同步分组的时间间隔Δt。例如,NIC 113可以按如下公式(5)来确定Δt:
Figure BDA0001510548680000181
其中,Δ表示预先确定的针对MP-RDMA的乱序容忍程度,RTT表示预先估计的NIC113与NIC 123之间的往返延时,α表示预定可调系数,Rs表示RDMA连接上的发送速率。
在一些实现中,在发送端,NIC 113在发送同步分组之前的分组之后必须至少等待时间间隔Δt才能发送同步分组。以此方式,使得同步分组之前的分组以较大概率比该同步分组更早到达接收端。
在一些实现中,在接收端,当NIC 123接收到带有同步标记(例如,由如图2所示的字段242指示)的分组时,NIC 123将首先确定序列号小于该同步分组的序列号的分组是否已经被递交到存储器122中。仅当序列号小于该同步分组的序列号的分组已全部被递交到存储器122中时,该同步分组才能被递交到存储器122。以此方式,本公开的实现能够保证依赖特定传输顺序的操作按顺序被执行。
分组丢失恢复
针对传统的单路径RDMA而言,分组丢失可以通过接收到的分组的PSN不连续来被检测。然而在MP-RDMA中,分组的无序到达是常见的,并且在大多数情况下与分组丢失无关。针对上述问题,本公开的实现能够识别并恢复真正的分组丢失。
在一些实现中,当充当接收设备的NIC 123接收到的分组的PSN超过rcv_next+L时,NIC 123可以生成否定应答(NACK)并将其发送至NIC 113。NACK的结构与如图3所示的ACK的结构类似。例如,图5示出了根据本公开的实现的用于MP-RDMA传输的示例NACK 500的示意图。出于说明的目的,在图5中仅示出了NACK 500的头部。
如图5所示,NACK 500可以包括:以太网头部510、IP头部520、UDP头部530以及被插入到UDP有效载荷中的RoCEv2 NACK头部540。与如图3所示的RoCEv2 ACK头部340不同的是,RoCEv2 ACK头部340包含指示肯定应答的标记,而在RoCEv2 NACK头部540中包含指示否定应答的对应标记。此外,NACK 500还包括字段541、542、543、544和550,它们分别对应于如图3所示的ACK 300中的字段341、342、343、344和350。在一些实现中,字段542和550可以分别类似于字段342和350而被填充,而字段543和544可以可选地不被填充。与字段341不同,字段541可以由待重传的分组的序列号填充。例如,NIC 123可以从如图4所示的位图400的头部指针开始顺序扫描位图400,并且将最先扫描到的状态为“E”的分组的序列号填充到字段541中。
在一些实现中,响应于从NIC 123接收到NACK,NIC 113可以进入分组丢失恢复模式。响应于进入分组丢失恢复模式,NIC 113可以确定两个变量recovery和snd_retx的值,其中snd_retx指示待重传的分组的序列号的起点,而recovery指示待重传的分组的序列号的终点。例如,NIC 113可以基于指示当前待发送的下一分组的序列号的snd_next来确定recovery的值,并且基于NACK 500中的字段541中的值来确定snd_retx的值。图6示出了根据本公开的实现的多个控制信息的示意图。图6示意性地示出了用于分组丢失恢复模式的信息recovery和snd_retx与之前描述的用于路径选择的若干信息之间的相互关系。
在一些实现中,当进入响应于进入分组丢失恢复模式时,响应于从NIC 123接收到ACK,NIC 113可以在接收到该ACK的路径上重传由snd_retx所指示的分组,而非新的分组。例如,该重传的分组可以带有重传标记(也即,如图2所示的字段241被设置为‘1’)。NIC 113可以相应地更新snd_retx和snd_una。当snd_una的值超过recovery的值时,也即待重传的分组全部被发送时,分组丢失恢复模式结束。
当NIC 123接收到带有重传标记的分组时,其可以将重传标记包括在针对该分组的ACK中,并且向NIC 113发送带有重传标记的ACK。在一些实现中,针对带有重传标记的ACK,NIC 113可以不执行如公式(3)或者(4)所示的路径选择。也即,NIC 113可以始终将接收到针对重传分组的ACK的路径当作正常路径,并且针对重传分组的ACK始终能够触发在该路径上对下一分组(例如,重传分组或者非重传分组)的传输。
如上所述,NACK的发送响应于NIC 123接收到序列号超过rcv_next+L的分组而被触发。在一些情况下,如果出现分组丢失但是发送端没有足够的后续数据用于发送,则可能存在无法触发分组丢失恢复模式的可能。在一些实现中,为了避免这种情况,当拥塞控制窗口允许发送下一分组而NIC 113没有足够数据被发送时,NIC 113可以主动重传未接收到其ACK的分组,以尽早触发分组丢失恢复模式。
综上所述,根据本公开的实现的MP-RDMA方案能够有效利用丰富的网络路径同时保持较低的存储器占用。通过在多路径上基于ACK触发分组发送和实现乱序可知的路径选择,该方案能够选择最佳网络路径并且将分组适当地分布在这些路径上进行传输。无论多少个网络路径被使用,该方案仅需要占用NIC中的少量额外存储器空间。此外,根据本公开的实现的MP-RDMA方案能够很好地应对网络中的PFC。利用本公开的实现中的拥塞控制方案,PFC将很少被触发。当PFC被触发时,如果PFC中止所有网络路径,则MP-RDMA也将停止传输,因为不存在返回的ACK。当PFC恢复时,MP-RDMA将重新开始执行。如果PFC中止了部分路径,则这些被中止的路径将会产生比其他路径更长的延时,利用本公开的实现中的路径选择方案能够有效消除这些慢速路径。因此,根据本公开的MP-RDMA传输方案能够提高针对路径故障的健壮性,并且实现对整个网络带宽的有效利用。
示例过程
图7示出了根据本公开一些实现的用于MP-RDMA的过程700的流程图。过程700可以由NIC 113和NIC 123中充当发送设备的NIC来实现。以下将以NIC 113作为发送设备的示例,而将NIC 123作为接收设备的示例。例如,过程700可以在NIC 113处实现。
如图7所示,在710,基于要从NIC 113向NIC 123发送的RDMA消息,生成至少包括第一分组的至少一个分组。NIC 113与NIC 123之间具有经由多个路径的RDMA连接。第一分组至少包括多个字段,多个字段包含用于在多个路径中的第一路径上传输第一分组的信息。也即,这多个字段中的信息将被用来支持或者说允许在第一分组在第一路径上的传输。在720,经由RDMA协议在多个路径上向NIC 123发送至少一个分组,第一分组在第一路径上被发送。
在一些实现中,多个字段包括:第一字段,用于指示第一路径的标识符;第二字段,用于指示第一分组的分组序列号;第三字段,用于指示RDMA消息的消息序列号;以及第四字段,用于指示第一分组在RDMA消息中的序号
在一些实现中,NIC 113通过以下操作来发送至少一个分组:获取指示多个路径的拥塞情况的拥塞控制信息;基于拥塞控制信息来确定第一分组是否被允许发送;以及响应于确定第一分组允许被发送,在第一路径上经由RDMA协议向NIC 123发送第一分组。
在一些实现中,至少一个分组还包括第一分组后续的第二分组,并且NIC 113通过以下操作来发送至少一个分组:响应于在第一路径上从NIC 123接收到针对第一分组的第一肯定应答,更新拥塞控制信息;以及基于更新后的拥塞控制信息来控制第二分组的发送。
在一些实现中,第一肯定应答至少包括:第五字段,用于指示第一路径的标识符;第六字段,用于指示NIC 123接收到的第一分组的分组序列号;第七字段,用于指示由第一路径上的分组转发设备生成的拥塞通知,拥塞通知指示分组转发设备检测到的第一路径的拥塞情况;以及第八字段,用于指示在NIC 123处接收到的分组的最大顺序序列号。
在一些实现中,NIC 113通过以下操作来更新拥塞控制信息:响应于接收到第一肯定应答,至少基于由第七字段指示的拥塞通知和由第八字段指示的最大顺序序列号来更新拥塞控制信息。
在一些实现中,NIC 113通过以下操作来更新拥塞控制信息:响应于接收到第一肯定应答,确定已经接收到肯定应答的分组的最大分组序列号;确定针对至少一个分组的传输的乱序容忍程度;基于最大分组序列号和乱序容忍程度,确定允许在第一路径上发送的分组的阈值序列号;以及至少基于由第六字段指示的分组序列号和阈值序列号,更新拥塞控制信息。
在一些实现中,第一分组还包括第九字段,用于指示第一分组所依赖的传输顺序。NIC 113通过以下操作来发送至少一个分组:至少基于拥塞控制信息和乱序容忍程度,确定用于发送第一分组的时间间隔;以及响应于至少一个分组中紧接在第一分组之前的第三分组被发送,至少等待该时间间隔才发送第一分组。
在一些实现中,过程700还包括:响应于从NIC 123接收到否定应答,从至少一个分组中确定该否定应答所针对的第四分组;通过在第四分组中添加重传标记来处理第四分组;以及在多个路径中的第二路径上经由RDMA协议向NIC 123重传经处理的第四分组,在第二路径上先前接收到过肯定应答。
图8示出了根据本公开一些实现的用于MP-RDMA的过程800的流程图。过程800可以由NIC 113和NIC 123中充当接收设备的NIC来实现。以下将以NIC 113作为发送设备的示例,而将NIC 123作为接收设备的示例。例如,过程800可以在NIC 123处被实现。
如图8所示,在810,在NIC 123处经由RDMA协议在多个路径上从NIC 113接收至少包括第一分组的至少一个分组。NIC 113和NIC 123具有经由多个路径的RDMA连接。至少一个分组包括多个字段,多个字段包含用于在多个路径中的第一路径上传输第一分组的信息。
在一些实现中,至少一个分组基于RDMA消息被生成,并且多个字段包括:第一字段,用于指示第一路径的标识符;第二字段,用于指示第一分组的第一分组序列号;第三字段,用于指示RDMA消息的消息序列号;以及第四字段,用于指示第一分组在RDMA消息中的序号。
备选地或者附加地,在820,响应于在第一路径上接收到第一分组,在NIC 123处生成针对第一分组的第一肯定应答。第一肯定应答至少包括:第五字段,用于指示第一路径的标识符;第六字段,用于指示NIC 123接收到的第一分组的第一分组序列号;第七字段,用于指示由第一路径上的分组转发设备生成的拥塞通知,拥塞通知指示分组转发设备检测到的第一路径的拥塞情况;以及第八字段,用于指示在NIC 123处接收到的分组的最大顺序序列号。在830,在第一路径上向NIC 113发送第一肯定应答。
在一些实现中,过程800还包括:获取用于记录接收到的分组的状态的位图;响应于在第一路径上接收到第一分组,确定位图中是否存在与第一分组相对应的位置;以及响应于确定位图中存在与第一分组相对应的位置,在该位置处更新与第一分组相关联的状态。
在一些实现中,过程800还包括:响应于确定位图中不存在与第一分组相对应的位置,基于位图来确定待重传的分组;生成指示待重传的分组的否定应答;以及在第一路径上向NIC 113发送否定应答。
在一些实现中,过程800还包括:响应于位图指示与RDMA消息相关联的至少一个分组已被接收,将位图中关于至少一个分组的相应位置清空,以用于记录与其他RDMA消息相关联的分组的状态。
在一些实现中,过程800还包括:响应于经由RDMA协议在多个路径中的第二路径上接收到包括重传标记的第二分组,通过将重传标记添加到针对第二分组的第二肯定应答来生成第二肯定应答;以及在第二路径上向NIC 113发送第二肯定应答。
在一些实现中,过程800还包括:响应于接收到第一分组,基于第一分组来确定用于在存储器122中存储第一分组的地址;以及将第一分组存储在该地址处。
在一些实现中,第一分组还包括第九字段,用于指示第一分组所依赖的传输顺序,并且NIC 123通过以下操作将第一分组存储在地址处:响应于具有第二分组序列号的第三分组已被存储在存储器122中,将第一分组存储在该地址处,第二分组序列号小于第一分组序列号。
示例设备
图9示出了能够实施本公开的多个实现的计算设备900的框图。例如,计算设备900可以用来实现如图1所示的主机110和120。应当理解,图9所示出的计算设备900仅仅是示例性的,而不应当构成对本公开所描述的实现的功能和范围的任何限制。如图9所示,计算设备900包括通用计算设备形式的计算设备900。计算设备900的组件可以包括但不限于一个或多个处理器或处理单元910、存储器920、存储设备930、一个或多个通信单元940、一个或多个输入设备950以及一个或多个输出设备960。
在一些实现中,计算设备900可以被实现为具有计算能力的各种用户终端或服务终端。服务终端可以是各种服务提供方提供的服务器、大型计算设备等。用户终端诸如是任意类型的移动终端、固定终端或便携式终端,包括移动手机、多媒体计算机、多媒体平板、互联网节点、通信器、台式计算机、膝上型计算机、平板计算机、个人通信系统(PCS)设备、个人导航设备、个人数字助理(PDA)、数码相机/摄像机、定位设备、游戏设备或者其任意组合,包括这些设备的配件和外设或者其任意组合。
处理单元910可以是实际或虚拟处理器并且能够根据存储器920中存储的程序来执行各种处理。在多处理器系统中,多个处理单元并行执行计算机可执行指令,以提高计算设备900的并行处理能力。处理单元910也可以被称为中央处理单元(CPU)、微处理器、控制器、微控制器。
计算设备900通常包括多个计算机存储介质。这样的介质可以是计算设备900可访问的任何可以获得的介质,包括但不限于易失性和非易失性介质、可拆卸和不可拆卸介质。存储器920可以是易失性存储器(例如寄存器、高速缓存、随机访问存储器(RAM))、非易失性存储器(例如,只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、闪存)或其某种组合。
存储设备930可以是可拆卸或不可拆卸的介质,并且可以包括机器可读介质,其能够用于存储信息和/或数据并且可以在计算设备900内被访问。计算设备900可以进一步包括另外的可拆卸/不可拆卸、易失性/非易失性存储介质。尽管未在图9中示出,可以提供用于从可拆卸、非易失性磁盘进行读取或写入的磁盘驱动和用于从可拆卸、非易失性光盘进行读取或写入的光盘驱动。在这些情况中,每个驱动可以由一个或多个数据介质接口被连接至总线(未示出)。
通信单元940实现通过通信介质与另外的计算设备进行通信。通信单元940可以包括启用根据本公开的实现的MP-RDMA的NIC941。NIC 941使得计算设备900能够通过通信介质与另外的计算设备进行MP-RDMA传输。例如,当计算设备900充当如图1所示的主机110时,NIC 941可以充当如图1所示的NIC 113;而当计算设备900充当如图1所示的主机120时,NIC841可以充当如图1所示的NIC123。
附加地,计算设备900的组件的功能可以以单个计算集群或多个计算机器来实现,这些计算机器能够通过通信连接进行通信。因此,计算设备900可以使用与一个或多个其他服务器、个人计算机(PC)或者另一个一般网络节点的逻辑连接来在联网环境中进行操作。
输入设备150可以是一个或多个各种输入设备,例如鼠标、键盘、追踪球、语音输入设备、图像输入设备等。输出设备160可以是一个或多个输出设备,例如显示器、扬声器、打印机等。计算设备900还可以根据需要与一个或多个外部设备(未示出)进行通信,外部设备诸如存储设备、显示设备等等。这样的通信可以经由输入/输出(I/O)接口(未示出)来执行。
示例实现方式
以下列出了本公开的一些示例实现方式。
在第一方面,本公开提供了一种设备。该设备包括:处理单元;存储器,该存储器被耦合到处理单元并且存储用于由处理单元执行的指令,该指令当由处理单元执行时,使得该设备执行动作,动作包括:基于要从该设备向另一设备发送的远程直接存储器访问(RDMA)消息,生成至少包括第一分组的至少一个分组,该设备与另一设备之间具有经由多个路径的RDMA连接。第一分组至少包括多个字段,多个字段包含用于在多个路径中的第一路径上传输第一分组的信息。动作还包括:经由RDMA协议在多个路径上向另一设备发送至少一个分组,第一分组在第一路径上被发送。
在一些实现中,多个字段包括:第一字段,用于指示第一路径的标识符;第二字段,用于第一分组的分组序列号;第三字段,用于指示RDMA消息的消息序列号;以及第四字段,用于指示第一分组在RDMA消息中的序号。
在一些实现中,发送至少一个分组包括:获取指示多个路径的拥塞情况的拥塞控制信息;基于拥塞控制信息来确定第一分组是否被允许发送;以及响应于确定第一分组允许被发送,在第一路径上经由RDMA协议向另一设备发送第一分组。
在一些实现中,至少一个分组还包括第一分组后续的第二分组,并且发送至少一个分组包括:响应于在第一路径上从另一设备接收到针对第一分组的第一肯定应答,更新拥塞控制信息;以及基于更新后的拥塞控制信息来控制第二分组的发送。
在一些实现中,第一肯定应答至少包括:第五字段,用于指示第一路径的标识符;第六字段,用于指示第一分组的分组序列号;第七字段,用于指示由第一路径上的分组转发设备生成的拥塞通知,拥塞通知指示分组转发设备检测到的第一路径的拥塞情况;以及第八字段,用于指示在另一设备处接收到的分组的最大顺序序列号。
在一些实现中,更新拥塞控制信息包括:响应于接收到第一肯定应答,至少基于由第七字段指示的拥塞通知和由第八字段指示的最大顺序序列号来更新拥塞控制信息。
在一些实现中,更新拥塞控制信息包括:响应于接收到第一肯定应答,确定已经接收到肯定应答的分组的最大分组序列号;确定针对至少一个分组的传输的乱序容忍程度;基于最大分组序列号和乱序容忍程度,确定允许在第一路径上发送的分组的阈值序列号;以及至少基于由第六字段指示的分组序列号和阈值序列号,更新拥塞控制信息。
在一些实现中,第一分组还包括第九字段,用于指示第一分组所依赖的传输顺序。发送至少一个分组包括:至少基于拥塞控制信息和乱序容忍程度,确定用于发送第一分组的时间间隔;以及响应于至少一个分组中紧接在第一分组之前的第三分组被发送,至少等待该时间间隔才发送第一分组。
在一些实现中,动作还包括:响应于从另一设备接收到否定应答,从至少一个分组中确定该否定应答所针对的第四分组;通过在第四分组中添加重传标记来处理第四分组;以及在多个路径中的第二路径上经由RDMA协议向另一设备重传经处理的第四分组,在第二路径上先前接收到过肯定应答。
在第二方面,本公开提供了一种设备。该设备包括:处理单元;存储器,该存储器被耦合到处理单元并且存储用于由处理单元执行的指令,该指令当由处理单元执行时,使得该设备执行动作,动作包括:经由远程直接存储器访问(RDMA)协议在多个路径上从另一设备接收至少包括第一分组的至少一个分组。该设备和另一设备具有经由多个路径的RDMA连接。第一分组至少包括多个字段,多个字段包含用于在多个路径上的第一路径上传输第一分组的信息。
在一些实现中,至少一个分组基于RDMA消息被生成,并且多个字段包括:第一字段,用于指示第一路径的标识符;第二字段,用于指示第一分组的第一分组序列号;第三字段,用于指示RDMA消息的消息序列号;以及第四字段,用于指示第一分组在RDMA消息中的序号。
在一些实现中,动作还包括:响应于在第一路径上接收到第一分组,生成针对第一分组的第一肯定应答。第一肯定应答至少包括:第五字段,用于指示第一路径的标识符;第六字段,用于指示该设备接收到的第一分组的第一分组序列号;第七字段,用于指示由第一路径上的分组转发设备生成的拥塞通知,拥塞通知指示分组转发设备检测到的第一路径的拥塞情况;以及第八字段,用于指示在该设备处接收到的分组的最大顺序序列号。
在一些实现中,动作还包括:获取用于记录接收到的分组的状态的位图;响应于在第一路径上接收到第一分组,确定位图中是否存在与第一分组相对应的位置;以及响应于确定位图中存在与第一分组相对应的位置,在该位置处更新与第一分组相关联的状态。
在一些实现中,动作还包括:响应于确定位图中不存在与第一分组相对应的位置,基于位图来确定待重传的分组;生成指示待重传的分组的否定应答;以及在第一路径上向另一设备发送否定应答。
在一些实现中,动作还包括:响应于位图指示与RDMA消息相关联的至少一个分组已被接收,将位图中关于至少一个分组的相应位置清空,以用于记录与其他RDMA消息相关联的分组的状态。
在一些实现中,动作还包括:响应于经由RDMA协议在多个路径中的第二路径上接收到包括重传标记的第二分组,通过将重传标记添加到针对第二分组的第二肯定应答来生成第二肯定应答;以及在第二路径上向另一设备发送第二肯定应答。
在一些实现中,动作还包括:响应于接收到第一分组,基于第一分组来确定用于在目标存储器中存储第一分组的地址;以及将第一分组存储在该地址处。
在一些实现中,第一分组还包括第九字段,用于指示第一分组所依赖的传输顺序,并且将第一分组存储在地址处包括:响应于具有第二分组序列号的第三分组已被存储在目标存储器中,将第一分组存储在该地址处,第二分组序列号小于第一分组序列号。
在第三方面,本公开提供了一种方法。该方法包括:基于要从第一设备向第二设备发送的远程直接存储器访问(RDMA)消息,生成至少包括第一分组的至少一个分组,第一设备与第二设备之间具有经由多个路径的RDMA连接。第一分组至少包括多个字段,多个字段包含用于在多个路径中的第一路径上传输第一分组的信息。该方法还包括:经由RDMA协议在多个路径上向第二设备发送至少一个分组,第一分组在第一路径上被发送。
在一些实现中,多个字段包括:第一字段,用于指示第一路径的标识符;第二字段,用于第一分组的分组序列号;第三字段,用于指示RDMA消息的消息序列号;以及第四字段,用于指示第一分组在RDMA消息中的序号。
在一些实现中,发送至少一个分组包括:获取指示多个路径的拥塞情况的拥塞控制信息;基于拥塞控制信息来确定第一分组是否被允许发送;以及响应于确定第一分组允许被发送,在第一路径上经由RDMA协议向第二设备发送第一分组。
在一些实现中,至少一个分组还包括第一分组后续的第二分组,并且发送至少一个分组包括:响应于在第一路径上从第二设备接收到针对第一分组的第一肯定应答,更新拥塞控制信息;以及基于更新后的拥塞控制信息来控制第二分组的发送。
在一些实现中,第一肯定应答至少包括:第五字段,用于指示第一路径的标识符;第六字段,用于指示第一分组的分组序列号;第七字段,用于指示由第一路径上的分组转发设备生成的拥塞通知,拥塞通知指示分组转发设备检测到的第一路径的拥塞情况;以及第八字段,用于指示在第二设备处接收到的分组的最大顺序序列号。
在一些实现中,更新拥塞控制信息包括:响应于接收到第一肯定应答,至少基于由第七字段指示的拥塞通知和由第八字段指示的最大顺序序列号来更新拥塞控制信息。
在一些实现中,更新拥塞控制信息包括:响应于接收到第一肯定应答,确定已经接收到肯定应答的分组的最大分组序列号;确定针对至少一个分组的传输的乱序容忍程度;基于最大分组序列号和乱序容忍程度,确定允许在第一路径上发送的分组的阈值序列号;以及至少基于由第六字段指示的分组序列号和阈值序列号,更新拥塞控制信息。
在一些实现中,第一分组还包括第九字段,用于指示第一分组所依赖的传输顺序。发送至少一个分组包括:至少基于拥塞控制信息和乱序容忍程度,确定用于发送第一分组的时间间隔;以及响应于至少一个分组中紧接在第一分组之前的第三分组被发送,至少等待该时间间隔才发送第一分组。
在一些实现中,方法还包括:响应于从第二设备接收到否定应答,从至少一个分组中确定该否定应答所针对的第四分组;通过在第四分组中添加重传标记来处理第四分组;以及在多个路径中的第二路径上经由RDMA协议向第二设备重传经处理的第四分组,在第二路径上先前接收到过肯定应答。
在第四方面,本公开提供了一种方法。该方法包括:在第二设备处经由远程直接存储器访问(RDMA)协议在多个路径上从第一设备接收至少包括第一分组的至少一个分组。第一设备和第二设备具有经由多个路径的RDMA连接。至少一个分组包括在多个路径中的第一路径上接收到的第一分组。第一分组至少包括多个字段,多个字段包含用于在多个路径上的第一路径上传输第一分组的信息。
在一些实现中,至少一个分组基于RDMA消息被生成,并且多个字段包括:第一字段,用于指示第一路径的标识符;第二字段,用于指示第一分组的第一分组序列号;第三字段,用于指示RDMA消息的消息序列号;以及第四字段,用于指示第一分组在RDMA消息中的序号。
在一些实现中,方法还包括:响应于在第一路径上接收到第一分组,生成针对第一分组的第一肯定应答。第一肯定应答至少包括:第五字段,用于指示第一路径的标识符;第六字段,用于指示第一分组的第一分组序列号;第七字段,用于指示由第一路径上的分组转发设备生成的拥塞通知,拥塞通知指示分组转发设备检测到的第一路径的拥塞情况;以及第八字段,用于指示在第二设备处接收到的分组的最大顺序序列号。
在一些实现中,方法还包括:获取用于记录接收到的分组的状态的位图;响应于在第一路径上接收到第一分组,确定位图中是否存在与第一分组相对应的位置;以及响应于确定位图中存在与第一分组相对应的位置,在该位置处更新与第一分组相关联的状态。
在一些实现中,方法还包括:响应于确定位图中不存在与第一分组相对应的位置,基于位图来确定待重传的分组;生成指示待重传的分组的否定应答;以及在第一路径上向第一设备发送否定应答。
在一些实现中,方法还包括:响应于位图指示与RDMA消息相关联的至少一个分组已被接收,将位图中关于至少一个分组的相应位置清空,以用于记录与其他RDMA消息相关联的分组的状态。
在一些实现中,方法还包括:响应于经由RDMA协议在多个路径中的第二路径上接收到包括重传标记的第二分组,通过将重传标记添加到针对第二分组的第二肯定应答来生成第二肯定应答;以及在第二路径上向第一设备发送第二肯定应答。
在一些实现中,方法还包括:响应于接收到第一分组,基于第一分组来确定用于在目标存储器中存储第一分组的地址;以及将第一分组存储在该地址处。
在一些实现中,第一分组还包括第九字段,用于指示第一分组所依赖的传输顺序,并且将第一分组存储在地址处包括:响应于具有第二分组序列号的第三分组已被存储在目标存储器中,将第一分组存储在该地址处,第二分组序列号小于第一分组序列号。
在第五方面,本公开提供了一种计算机程序产品,计算机程序产品被有形地存储在非瞬态计算机存储介质中并且包括计算机可执行指令,计算机可执行指令在由设备执行时使设备执行第三方面或第四方面中的方法。
在第六方面,本公开提供了一种计算机可读介质,其上存储有计算机可执行指令,计算机可执行指令在由设备执行时使设备执行第三方面或第四方面中的方法。
本文中以上描述的功能可以至少部分地由一个或多个硬件逻辑部件来执行。例如,非限制性地,可以使用的示范类型的硬件逻辑部件包括:场可编程门阵列(FPGA)、专用集成电路(ASIC)、专用标准产品(ASSP)、芯片上系统的系统(SOC)、负载可编程逻辑设备(CPLD)等等。
用于实施本公开的方法的程序代码可以采用一个或多个编程语言的任何组合来编写。这些程序代码可以提供给通用计算机、专用计算机或其他可编程数据处理装置的处理器或控制器,使得程序代码当由处理器或控制器执行时使流程图和/或框图中所规定的功能/操作被实施。程序代码可以完全在机器上执行、部分地在机器上执行,作为独立软件包部分地在机器上执行且部分地在远程机器上执行或完全在远程机器或服务器上执行。
在本公开的上下文中,机器可读介质可以是有形的介质,其可以包含或存储以供指令执行系统、装置或设备使用或与指令执行系统、装置或设备结合地使用的程序。机器可读介质可以是机器可读信号介质或机器可读储存介质。机器可读介质可以包括但不限于电子的、磁性的、光学的、电磁的、红外的、或半导体系统、装置或设备,或者上述内容的任何合适组合。机器可读存储介质的更具体示例会包括基于一个或多个线的电气连接、便携式计算机盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦除可编程只读存储器(EPROM或快闪存储器)、光纤、便捷式紧凑盘只读存储器(CD-ROM)、光学储存设备、磁储存设备、或上述内容的任何合适组合。
此外,虽然采用特定次序描绘了各操作,但是这应当理解为要求这样操作以所示出的特定次序或以顺序次序执行,或者要求所有图示的操作应被执行以取得期望的结果。在一定环境下,多任务和并行处理可能是有利的。同样地,虽然在上面论述中包含了若干具体实现细节,但是这些不应当被解释为对本公开的范围的限制。在单独的实现的上下文中描述的某些特征还可以组合地实现在单个实现中。相反地,在单个实现的上下文中描述的各种特征也可以单独地或以任何合适的子组合的方式实现在多个实现中。
尽管已经采用特定于结构特征和/或方法逻辑动作的语言描述了本主题,但是应当理解所附权利要求书中所限定的主题未必局限于上面描述的特定特征或动作。相反,上面所描述的特定特征和动作仅仅是实现权利要求书的示例形式。

Claims (19)

1.一种用于数据传输的设备,包括:
处理单元;
存储器,所述存储器被耦合到所述处理单元并且存储用于由所述处理单元执行的指令,所述指令当由所述处理单元执行时,使得所述设备执行动作,所述动作包括:
基于要从所述设备向另一设备发送的远程直接存储器访问(RDMA)消息,生成至少包括第一分组的至少一个分组,所述设备与所述另一设备之间具有经由多个路径的RDMA连接,所述第一分组至少包括多个字段,所述多个字段包含用于在所述多个路径中的第一路径上传输所述第一分组的信息;
经由RDMA协议在所述多个路径上向所述另一设备发送所述至少一个分组,所述第一分组在所述第一路径上被发送;
在所述第一路径上从所述另一设备接收针对所述第一分组的第一肯定应答,所述第一肯定应答包括第七字段和第八字段,所述第七字段指示由所述第一路径上的分组转发设备生成的拥塞通知,所述拥塞通知指示所述分组转发设备检测到的所述第一路径的拥塞情况,所述第八字段指示在所述另一设备处接收到的分组的最大顺序序列号;以及
响应于接收到所述第一肯定应答,至少基于由所述第七字段指示的所述拥塞通知和由所述第八字段指示的所述最大顺序序列号来更新拥塞控制信息,所述拥塞控制信息指示所述多个路径的拥塞情况。
2.根据权利要求1所述的设备,其中所述多个字段包括:
第一字段,用于指示所述第一路径的标识符;
第二字段,用于指示所述第一分组的分组序列号;
第三字段,用于指示所述RDMA消息的消息序列号;以及
第四字段,用于指示所述第一分组在所述RDMA消息中的序号。
3.根据权利要求2所述的设备,其中发送所述至少一个分组包括:
获取指示所述多个路径的拥塞情况的所述拥塞控制信息;
基于所述拥塞控制信息来确定所述第一分组是否被允许发送;以及
响应于确定所述第一分组允许被发送,在所述第一路径上经由所述RDMA协议向所述另一设备发送所述第一分组。
4.根据权利要求3所述的设备,其中所述至少一个分组还包括所述第一分组后续的第二分组,并且发送所述至少一个分组包括:
响应于在所述第一路径上从所述另一设备接收到针对所述第一分组的所述第一肯定应答,更新所述拥塞控制信息;以及
基于更新后的拥塞控制信息来控制所述第二分组的发送。
5.根据权利要求4所述的设备,其中所述第一肯定应答至少包括:
第五字段,用于指示所述第一路径的所述标识符;以及
第六字段,用于指示所述第一分组的所述分组序列号。
6.根据权利要求5所述的设备,其中更新所述拥塞控制信息包括:
响应于接收到所述第一肯定应答,确定已经接收到肯定应答的分组的最大分组序列号;
确定针对所述至少一个分组的传输的乱序容忍程度;
基于所述最大分组序列号和所述乱序容忍程度,确定允许在所述第一路径上发送的分组的阈值序列号;以及
至少基于由所述第六字段指示的所述分组序列号和所述阈值序列号,更新所述拥塞控制信息。
7.根据权利要求6所述的设备,其中所述第一分组还包括第九字段,用于指示所述第一分组所依赖的传输顺序,并且发送所述至少一个分组包括:
至少基于所述拥塞控制信息和所述乱序容忍程度,确定用于发送所述第一分组的时间间隔;以及
响应于所述至少一个分组中紧接在所述第一分组之前的第三分组被发送,至少等待所述时间间隔才发送所述第一分组。
8.根据权利要求1所述的设备,所述动作还包括:
响应于从所述另一设备接收到否定应答,从所述至少一个分组中确定所述否定应答所针对的第四分组;
通过在所述第四分组中添加重传标记来处理所述第四分组;以及
在所述多个路径中的第二路径上经由所述RDMA协议向所述另一设备重传经处理的第四分组,在所述第二路径上先前接收到过肯定应答。
9.一种用于数据传输的设备,包括:
处理单元;
存储器,所述存储器被耦合到所述处理单元并且存储用于由所述处理单元执行的指令,所述指令当由所述处理单元执行时,使得所述设备执行动作,所述动作包括:
经由远程直接存储器访问(RDMA)协议在多个路径上从另一设备接收至少包括第一分组的至少一个分组,所述设备和所述另一设备具有经由所述多个路径的RDMA连接,
所述第一分组至少包括多个字段,所述多个字段包含用于在
所述多个路径中的第一路径上传输所述第一分组的信息;
响应于在所述第一路径上接收到所述第一分组,生成针对所述第一分组的第一肯定应答,其中所述第一肯定应答包括第七字段和第八字段,所述第七字段指示由所述第一路径上的分组转发设备生成的拥塞通知,所述拥塞通知指示所述分组转发设备检测到的所述第一路径的拥塞情况,所述第八字段指示在所述设备处接收到的分组的最大顺序序列号;以及
在所述第一路径上向所述另一设备发送所述第一肯定应答。
10.根据权利要求9所述的设备,其中所述至少一个分组基于RDMA消息被生成,并且所述多个字段包括:
第一字段,用于指示所述第一路径的标识符;
第二字段,用于指示所述第一分组的第一分组序列号;
第三字段,用于指示所述RDMA消息的消息序列号;以及
第四字段,用于指示所述第一分组在所述RDMA消息中的序号。
11.根据权利要求9所述的设备,所述第一肯定应答包括:
第五字段,用于指示所述第一路径的标识符;
第六字段,用于指示所述第一分组的第一分组序列号。
12.根据权利要求9所述的设备,所述动作还包括:
获取用于记录接收到的分组的状态的位图;
响应于在所述第一路径上接收到所述第一分组,确定所述位图中是否存在与所述第一分组相对应的位置;以及
响应于确定所述位图中存在与所述第一分组相对应的所述位置,在所述位置处更新与所述第一分组相关联的状态。
13.根据权利要求12所述的设备,所述动作还包括:
响应于确定所述位图中不存在与所述第一分组相对应的所述位置,基于所述位图来确定待重传的分组;
生成指示所述待重传的分组的否定应答;以及
在所述第一路径上向所述另一设备发送所述否定应答。
14.根据权利要求12所述的设备,其中所述至少一个分组基于RDMA消息被生成,并且所述动作还包括:
响应于所述位图指示与所述RDMA消息相关联的所述至少一个分组已被接收,将所述位图中关于所述至少一个分组的相应位置清空,以用于记录与其他RDMA消息相关联的分组的状态。
15.根据权利要求9所述的设备,所述动作还包括:
响应于经由所述RDMA协议在所述多个路径中的第二路径上接收到包括重传标记的第二分组,通过将所述重传标记添加到针对所述第二分组的第二肯定应答来生成所述第二肯定应答;以及
在所述第二路径上向所述另一设备发送所述第二肯定应答。
16.根据权利要求10所述的设备,所述动作还包括:
响应于接收到所述第一分组,确定用于在目标存储器中存储所述第一分组的地址;以及
将所述第一分组存储在所述地址处。
17.根据权利要求16所述的设备,其中所述第一分组还包括第九字段,用于指示所述第一分组所依赖的传输顺序,并且将所述第一分组存储在所述地址处包括:
响应于具有第二分组序列号的第三分组已被存储在所述目标存储器中,将所述第一分组存储在所述地址处,所述第二分组序列号小于所述第一分组序列号。
18.一种计算机实现的方法,包括:
基于要从第一设备向第二设备发送的远程直接存储器访问(RDMA)消息,生成至少包括第一分组的至少一个分组,所述第一设备与所述第二设备之间具有经由多个路径的RDMA连接,所述第一分组至少包括多个字段,所述多个字段包含用于在所述多个路径中的第一路径上传输所述第一分组的信息;
经由RDMA协议在所述多个路径上向所述第二设备发送所述至少一个分组,所述第一分组在所述第一路径上被发送;
在所述第一路径上从所述第二设备接收针对所述第一分组的第一肯定应答,所述第一肯定应答包括第七字段和第八字段,所述第七字段指示由所述第一路径上的分组转发设备生成的拥塞通知,所述拥塞通知指示所述分组转发设备检测到的所述第一路径的拥塞情况,所述第八字段指示在所述第二设备处接收到的分组的最大顺序序列号;以及
响应于接收到所述第一肯定应答,至少基于由所述第七字段指示的所述拥塞通知和由所述第八字段指示的所述最大顺序序列号来更新拥塞控制信息,所述拥塞控制信息指示所述多个路径的拥塞情况。
19.根据权利要求18所述的方法,其中发送所述至少一个分组包括:
获取指示所述多个路径的拥塞情况的所述拥塞控制信息;
基于所述拥塞控制信息来确定所述第一分组是否被允许发送;以及
响应于确定所述第一分组允许被发送,在所述第一路径上经由所述RDMA协议向所述第二设备发送所述第一分组。
CN201711352625.4A 2017-12-15 2017-12-15 多路径rdma传输 Active CN109936510B (zh)

Priority Applications (7)

Application Number Priority Date Filing Date Title
CN202211379280.2A CN115941616A (zh) 2017-12-15 2017-12-15 多路径rdma传输
CN201711352625.4A CN109936510B (zh) 2017-12-15 2017-12-15 多路径rdma传输
EP18839782.2A EP3707882B1 (en) 2017-12-15 2018-12-06 Multi-path rdma transmission
PCT/US2018/064148 WO2019118255A1 (en) 2017-12-15 2018-12-06 Multi-path rdma transmission
US16/765,389 US11308024B2 (en) 2017-12-15 2018-12-06 Multi-path RDMA transmission
EP22191007.8A EP4123997A3 (en) 2017-12-15 2018-12-06 Multi-path rdma transmission
US17/717,897 US11934340B2 (en) 2017-12-15 2022-04-11 Multi-path RDMA transmission

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201711352625.4A CN109936510B (zh) 2017-12-15 2017-12-15 多路径rdma传输

Related Child Applications (1)

Application Number Title Priority Date Filing Date
CN202211379280.2A Division CN115941616A (zh) 2017-12-15 2017-12-15 多路径rdma传输

Publications (2)

Publication Number Publication Date
CN109936510A CN109936510A (zh) 2019-06-25
CN109936510B true CN109936510B (zh) 2022-11-15

Family

ID=65228626

Family Applications (2)

Application Number Title Priority Date Filing Date
CN202211379280.2A Pending CN115941616A (zh) 2017-12-15 2017-12-15 多路径rdma传输
CN201711352625.4A Active CN109936510B (zh) 2017-12-15 2017-12-15 多路径rdma传输

Family Applications Before (1)

Application Number Title Priority Date Filing Date
CN202211379280.2A Pending CN115941616A (zh) 2017-12-15 2017-12-15 多路径rdma传输

Country Status (4)

Country Link
US (2) US11308024B2 (zh)
EP (2) EP3707882B1 (zh)
CN (2) CN115941616A (zh)
WO (1) WO2019118255A1 (zh)

Families Citing this family (24)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109981480A (zh) * 2017-12-27 2019-07-05 华为技术有限公司 一种数据传输方法及第一设备
WO2019169556A1 (zh) * 2018-03-06 2019-09-12 华为技术有限公司 一种报文发送的方法、装置和存储设备
US10917348B1 (en) * 2018-07-06 2021-02-09 Netronome Systems, Inc. Network interface device that sets an ECN-CE bit in response to detecting congestion at an internal bus interface
JP7053033B2 (ja) * 2018-10-11 2022-04-12 株式会社東芝 無線通信装置および方法
CN113748652A (zh) 2019-05-23 2021-12-03 慧与发展有限责任合伙企业 在自适应路由中使用来自相邻节点的负载信息的算法
CN110677220B (zh) * 2019-09-09 2022-06-14 无锡江南计算技术研究所 一种基于多轨冗余应答的rdma消息机制及其实现装置
US11296988B2 (en) * 2019-11-14 2022-04-05 Mellanox Technologies, Ltd. Programmable congestion control communication scheme
US11218413B2 (en) * 2019-11-14 2022-01-04 Mellanox Technologies, Ltd. Congestion control management method derived from packets at a network adapter
WO2021209131A1 (en) * 2020-04-16 2021-10-21 Huawei Technologies Co., Ltd. A system and method for handling out of order delivery transactions
US11296987B2 (en) * 2020-04-20 2022-04-05 Hewlett Packard Enterprise Development Lp Congestion management mechanism
WO2021223880A1 (en) * 2020-05-08 2021-11-11 Huawei Technologies Co., Ltd. Remote direct memory access with offset values
CN114090274A (zh) * 2020-07-31 2022-02-25 华为技术有限公司 网络接口卡、存储装置、报文接收方法和发送方法
US11509579B2 (en) * 2020-08-24 2022-11-22 Mellanox Technologies, Ltd. Gateway for remote direct memory access over converged ethernet
US11409685B1 (en) 2020-09-24 2022-08-09 Amazon Technologies, Inc. Data synchronization operation at distributed computing system
US11467992B1 (en) 2020-09-24 2022-10-11 Amazon Technologies, Inc. Memory access operation in distributed computing system
US11354258B1 (en) * 2020-09-30 2022-06-07 Amazon Technologies, Inc. Control plane operation at distributed computing system
WO2022170214A1 (en) * 2021-02-08 2022-08-11 Intel Corporation Congestion control for remote direct-memory access (rdma) in next-generation cellular networks
CN117203627A (zh) * 2021-08-04 2023-12-08 华为技术有限公司 用于远程直接内存访问的设备和方法
CN117813595A (zh) * 2021-08-12 2024-04-02 华为技术有限公司 用于远程直接存储器访问的设备和方法
CN113904976A (zh) * 2021-09-28 2022-01-07 新乡学院 基于rdma用于有损网络的多路径数据传输方法和装置
WO2023138789A1 (en) * 2022-01-24 2023-07-27 Huawei Technologies Co., Ltd. Methods and devices for network interface card (nic) object coherency (noc) messages
CN117424849A (zh) * 2022-07-26 2024-01-19 中兴智能科技南京有限公司 数据传输方法、装置、计算机设备及可读介质
US11909628B1 (en) * 2022-09-01 2024-02-20 Mellanox Technologies, Ltd. Remote direct memory access (RDMA) multipath
CN115633104B (zh) * 2022-09-13 2024-02-13 江苏为是科技有限公司 数据发送方法、数据接收方法、装置及数据收发系统

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102484819A (zh) * 2009-08-25 2012-05-30 瑞典爱立信有限公司 使用ecn机制以直接向基站发信号通知拥塞

Family Cites Families (19)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7010607B1 (en) * 1999-09-15 2006-03-07 Hewlett-Packard Development Company, L.P. Method for training a communication link between ports to correct for errors
US6594712B1 (en) * 2000-10-20 2003-07-15 Banderacom, Inc. Inifiniband channel adapter for performing direct DMA between PCI bus and inifiniband link
US7190667B2 (en) * 2001-04-26 2007-03-13 Intel Corporation Link level packet flow control mechanism
US7565454B2 (en) * 2003-07-18 2009-07-21 Microsoft Corporation State migration in multiple NIC RDMA enabled devices
US7400639B2 (en) * 2003-08-07 2008-07-15 Intel Corporation Method, system, and article of manufacture for utilizing host memory from an offload adapter
GB0407144D0 (en) * 2004-03-30 2004-05-05 British Telecomm Networks
CN101997644A (zh) * 2009-08-24 2011-03-30 华为技术有限公司 速率调整方法、系统、编码方式选择方法和装置
US8964757B2 (en) * 2009-12-18 2015-02-24 Qualcomm Incorporated HTTP optimization, multi-homing, mobility and priority
CN102045362B (zh) * 2010-12-21 2014-01-15 北京高森明晨信息科技有限公司 一种基于udp协议的数据传输方法和系统
US20120170586A1 (en) * 2010-12-31 2012-07-05 Zebra Imaging, Inc. Transmitting Data to Multiple Nodes
EP2772020B1 (en) * 2011-10-25 2020-06-10 Fourth Wall Media, Inc. Network bandwidth regulation using traffic scheduling
EP3278514B1 (en) * 2015-03-30 2019-03-06 British Telecommunications public limited company Data transmission
US9832125B2 (en) * 2015-05-18 2017-11-28 Dell Products L.P. Congestion notification system
US10509764B1 (en) * 2015-06-19 2019-12-17 Amazon Technologies, Inc. Flexible remote direct memory access
CN108353074B (zh) * 2015-11-16 2021-01-26 瑞典爱立信有限公司 用于拥塞控制的方法、多点控制单元和计算机可读装置
US10498654B2 (en) * 2015-12-28 2019-12-03 Amazon Technologies, Inc. Multi-path transport design
EP3731487B1 (en) * 2015-12-29 2022-07-06 Amazon Technologies, Inc. Networking technologies
CN107493238A (zh) * 2016-06-13 2017-12-19 华为技术有限公司 一种网络拥塞控制方法、设备及系统
CN110022264B (zh) * 2018-01-08 2020-09-08 华为技术有限公司 控制网络拥塞的方法、接入设备和计算机可读存储介质

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102484819A (zh) * 2009-08-25 2012-05-30 瑞典爱立信有限公司 使用ecn机制以直接向基站发信号通知拥塞

Also Published As

Publication number Publication date
US11308024B2 (en) 2022-04-19
EP4123997A2 (en) 2023-01-25
EP3707882A1 (en) 2020-09-16
CN109936510A (zh) 2019-06-25
US11934340B2 (en) 2024-03-19
EP3707882B1 (en) 2022-09-28
EP4123997A3 (en) 2023-03-22
US20220309025A1 (en) 2022-09-29
US20200334195A1 (en) 2020-10-22
WO2019118255A1 (en) 2019-06-20
CN115941616A (zh) 2023-04-07

Similar Documents

Publication Publication Date Title
CN109936510B (zh) 多路径rdma传输
US20220311544A1 (en) System and method for facilitating efficient packet forwarding in a network interface controller (nic)
Lu et al. {Multi-Path} transport for {RDMA} in datacenters
CN110661723B (zh) 一种数据传输方法、计算设备、网络设备及数据传输系统
US8996718B2 (en) TCP-aware receive side coalescing
US20060203730A1 (en) Method and system for reducing end station latency in response to network congestion
US20140153574A1 (en) Notification by network element of packet drops
US20070291782A1 (en) Acknowledgement filtering
JP2019106697A (ja) 相互接続ネットワークでのメッセージ再送遅延を動的に管理するための方法及びデバイス
US8054847B2 (en) Buffer management in a network device

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