用于数据传输的方法和RDMA网卡
技术领域
本说明书的实施例涉及信息技术领域,并且更具体地,涉及用于数据传输的方法、RDMA网卡和计算设备。
背景技术
RDMA技术可以将数据从一个主机的存储区直接搬移到另一主机的存储区中,而不需要操作系统和中央处理器(Central Processing Unit,CPU)的参与,从而能够极大地降低数据处理时延并且提升传输性能。因此,使用RDMA技术来实现网络数据传输的加速,正在逐步成为研究的热点之一。
发明内容
考虑到现有技术的上述问题,本说明书的实施例提供了用于数据传输的方法、RDMA网卡和计算设备。
一方面,本说明书的实施例提供了一种用于数据传输的方法,所述方法由第一主机的第一RDMA网卡执行,所述方法包括:从所述第一主机的主机存储器获取待发送的m个数据包,其中,m为正整数;向第二主机的第二RDMA网卡发送所述m个数据包,并且将所述m个数据包备份到集成在所述第一RDMA网卡上的网卡存储器中;如果确定所述第二RDMA网卡没有接收到所述m个数据包中的n个数据包,则从所述网卡存储器中获取所备份的n个数据包,其中,n为正整数;向所述第二RDMA网卡重传所备份的n个数据包。
另一方面,本说明书的实施例提供了一种用于数据传输的方法,其中,所述方法由第二主机的第二RDMA网卡执行,所述方法包括:与第一主机的第一RDMA网卡进行通信,以便从所述第一RDMA网卡接收m个数据包,其中,所述m个数据包被所述第一RDMA网卡备份到集成在所述第一RDMA网卡上的第一网卡存储器中,m为正整数;如果确定没有接收到所述m个数据包中的n个数据包,则进行以下操作:将所述m个数据包中的已经接收到的数据包存储到集成在所述第二RDMA网卡上的第二网卡存储器中,并且等待接收所述第一RDMA网卡所重传的n个数据包,其中,所重传的n个数据包是所述第一RDMA网卡从所述第一网卡存储器中获取的,n为正整数;在接收到所重传的n个数据包之后,将所述已经接收到的数据包与所重传的n个数据包一起传送到所述第二主机的主机存储器。
另一方面,本说明书的实施例提供了一种RDMA网卡,其中,所述RDMA网卡位于第一主机处,所述RDMA网卡包括:第一获取单元、备份单元、发送单元以及第二获取单元;
所述第一获取单元被配置为:从所述第一主机的主机存储器获取待发送的m个数据包,其中,m为正整数;所述备份单元被配置为:将所述m个数据包备份到集成在所述RDMA网卡上的网卡存储器中;所述发送单元被配置为:向第二主机的第二RDMA网卡发送所述m个数据包;所述第二获取单元被配置为:如果确定所述第二RDMA网卡没有接收到所述m个数据包中的n个数据包,则从所述网卡存储器中获取所备份的n个数据包,其中,n为正整数;所述发送单元还被配置为:向所述第二RDMA网卡重传所备份的n个数据包。
另一方面,本说明书的实施例提供了一种RDMA网卡,其中,所述RDMA网卡位于第二主机,所述RDMA网卡包括:通信单元,被配置为:与第一主机的第一RDMA网卡进行通信,以便从所述第一RDMA网卡接收m个数据包,其中,所述m个数据包被所述第一RDMA网卡备份到集成在所述第一RDMA网卡上的第一网卡存储器中,m为正整数;数据包管理单元,被配置为:如果确定没有接收到所述m个数据包中的n个数据包,则进行以下操作:将所述m个数据包中的已经接收到的数据包存储到集成在所述RDMA网卡上的第二网卡存储器中,并且等待接收所述第一RDMA网卡所重传的n个数据包,其中,所重传的n个数据包是所述第一RDMA网卡从所述第一网卡存储器中获取的,n为正整数;传送单元,被配置为:在所述通信单元接收到所重传的n个数据包之后,将所述已经接收到的数据包与所重传的n个数据包一起传送到所述第二主机的主机存储器。
另一方面,本说明书的实施例提供了一种计算设备,包括:上层应用、主机存储器、以及RDMA网卡;其中,所述上层应用将要发送的m个数据包存储到所述主机存储器,并且向所述RDMA网卡发送与所述m个数据包相关联的指令,m为正整数;所述RDMA网卡集成有网卡存储器并且根据所述指令来实现上述由第一RDMA网卡执行的方法。
另一方面,本说明书的实施例提供了一种计算设备,包括:上层应用、主机存储器、以及RDMA网卡;其中,所述RDMA网卡集成有网卡存储器并且实现上述由第二RDMA网卡执行的方法。所述RDMA网卡向所述上层应用发送与传送到所述主机存储器的m个数据包相关联的指令,m为正整数;所述上层应用根据所述指令来对所述m个数据包进行处理。
在该技术方案中,由于RDMA网卡可以在集成在其上的网卡存储器中备份要发送的数据包,因此在需要重传时能够快速地获取要重传的数据包,而无需再次访问主机存储器,由此不仅能够减少主机的带宽(例如,PCIe带宽)占用,而且能够极大地提升重传效率以及重传性能。这样,能够显著增强RDMA网卡的丢包容忍能力,使得能够在有损网络上有效地实现RDMA技术。
附图说明
通过结合附图对本说明书的实施例的更详细的描述,本说明书的实施例的上述以及其它目的、特征和优势将变得更加明显,其中,在本说明书的实施例中,相同的附图标记通常代表相同的元素。
图1是根据一个实施例的用于数据传输的方法的示意性流程图。
图2是根据一个实施例的用于数据传输的方法的示意性流程图。
图3A是根据一个实施例的用于数据传输的场景的一个例子的示意图。
图3B是根据一个实施例中的用于数据传输的过程的示意性流程图。
图4是根据一个实施例的RDMA网卡的示意性框图。
图5是根据一个实施例的RDMA网卡的示意性框图。
图6是根据一个实施例的计算设备的结构示意图。
图7是根据一个实施例的计算设备的结构示意图。
具体实施方式
现在将参考各实施例讨论本文描述的主题。应当理解的是,讨论这些实施例仅是为了使得本领域技术人员能够更好地理解并且实现本文描述的主题,并非是对权利要求书中所阐述的保护范围、适用性或者示例的限制。可以在不脱离权利要求书的保护范围的情况下,对所讨论的元素的功能和排列进行改变。各个实施例可以根据需要,省略、替换或者添加各种过程或组件。
由于RDMA技术在数据搬移过程中不需要操作系统和CPU的参与,因此,使用RDMA技术来加速网络数据传输正在逐步成为研究的热点之一。
目前,通常在硬件网卡上实现RDMA技术,这种网卡可以被称为RDMA网卡。RDMA网卡通常可以通过外围组件互连(Peripheral Component Interconnect,PCIe)与主机存储器连接,从而实现对主机存储器的直接访问。网卡通过PCIe访问主机存储器的代价通常是比较高的,因此当前业界使用的RDMA技术通常要求保证网络无损(即网络是不丢包的),这是因为当发生丢包时,RDMA网卡需要重传从丢失的数据包开始后续的所有数据包,那么RDMA网卡需要通过PCIe重新从主机存储器获取这些数据包,这会严重影响数据传输效率。因此,保证网络无损可以大大减小这种重传的概率。
然而,当前数据中心保证网络无损的目的通常是通过使能流控机制来达到,使能流控会大大增加数据中心的运维成本,同时会带来潜在的问题(例如拥塞扩散等);同时,即使使能了流控,由于物理链路上误码等因素仍然很难避免完全不丢包。因此,期望的是提升RDMA技术对于丢包的容忍能力。
鉴于此,本说明书提供了一种用于数据传输的技术方案。在本文中,为了便于描述,将发送数据的主机称为第一主机,并且将接收数据的主机称为第二主机。
第一主机可以包括用于实现RDMA技术的第一RDMA网卡,并且还可以包括主机存储器。例如,第一RDMA网卡可以通过PCIe与第一主机的主机存储器进行连接,从而对该主机存储器进行数据存取。此外,第一RDMA网卡还可以具有可编程功能,比如具有现场可编程门阵列(Field Programmable Gate Array,FPGA)。例如,通过对FPGA进行编程,使得第一RDMA网卡可以实现本文描述的各种操作。
第二主机也可以包括用于实现RDMA技术的第二RDMA网卡以及主机存储器。例如,第二RDMA网卡可以通过PCIe与第二主机的主机存储器进行连接,从而对该主机存储器进行数据存取。第二RDMA网卡也可以具有可编程功能,比如具有FPGA。例如,通过对FPGA进行编程,使得第二RDMA网卡可以实现本文描述的各种操作。
此外,第一RDMA网卡和第二RDMA网卡可以彼此进行通信,从而实现数据传输。
第一RDMA网卡可以集成有存储器。为了便于描述,本文中将该存储器称为网卡存储器。例如,网卡存储器可以是动态随机存取存储器(Dynamic Random Access Memory,DRAM)或任何其它适用的存储器。本说明书对此不作限定。第一RDMA网卡的网卡存储器可以用于对要发送的数据包进行备份,这样在需要进行重传时,第一RDMA网卡可以直接从网卡存储器中获取已经备份的数据包,而无需通过PCIe再次从主机存储器中获取要重传的数据包。
可见,在该技术方案中,由于RDMA网卡可以在集成在其上的网卡存储器中备份要发送的数据包,因此在需要重传时能够快速地获取要重传的数据包,而无需再次访问主机存储器,由此不仅能够减少主机的带宽(例如,PCIe带宽)占用,而且能够极大地提升重传效率以及重传性能。这样,能够显著增强RDMA网卡的丢包容忍能力,使得能够在有损网络上有效地实现RDMA技术。
此外,通过在RDMA网卡的网卡存储器中进行数据备份,能够在硬件层面上实现滑动窗口和流控机制,从而能够减少RDMA流量对网络的冲击,并且降低网络拥塞的概率。
另外,第二RDMA网卡也可以集成有网卡存储器。第二RDMA网卡的网卡存储器可以用于对接收到的数据包进行缓存。例如,当发生丢包时,第二RDMA网卡可以将已经接收到的数据包缓存到网卡存储器中;而在接收到所重传的数据包时,将所重传的数据包以及先前已经接收到的数据包一起传送到第二主机的主机存储器。这样,对于第一RDMA网卡而言,其可以仅重传丢失的数据包,而无需重传后续所有的数据包,从而能够极大地减少要重传的数据包数量,从而有效地缩短重传时间并且提升重传性能。
下面将结合具体实施例来描述本说明书的技术方案。
图1是根据一个实施例的用于数据传输的方法的示意性流程图。例如,图1的方法可以由第一主机的第一RDMA网卡来执行。
如图1所示,在步骤102中,第一RDMA网卡可以从第一主机的主机存储器获取待发送的m个数据包。其中,m为正整数。
在步骤104中,第一RDMA网卡可以向第二主机的第二RDMA网卡发送m个数据包,并且将m个数据包备份到集成在第一RDMA网络上的网卡存储器中。
在步骤106中,如果第一RDMA网卡确定第二RDMA网卡没有接收到m个数据包中的n个数据包,则可以从网卡存储器中获取所备份的n个数据包。其中,n为正整数。
在步骤108中,第一RDMA网卡可以向第二RDMA网卡重传所备份的n个数据包。
可见,在该技术方案中,由于RDMA网卡可以在集成在其上的网卡存储器中备份要发送的数据包,因此在需要重传时能够快速地获取要重传的数据包,而无需再次访问主机存储器,由此不仅能够减少主机的带宽(例如,PCIe带宽)占用,而且能够极大地提升重传效率以及重传性能。这样,能够显著增强RDMA网卡的丢包容忍能力,使得能够在有损网络上有效地实现RDMA技术。
该方案实际上是在硬件层面上实现了滑动窗口和流控机制,由此能够减少RDMA流量对网络的冲击,并且降低网络拥塞的概率。
在一个实施例中,在步骤102中,在需要向第二主机发送m个数据包时,第一主机的上层应用可以将这m个数据包存放在第一主机的主机存储器中。此外,上层应用可以向第一RDMA网卡发送关于需要发送的数据包的指令。在接收到指令时,第一RDMA网卡可以从第一主机的主机存储器获取待发送的m个数据包。
在一个实施例中,在步骤104中,第一RDMA网卡可以向第二主机的第二RDMA网卡发送这m个数据包。此外,第一RDMA网卡可以将这m个数据包备份到集成在第一RDMA网卡上的网卡存储器中。例如,如前所述,该网卡存储器可以是DRAM或任何其它适当类型的存储器。
然后,第一RDMA网卡可以确定第二RDMA网卡是否接收到这m个数据包。例如,第一RDMA网卡可以针对每个发送的数据包启动相应的定时器。如果在定时器到期之前,第一RDMA网卡从第二RDMA网卡接收到针对相应数据包的确认(Acknowledge,ACK)响应,则可以确定第二RDMA网卡已经接收到该相应的数据包。而如果在定时器到期时,第一RDMA网卡还没有从第二RDMA网卡接收到针对相应数据包的ACK响应,则可以认为第二RDMA网卡没有接收到该相应的数据包。
再例如,第二RDMA网卡可以针对没有接收到的数据包向第一RDMA网卡返回否定确认(Negative-Acknowledgment,NACK)响应。这样,第一RDMA网卡可以基于NACK响应来确定第二RDMA网卡没有接收到哪些数据包。
应当理解的是,上述针对数据包的ACK响应或NACK响应可以采用多种形式来实现。例如,可以针对每个数据包发送一个消息,其指示ACK或NACK响应。或者,可以针对若干数据包发送一个消息,该消息可以包括分别与这些数据包相对应的ACK或NACK响应。
例如,在上述技术方案中,第一RDMA网卡可以确定第二RDMA网卡没有接收到这m个数据包中的n个数据包。如前所述,在一个实施例中,第一RDMA网卡在预定时长内没有从第二RDMA网卡接收到针对这n个数据包的ACK响应,则第一RDMA网卡可以确定第二RDMA网卡没有接收到这n个数据包。例如,预定时长可以是针对n个数据包中的每个数据包的定时器的时长。预定时长可以是根据实际应用场景等各种因素来预先确定的。
在另一实施例中,第一RDMA网卡可以从第二RDMA网卡接收针对n个数据包的NACK响应。这样,第一RDMA网卡可以确定第二RDMA网卡没有接收到这n个数据包。
第二RDMA网卡没有接收到数据包可能是由于多种原因造成的,比如在通过网络传输的过程中数据包丢失,或者由于误码、第二主机的接收能力不足而造成未能成功接收到数据包等等。
在这种情况下,第一RDMA网卡需要向第二RDMA网卡重传没有成功接收到的n个数据包。此时,由于第一RDMA网卡在其网卡存储器中备份了已经发送的m个数据包,因此第一RDMA网卡可以直接从其网卡存储器中获取要重传的n个数据包,而无需通过例如PCIe再次访问第一主机的主机存储器。这样,不仅能够减少对主机的带宽占用,而且能够极大地缩短获取要重传的数据包所需要的时间,从而能够提升重传效率,并且有效地增强了RDMA网卡的丢包容忍能力。
此外,第一RDMA网卡可以在确定第二RDMA网卡已经接收到这m个数据包的情况下,从网卡存储器中删除所备份的m个数据包。
例如,如果在首次传输之后,第一RDMA网卡从第二RDMA网卡接收到针对这m个数据包的ACK响应,则可以确定第二RDMA网卡已经接收到这m个数据包。此时,第一RDMA网卡可以从网卡存储器中删除所备份的m个数据包。
再例如,如果在重传之后,第一RDMA网卡从第二RDMA网卡接收到针对所重传的n个数据包的ACK响应,则可以确认第二RDMA网卡已经接收到所有的m个数据包,则第一RDMA可以从网卡存储器中删除所备份的m个数据包。
可见,上述技术方案实际上提供了在网卡硬件层面的滑动窗口机制和流控机制,由此能够实现高效的数据重传。
上面图1是从发送端的RDMA网卡的角度来描述的。下面将描述接收端的RDMA网卡的操作。
图2是根据一个实施例的用于数据传输的方法的示意性流程图。例如,图2的方法可以由第二主机的第二RDMA网卡来执行。在该实施例中,为了便于描述,将集成在第一主机的第一RDMA网卡上的网卡存储器称为第一网卡存储器,而将集成在第二主机的第二RDMA网卡上的网卡存储器称为第二网卡存储器。
如图2所示,在步骤202中,第二RDMA网卡可以与第一主机的第一RDMA网卡进行通信,以便从第一RDMA网卡接收m个数据包。
这m个数据包可以被第一RDMA网卡备份到第一网卡存储器中。例如,第一RDMA网卡可以在发送m个数据包的同时,将其备份到第一网卡存储器中。m可以是正整数。
在步骤204中,如果第二RDMA网卡确定没有接收到m个数据包中的n个数据包,则第二RDMA网卡可以将m个数据包中的已经接收到的数据包存储到第二网卡存储器中,并且可以等待接收第一RDMA网卡所重传的n个数据包。
所重传的n个数据包可以是第一RDMA网卡从第一网卡存储器中获取的,n可以是正整数。
在步骤206中,第二RDMA网卡可以在接收到所重传的n个数据包之后,将先前已经接收到的并且存储在第二网卡存储器中的数据包与这n个数据包一起传送到第二主机的主机存储器。
在该技术方案中,由于在第二RDMA网卡中集成了网卡存储器,因此第二RDMA网卡能够在等待重传的数据包时将已经接收到的数据包存储在网卡存储器中,而在接收到所有数据包之后可以将接收到的所有数据包传送到主机存储器。这样,第一RDMA网卡可以仅重传第二RDMA网卡没有接收到的数据包,而无需重传从丢失的数据包开始后续的所有数据包,从而能够有效地减少要重传的数据包数量,并且能够有效地提升重传效率。
此外,由于第一RDMA网卡可以在其上集成的网卡存储器中备份要发送的数据包,因此在进行重传时无需再次访问主机存储器,由此不仅能够减少主机的带宽占用,而且能够极大地提升重传效率以及重传性能。
因此,该技术方案能够极大地增强RDMA网卡的丢包容忍能力,使得能够在有损网络上有效地实现RDMA技术。
在一个实施例中,第一网卡存储器可以是DRAM或任何其它适当类型的存储器。第二网卡存储器可以是DRAM或任何其它适当类型的存储器。
第二RDMA网卡可以采用多种方式来检测是否接收到m个数据包。例如,m个数据包可以具有一定的顺序,每个数据包可以包括相应的顺序编号。第二RDMA网卡可以根据接收到的数据包中的顺序编号来判断是否已经接收到这m个数据包。
例如,第二RDMA网卡可以确定没有接收到m个数据包的n个数据包。在一个实施例中,第二RDMA网卡可以向第一RDMA网卡发送针对n个数据包的NACK响应。在另一实施例中,第二RDMA网卡可以不发送针对n个数据包的ACK响应。例如,第一RDMA网卡可以确定在针对数据包的预定时长内没有从第二RDAM网卡接收到针对该数据包的ACK响应,则可以认为第二RDMA网卡没有接收到该数据包。
可见,上述技术方案提供了一种高效地实现RDMA网卡之间的数据重传机制。
下面将结合具体例子来描述本说明书的技术方案。应当理解的是,下面的例子仅是为了帮助本领域技术人员更好地理解上述技术方案,而非对其范围进行限制。
图3A是根据一个实施例的用于数据传输的场景的一个例子的示意图。
如图3A所示,第一主机302A可以包括上层应用、主机存储器和第一RDMA网卡。
例如,第一主机的上层应用可以将要发送的数据包存放在第一主机的主机存储器中,并且可以向第一RDMA网卡发送关于要发送的数据包的指令。第一RDMA网卡可以从第一主机的主机存储器中获取要发送的数据包,并且可以向第二RDMA网卡发送所获取的数据包。此外,第一RDMA网卡可以将所获取的数据包备份到集成到其上的DRAM中。如果需要进行重传,则第一RDMA网卡可以从其DRAM中获取要重传的数据包。
第二主机304A可以包括上层应用、主机存储器和第二RDMA网卡。
例如,第二RDMA网卡可以从第一RDMA网卡接收数据包。如果存在没有接收到的数据包,则第二RDMA网卡可以将已经接收到的数据包暂存到集成在其上的DRAM中。然后,第二RDMA网卡可以从第一RDAM网卡接收所重传的数据包。在接收到所有数据包之后,第二RDAM网卡可以将所有数据包传送到第二主机的主机存储器中。之后,第二RDAM网卡可以向第二主机的上层应用通知数据传输完成,比如向上层应用发送中断指令。然后,第二主机的上层应用可以对主机存储器中的相应数据包进行处理。
应当理解的是,为了描述的简单,在图3A的例子中将第一主机和第二主机示为包括三部分,但是在具体实现时,第一主机和第二主机还可以包括本领域已知的其它相关部分。本说明书对此不作限定。
下面将结合图3B的流程来描述图3A中的第一RDMA网卡和第二RDMA网卡的具体操作。应当理解的是,图3B中示出的流程仅是一个例子,并不对本说明书的技术方案的范围造成限制。
图3B是根据一个实施例中的用于数据传输的过程的示意性流程图。
如图3B所示,在步骤302B中,第一RDMA网卡可以从第一主机的主机存储器获取要发送的m个数据包。
在步骤304B中,第一RDMA网卡可以将m个数据包备份到集成在其上的DRAM中。
在步骤306B中,第一RDMA网卡可以向第二RDMA网卡发送m个数据包。
应当理解的是,此处虽然示出了先执行步骤304B,然后执行步骤306B,但在不同的场景下,可以并行地执行步骤304B和306B;或者可以先执行步骤306B,再执行步骤304B。本说明书对此不作限定。
在步骤308B中,第二RDMA网卡可以确定没有接收到其中的n个数据包。
在步骤310B中,第二RDMA网卡可以将m个数据包中的已经接收到的数据包存储到集成在其上的DRAM中。
在步骤312B中,第二RDMA网卡可以向第一RDMA网卡发送针对已经接收到的数据包的ACK响应以及针对没有接收到的n个数据包的NACK响应。
应当理解的是,此处虽然示出了先执行步骤310B,然后执行步骤312B,但在不同的场景下,可以并行地执行步骤310B和312B;或者可以先执行步骤312B,再执行步骤310B。本说明书对此不作限定。
在步骤314B中,第一RDMA网卡可以从其DRAM中获取要重传的n个数据包。
在步骤316B中,第一RDMA网卡可以向第二RDMA网卡发送在步骤314B中获取的n个数据包。
在步骤318B中,第二RDMA网卡可以确定接收到n个数据包,并且向第一RDMA网卡发送针对这n个数据包的ACK响应。
在步骤320B中,第二RDMA网卡可以将先前接收的并且存储在其DRAM中的数据包以及在步骤316B中接收的n个数据包一起传送到第二主机的主机存储器。
在步骤322B中,第一RDMA网卡可以确定第二RDMA网卡已经接收到所有的m个数据包,并且从其网卡存储器中删除所备份的m个数据包。
可见,在该技术方案中,由于发送端RDMA网卡可以在集成在其上的网卡存储器中备份要发送的数据包,而接收端RDMA网卡可以在等待重传的数据包时将已经接收到的数据包暂存在集成在其上的网卡存储器中,所以发送端RDMA网卡能够快速地获取并且重传接收端RDMA网卡没有接收到的数据包,从而能够极大地提升重传效率以及重传性能。该技术方案能够显著增强RDMA网卡的丢包容忍能力,使得能够在有损网络上有效地实现RDMA技术。
图4是根据一个实施例的RDMA网卡的示意性框图。例如,图4的RDMA网卡400可以是上述第一RDMA网卡。例如,RDMA网卡400可以通过软硬件的组合来实现。
RDMA网卡400可以包括第一获取单元402、发送单元404、备份单元406和第二获取单元408。
第一获取单元402可以从第一主机的主机存储器获取待发送的m个数据包,其中,m为正整数。发送单元404可以向第二主机的第二RDMA网卡发送m个数据包。备份单元406可以将m个数据包备份到集成在RDMA网卡400上的网卡存储器中。
如果第二获取单元408确定第二RDMA网卡没有接收到m个数据包中的n个数据包,则第二获取单元408从网卡存储器中获取所备份的n个数据包,其中,n为正整数。
发送单元404可以向第二RDMA网卡重传所备份的n个数据包。
可见,在该技术方案中,由于RDMA网卡可以在集成在其上的网卡存储器中备份要发送的数据包,因此在需要重传时能够快速地获取要重传的数据包,而无需再次访问主机存储器,由此不仅能够减少主机的带宽(例如,PCIe带宽)占用,而且能够极大地提升重传效率以及重传性能。这样,能够显著增强RDMA网卡的丢包容忍能力,使得能够在有损网络上有效地实现RDMA技术。
在一个实施例中,网卡存储器可以为DRAM。
在一个实施例中,第二获取单元408可以确定在预定时长内没有从第二RDMA网卡接收到针对n个数据包的ACK响应。或者,第二获取单元408可以确定从第二RDMA网卡接收到针对n个数据包的NACK响应。
在一个实施例中,如果备份单元406确定第二RDMA网卡已经接收到m个数据包,则备份单元406可以从网卡存储器中删除所备份的m个数据包。
RDMA网卡400的各个单元可以执行图1和图3A-3B的实施例中的相应步骤,因此,为了描述的简洁,RDMA网卡400的各个单元的具体操作和功能此处不再赘述。
图5是根据一个实施例的RDMA网卡的示意性框图。例如,图5的RDMA网卡500可以是上述第二RDMA网卡。比如,RDMA网卡500可以通过软硬件的组合来实现。
RDMA网卡500可以包括通信单元502、数据包管理单元504和传送单元506。
通信单元502可以与第一主机的第一RDMA网卡进行通信,以便从第一RDMA网卡接收m个数据包,其中,m个数据包被第一RDMA网卡备份到集成在第一RDMA网卡上的第一网卡存储器中,m为正整数。
如果数据包管理单元504确定通信单元502没有接收到m个数据包中的n个数据包,则数据包管理单元504可以将m个数据包中的已经接收到的数据包存储到集成在RDMA网卡500上的第二网卡存储器中,并且可以等待接收第一RDMA网卡所重传的n个数据包,其中,所重传的n个数据包是第一RDMA网卡从第一网卡存储器中获取的,n为正整数;
在通信单元502接收到所重传的n个数据包之后,传送单元504可以将已经接收到的数据包与所重传的n个数据包一起传送到第二主机的主机存储器。
在该技术方案中,由于在接收端RDMA网卡中集成了网卡存储器,因此接收端RDMA网卡能够在等待重传的数据包时将已经接收到的数据包存储在网卡存储器中,而在接收到所有数据包之后可以将接收到的所有数据包传送到主机存储器。这样,第一RDMA网卡可以仅重传没有接收到的数据包,而无需重传从丢失的数据包开始后续的所有数据包,从而能够有效地减少要重传的数据包数量,并且能够有效地提升重传效率。
此外,由于第一RDMA网卡可以在其上集成的网卡存储器中备份要发送的数据包,因此在进行重传时无需再次访问主机存储器,由此不仅能够减少主机的带宽占用,而且能够极大地提升重传效率以及重传性能。
在一个实施例中,第一网卡存储器可以为DRAM。第二网卡存储器可以为DRAM。
在一个实施例中,在数据包管理单元504确定没有接收到m个数据包中的n个数据包之后,通信单元502可以向第一RDMA网卡发送针对n个数据包的NACK响应,或者通信单元502可以不向第一RDMA网卡发送针对n个数据包的ACK响应。
RDMA网卡500的各个单元可以执行图2至3B的实施例中的相应步骤,因此,为了描述的简洁,RDMA网卡500的各个单元的具体操作和功能此处不再赘述。
图6是根据一个实施例的计算设备的结构示意图。如图6所示,计算设备600可以包括上层应用602、主机存储器604和RDMA网卡606。例如,计算设备600可以对应于上述第一主机。
上层应用602可以将要发送的m个数据包存储到主机存储器604,并且向RDMA网卡606发送与m个数据包相关联的指令。上层应用602和主机存储器604的具体功能可以参照前述实施例中的相应描述,此处不再赘述。
RDMA网卡606集成有网卡存储器,并且可以根据上述指令来实现上述第一RDMA网卡的功能。
计算设备600可以采用本领域任何适用的形式来实现,例如,其包括但不限于台式计算机、膝上型计算机、智能电话、平板计算机、消费电子设备、可穿戴智能设备等等。
图7是根据一个实施例的计算设备的结构示意图。如图7所示,计算设备700可以包括上层应用702、主机存储器704和RDMA网卡706。例如,计算设备700可以对应于上述第二主机。
RDMA网卡706可以集成有网卡存储器,并且可以实现上述第二RDMA网卡的功能。
此外,RDMA网卡706可以向上层应用发送关于传送到主机存储器704的m个数据包的指令。上层应用根据该指令来对m个数据包进行处理。
上层应用702和主机存储器704的具体功能可以参照前述实施例中的相应描述,此处不再赘述。
计算设备700可以采用本领域任何适用的形式来实现,例如,其包括但不限于台式计算机、膝上型计算机、智能电话、平板计算机、消费电子设备、可穿戴智能设备等等。
应当理解的是,本说明书中的各个实施例均采用递进的方式来描述,各个实施例之间相同或相似的部分相互参见即可,每个实施例重点说明的都是与其它实施例的不同之处。例如,对于上述关于装置的实施例、关于计算设备的实施例以及关于机器可读存储介质的实施例而言,由于它们基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
上文对本说明书特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
应当理解的是,对于本领域普通技术人员来说,对本说明书中的实施例进行的各种修改将是显而易见的,并且可以在不脱离权利要求书的保护范围的情况下,将本文所定义的一般性原理应用于其它变型。