CN116266800A - 组播传输方法、装置和系统 - Google Patents
组播传输方法、装置和系统 Download PDFInfo
- Publication number
- CN116266800A CN116266800A CN202111556558.4A CN202111556558A CN116266800A CN 116266800 A CN116266800 A CN 116266800A CN 202111556558 A CN202111556558 A CN 202111556558A CN 116266800 A CN116266800 A CN 116266800A
- Authority
- CN
- China
- Prior art keywords
- multicast
- data
- data packet
- request
- information
- 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.)
- Pending
Links
- 230000005540 biological transmission Effects 0.000 title claims abstract description 145
- 238000000034 method Methods 0.000 title claims abstract description 127
- 238000012545 processing Methods 0.000 claims description 45
- 238000004891 communication Methods 0.000 claims description 12
- 238000004590 computer program Methods 0.000 claims description 5
- 239000000523 sample Substances 0.000 claims description 3
- 239000000758 substrate Substances 0.000 claims 1
- 101150091539 SQE1 gene Proteins 0.000 description 60
- 101100371648 Caenorhabditis elegans usp-14 gene Proteins 0.000 description 53
- 101150090882 tgt-1 gene Proteins 0.000 description 53
- 102100026389 PHD finger-like domain-containing protein 5A Human genes 0.000 description 49
- 101000835860 Homo sapiens SWI/SNF-related matrix-associated actin-dependent regulator of chromatin subfamily B member 1 Proteins 0.000 description 32
- 102100025746 SWI/SNF-related matrix-associated actin-dependent regulator of chromatin subfamily B member 1 Human genes 0.000 description 32
- 101150041549 tgt-2 gene Proteins 0.000 description 30
- 101150031212 SQE2 gene Proteins 0.000 description 19
- 238000013461 design Methods 0.000 description 19
- 230000001360 synchronised effect Effects 0.000 description 19
- 230000004044 response Effects 0.000 description 17
- 230000006870 function Effects 0.000 description 16
- 101100096581 Panax ginseng SQE1 gene Proteins 0.000 description 15
- 101100079124 Arabidopsis thaliana NAC079 gene Proteins 0.000 description 13
- 230000008569 process Effects 0.000 description 12
- 238000005516 engineering process Methods 0.000 description 10
- 238000010586 diagram Methods 0.000 description 9
- 238000005538 encapsulation Methods 0.000 description 9
- 101100011894 Arabidopsis thaliana SQE3 gene Proteins 0.000 description 8
- 230000008878 coupling Effects 0.000 description 5
- 238000010168 coupling process Methods 0.000 description 5
- 238000005859 coupling reaction Methods 0.000 description 5
- 101100011886 Arabidopsis thaliana SQE4 gene Proteins 0.000 description 4
- 101100172614 Arabidopsis thaliana SQE5 gene Proteins 0.000 description 4
- 238000013473 artificial intelligence Methods 0.000 description 4
- 230000001427 coherent effect Effects 0.000 description 3
- 238000012790 confirmation Methods 0.000 description 3
- 230000001186 cumulative effect Effects 0.000 description 3
- 230000003993 interaction Effects 0.000 description 3
- 125000004122 cyclic group Chemical group 0.000 description 2
- 230000007246 mechanism Effects 0.000 description 2
- 230000005012 migration Effects 0.000 description 2
- 238000013508 migration Methods 0.000 description 2
- 238000005192 partition Methods 0.000 description 2
- 238000006467 substitution reaction Methods 0.000 description 2
- 238000012546 transfer Methods 0.000 description 2
- 238000003491 array Methods 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000002349 favourable effect Effects 0.000 description 1
- 229940124524 integrase inhibitor Drugs 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 238000004806 packaging method and process Methods 0.000 description 1
- 230000000737 periodic effect Effects 0.000 description 1
- 230000002093 peripheral effect Effects 0.000 description 1
- 238000011084 recovery Methods 0.000 description 1
- 230000010076 replication Effects 0.000 description 1
- 230000007958 sleep Effects 0.000 description 1
- 239000007787 solid Substances 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- -1 that is Proteins 0.000 description 1
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04B—TRANSMISSION
- H04B7/00—Radio transmission systems, i.e. using radiation field
- H04B7/14—Relay systems
- H04B7/15—Active relay systems
- H04B7/185—Space-based or airborne stations; Stations for satellite systems
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L12/00—Data switching networks
- H04L12/02—Details
- H04L12/16—Arrangements for providing special services to substations
- H04L12/18—Arrangements for providing special services to substations for broadcast or conference, e.g. multicast
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L12/00—Data switching networks
- H04L12/54—Store-and-forward switching systems
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L49/00—Packet switching elements
- H04L49/90—Buffering arrangements
- H04L49/901—Buffering arrangements using storage descriptor, e.g. read or write pointers
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L61/00—Network arrangements, protocols or services for addressing or naming
- H04L61/50—Address allocation
- H04L61/5069—Address allocation for group communication, multicast communication or broadcast communication
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Physics & Mathematics (AREA)
- Astronomy & Astrophysics (AREA)
- Aviation & Aerospace Engineering (AREA)
- General Physics & Mathematics (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
本申请提供了一种组播传输方法、装置和系统。该方法应用于第一计算设备,该第一计算设备包括第一输入输出IO设备,该方法包括:该第一IO设备获取第一请求;该第一IO设备根据第一信息和上述第一请求,生成第一数据包,该第一信息包括组播信息,组播信息用于标识组播组的组播成员与该第一计算设备之间的链路连接,该第一数据包携带组播信息和第一请求对应的待写入数据;该第一IO设备向该组播组的组播成员发送第一数据包。上述方法可以实现可靠和高效的组播数据传输。
Description
技术领域
本申请涉及网络通信技术领域,更具体地,涉及一种组播传输方法、装置和系统。
背景技术
组播(multicast)技术是一种单个发送端与多个接收端之间进行网络通信的技术。组播技术以组播组地址作为数据包的目的地址,建立组播树,并利用组播树以实现点到多点(point to multi-point,P2MP)的数据转发,有利于降低带宽消耗和提高服务质量。尤其适合在计算集群中有广泛应用。
传统的组播传输方法是基于计算设备的主机(host)实现的,该实现过程中需要主机对待发送的数据包进行复制,同时还需要主机的操作系统的参与,使得该方法存在复杂度高、延时大和传输效率低的问题。
因此,亟需一种组播传输方法,以实现高效的组播数据传输。
发明内容
本申请提供一种组播传输方法、装置和系统,该方法可以实现可靠和高效的组播数据传输。
第一方面,提供了一种组播传输方法,应用于第一计算设备,该第一计算设备包括第一输入输出IO设备,该方法包括:该第一IO设备获取第一请求;该第一IO设备根据第一信息和该第一请求,生成第一数据包,该第一信息包括组播信息,该组播信息用于标识组播组的组播成员与该第一计算设备之间的链路连接,该第一数据包携带该组播信息和该第一请求对应的待写入数据;该第一IO设备向该组播组的组播成员发送该第一数据包。
其中,一个组播组可以包括至少2个组播成员。组播信息用于标识组播组的组播成员与该第一计算设备之间的链路连接,即该组播信息用于标识至少2个链路连接。待写入数据可以是第一请求对应的数据的全部数据,即待写入数据的数据量与第一请求对应的数据的数据量相同。可选的,待写入数据还可以是第一请求对应的数据中的一部分数据,即待写入数据的数据量小于第一请求对应的数据的数据量。
上述技术方案中,第一IO设备可以根据第一请求和第一信息进行数据封装生成第一数据包,并向组播组的组播成员发送该第一数据包,而不是通过第一主机包括的处理器根据工作请求进行封装生成数据包,避免了传统组播传输方法中存在复杂度高、延时大和传输效率低的问题。通过设置第一IO设备发送的第一数据包携带用于标识组播组的组播成员与该第一计算设备之间的链路连接的组播信息,能够确保组播数据的可靠传输。因此,本申请提供的组播传输方法可以实现可靠和高效的组播数据传输。
一种可能的设计中,该组播信息包括组播标识符,该组播标识符是第一计算设备与组播组建立链路连接时获得的。
其中,组播组可以包括至少2个组播成员(记为,组播成员1和组播成员2),组播标识符可以标识至少两条链路连接(记为,链路1和链路2),即链路1与组播成员1和第一计算设备关联,链路2与组播成员2和第一计算设备关联。
上述技术方案中,通过组播信息包括的组播标识符,可以标识组播组的组播成员与该第一计算设备之间的链路连接。
在另一种可能的设计中,该第一数据包还包括端口号,端口号用于指示传输该第一数据包的方式为组播传输方式。
可选的,该端口号可以为第一数据包的目的端口号。
在另一种可能的设计中,该第一计算设备还包括第一主机,该第一IO设备与该第一主机通过IO网络通信,该第一请求为该第一主机包括的处理器中运行的应用程序发送的请求。
在另一种可能的设计中,该第一信息还包括第一窗口信息,该第一窗口信息用于指示该组播组的组播成员在第一时间段内能够处理的数据的最小数量。
上述技术方案中,第一IO设备生成第一数据包时,考虑了组播组的组播成员在第一时间段内能够处理的数据的最小数量,可以通过控制第一数据包携带的数据量,实现网络的流量控制。
可选的,第一IO设备还可以对窗口信息进行更新。在一个示例性,该第一IO设备还可以执行以下操作:将第二窗口信息更新为该第一窗口信息,该第二窗口信息是该组播组的组播成员在该第一时间段前的一个时间段内能够处理的数据的最小数量。第二窗口信息指示的组播组的组播成员能够处理的数据的最小数量,与第一窗口信息指示的组播组的组播成员能够处理的数据的最小数量不同。这种实现方式中,通过设置第一IO设备在预设时间段内及时地对窗口信息进行更新,可以准确地控制第一数据包携带的数据量,实现网络的流量控制。
在另一种可能的设计中,该第一IO设备发送该第一数据包采用的传输协议为TCP/IP。
上述技术方案中,提供了一种基于TCP/IP的组播传输的方法,且该方法避免了传统组播传输方法中存在复杂度高、延时大和传输效率低的问题,可以实现可靠和高效的组播数据传输。
在另一种可能的设计中,该待写入数据为该第一请求对应的数据中的一部分数据,该第一信息还包括指示信息,该指示信息用于指示对该待写入数据进行封装,在该第一IO设备根据第一信息和该第一请求,生成第一数据包之前,该方法还包括:该第一IO设备向该组播组的组播成员发送IO写命令,该IO写命令用于指示将该第一请求对应的数据存储至第一注册区域MR中,该第一请求对应的数据位于该第一计算设备包括的第一主机包括的存储器中,该第一MR为第二主机包括的存储器中的存储区域注册到第二IO设备的存储器中的存储区域,第二计算设备包括该第二主机和该第二IO设备,该第二计算设备为该组播组的组播成员;该第一IO设备接收该组播组的组播成员发送的该指示信息。其中,该待写入数据的数据量小于该第一请求对应的数据的数据量。
上述技术方案中,第一IO设备可以主动请求向组播组的组播成员的存储区域中写入数据,以及根据接收到的组播组的组播成员发送的指示信息进行封装生成第一数据包,并向组播组的组播成员发送第一数据包,这样可以有效降低组播组的组播成员侧发生拥塞的概率,以更好地满足组播组的组播成员的需求。
在另一种可能的设计中,该IO写命令包括第二密钥值和第二位置信息,该第二密钥值用于识别该第二MR,该第二位置信息用于指示该待写入数据在该第二MR中的位置。
在另一种可能的设计中,该第一信息还包括信用值,该信用值用于指示该组播组的组播成员在第二时间段内能够处理的请求的最小数量,该第一数据包的基本传输头部BTH携带该信用值。
上述技术方案中,第二IO设备将信用值发送给第一IO设备后,使得第一IO设备生成第一数据包时考虑了组播组的组播成员在第一时间段内能够处理的请求的最小数量,有利于实现网络的流量控制。
在另一种可能的设计中,该第一IO设备获取第一请求,包括:该第一IO设备接收该组播组的组播成员发送的该第一请求,该第一请求用于指示将位于第二MR中的该待写入数据存储至该组播组的组播成员的存储区域,该第二MR为第一主机包括的存储器中的存储区域注册到该第一IO设备的存储器中的存储区域,该第一计算设备还包括该第一主机。
上述技术方案中,第一IO设备根据组播组的组播成员的第一请求,向该组播组的组播成员发送第一数据包,该第一数据包携带有该第一请求对应的待写入数据和该组播组的组播信息,可以实现可靠和高效的组播数据传输。
在另一种可能的设计中,该第一请求包括第一密钥值,第一位置信息和预设字段,该第一密钥值用于识别该第二MR,该第一位置信息用于指示该待写入数据在该第二MR中的位置,该预设字段的取值用于指示该第一请求。
在另一种可能的设计中,该第一IO设备发送该第一数据包采用的传输协议为基于以太网的远程直接数据存取RDMA。
上述技术方案中,提供了一种基于RDMA的组播传输方法,该方法可以实现可靠和高效的组播数据传输。
在另一种可能的设计中,该第一IO设备向该组播组的组播成员发送该第一数据包,包括:该第一IO设备向转发设备发送该第一数据包,该转发设备用于对该第一数据包进行复制,并将复制后的该第一数据包转发至该组播组的组播成员,该组播组的组播成员与该第一计算设备之间的链路连接包括该转发设备。
上述技术方案中,第一IO设备不对第一数据包进行复制,有利于降低第一IO设备的资源开销。
在另一种可能的设计中,该组播组的组播成员包括第二计算设备,该第二计算设备与该第一计算设备不同,在该第一IO设备向该组播组的组播成员发送该第一数据包之后,该方法还包括:该第一IO设备接收该第二计算设备发送的第二请求,该第二请求用于请求获取该第一数据包携带的该第一请求对应的该待写入数据;该第一IO设备向该第二计算设备发送第二数据包,该第二数据包携带该待写入数据,且该第二数据包包括的端口号用于指示传输该第二数据包的传输方式为单播传输方式。
上述技术方案中,第一IO设备根据第二请求向第二计算设备发送第二数据包,使得未成功接收到第一数据包的组播成员接收该第二数据包,可以保证组播数据的可靠传输。
在另一种可能的设计中,该组播组的组播成员仅包括第二计算设备和第三计算设备,该第三计算设备,该第二计算设备和该第一计算设备中的任意两个计算设备不同,该方法还包括:在该第一IO设备接收到第一完成消息和第二完成消息后,该第一IO设备向该第一主机包括的处理器发送第三完成消息,该第三完成消息用于指示该第一请求已成功执行,该第一完成消息用于指示该第二计算设备已成功执行该第一请求,该第二完成消息用于指示该第三计算设备已成功执行该第一请求。
上述技术方案中,第一IO设备在接收到组播组的所有组播成员发送的完成消息(即,第一完成消息和第二完成消息)后,才会向第一主机包括的处理器反馈第一请求的处理结果,而不是每次接收到一个组播成员发送的完成消息后就反馈该完成消息对应的请求的处理结果,这样可以提高IO处理的速率,以实现高效的组播数据传输。
上述第一方面所描述的第一IO设备包括网络接口控制器、智能网络接口控制器、主机总线适配器、主机通道适配器、加速器、数据处理器、图像处理器、人工智能设备、软件定义基础设施中的至少一种。上述第一方面所描述的IO网络包括高速串行计算机扩展总线标准PCIe、计算机快速链接CXL、缓存一致互联协议CCIX、统一总线Ubus中任意一种。
第二方面,提供了一种组播传输方法,应用于第二计算设备,该第二计算设备为组播组的组播成员,该第二计算设备包括第二输入输出IO设备和第二主机,该第二IO设备与该第二主机通过IO网络通信,该方法包括:该第二IO设备接收第一IO设备发送的第一数据包,该第一数据包携带组播信息和第一请求对应的待写入数据,该组播信息用于标识组播组的组播成员与第一计算设备之间的链路连接,第一计算设备包括该第一IO设备,该第一计算设备与该第二计算设备不同;该第二IO设备根据该第一数据包,将该待写入数据存储至该第二主机的存储器中。
上述技术方案中,第二IO设备接收第一IO设备发送的第一数据包,该第一数据包携带有组播信息和第一请求对应的待写入数据,可以实现可靠和高效的组播数据传输。
在一种可能的实现方式中,该方法还包括:该第二IO设备向该第一IO设备发送第二请求,该第二请求用于请求获取该第一数据包携带的该第一请求对应的该待写入数据。
上述技术方案中,在第二IO设备未能成功接收到第一数据包的情况下,第二IO设备会主动向第一IO设备发送第二请求,以获取未成功接收的数据,可以实现可靠的数据传输。
上述第二方面所描述的第二IO设备包括网络接口控制器、智能网络接口控制器、主机总线适配器、主机通道适配器、加速器、数据处理器、图像处理器、人工智能设备、软件定义基础设施中的至少一种。上述第二方面所描述的IO网络包括高速串行计算机扩展总线标准PCIe,内存互联CXL,统一总线Ubus中任意一种。
第三方面,提供了一种组播传输装置,该装置包括收发单元和处理单元,该收发单元,用于获取第一请求;该处理单元,用于根据第一信息和该第一请求,生成第一数据包,该第一信息包括组播信息,该组播信息用于标识组播组的组播成员与该组播传输装置之间的链路连接,该第一数据包携带该组播信息和该第一请求对应的待写入数据;该收发单元,还用于向该组播组的组播成员发送该第一数据包。
在一种可能的设计中,该组播信息包括组播标识符,该组播标识符是该组播组与该组播传输装置建立链路连接时获得的。
在另一种可能的设计中,该第一数据包还包括端口号,该端口号用于指示传输该第一数据包的方式为组播传输方式。
在另一种可能的设计中,该第一信息还包括第一窗口信息,该第一窗口信息用于指示该组播组的组播成员在第一时间段内能够处理的数据的最小数量。
可选的,该处理单元还用于对窗口信息进行更新。在一个示例性,该处理单元还用语:将第二窗口信息更新为该第一窗口信息,该第二窗口信息是该组播组的组播成员在该第一时间段前的一个时间段内能够处理的数据的最小数量。第二窗口信息指示的组播组的组播成员能够处理的数据的最小数量,与第一窗口信息指示的组播组的组播成员能够处理的数据的最小数量不同。
第四方面,提供了一种组播传输装置,应用于第二计算设备,该第二计算设备为组播组的组播成员,该第二计算设备包括第二输入输出IO设备和第二主机,该第二IO设备与该第二主机通过IO网络通信,该装置包括收发单元和处理单元,该收发单元,用于接收第一IO设备发送的第一数据包,该第一数据包携带组播信息和第一请求对应的待写入数据,该组播信息用于标识组播组的组播成员与第一计算设备之间的链路连接,第一计算设备包括该第一IO设备,该第一计算设备与该第二计算设备不同;该处理单元,用于根据该第一数据包,将该待写入数据存储至该第二主机的存储器中。
在一种可能的设计中,该收发单元还用于向该第一IO设备发送第二请求,该第二请求用于请求获取该第一数据包携带的该第一请求对应的该待写入数据。
第五方面,提供了一种第一输入输出IO设备,该第一IO设备具有实现上述第三方面所描述的组播传输装置的功能。该功能可以基于硬件实现,也可以基于硬件执行相应的软件实现。该硬件或软件包括一个或多个与上述功能相对应的模块。
在一种可能的实现方式中,第一IO设备的结构中包括处理器,该处理器被配置为支持第一IO设备执行上述方法中相应的功能。
该第一IO设备还可以包括存储器,该存储器用于与处理器耦合,其保存第一IO设备必要的程序指令和数据。
在另一种可能的实现方式中,该第一IO设备包括:处理器、发送器、接收器、随机存取存储器、只读存储器以及总线。其中,处理器通过总线分别耦接发送器、接收器、随机存取存储器以及只读存储器。其中,当需要运行第一IO设备时,通过固化在只读存储器中的基本输入/输出系统或者嵌入式系统中的bootloader引导系统进行启动,引导第一IO设备进入正常运行状态。在第一IO设备进入正常运行状态后,在随机存取存储器中运行应用程序和操作系统,使得该处理器执行第一方面或第一方面的任意可能的实现方式中的方法。
第六方面,提供了一种第二输入输出IO设备,该第二IO设备具有实现上述第四方面所描述的组播传输装置的功能。该功能可以基于硬件实现,也可以基于硬件执行相应的软件实现。该硬件或软件包括一个或多个与上述功能相对应的模块。
在一种可能的实现方式中,第二IO设备支持执行上述方法中相应的功能。
该第二IO设备还可以包括存储器,该存储器用于与处理器耦合,其保存第二IO设备必要的程序指令和数据。
在另一种可能的实现方式中,该第二IO设备包括:发送器、接收器、随机存取存储器、只读存储器以及总线。其中,处理器通过总线分别耦接发送器、接收器、随机存取存储器以及只读存储器。其中,当需要运行第二IO设备时,通过固化在只读存储器中的基本输入/输出系统或者嵌入式系统中的bootloader引导系统进行启动,引导第二IO设备进入正常运行状态。在第二IO设备进入正常运行状态后,在随机存取存储器中运行应用程序和操作系统,使得该处理器执行第二方面或第二方面的任意可能的实现方式中的方法。
第七方面,提供了一种计算机程序产品,该计算机程序产品包括:计算机程序代码,当该计算机程序代码在计算机上运行时,使得计算机执行上述第一方面或第二方面,以及上述第一方面或第二方面的任一种可能执行的方法。
第八方面,提供了一种计算机可读介质,该计算机可读介质存储有程序代码,当该计算机程序代码在计算机上运行时,使得计算机执行上述第一方面或第二方面,以及上述第一方面或第二方面的任一种可能执行的方法。这些计算机可读存储包括但不限于如下的一个或者多个:只读存储器(read-only memory,ROM)、可编程ROM(programmable ROM,PROM)、可擦除的PROM(erasable PROM,EPROM)、Flash存储器、电EPROM(electricallyEPROM,EEPROM)以及硬盘驱动器(hard drive)。
第九方面,提供一种芯片系统,该芯片系统包括处理器与数据接口,其中,处理器通过该数据接口读取存储器上存储的指令,以执行上述第一方面或第二方面,以及上述第一方面或第二方面的任意一种可能的实现方式中的方法。在具体实现过程中,该芯片系统可以以中央处理器(central processing unit,CPU)、微控制器(micro controller unit,MCU)、微处理器(micro processing unit,MPU)、数字信号处理器(digital signalprocessing,DSP)、片上系统(system on chip,SoC)、专用集成电路(application-specific integrated circuit,ASIC)、现场可编程门阵列(field programmable gatearray,FPGA)或可编辑逻辑器件(programmable logic device,PLD)的形式实现。
第十方面,提供了一种组播传输系统,该系统包括如上述第三方面所述的组播传输装置和上述第四方面所述的组播传输装置。
本申请在上述各方面提供的实现方式的基础上,还可以进行进一步组合以提供更多实现方式。
附图说明
图1是适用于本申请实施例的一个计算集群的示意图。
图2是图1中的计算集群包括的计算设备的示意图。
图3是本申请实施例提供的一种组播传输方法300的示意性流程图。
图4是本申请实施例提供的一种组播传输场景的示意图。
图5是本申请实施例提供的一种组播传输方法500的示意性流程图。
图6是本申请实施例提供的基于TCP/IP传输的数据包的格式示意图。
图7是本申请实施例提供的窗口的示意图。
图8是本申请实施例提供的一种组播传输方法800的示意性流程图。
图9是本申请实施例提供的基于RoCE协议传输的数据包和消息的格式示意图。
图10是本申请实施例提供的一种组播传输方法1000的示意性流程图。
图11是本申请实施例提供的一种组播传输方法1100的示意性流程图。
图12是本申请实施例提供的一种组播传输装置1200的示意性结构图。
图13是本申请实施例提供的一种组播传输装置1300的硬件结构示意图。
具体实施方式
下面将结合附图,对本申请实施例中的技术方案进行描述。
本申请将围绕包括多个设备、组件、模块等的系统来呈现各个方面、实施例或特征。应当理解和明白的是,各个系统可以包括另外的设备、组件、模块等,并且/或者可以并不包括结合附图讨论的所有设备、组件、模块等。此外,还可以使用这些方案的组合。
本申请实施例描述的网络架构以及业务场景是为了更加清楚地说明本申请实施例的技术方案,并不构成对于本申请实施例提供的技术方案的限定,本领域普通技术人员可知,随着网络架构的演变和新业务场景的出现,本申请实施例提供的技术方案对于类似的技术问题,同样适用。
本申请实施例中所称的芯片可以是系统芯片(system on chip,SoC),还可以是中央处理器(central processor unit,CPU),还可以是网络处理器(network processor,NP),还可以是数字信号处理电路(digital signal processor,DSP),还可以是应用处理器(application processor,AP),或其他集成芯片。
为了便于理解,下面先对本申请实施例可能涉及的相关术语和概念进行介绍。
1,组播(multicast)
组播是主机间一对多的通讯模式,组播是一种允许一个或多个组播源发送同一报文到多个接收者的技术,即组播技术可以实现点到多点(point to multi-point,P2MP)的报文转发。组播源将一份报文发送到特定的组播地址,组播地址不同于单播地址,它并不属于特定某个主机,而是属于一组主机。一个组播地址表示一个群组,需要接收组播报文的接收者都加入这个群组。
2,单播(unicast)
单播是主机间一对一的通讯模式,网络中的设备根据网络报文中包含的目的地址选择传输路径,将单播报文传送到指定的目的地,只对接收到的数据进行转发,不会进行复制。它能够针对每台主机及时的响应。
3,协议栈(protocol stack)
协议栈是指网络中各层协议的总和,其形象的反映了一个网络中数据传输的过程:由上层协议到底层协议,再由底层协议到上层协议。简单来说,协议栈(例如但不限于是,传输控制协议/因特网互联协议(transmission control protocol/internetprotocol,TCP/IP)栈)就是协议(例如,但不限于TCP/IP)的实现。
4,远程直接数据存取(remote direct memory access,RDMA)
RDMA技术实现了在网络传输过程中两个节点之间数据缓冲区数据的直接传递,在本节点可以直接将数据通过网络传送到远程节点的内存中,绕过操作系统内的多次内存拷贝。相比于传统的网络传输,RDMA无需操作系统和TCP/IP协议的介入,可以轻易的实现超低延时的数据处理、超高吞吐量传输,不需要远程节点CPU等资源的介入,不必因为数据的处理和迁移耗费过多的资源。
RDMA的工作过程如下:
1)当一个应用执行RDMA读或写请求时,在不需要任何内核内存参与的条件下,RDMA请求从运行在用户空间中的应用中发送到本地网卡(network interfacecontroller,NIC)。其中,网卡又称为网络接口控制器。
2)本地NIC读取缓冲的内容,并通过网络传送到远程NIC。
3)在网络上传输的RDMA信息包含目标虚拟地址、内存钥匙和数据本身。请求完成既可以完全在用户空间中处理(通过轮询用户级完成排列),或者在应用一直睡眠到请求完成时的情况下通过内核内存处理。RDMA操作使应用可以从一个远程应用的内存中读数据或向这个内存写数据。
4)目标NIC确认内存钥匙,直接将数据写入应用缓存中。用于操作的远程虚拟内存地址包含在RDMA信息中。
5,基于以太网的RDMA(RDMA over converged ethernet,RoCE)
RoCE支持在标准以太网基础设施上使用RDMA技术。RoCE技术中,RDMA网卡(RDMA-aware network interface controller,RNIC)把协议栈(即,用户数据包协议(userdatagram protocol,UDP))全部卸载(offload)到RNIC的ASIC芯片上来实现。其中,卸载是指将主机侧协议栈的处理工作从主机的CPU移交给网卡来处理。而且在主机上用户缓存(buffer)到网卡缓存也是直接通过的存储器直接访问(direct memory access,DMA)方式把数据搬到网卡中,然后网卡通过网络协议UDP的方式将数据传送到对端去,对端收到数据后也直接在网卡上把数据接收下来,并且直接DMA到用户缓存中。这样整个过程都没有CPU和内存拷贝的参与,从而减轻了CPU和服务器I/O系统的TCP/IP处理负担,消除了服务器的网络瓶颈。
6,存储器直接访问(direct memory access,DMA)
DMA是指一种高速的数据传输操作,允许在IO设备和存储器之间直接读写数据,既不通过CPU,也不需要CPU干预。换句话说,DMA是指IO设备不通过CPU而直接与系统内存交换数据的接口技术。可以理解的是,DMA方式是一种完全由硬件执行I/O交换的工作方式。而RDMA方式是通过网络把数据直接传入计算机的存储区,即将数据从一个系统快速移动到远程系统存储器中,也就是说RDMA方式是一种软件和硬件结合执行I/O交换的工作方式。
下面,具体介绍本申请的相关技术方案:
计算集群(可以简称为集群)是一种计算系统。计算集群通过将一组计算设备连接起来高度紧密地协作完成计算工作。计算集群中的单个计算设备可以称为节点。图1是适用于本申请实施例的一个计算集群的示意图。如图1所示,计算集群100包括但不限于多个计算设备,图1以计算集群100包括六个计算设备为例进行说明,该六个计算设备分别为计算设备111、计算设备112、计算设备113、计算设备114、计算设备115和计算设备116。其中,任意两个计算设备(例如,计算设备111与计算设备115)可以通过网络110进行通信。
下面结合图2对图1中所示的计算设备进行介绍。图2所示的计算设备100可以是图1所示的计算设备111至计算设备116中的任意一个计算设备。
如图2所示的计算设备200包括主机210、输入输出(input output,IO)互联通道220以及IO设备230。其中,主机210可以通过IO互联通道220连接IO设备230。
主机210可以是运算核心和控制核心,用于向IO设备230发送待处理请求,以及接收IO设备230发送的待处理请求的处理结果。主机210包括第一处理器211和第一存储器212,该第一处理器211可以为中央处理单元(central processing unit,CPU),该第一处理器211还可以是其他通用处理器、数字信号处理器(digital signal processor,DSP)、专用集成电路(application specific integrated circuit,ASIC)、现场可编程门阵列(field-programmable gate array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者是任何常规的处理器等。该第一处理器211还可以为一种片上芯片(system of chip,SoC)或者嵌入式处理器。第一处理器211具有处理指令、执行操作、处理数据等功能。第一处理器211可以为多个进程分配独立的存储器资源,从而运行多个进程。第一处理器211可寻址的地址空间包括第一存储器212。第一存储器212可以由随机存取器(random access memory,RAM),硬盘(例如,固态磁盘(solid state disk,SSD))或其他存储介质实现。第一存储器212可用于存储多个进程的程序代码。
IO互联通道220是主机210与IO设备230之间的互连机制,例如,高速串行计算机扩展总线标准(peripheral component interconnect express,PCIe)、计算机快速链接(compute express link,CXL)、缓存一致互联协议(cache coherent interconnect foraccelerators,CCIX)、统一总线(unified bus,UB或Ubus)等等。
IO设备230是指可以与主机210和/或其他计算设备进行数据传输的硬件,例如:IO设备230用于接收主机210发送的待处理请求,并利用协议栈对待处理请求进行处理以执行该待处理请求。IO设备230还用于向主机210发送该处理请求的处理结果。在本申请实施例中,IO设备230具有网络能力,可以实现协议栈的功能。其中IO设备230具有协议栈(例如,TCP/IP协议栈)功能,是指IO设备230具有利用协议栈包括的各种协议(例如,TCP/IP,UDP和以太网协议等)实现待处理请求在网络中传输的所有协议处理的能力。IO设备230可以为网络接口控制器(network interface controller,NIC)、智能NIC(smart-NIC)、RDMA网卡(RDMA-aware network interface controller,RNIC)、主机总线适配器(host busadapter,HBA)、主机通道适配器(host channel adaptor,HCA)、加速器(accelerator)、数据处理器(data processing unit,DPU)、图像处理器(graphics processing unit,GPU)、人工智能(artificial intelligence,AI)设备、软件定义基础设施(software definedinfrastructure,SDI)等中的至少一种。IO设备230可以包括第二处理器231和第二存储器232。第二存储器232可以由随机存取器(random access memory,RAM),硬盘(例如,SSD)或其他存储介质实现。
下面,结合图3对本申请提供的组播传输方法进行详细介绍。
图3是本申请实施例提供的一种组播传输方法300的示意性流程图。如图3所示,该方法300包括步骤310至步骤330。可以理解的是,下文中以方法300应用于第一计算设备为例进行介绍,第一计算设备包括第一输入输出IO设备和第一主机,第一主机包括处理器和存储器,第一IO设备与第一主机通过IO网络通信。示例性的,该方法300中的第一计算设备可以是上述图1所示的计算集群中的任意一个计算设备,该方法300中的组播组可以包括至少2个组播成员,以图1为例,当第一计算设备为计算设备111时,该至少2个组播成员可以分别为计算设备112和计算设备116。示例性的,第一计算设备的结构和组播组的任意一个组播成员的结构可以如上述图2所示。下面,具体介绍步骤310至步骤330。
步骤310,第一IO设备获取第一请求。
步骤320,第一IO设备根据第一信息和第一请求,生成第一数据包,第一信息包括组播信息,组播信息用于标识组播组的组播成员与第一计算设备之间的链路连接,第一数据包携带组播信息和第一请求对应的待写入数据。
组播信息包括组播标识符,组播标识符是第一计算设备与组播组建立链路连接时获得的。在本申请实施例中,一个组播组可以包括至少2个组播成员,即该一个组播组可以包括2个或2个以上的组播组成员。组播信息用于标识组播组的组播成员与第一计算设备之间的链路连接,即组播信息用于标识至少2个链路连接。
第一数据包还包括端口号,端口号用于指示传输第一数据包的方式为组播传输方式。可选的,该端口号为该第一数据包的目的端口号,即第一数据包的目的端口号的取值用于指示传输第一数据包的方式为组播传输方式。
在本申请实施例中,对发送第一请求的执行主体不作具体限定。在一个示例中,第一请求为第一主机包括的处理器中运行的应用程序发送的请求,为便于描述,下文中将这种场景记为场景一。可以理解的是,场景一中第一请求为写请求,该写请求可以用于请求将第一主机包括的存储器中存储的数据存储(写入)至组播组的组播成员对应的主机的存储器中。在另一个示例中,第一请求为第二主机包括的处理器中运行的应用程序发送的请求,第二计算设备包括第二主机和第二IO设备,第二计算设备为组播组的组播成员,为便于描述,下文中将这种场景记为场景二。可以理解的是,场景二中第一请求为读请求,该读请求可以用于请求将第一主机包括的存储器中存储的数据存储(读取)至组播组的组播成员对应的主机的存储器中。下面,具体介绍场景一和场景二。
场景一:
场景一中,第一请求为第一主机包括的处理器中运行的应用程序发送的请求。在场景一中根据传输协议的不同,又可以分为两种实现方式,为便于描述,下文中将这两种实现方式记为实现方式一和实现方式二。下面,具体介绍实现方式一和实现方式二。
实现方式一:
在实现方式一中,第一IO设备发送第一数据包采用的传输协议为TCP/IP。
可选的,第一信息还可以包括第一窗口信息,第一窗口信息用于指示组播组的组播成员在第一时间段内能够处理的数据的最小数量。
可选的,第一IO设备还可以对窗口信息进行更新。在一个示例性,该第一IO设备还可以执行以下操作:将第二窗口信息更新为该第一窗口信息,该第二窗口信息是该组播组的组播成员在该第一时间段前的一个时间段内能够处理的数据的最小数量。第二窗口信息指示的组播组的组播成员能够处理的数据的最小数量,与第一窗口信息指示的组播组的组播成员能够处理的数据的最小数量不同。这种实现方式中,通过设置第一IO设备在预设时间段内及时地对窗口信息进行更新,可以准确地控制第一数据包携带的数据量,实现网络的流量控制。
可选的,当第一数据包携带的待写入数据为第一请求对应的数据中的一部分数据时,第一IO设备还可以根据第一信息和第一请求生成至少一个数据包,该至少一个数据包携带组播信息和第一请求对应的除待写入数据外的全部数据。当第一数据包携带的待写入数据为第一请求对应的数据中的全部数据时,第一IO设备根据第一信息和第一请求可以仅生成一个第一数据包。可选的,当组播组的组播成员未成功接收到该第一数据包时,该第一IO设备还可以生成一个数据包,该一个数据包携带的第一请求对应的数据中的全部数据和单播信息,该单播信息用于指示组播组中未成功接收到第一数据包的组播成员。
实现方式二:
在实现方式二中,第一IO设备发送第一数据包采用的传输协议为基于以太网的RDMA(例如但不限于为,RoCEv2)。
可选的,待写入数据为第一请求对应的数据中的一部分数据,第一信息还包括指示信息,指示信息用于指示对待写入数据进行封装。这种实现方式中,在第一IO设备根据第一信息和第一请求,生成第一数据包之前,方法还包括:第一IO设备向组播组的组播成员发送IO写命令,IO写命令用于指示将第一请求对应的数据存储至第一注册区域(memoryregistration,MR)中,第一请求对应的数据位于第一计算设备包括的第一主机包括的存储器中,第一MR为第二主机包括的存储器中的存储区域注册到第二IO设备的存储器中的存储区域,第二计算设备包括第二主机和第二IO设备,第二计算设备为组播组的组播成员;第一IO设备接收组播组的组播成员发送的所述指示信息。其中,IO写命令包括第二密钥值和第二位置信息,第二密钥值用于识别第二MR,第二位置信息用于指示待写入数据在第二MR中的位置。
可选的,第一信息还包括信用值,信用值用于指示组播组的组播成员在第二时间段内能够处理的请求的最小数量,第一数据包的基本传输头部(base transport header,BTH)携带信用值。
场景二:
场景二中第一请求为读请求,该第一请求可以用于请求将第一主机包括的存储器中存储的数据存储(读取)至组播组的组播成员对应的主机的存储器中。这种场景中,第一IO设备发送第一数据包采用的传输协议为基于以太网的远程直接数据存取RDMA。
可选的,第一IO设备获取第一请求,包括:第一IO设备接收组播组的组播成员发送的第一请求,第一请求用于指示将位于第二MR中的待写入数据存储至组播组的组播成员的存储区域,第二MR为第一主机包括的存储器中的存储区域注册到第一IO设备的存储器中的存储区域,第一计算设备还包括第一主机。可选的,这种实现方式中,第一共享接收队列(shared receive queue,SRQ)的窗口大小非零,第一SRQ的窗口大小非零用于指示第一SRQ中可用的接收队列元素(receive queue element。RQE)的数目非零,第一SRQ中的可用的RQE用于处理第一IO设备接收到的数据包,第一SRQ存储在第一主机包括的存储器中。
可选的,第一请求包括第一密钥值,第一位置信息和预设字段,第一密钥值用于识别第二MR,第一位置信息用于指示待写入数据在第二MR中的位置,预设字段的取值用于指示第一请求。
步骤330,第一IO设备向组播组的组播成员发送第一数据包。
第一IO设备向组播组的组播成员发送第一数据包,可选的,该第一数据包在网络中传输时可以是以消息的形式承载的,对根据第一数据包生成一个消息的方式不作具体限定。可以理解的是,当第一请求对应的数据被封装成多个数据包,该多个数据包包括该第一数据包时,在网络中传输时的一个消息可以包括该多个数据包。
可选的,第一IO设备向组播组的组播成员发送第一数据包,包括:第一IO设备向转发设备发送第一数据包,转发设备用于对第一数据包进行复制,并将复制后的第一数据包转发至组播组的组播成员,组播组的组播成员与第一计算设备之间的链路连接包括转发设备。对第一计算设备与组播组的组播成员之间包括的转发设备的数目不作具体限定,例如可以包括1、2或5个转发设备等。可以理解的是,转发设备对第一数据包进行复制得到的数据包的数目,与组播组的组播成员的数目关联。复制后的每个第一数据包都携带有第一请求对应的待写入数据,但复制后的每个第一数据包携带的目的地址可能存在不同,即复制后的每个第一数据包携带的目的地址与组播组中的一个组播成员一一对应。
可选的,组播组的组播成员包括第二计算设备,第二计算设备与第一计算设备不同,在上述步骤330之后还可以执行以下操作:第一IO设备接收第二计算设备发送的第二请求,第二请求用于请求获取第一数据包携带的第一请求对应的待写入数据;第一IO设备向第二计算设备发送第二数据包,第二数据包携带待写入数据,且第二数据包包括的端口号用于指示传输第二数据包的传输方式为单播传输方式。其中,第二数据包包括的端口号可以为第二数据包包括的目的端口号,即第二数据包的目的端口号的取值可以用于指示传输第二数据包的传输方式为单播传输方式。
可选的,组播组的组播成员仅包括第二计算设备和第三计算设备,第三计算设备,第二计算设备和第一计算设备中的任意两个计算设备不同,在上述步骤330之后还可以执行以下操作:在第一IO设备接收到第一完成消息和第二完成消息后,第一IO设备向第一主机包括的处理器发送第三完成消息,第三完成消息用于指示第一请求已成功执行,第一完成消息用于指示第二计算设备已成功执行第一请求,第二完成消息用于指示第三计算设备已成功执行第一请求。
可选的,上述场景一的实现方式一中,在步骤330之后还可以包括以下步骤:在该组播组的每个组播成员接收到第三消息的情况下,该第一IO设备接收到该每个组播成员发送的确认数据包,该第三消息用于指示该第三消息携带的数据包包括该第一请求对应的该待写入数据的最后一个数据包,该确认数据包表示该每个组播成员成功接收到携带有该第一请求对应的该待写入数据的所有数据包。这种发送确认数据包的实现方式,又称为累积确认(cumulative acknowledgement)的方式,即接收侧接收到多个消息后,才会向发送端发送一个确认信息,该一个确认信息表示该接收侧接收到该多个消息。这种实现方式中,第一IO设备仅通过获取一个确认数据包便可得知组播组的组播成员接收到的第一请求对应的数据包的情况,这样有利于提高数据传输的效率。
应理解,上述图3所示的方法300仅为示意,并不对本申请实施例提供的组播传输方法构成任何限定。上述方法300中未详细赘述的内容可以参见下文图4至图11对应的方法实施例中的相关描述,此处不再详细赘述。
在本申请实施例中,第一IO设备可以根据第一请求和第一信息进行数据封装生成第一数据包,并向组播组的组播成员发送该第一数据包,而不是通过第一主机包括的处理器根据工作请求进行封装生成数据包,避免了传统组播传输方法中存在复杂度高、延时大和传输效率低的问题。通过设置第一IO设备发送的第一数据包携带用于标识组播组的组播成员与该第一计算设备之间的链路连接的组播信息,能够确保组播数据的可靠传输。因此,本申请实施例提供的组播传输方法可以实现可靠和高效的组播数据传输。
图4是本申请实施例提供的一种组播传输场景的示意图。
如图4所示,假设图4中的源端计算设备1(简记为INI 1)为图1所示的计算集群100中的计算设备111,目标端计算设备1(简记为TGT 1)为该计算集群100中的计算设备114,目标端计算设备2(简记为TGT 2)为该计算集群100中的计算设备115。此外,为了便于描述,以下假设主机10中存在至少一个应用程序,称为应用程序1。如图4所示,在主机10存在至少一个应用程序1的情况下,在主机10的存储区域中创建队列队(queue pairs,QP)1和完成队列(complete queue,CQ)1。QP1包括发送队列(send queue,SQ)1和共享接收队列(sharedreceive queue,SRQ)1。SRQ1可以被多个TGT(即,TGT1和TGT 2)共享。SQ1用于存储主机10中的应用程序1生成的工作请求(work request,WR)WR。CQ1用于存放IO设备11已经执行完成的WR的处理结果。SRQ1与INI 1关联。此外,在主机20的存储区域中创建QP2和CQ2,QP2包括RQ2和SQ2。在主机30包括的存储器中创建QP3和CQ3,QP3包括RQ3和SQ3。存储在SQ中的待处理请求可以称为发送队列元素(send queue element,SQE),即一个SQE用于存在一个待处理请求。存储在RQ中的待处理请求可以称为接收队列元素(receive queue element,RQE),即一个RQE用于存储接收到的一个待处理请求。存储在CQ中的待处理请求的处理结果可以称为完成队列元素(complete queue element,CQE),即一个CQE用于存储一个待处理请求的处理结果。示例性的,当主机10、主机20和主机30中任意一个主机的结构为图2所示的主机210的结构时,主机10、主机20和主机30中任意一个主机包括的存储器可以为第一存储器212。
在图4所示的场景中,组播组1的组播成员包括TGT 1和TGT 2。TGT 1包括主机20和IO设备21,TGT 2包括主机30和IO设备31。INI 1可以通过组播方式向组播组1的组播成员发送信息(例如,工作请求或数据包),以及通过单播方式接收组播组1的组播成员发送的信息。组播组1的任意一个组播成员也可以通过单播方式向INI 1发送信息。在本申请实施例中,可以通过组播标识符唯一标识图4所示的INI 1与组播组1的所有组播成员(即,TGT 1和TGT 2)之间的链路连接,为便于描述,下文中将该组播标识符记为复制组(replicatgroup,RG)标识符。INI可以利用一个RG标识符唯一标识该一个INI与一个组播组的所有组播成员之间的组播链路连接。该一个组播组的任意一个组播成员可以利用另一个RG标识符,唯一识别该任意一个组播成员作为该一个组播组的组播成员时与该INI之间的单播链路连接。上述一个RG标识符与上述另一个RG标识符可以不同。可选的,上述一个RG标识符与上述另一个RG标识符也可以相同。
例如,在图4中,INI 1可以利用ini_rg_id_1标识符唯一标识INI 1与组播组1的所有组播成员之间的链路连接,该链路连接包括链路1和链路2,链路1是INI 1至转发设备1,转发设备1至TGT 1的链路,链路2是INI 1至转发设备1,转发设备1至TGT 2的链路。TGT 1可以利用tgt_rg_id_a标识符唯一标识TGT 1作为组播组1的成员时,TGT 1与INI1之间的单播链路1。TGT 2可以利用tgt_rg_id_b标识符唯一标识TGT 2作为组播组1的成员时,TGT 2与INI 1之间的单播链路2。ini_rg_id_1标识符,tgt_rg_id_a标识符和tgt_rg_id_b标识符中的任意一个标识符可以不同。
在本申请实施例中,将一个INI与一个组播组的所有组播成员之间的链路连接、一个INI与该一个组播组中的每个组播成员的单播链路连接以及RG,可以称为一个可靠的点到多点的连接(reliable point to multi-point,rP2M)。还以图4为例进行说明,即一个rP2MP包括:单播链路连接(即,单播链路1和单播链路2),组播链路连接(即,链路1和链路2,链路1是INI 1至转发设备1,转发设备1至TGT 1的链路,链路2是INI 1至转发设备1,转发设备1至TGT 2的链路。),以及RG(包括INI 1对应的ini_rg_id_1标识符、TGT 1对应的tgt_rg_id_a标识符以及TGT2对应的tgt_rg_id_b标识符)。一个INI还可以与多个组播组分别创建组播链路连接。相应的,可以给该一个INI分配多个RG标识符,该多个RG标识符与多个组播链路连接一一对应。一个TGT还可以与多个INI分别建立多个单播链路连接。相应的,可以给该一个TGT分配多个RG标识符,该多个RG标识符与该多个单播链路连接一一对应。一个组播组可以包括至少2个组播成员,可选的,该一个组播组还可以包括更多数目的组播成员。例如,图4所示的组播组1还可以包括3、4、5、9或20个组播成员。
应理解,上述图4所示的组播传输场景仅为示意,并不对本申请提供的组播传输方法适用的组播场景构成任何限定。例如,上述图4所示的组播场景中的组播组还可以包括更多数目的组播成员,例如3个或5个等。图4中以INI 1至TGT 1的单播链路1不包括中间转发设备为例。可选的,在另一些实现方式中,INI 1至TGT 1的单播链路1中还可以包括一个或多个转发设备。
下面以上述图4所示的应用场景为例,结合图5中的实施例,对本申请实施例提供的组播传输方法的一种具体实现方式进行详细描述。
图5是本申请实施例提供的一种组播传输方法500的示意性流程图。应理解,为了便于描述,图5中仅以图4中的INI 1和TGT 1为例进行说明。图4中的TGT 2执行的操作与TGT1执行的操作原理相似,具体详细赘述的内容可以参见方法500中TGT 1对应的操作。如图5所示,该方法500可以包括步骤510至步骤592,下面分别对步骤510至步骤592进行详细描述。
步骤510,主机10获取工作队列元素(work queue element,WQE)1,并将WQE1放入SQ1中,WQE1用于携带写请求1,写请求1携带待写入数据1位于主机10包括的存储器中的源地址。
其中,主机10获取WQE1可以包括如下步骤:主机10包括的处理器中的应用程序1生成WR1;主机10调度驱动提供的接口把WR1转化成WQE1。WR1和WQE1和携带的信息相同,仅是格式不相同。可以理解的是,WQE1放入SQ1后,WQE1又称为SQE1。为便于描述,下文中统一将从SQ1中获取的WQE1称为SQE1。例如,SQE1可以用于指示写请求1,写请求1用于请求把存储在主机10包括的存储器中的地址为0x12345678的长度为10字节的数据,写入至组播组1的组播成员对应的计算设备的存储器中。示例性的,当图4中的INI 1的结构为图2所示的计算设备的结构时,主机10包括的处理器中的应用程序1可以是图2所示主机210包括的第一处理器211中的应用程序,主机10包括的存储器可以是图2所示的第一存储器212,IO设备11可以是图2所示的IO设备230,IO设备11的存储器可以是图2所示的第二存储器232。
步骤520,IO设备11从SQ1中获取SQE1。
其中,IO设备11获取的SQE1的格式为聚散链(scatter gather list,SGL)格式,即SQE1中包括了待写入数据1的源地址和SQE1的源地址,待写入数据1的源地址可以为待写入数据1位于主机10包括的存储器中的地址,SQE1的源地址可以为SQE1位于主机10包括的存储器中的地址。
步骤530,IO设备11根据SQE1,组播信息和窗口信息,对SQE1指示的待写入数据1进行封装,生成数据包1。
组播信息是指INI 1与组播组1的组播成员之间的组播信息,该组播信息包括但不限于:INI1的媒体接入控制(media access control,MAC)地址,INI1的单播IP地址,组播组的MAC地址,组播组的IP地址,INI 1的RG标识符。INI 1的RG标识符指示INI 1和组播组1的组播成员之间的组播链路连接。窗口信息包括:TCP窗口信息和拥塞窗口信息,TCP窗口信息用于指示组播组1的所有成员对应的所有TCP窗口大小中的最小TCP窗口大小,拥塞窗口信息用于指示组播组1的所有成员对应的所有拥塞窗口大小中的最小拥塞窗口大小。本申请实施例中对确定拥塞窗口的算法不作具体限定。例如,拥塞控制算法包括但不限于慢启动算法、拥塞避免算法、快速重传算法和快速恢复算法。
上述步骤530中,IO设备11卸载了TCP/IP协议栈的功能,即IO设备11可以实现TCP/IP协议栈的功能。也就是说,IO设备11可以利用TCP/IP协议栈将写请求1对应的待写入数据1封装成数据包。可选的,IO设备11还可以对接收到的数据包进行解析得到数据包的头部携带的内容,以及该数据包的载荷中携带的数据等。示例性的,IO设备11封装后得到的数据包1的格式可以如图6所示,该数据包1依次可以包括以太网头、IP头、UDP头、TCP头、载荷和帧校验序列。其中,TCP头中的扩展头可以携带RG标识符。可选的,该扩展头还可以携带消息边界,消息边界表示传输协议把数据当作一条独立的消息在网上传输。图6所示的数据包的头部携带的具体内容可以参见下文中的表1。
表1
上述表1中的TGT i(i=1或2)为组播组1中的任意一个组播成员(即,TGT 1或TGT2)。在上述表1中,目的UDP端口号为rp2m_port_x,用于指示组播传输方式。目的UDP端口号为rp2m_port_y,用于指示单播传输方式。可以理解的是,表1中示出的源UDP端口号为src_port,src_port可以是一个可变的值,表1中示出的目的UDP端口号为rp2m_port_x和rp2m_port_y是一个固定值。还应理解的是,在本申请实施例中,对于同一传输方式(单播传输方式或组播传输方式)的目的UDP端口号可以是相同的。例如,设置rp2m_port_y等于1000,则INI1利用单播链路向TGT 1或TGT 2发送的数据包包括的目的UDP端口号都等于1000,以及TGT 1或TGT 2利用单播链路向INI 1发送的数据包包括的目的UDP端口号也等于1000。可选的,目的UDP端口号可以从互联网名称与数字地址分配机构(the internet corporationfor assigne names an numbers,ICANN)端口范围中选择。表1示出了分配给INI 1的RG标识符为ini_rg_id,ini_rg_id用于唯一识别INI 1与组播组1的组播成员之间的所有链路连接,该所有链路连接包括链路1和链路2,链路1是INI 1至转发设备1,转发设备1至TGT 1的链路,链路2是INI 1至转发设备1,转发设备1至TGT 2的链路。表1中还示出了分配给TGT i的RG标识符为tgt_rg_id[i],tgt_rg_id[i]可以用于唯一识别该TGT i作为组播组1的组播成员时,该TGT i至INI I的单播链路连接。
在一种实现方式中,上述步骤530中,IO设备11根据SQE1,组播信息和窗口信息,对SQE1指示的待写入数据1进行封装,生成数据包1,可以包括以下步骤:IO设备11根据SQE1从主机10中存储待写入数据1的位置获取待写入数据1;IO设备11根据窗口信息确定IO设备11的发送窗口大小,TCP窗口信息指示的TCP窗口的大小非零;IO设备11将待写入数据1封装至数据包1的载荷中,以及将组播信息封装至数据包1的数据包头中,生成数据包1,数据包1的载荷携带的数据量等于IO设备11的发送窗口大小。上述实现方式中,当上述组播组1的任意一个组播成员的TCP窗口大小等于零时,IO设备11会暂停封装数据包和发送封装后的数据包,此时IO设备11可以使用单播通道探测并单独更新组播组1的任意一个组播成员的TCP窗口大小。一直到IO设备11确定组播组1的任意一个组播成员的TCP窗口大小非零时,IO设备11再根据窗口信息进行数据封装生成数据包并发送该数据包。其中,IO设备11通过单播方式向组播组的任意一组播个成员发送数据包时,该数据包的头部携带的参数可以参见上述表1中的第三列的内容。其中,对INI 1获取组播组1的每个组播成员的TCP窗口大小和拥塞窗口大小的方式不作具体限定。在一个示例中,INI 1与组播组1的每个组播成员建立TCP连接时,组播组1的每个组播成员会告知INI 1该每个组播成员的TCP窗口大小和拥塞窗口大小。在另一个示例中,TGT(即,组播组1的任意一个组播成员)可以根据其接收缓冲区的状态生成定期的TCP窗口大小,以及根据所在网络状态更新拥塞窗口大小。INI 1根据TGT的单个窗口通知,维护给定组播组的每个组播成员的TCP窗口大小和拥塞窗口大小。
以图7中的(1)为例说明上述数据包1携带的内容,待写入数据1可以对应图7中的(1)中的第10个字节至第25个字节的内容,这种实现方式中,数据包1的载荷中携带第10个字节至第25个字节的所有内容,数据包1的头部携带的参数可以参见上述表1中的第二列的内容。这种实现方式中,IO设备11的发送窗口大小为16个字节,TGT 1的TCP窗口大小和TGT2的TCP窗口大小可以等于16个字节,TGT 1的拥塞窗口大小和TGT 2的拥塞窗口大小也可以等于16个字节。
在另一种实现方式中,待写入数据1的数据量较大,组播组1的组播成员的缓冲区难以一次性接收该待写入数据1。基于此,IO设备11根据SQE1,组播信息和窗口信息,对SQE1指示的待写入数据1进行封装,生成数据包1,可以包括以下步骤:IO设备11根据SQE1从主机10中存储待写入数据1的位置获取待写入数据1;IO设备11根据窗口信息确定发送窗口大小,该TCP窗口信息指示的TCP窗口的大小非零,且发送窗口大小小于待写入数据1的数据量;IO设备11根据根据发送窗口大小从待写入数据1中获取待封装数据1,待写入数据1包括待封装数据1;IO设备11将待封装数据1封装至数据包1的载荷中,以及将组播信息封装至数据包1的数据包头中,生成数据包1,数据包1的载荷仅携带待写入数据1的部分数据。这种实现方式中,在上述步骤530之后还可以包括如下步骤:IO设备11还会通过组播传输方式向组播组1的成员发送至少一个数据包2,数据包2的头部携带的内容与数据包1头部携带的内容相同,数据包2的载荷携带的内容大小是根据TCP窗口信息和待封装数据2确定的,待封装数据2是待写入数据1中除待封装数据1外的数据。上述实现方式中,当TCP窗口信息指示的TCP窗口大小等于零时,IO设备11暂停封装消息和发送封装后的消息,此时IO设备11可以使用单播通道探测并单独更新该TCP窗口信息指示的TCP窗口大小。一直到IO设备11确定该TCP窗口信息指示的TCP窗口大小非零时,IO设备11再根据该窗口信息进行数据封装生成消息并发送该消息。其中,IO设备11通过单播方式向组播组的任意一个成员发送消息时,该消息包括的数据包的头部携带的参数可以参见上述表1中的第三列的内容。
以图7中的(2)为例说明上述步骤,假设IO设备11通过组播传输方式向组播组1发送数据包1和数据包2,即可实现将待写入数据1传输给组播组1的组播成员的目的。INI 1在与组播组1的组播成员建立TCP连接时,获取TGT 1的TCP窗口大小为7个字节,TGT 1的TCP窗口大小为6个字节。基于此,IO设备11生成的数据包1中携带图7中的(2)所示的待封装数据1中的内容。此后,INI 1接收到TGT 1的TCP窗口大小更新为10个字节,以及接收到TGT 1的TCP窗口大小更新为15个字节,基于此,IO设备11生成的数据包2中携带图7中的(2)所示的待封装数据2中的内容。也就是说,IO设备11发送2个数据包(即,数据包1和数据包2)便实现了将待写入数据1传输给组播组1的组播成员的目的。
步骤540,IO设备11向组播组1的组播成员发送数据包1。
组播组1的组播成员包括TGT 1和TGT 2。相应的,IO设备21和IO设备31都会接收到数据包1。IO设备31是TGT 2包括的IO设备,可以理解的是,图5中并未示出TGT2。
在一些实现方式中,IO设备11对待写入数据1进行封装仅得到一个数据包1,此后IO设备11可以通过组播方式发送数据包1,即数据包1的头部携带的信息可以如上述表1中的第二列内容所示。
在另一些实现方式中,IO设备11对待写入数据1进行封装得到数据包1和数据包2,此后IO设备11通过组播方式发送数据包1和数据包2。对这种实现方式中,对IO设备11发送数据包1和数据包2的时机不作具体限定。在一个示例中,IO设备11可以在接收到组播组1的每个成员发送的数据包1的确认(ACK)信息后,再通过组播传输方式向组播组1发送数据包2。在另一个示例中,IO设备11通过组播传输方式向组播组1发送数据包1后,可以通过组播传输方式向组播组1发送数据包2,这种实现方式中,IO设备11不需要在接收到组播组1的每个组播成员发送的数据包1的ACK信息后再发送数据包2,组播组1的每个组播成员也不需要在每次接收到一个消息后就发送一个ACK信息,该组播组1的每组播个成员(例如,TGT 1)可以在接收到多个消息后再发送一个ACK信息,该一个ACK信息可以表示该组播组1的每个组播成员接收到该多个消息。这种发送确定信息的实现方式,又称为累积确认的方式,即接收侧接收到多个消息后,才会向发送端发送一个确认信息,该一个确认信息表示该接收侧接收到该多个消息。在又一个示例中,还可以选择设置消息的TCP报头的确认序号(ACKnumber)字段,每个消息可以携带唯一的标识符,以帮助消息在接收侧实现聚合。
可选的,在上述步骤540之后,还可以执行如下操作:在INI 1侧为组播组1的每个组播成员分别设置一个定时器(timer),即定时器1对应TGT 1,定时器2对应TGT 2,以确保可靠的数据传输。在IO设备11向组播组1的组播成员发送数据包(例如,数据包1)之后,便开始定时器1和定时器2的计时,以确定每个TGT的往返时间(round trip time,RTT)。当IO设备11确定一个TGT的RTT超过重传超时时间(retransmission time out,RTO)时,IO设备11可以利用单播链路向该一个TGT重新发送该消息。此时,IO设备11发送的数据包中封装的参数可以参见上述表1中第三列的内容。
为便于描述,下文中,均以INI 1通过组播传输方式向组播组1的组播成员发送一个数据包为例进行介绍。也就是说,组播组1的任意一个组播成员接收到该一个数据包,即接收到待写入数据1的所有内容。
步骤550,IO设备21对数据包1进行解析,获取待写入数据1,并生成rqe1,rqe1携带SQE1的处理结果1,SQE1的处理结果1指示将IO设备21的存储器中的待写入数据1写入主机20的存储器中。
上述步骤550中IO设备21对数据包1进行解析的步骤,与上述步骤530中IO设备11生成数据包1的步骤,是互逆的。以图2为例,当TGT 1的结构为图2所示的计算设备的结构时,主机20的存储器可以是图2所示的第一存储器212,IO设备21的存储器可以是图2所述的第二存储器232。
可选的,当CQ1被INI 1侧的多个QP共享时,rqe1中还需要携带SQ1的标识(identity,ID)和SQE1的索引,SQE1的索引指示SQE1位于SQ1中的位置。
步骤560,IO设备21向主机20发送rqe1。相应的,主机20将接收到的rqe1存储至RQ2中。
其中,rqe1的格式为SGL格式,即rqe1中包括了待写入数据1位于IO设备21的存储器中的源地址和rqe1位于IO设备21的存储器中的源地址。
步骤570,主机20从RQ2中获取rqe1,根据rqe1从IO设备21的存储器中读取待写入数据1,并将待写入数据1存储至主机20的存储器中。
在一些实现方式中,RQ2与待写入数据1存储至主机20的存储器关联,即RQ2用于指示该主机20的存储器。
步骤580,IO设备21通过单播方式向IO设备11发送确认ACK消息1,ACK消息1指示IO设备11成功接收到数据包1携带的待写入数据1。
上述步骤580中,ACK消息1的头部携带的参数可以参见上述表1中的第四列的内容。可选的,ACK消息1中还可以携带TCP窗口大小和拥塞窗口大小。一个ACK消息1需要消耗SRQ1中的一个共享接收队列元素(shared receive queue element,SRQE)。可选的,在一些实现方式中,当IO设备11接收到ACK消息1后,发现IO设备11的SRQ1中的所有SRQE都被占用(即,IO设备11的接收窗口等于零),此时IO设备11也可以丢弃该ACK消息1,并将IO设备11的接收窗口等于零发送给组播组1的组播成员,以使组播组1的组播成员暂停发送ACK消息。一直到IO设备11的SRQ1中存在未利用的SRQE时,IO设备11向组播组1的组播成员发送IO设备11更新后的接收窗口。相应的,组播组1的组播成员得知IO设备11的接收窗口非零后,组播组1的组播成员会继续向IO设备11发送ACK消息。
IO设备21执行上述步骤580,相应的,IO设备11接收到确认ACK消息1。其中IO设备11严格按照顺序接收来自组播组1的组播组成员的ACK消息,IO设备11可以根据ACK消息中携带的TCP序列号(sequence number)确定是否发生ACK消息的乱序现象。当IO设备11确定当前接收到的ACK消息并不是IO设备11当前期待接收的ACK消息,IO设备11可以丢弃该ACK消息,并指示组播组对应的组播成员重新发生该ACK消息。
步骤590,主机20向IO设备21发送SQE2。
其中,SQE2格式为SGL格式,即SQE2携带SQE2位于主机20的存储器中的位置和待写入数据1位于主机20的存储器中的位置。SQE2指示SQE1对应的数据请求已执行完成。
相应的,IO设备21接收到SQE2,IO设备21对SQE2进行解析,确定主机20已经成功接收SQE1指示的待写入数据1。
步骤591,IO设备21向IO设备11发送IO完成消息1,IO完成消息1指示SQE1执行完成。
在步骤591之前,IO设备了接收到主机20发送的SQE2后,对SQE2进行解析,确定待写入数据1已经成功写入主机20的存储器中,生成IO完成消息1。
步骤592,IO设备11向主机10发送RQE1,RQE1指示SQE1执行完成。
相应的,主机10接收RQE1,并将接收到的RQE1存储至SRQ1中,存储在SRQ1中的RQE1又称为SRQE1。
上述步骤510至步骤592中,以INI 1和TGT 1之间传输处理流程为例进行了介绍。可以理解的是,INI 1和TGT 2之间的传输处理流程,与INI 1和TGT 1之间传输处理流程相似。可以理解的是,上述步骤中都是以接收成功为例进行描述的。可选的,上述步骤中的接收成功还可以替换为接收失败,这种实现方式中,需要INI 1通过组播或单播重新发送未成功接收的消息。可以理解的是,上述步骤510至步骤592中以INI 1向TGT 1发送一个数据包1为例进行描述,可选的,上述方法还适用于当INI 1需要向TGT 1发送多个数据包以实现一个WQE对应的数据请求的示例中。可以理解的是,上述步骤中均以TGT1和TGT 2是组播组1的组播成员为例进行描述,可选的,组播组1还可以包括更多数目的组播成员。
可以理解的是,上述IO设备11在网络中向组播组1的组播成员发送数据包1时,该数据包1可以以消息(message)的形式承载。
在本申请实施例中,提供了一种基于TCP/IP的组播传输方法。具体实现时,INI 1包括的IO设备11可以根据写请求1和组播信息生成数据包1,并向组播组1的组播成员发送该数据包1,而不是通过INI 1包括的主机10中的处理器进行数据封装生成数据包,避免了现有技术中基于TCP/IP实现组播传输时存在复杂度高、延时大和传输效率低的问题。通过设置INI 1包括的IO设备11发送的数据包1携带用于标识组播组1的组播成员与INI1之间的链路连接的组播信息,能够确保组播数据的可靠传输。
下面以上述图4所示的应用场景为例,结合图8中的实施例,对本申请实施例提供的组播传输方法的另一种具体实现方式进行详细描述。
图8是本申请实施例提供的一种组播传输方法800的示意性流程图。如图8所示,该方法800包括步骤810至步骤880。下面,具体介绍步骤810至步骤880。本申请实施例中,IO设备11、IO设备21和IO设备31中的任意一个IO设备均支持RoCE。
步骤810,主机10获取SQE1,并将SQE1存储至SQ1中。
SQE1用于携带写请求1,写请求1携带待写入数据1位于主机10包括的存储器中的源地址。主机10获取SQE1可以包括如下步骤:主机10中的应用程序1生成WR1;主机10调度驱动提供的接口把WR1转化成WQE1。WR1和WQE1和携带的信息相同,仅是格式不相同。可以理解的是,WQE1放入SQ1后,WQE1又称为SQE1。下文中,统一将从SQ1中获取的WQE1称为SQE1。
步骤811,IO设备11从SQ1中获取SQE1。
其中,SQE1的格式为SGL格式,即SQE1中包括了待写入数据1的源地址和SQE1的源地址,待写入数据1的源地址为待写入数据1位于主机10包括的存储器中的地址,SQE1的源地址为SQE1位于主机10包括的存储器中的位置。
步骤812,IO设备11根据SQE1从主机10的存储器中获取待写入数据1,对待写入数据1进行封装生成数据包1。
数据包1的格式可以如图9中的(1)所示,该数据包1依次包括以太网头、IP头、,UDP头、BTH、载荷、不变循环冗余码校验(invariant cyclic redundancy check,ICRC)和帧检验序列(frame check sequence,FCS)即。BTH的格式可以参见图9中的(2)所示。图9中的(2)中,操作码(opration code,Opcode)用于表明该包的类型(type)或载荷(payload)中更高层的协议类型。S是Solicited Event的缩写,表明回应者产生应该产生一个事件。M是MigReq的缩写,一般用于迁移状态。Pad表明有多少额外字节被填充到IB PayLoad中。TVer是Transport Header Version的缩写,表明该包的版本号。Partition Key用来表征与本Packet关联的逻辑内存分区。rsvd是reserved的缩写,该字段是保留的。Destination QP表明目的端Queue Pair序号。A是Acknowledge Request,表示该packet的应答可由响应者调度。PSN是数据包的序列号(packet sequence number,PSN),在接收侧用于判断数据包是否发生乱序。下文中的表2定义了RDMA操作对应的OpCode列表。BTH还包括扩展头,扩展头中可以包括以下至少一个字段:AETH字段,RETH字段,ImmDt字段和SynETH字段。AETH字段用于指示SQ1中的SQE可用的数目,RETH字段用于指示RDMA读操作或RDMA写操作,ImmDt字段用于指示携带立即数,SynETH字段的取值用于唯一指示一个读请求,该一个读请求为组播组1的组播成员发送给INI 1的请求,即该读请求用于请求将INI 1中存储的待写入数据存储至该组播组1的组播成员对应的存储区域中。
表2
可以理解的是,在本申请实施例中,数据包1的头部包括的ImmDt字段用于指示不携带立即数,数据包1的头部包括的RETH字段用于指示RDMA写操作,SynETH字段的取值为空,即不用于唯一指示一个读请求。此外,数据包1的头部包括的其它参数信息可以参见上文中的表1中的第二列的内容。
步骤820,IO设备11向组播组1的组播成员发送消息1,消息1包括数据包1。相应的,组播组1的成员(即,IO设备21和IO设备31)分别接收到该消息1。
示例性的,图9中的(3)示出了消息1包括的数据包1的格式。可选的,在另一些实现方式中,IO设备11对将待写入数据1进行封装还可以生成多个数据包,该多个数据包共同携带待写入数据1。这种实现方式中,消息1还可以包括该多个数据包。示例性的,图9中的(3)示出了一个消息包括2个数据包的格式。
上述实现方式中,当IO设备21或IO设备31接收到消息1,且对消息1进行校验后,IO设备21或IO设备31可以向INI 1发送一个ACK消息,该ACK消息表示IO设备21或IO设备31已经正确接收到消息1。
步骤830,主机20从IO设备21的RQ2中获取rqe1,rqe1用于指示将待写入数据1写入主机20的存储器中的位置1。
rqe1的格式为SGL格式,即rqe1携带rqe1位于IO设备21的存储器中的源地址和待写入数据1位于IO设备21的存储器中的源地址。
在步骤830之前,IO设备21还用于执行如下操作:对消息1进行解析,获取待写入数据1,并将生成的rqe1存储至RQ2中。
步骤831,主机30从IO设备31的RQ3中获取rqe2,rqe2用于指示将待写入数据1写入主机30的存储器中的位置2。
rqe2的格式为SGL格式,即rqe2携带rqe2位于IO设备31的存储器中的源地址和待写入数据1位于IO设备31的存储器中的源地址。
在步骤831之前,IO设备31还用于执行如下操作:对消息1进行解析,获取待写入数据1,并将生成的rqe2存储至RQ3中。
步骤840,主机20根据rqe1,从IO设备21的存储器中读取待写入数据1,并将待写入数据1存储至主机20的存储器中的位置1。
步骤841,主机30根据rqe2,从IO设备31的存储区域中读取待写入数据1,并将待写入数据1存储至主机30的存储器中的位置2。
步骤850,IO设备11向主机10发送CQE1,CQE1包括SQE1的完成信息。
上述步骤850是在IO设备11接收到IO设备21和IO设备31发送的ACK消息后执行的,该ACK消息用于指示成功接收到该消息1。
步骤860,主机20向IO设备21发送SQE2,SQE2包括rqe1的完成信息。
步骤861,IO设备21向INI 1发送IO完成消息1,IO完成消息1指示IO设备21成功执行SQE1对应的写请求1。相应的,INI 1的IO设备11接收到IO完成消息1,并向TGT 1发送ACK消息。
步骤862,IO设备11向主机10的主机10发送CQE2,CQE1包括SQE2的完成信息。
步骤870,主机30向IO设备31发送SQE3,SQE2指示rqe2的完成信息。
步骤871,IO设备31向INI 1发送IO完成消息2,IO完成消息2指示IO设备31成功执行SQE1对应的写请求1。相应的,INI 1的IO设备11接收到IO完成消息1,并向TGT 2发送ACK消息。
步骤870,IO设备11向主机10发送CQE3,CQE3包括SQE2的完成信息。
步骤880,主机10向应用程序1发送IO完成消息3,IO完成消息3指示WR1对应的写请求1已被执行。
在步骤880之前,还可以包括如下步骤:主机10根据CQE2和CQE3生成IO完成消息3。
可以理解的是,上述步骤810至步骤880的执行顺序仅为示意并不构成任何限定。例如,还可以先执行步骤841再执行步骤840。
上述实现方式,提供了一种基于RDMA的组播传输的方法,该方法可以实现可靠和高效的数据传输。
下面以上述图4所示的应用场景为例,结合图10中的实施例,对本申请实施例提供的组播传输方法的又一种具体实现方式进行详细描述。
图10是本申请实施例提供的一种组播传输方法1000的示意性流程图。如图10所示,该方法1000包括步骤1010至步骤1080。下面,具体介绍步骤1010至步骤1080。
本申请实施例中,IO设备11、IO设备21和IO设备31中的任意一个IO设备均支持RoCE。两个IO设备之间基于RoCE传输报文时,需要进行内存注册(memory registration,MR)。注册一个MR后,MR具有如下属性:RDMA操作上下文(context)、MR被注册的缓存地址(address,简记为addr)、MR被注册的缓存长度(length)、MR被注册的本地密钥(local key,lkey)和MR被注册的远程密钥(remote key,rkey)。以INI 1为例,可以将INI 1包括的主机10的存储器中的存储区域注册到INI 1包括的IO设备11的存储器中,此后该IO设备11就可以实现直接对该主机10的存储器中的存储区域的操作(例如读操作或写操作)。
可选的,在步骤1010之前,INI 1与TGT 1交互可以获取TGT 1包括的主机30的存储区中的区域1的地址和远程密钥值rkey1,即INI 1获取了该区域1的读写权限,此后INI 1可以向访问自己的存储器一样直接访问区域1,以实现读操作或写操作。同样的,INI1与TGT 2交互可以获取TGT 2包括的主机20的存储器中的区域2的地址和远程密钥值rkey2,即INI 1获取了该区域2的读写权限,此后INI 1可以向访问自己的存储器一样直接访问区域2,以实现读操作或写操作。其中,rkey1的密钥值与rkey2的密钥值相同,为便于描述,下文中将rkey1的密钥值与rkey2的密钥值统称为rkey的密钥值。可以理解的是,对TGT 1而言,rkey的密钥值或rkey1的密钥值都用于指示区域1。对TGT 2而言,rkey的密钥值或rkey2的密钥值都用于指示区域2。
步骤1010,主机10获取SQE1,并将SQE1存储至SQ1中。
SQE1用于携带写请求1,写请求1携带待写入数据1位于主机10包括的存储器中的源地址。主机10获取SQE1可以包括如下步骤:主机10中的应用程序1生成WR1;主机10调度驱动提供的接口把WR1转化成WQE1。WR1和WQE1和携带的信息相同,仅是格式不相同。可以理解的是,WQE1放入SQ1后,WQE1又称为SQE1。下文中,统一将从SQ1中获取的WQE1称为SQE1。
步骤1011,IO设备11从SQ1中获取SQE1。
其中,SQE1的格式为SGL格式,即SQE1中包括了待写入数据1的源地址和SQE1的源地址,待写入数据1的源地址为待写入数据1位于主机10包括的存储器中的地址,SQE1的源地址为SQE1位于主机10包括的存储器中的位置。
步骤1012,IO设备11根据SQE1,组播链路信息和rkey的密钥值,对SQE1指示的待写入数据1进行封装生成消息1,消息1包括数据包1。
可选的,在步骤1012之前还包括以下步骤:IO设备11根据SQE1从主机10的存储器中获取待写入数据1。
其中,数据包1携带待写入数据1。数据包1的格式可以如图9中的(1)所示。
步骤1020,IO设备11向组播组1的组播成员发送消息1。
组播组1的组播成员包括TGT 1和TGT 2。相应的,IO设备21和IO设备31会接收到该消息1。消息1中封装的参数可以参见上述表1中的第二列所示。
步骤1030,IO设备21对消息1进行解析,获取待写入数据1和rkey的密钥值,并将待写入数据1存储至rkey的密钥值指示的区域1中。
步骤1040,IO设备31对消息1进行解析,获取待写入数据1和rkey的密钥值,并将待写入数据1存储至rkey的密钥值指示的区域2中。
步骤1050,IO设备11向主机10发送CQE1,CQE1包括SQE1的完成信息。相应的,主机10将接收到的CQE1存储至CQ1中。
步骤1060,IO设备21向INI 1发送IO完成消息1。相应的,IO设备11接收到IO完成消息1。其中,IO完成消息1用于指示TGT 1成功执行SQE1对应的写请求1。
可选的,在步骤1060之后IO设备11还可以向IO设备21发送IO完成消息1的ACK消息。
步骤1061,IO设备11向主机10发送CQE2。相应的,主机10将接收到的CQE2存储至CQ1中。
步骤1070,IO设备31向INI 1发送IO完成消息2。
其中,IO完成消息2用于指示TGT 2成功执行SQE1对应的写请求1。相应的,IO设备31接收到IO完成消息1。其中,IO完成消息3用于指示TGT 2成功执行SQE1对应的写请求1。
可选的,在步骤1070之后IO设备11还可以向IO设备31发送IO完成消息2的ACK消息。
步骤1071,IO设备11向主机10发送CQE3。相应的,主机10将接收到的CQE3存储至CQ1中。
步骤1080,IO设备11向应用程序2发送IO完成消息3,IO完成消息3指示WR1对应的写请求1已被成功执行。
在步骤1080之前,还可以包括如下步骤:主机10根据CQE2和CQE3生成IO完成消息3。
可以理解的是,上述步骤1010至步骤1080的执行顺序仅为示意并不构成任何限定。例如,还可以先执行步骤1040再执行步骤1030。
上述实现方式,提供了一种基于RDMA的组播传输的方法,该方法可以实现可靠和高效的数据传输。
下面以上述图4所示的应用场景为例,结合图11中的实施例,对本申请实施例提供的组播传输方法的又一种具体实现方式进行详细描述。
图11是本申请实施例提供的一种组播传输方法1100的示意性流程图。如图11所示,该方法1100包括步骤1110至步骤1130。下面,具体介绍步骤1110至步骤1130。
在本申请实施例中,待写入数据1可以存储在主机10的存储器的区域1中,在步骤1110之前,INI1与TGT 1交互后,TGT 1可以获取区域1的地址VA1和远程密钥值rkey1,即TGT1获取了该区域1的读写权限,此后TGT1 1可以向访问自己的存储器一样直接访问区域1进行读操作或写操作。同样的,INI 1与TGT 2交互后,TGT 2也可以获取区域1的地址VA1和远程密钥值rkey1,即TGT 2获取了该区域1的读写权限,此后TGT1 2可以向访问自己的存储器一样直接访问区域1进行读操作或写操作。其中,TGT 1和TGT2获取区域1中存储的数据的流程如下文中的步骤1110至步骤1120的描述。
步骤1110,主机10获取SQE1,并将SQE1存储在SQ1中。
在步骤1110之前还包括如下步骤:主机10在主机10的存储器中创建IO命令消息1。其中,SQE1包括IO命令消息1,IO命令消息1用于指示将待写入数据1存储至组播组1的组播成员对应的主机(即,主机20和主机30)的存储器中。示例性的,待写入数据1可以但不限于是10个字节的数据。
步骤1111,IO设备11从SQ1中获取SQE1。
其中,SQE1的格式为SGL格式,即SQE1中包括IO命令消息1对应的待写入数据1位于主机10的存储器的区域1的信息,且SQE1中包括VA1和rkey1。
步骤1112,IO设备11向组播组1的组播成员发送IO命令消息1。
组播组1的组播成员包括TGT 1和TGT 2,相应的,IO设备21和IO设备31会接收到IO命令消息1。IO命令消息1可以包括至少一个RoCE的数据包,该至少一个RoCE的数据包包头携带的参数可以参见上文表1中的第二列内容。
可选的,在步骤1112之前,IO设备11还可以进行如下操作:根据组播链路信息和rkey的密钥值,生成该至少一个RoCE的数据包。
可以理解的是,上述IO命令消息1中携带VA1和rkey1,但不携带待写入数据1。
步骤1113,IO设备21向主机20发送rqe1。相应的,主机20接收到rqe1。
其中,rqe1的格式为SGL格式,即rqe1中包括了IO命令消息1位于IO设备21的存储器中的源地址,以及待写入数据1位于主机10的存储器中的地址(即,VA1)。
可选的,在步骤1113之前,IO设备21还用于执行如下操作:对IO命令消息1进行解析,得到rq1,并将生成的rqe1存储至RQ2中,rqe1用于指示将待写入数据1存储至主机20的存储器的区域1中。
可选的,在步骤1113之后,IO设备21还会向IO设备11发送ACK报文,ACK报文用于指示IO设备21已成功接收IO命令消息1。
步骤1114,IO设备31向主机30发送rqe2。相应的,主机30接收到rqe2。
在步骤1114之前,IO设备31还用于执行如下操作:对IO命令消息1进行解析,得到rq2,并将生成的rqe2存储至RQ2中,rqe2用于指示将待写入数据1存储至主机30的存储器的区域2中。
其中,rqe2的格式为SGL格式,即rqe2中包括了IO命令消息1位于IO设备31的存储器中的源地址,以及待写入数据1位于主机10的存储器中的地址。
可选的,在步骤1114之后,IO设备31还会向IO设备11发送ACK消息,ACK消息用于指示IO设备31已成功接收IO命令消息1。
可选的,在步骤1114之后,INI 1可以将时刻1作为聚合时刻的起始时刻,时刻1是IO设备11接收到ACK消息1和ACK消息2中的最后一个ACK消息的时刻。
步骤1115,IO设备11向主机10发送CQE1。
其中,CQE1用于指示SQE1包括的IO命令消息1已被执行。在一些实现方式中,IO设备11接收到组播组1的所有组播成员发送的IO命令消息1的ACK消息后,IO设备11才执行上述步骤6。
步骤1116,主机20向IO设备21发送SQE2。
其中,SQE2的格式可以为SGL格式,即SQE2中包括SQE2位于主机20的存储器中的地址,以及待写入数据1位于主机20的存储器的区域1的地址。也就是说,SQE2可以携带地址信息1,地址信息1包括VA1和lkey1,lkey1用于指示IO设备21中的注册区域MR2,VA1用于指示MR2中的一块区域2,该一块区域2用于存储待写入数据1。SQE2还可以携带读取信息1,读取信息1用于指示从主机10的存储器中的区域1中获取待写入数据1的信息。读取信息1可以包括(rkey1,size,offset),rkey1用于指示区域1,size用于指示区域1中的数据的大小,offset用于指示待读取区域的地址相对于区域1的起始地址的偏移量。在一个示例中,读取信息1可以具体用于指示从区域1中获取待写入数据1的全部数据,即读取信息1可以包括(rkey1,size,offset),此时,size的大小等于待写入数据1的大小,offset的取值用于指示区域1的结束地址至区域1的起始地址的偏移量。在另一个示例中,读取信息1可以具体用于指示从区域1中获取待写入数据1的部分数据,即读取信息1可以包括(rkey1,size,offset),此时,size的大小等于待写入数据1的部分数据的大小,offset的取值用于指示该部分数据的地址在区域1中的偏移量。可以理解的是,这种实现方式中,TGT 1需要发送多个(例如,至少两个)读取信息才能获取待写入数据1的全部内容。
步骤1117,主机30向IO设备31发送SQE3。
其中,SQE3的格式可以为SGL格式,即SQE3中包括SQE3位于主机30的存储器中的地址,以及待写入数据1位于主机30的存储器中的区域1的地址。也就是说,SQE3可以携带地址信息2,地址信息2包括VA2和lkey2,lkey2用于指示IO设备31中的注册区域MR3,VA2用于指示MR3中的一块区域3,该一块区域3用于存储待写入数据1。SQE3还可以携带读取信息2,读取信息2用于指示从主机10的存储器中获取待写入数据1的信息。读取信息2可以包括(rkey1,size,offset),rkey1用于指示区域1,size用于指示读取的区域1中的数据的大小,offset用于指示待读取区域的地址相对于区域1的起始地址的偏移量。在一个示例中,读取信息2可以具体用于指示从区域1中获取待写入数据1的全部数据,即读取信息2可以包括(rkey1,size,offset),此时,size的大小等于待写入数据1的大小,offset的取值用于指示区域1的结束地址至区域1的起始地址的偏移量。在另一个示例中,读取信息2可以具体用于指示从区域1中获取待写入数据1的部分数据,即读取信息2可以包括(rkey1,size,offset),此时,size的大小等于待写入数据1的部分数据的大小,offset的取值用于指示该部分数据的地址在区域1中的偏移量。可以理解的是,这种实现方式中,TGT 2需要发送多个(例如,至少两个)读取信息才能获取待写入数据1的全部内容。
步骤1118,IO设备21向IO设备11发送读请求消息1。相应的,IO设备11会接收到读请求消息1。
可选的,在步骤1118之前,IO设备21还需要根据SQE2和上文中表1所示的第四列的内容,生成读请求消息1,即读请求消息1携带地址信息1和读取信息1。读请求消息1的格式可以参见图9中的(4)所示,该读请求消息1包括一个数据包,该一个数据包的扩展头中应包括SynETH字段1和RETH字段1。SynETH字段1的取值用于唯一指示同步读操作请求1,读操作请求1用于请求读取主机10的存储器的区域1中的待写入数据1。RETH字段1的取值用于指示读操作。具体的,SynETH字段1的取值等于tag1,即tag1用于唯一指示同步读操作请求1。
其中,IO设备21通过单播方式向IO设备11发送读请求消息1,读请求消息1中封装的地址信息可以参见上文表1中的第四列内容。
步骤1119,IO设备31向IO设备11发送读请求消息2。相应的,IO设备11接收到读请求消息2。
可选的,在步骤1119之前,IO设备31还需要根据SQE3和上文中表1所示的第四列的内容,生成读请求消息2,即读请求消息2携带地址信息2和读取信息2。读请求消息2的格式可以参见图9中的(4)所示,该读请求消息2包括一个数据包,该一个数据包的扩展头中应包括SynETH字段2和RETH字段2。SynETH字段2的取值用于唯一指示同步读操作请求1,读操作请求1用于请求读取INI 1的区域1中的待写入数据1。RETH字段1的取值用于指示读操作。具体的,SynETH字段2的取值等于tag1,即tag1用于唯一指示同步读操作请求1。
其中,IO设备31通过单播方式向IO设备11发送读请求消息2,读请求消息2中封装的地址信息可以参见上文表1中的第四列内容。
步骤1120,IO设备11向组播组1的成员发送同步读请求响应消息1。相应的,组播组1的成员接收到同步读请求响应消息1。组播组1的组播成员包括TGT 1和TGT 2。
可选的,在步骤1120之前,IO设备11还可以执行如下步骤:对读请求消息1和读请求消息2进行处理,生成同步读请求响应消息1,同步读请求响应消息1携带待写入数据1和组播组成员1的信息。其中,IO设备11对读请求消息1和读请求消息2进行处理,生成同步读请求响应消息1,可以包括以下步骤:IO设备11对读请求消息1进行解析,得到SynETH字段1和读取信息1(即,(rkey1,size,offset)),以及对读请求消息2进行解析,得到SynETH字段2和读取信息2(即,(rkey1,size,offset));IO设备11根据SynETH字段1的取值和SynETH字段2的取值,确定读请求消息1对应的读请求任务和读请求消息2对应的读请求任务是同一任务;IO设备11根据读取信息1从区域1中获取待写入数据1,并根据组播组1的链路信息和待写入数据1进行封装,生成同步读请求响应消息1。组播组1的链路信息的内容可以参见上文表1中的第二列内容所示。
步骤1121,IO设备21对同步读请求响应消息1进行解析,获取待写入数据1,并将待写入数据1存储至rkey2的密钥值指示的区域1中。
可选的,在步骤1121之后IO设备21还可以向IO设备11发送ACK消息3,ACK消息3表示IO设备21成功接收到同步读请求响应消息1。
步骤1122,IO设备31对同步读请求响应消息1进行解析,获取待写入数据1,并将待写入数据1存储至rkey3的密钥值指示的区域2中。
可选的,在步骤1122之后IO设备31还可以向IO设备11发送ACK消息4,ACK消息4表示IO设备31成功接收到同步读请求响应消息1。
步骤1123,IO设备11向主机10发送CQE2,CQE2包括向组播组1发送同步读请求响应消息1的完成信息。
步骤1124,主机20向IO设备11发送SQE4,SQE4包括TGT 1执行同步读请求响应消息1的完成信息。
其中,SQE4的格式为SGL格式,即SQE4包括TGT 1中存储待写入数据1的区域1的地址信息。
步骤1125,主机30向IO设备11发送SQE5,SQE5包括TGT 2执行同步读请求响应消息1的完成信息。
其中,SQE5的格式为SGL格式,即SQE5包括TGT 2中存储待写入数据1的区域2的地址信息。
步骤1126,IO设备21向IO设备11发送IO完成消息1,IO完成消息1用于指示TGT1成功执行同步读请求响应消息1对应的任务。相应的,IO设备11接收到IO完成消息1。
可选的,在步骤1126之后IO设备11还可以向IO设备21发送IO完成消息1的ACK消息,表示IO设备11已接收到IO完成消息1。
步骤1127,IO设备11向主机10发送CQE3,CQE3包括TGT 1成功执行同步读请求响应消息1的完成信息。
步骤1128,IO设备31向IO设备11发送IO完成消息2,IO完成消息2用于指示TGT2成功执行同步读请求响应消息1对应的认为。相应的,IO设备11接收到IO完成消息1。
可选的,在步骤1128之后IO设备11还可以向IO设备31发送IO完成消息2的ACK消息,表示IO设备11已接收到IO完成消息2。
可选的,在步骤1128之后IO设备11还可以向IO设备31发送IO完成消息2的ACK消息。
步骤1129,IO设备11向主机10发送CQE4,CQE4包括TGT 2成功执行同步读请求响应消息1的完成信息。
步骤1130,主机10向应用程序1发送IO完成消息3,IO完成消息3指示SQE1对应的IO命令消息1已被执行。
在步骤1130之前,还可以包括如下步骤:处理器1根据CQE3和CQE4生成IO完成消息3。
可以理解的是,上述步骤1110至步骤1130的执行顺序仅为示意并不构成任何限定。例如,还可以先执行步骤1114再执行步骤1113。例如,还可以先执行步骤1117再执行步骤1116。
上述实现方式,提供了另一种基于RDMA的组播传输的方法,该方法可以实现可靠和高效的数据传输。
当上述各个方法实施例中的计算设备(例如,INI 1、TGT 1或TGT 2)是通过虚拟机实现时,上述主机和IO设备分别对应虚拟机中的主机和IO设备,虚拟机中的主机和IO设备通过承载其虚拟功能的物理主机和物理IO设备来实现。其实现方式与上述实现方式类似,不再赘述。
上文中描述的组播传输方法仅为示意,并不对本申请实施例提供的组播传输方法构成任何限定。上文结合图3至图11,详细描述了本申请实施例提供的组播传输方法,下面将结合图12和图13,详细描述本申请的装置的实施例。方法实施例的描述与装置实施例的描述相互对应,因此,未详细描述的部分可以参见前面方法实施例。
图12是本申请实施例提供的一种组播传输装置1200的示意性结构图。图12所示的组播传输装置1200可以执行上述实施例的组播传输方法的相应步骤。如图12所示,该组播传输装置1200包括:收发单元1210和处理单元1220。
在一些实现方式中,该装置1200应用于第一IO设备,收发单元1210用于接收上述步骤520、步骤540、步骤580、步骤591、步骤592、步骤811、步骤820、步骤850、步骤861、步骤862、步骤871、步骤872、步骤1101、步骤1020、步骤1050、步骤1061、步骤1070、步骤1071、步骤1111、步骤1112、步骤1115、步骤1118、步骤1119、步骤1120、步骤1123、步骤1126、步骤1127、步骤1128、步骤1129、步骤310和步骤330。处理单元1220用于执行上述步骤530、步骤812、步骤1012、步骤320。上述步骤具体可以参见上文方法实施例中的相关描述,此处不再详细赘述。
应理解的是,本申请实施例的装置1200可以用于实现上述实施例的组播传输方法。具体的,当装置1200为硬件时,该装置1200可以是IO设备本身,或也可以是IO设备中的部分模块。当装置1200为软件时,该装置1200可以是部署在IO设备中的软件系统。
在另一些实现方式中,该装置1200应用于第二IO设备,收发单元1210用于执行上述步骤540、步骤560、步骤830、步骤831、步骤860、步骤861、步骤870、步骤871、步骤1060、步骤1070、步骤1112、步骤1114、步骤1116、步骤1117、步骤1118、步骤1119、步骤1126、步骤1128。处理单元1220用于执行上述步骤550、步骤580、步骤590、步骤591、步骤840、步骤841、步骤1030、步骤1040、步骤1121、步骤1122。上述步骤具体可以参见上文方法实施例中的相关描述,此处不再详细赘述。
图13是本申请实施例提供的一种组播传输装置1300的硬件结构示意图。图13所示的组播传输装置1300可以执行上述实施例的组播传输方法中IO设备所实现的方法的操作步骤。
如图13所示,该装置1300包括处理器1301、存储器1302、通信接口1303和数据传输线1304。其中,处理器1301、存储器1302、通信接口1303通过数据传输线1304进行通信,也可以通过无线传输等其他手段实现通信。该存储器1302用于存储指令,该处理器1301用于执行该存储器1302存储的计算机指令或程序代码。
在本申请实施例中,处理器1301可以为网卡或智能网卡中的处理器。存储器1302可以包括计算机指令或程序代码,该计算机指令或程序代码可以用于实现上述图12中的收发单元1210的功能,和/或上述图12中的处理单元1220的功能。收发单元1210的功能和处理单元1220的功能可以参见上文中的描述,此处不再详细赘述。
该存储器1302可以包括只读存储器和随机存取存储器,并向处理器1301提供指令和数据。存储器1302还可以包括非易失性随机存取存储器。例如,存储器1302还可以存储设备类型的信息。
该存储器1302可以是易失性存储器或非易失性存储器,或可包括易失性和非易失性存储器两者。其中,非易失性存储器可以是只读存储器(read-only memory,ROM)、可编程只读存储器(programmable ROM,PROM)、可擦除可编程只读存储器(erasable PROM,EPROM)、电可擦除可编程只读存储器(electrically EPROM,EEPROM)或闪存。易失性存储器可以是随机存取存储器(random access memory,RAM),其用作外部高速缓存。通过示例性但不是限制性说明,许多形式的RAM可用,例如静态随机存取存储器(static RAM,SRAM)、动态随机存取存储器(DRAM)、同步动态随机存取存储器(synchronous DRAM,SDRAM)、双倍数据速率同步动态随机存取存储器(double data date SDRAM,DDR SDRAM)、增强型同步动态随机存取存储器(enhanced SDRAM,ESDRAM)、同步连接动态随机存取存储器(synchlinkDRAM,SLDRAM)和直接内存总线随机存取存储器(direct rambus RAM,DR RAM)。
该数据传输线1304用于连接处理器1301、存储器1302以及通信接口1303。
本申请实施例还提供了一种计算机可读介质,该计算机可读介质存储有程序代码,当该计算机程序代码在计算机上运行时,使得计算机执行上述第一IO设备或第二IO设备执行的方法。这些计算机可读存储包括但不限于如下的一个或者多个:只读存储器(read-only memory,ROM)、可编程ROM(programmable ROM,PROM)、可擦除的PROM(erasablePROM,EPROM)、Flash存储器、电EPROM(electrically EPROM,EEPROM)以及硬盘驱动器(harddrive)。
本申请实施例还提供一种计算设备,其包括前述的主机和IO设备。
本申请实施例还提供一种计算集群,包括多个前述计算设备,该多个计算设备中的每个计算设备包括前述IO设备和前述的主机。
本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统、装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在本申请所提供的几个实施例中,应该理解到,所揭露的系统、装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。
所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(Read-Only Memory,ROM)、随机存取存储器(Random Access Memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述,仅为本申请的具体实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应以所述权利要求的保护范围为准。
Claims (23)
1.一种组播传输方法,其特征在于,应用于第一计算设备,所述第一计算设备包括第一输入输出IO设备,所述方法包括:
所述第一IO设备获取第一请求;
所述第一IO设备根据第一信息和所述第一请求,生成第一数据包,所述第一信息包括组播信息,所述组播信息用于标识组播组的组播成员与所述第一计算设备之间的链路连接,所述第一数据包携带所述组播信息和所述第一请求对应的待写入数据;
所述第一IO设备向所述组播组的组播成员发送所述第一数据包。
2.根据权利要求1所述的方法,其特征在于,
所述组播信息包括组播标识符,所述组播标识符是所述第一计算设备与所述组播组建立链路连接时获得的。
3.根据权利要求1或2所述的方法,其特征在于,
所述第一数据包还包括端口号,所述端口号用于指示传输所述第一数据包的方式为组播传输方式。
4.根据权利要求1至3任一项所述的方法,其特征在于,
所述第一计算设备还包括第一主机,所述第一IO设备与所述第一主机通过IO网络通信,所述第一请求为所述第一主机包括的处理器中运行的应用程序发送的请求。
5.根据权利要求4所述的方法,其特征在于,
所述第一信息还包括第一窗口信息,所述第一窗口信息用于指示所述组播组的组播成员在第一时间段内能够处理的数据的最小数量。
6.根据权利要求5所述的方法,其特征在于,
所述第一IO设备发送所述第一数据包采用的传输协议为传输控制协议/因特网互联协议TCP/IP。
7.根据权利要求4所述的方法,其特征在于,所述待写入数据为所述第一请求对应的数据中的一部分数据,所述第一信息还包括指示信息,所述指示信息用于指示对所述待写入数据进行封装,在所述第一IO设备根据第一信息和所述第一请求,生成第一数据包之前,所述方法还包括:
所述第一IO设备向所述组播组的组播成员发送IO写命令,所述IO写命令用于指示将所述第一请求对应的数据存储至第一注册区域MR中,所述第一请求对应的数据位于所述第一计算设备包括的第一主机包括的存储器中,所述第一MR为第二主机包括的存储器中的存储区域注册到第二IO设备的存储器中的存储区域,第二计算设备包括所述第二主机和所述第二IO设备,所述第二计算设备为所述组播组的组播成员;
所述第一IO设备接收所述组播组的组播成员发送的所述指示信息。
8.根据权利要求7所述的方法,其特征在于,
所述IO写命令包括第二密钥值和第二位置信息,所述第二密钥值用于识别所述第二MR,所述第二位置信息用于指示所述待写入数据在所述第二MR中的位置。
9.根据权利要求7或8所述的方法,其特征在于,
所述第一信息还包括信用值,所述信用值用于指示所述组播组的组播成员在第二时间段内能够处理的请求的最小数量,所述第一数据包的基本传输头部BTH携带所述信用值。
10.根据权利要求1至3任一项所述的方法,其特征在于,所述第一IO设备获取第一请求,包括:
所述第一IO设备接收所述组播组的组播成员发送的所述第一请求,所述第一请求用于指示将位于第二MR中的所述待写入数据存储至所述组播组的组播成员的存储区域,所述第二MR为第一主机包括的存储器中的存储区域注册到所述第一IO设备的存储器中的存储区域,所述第一计算设备还包括所述第一主机。
11.根据权利要求10所述的方法,其特征在于,
所述第一请求包括第一密钥值,第一位置信息和预设字段,所述第一密钥值用于识别所述第二MR,所述第一位置信息用于指示所述待写入数据在所述第二MR中的位置,所述预设字段的取值用于指示所述第一请求。
12.根据权利要求8至11任一项所述的方法,其特征在于,
所述第一IO设备发送所述第一数据包采用的传输协议为基于以太网的远程直接数据存取RDMA。
13.根据权利要求1至12任一项所述的方法,其特征在于,所述第一IO设备向所述组播组的组播成员发送所述第一数据包,包括:
所述第一IO设备向转发设备发送所述第一数据包,所述转发设备用于对所述第一数据包进行复制,并将复制后的所述第一数据包转发至所述组播组的组播成员,所述组播组的组播成员与所述第一计算设备之间的链路连接包括所述转发设备。
14.根据权利要求1至13任一项所述的方法,其特征在于,所述组播组的组播成员包括第二计算设备,
在所述第一IO设备向所述组播组的组播成员发送所述第一数据包之后,所述方法还包括:
所述第一IO设备接收所述第二计算设备发送的第二请求,所述第二请求用于请求获取所述第一数据包携带的所述第一请求对应的所述待写入数据;
所述第一IO设备向所述第二计算设备发送第二数据包,所述第二数据包携带所述待写入数据,且所述第二数据包包括的端口号用于指示传输所述第二数据包的传输方式为单播传输方式。
15.根据权利要求1至14任一项所述的方法,其特征在于,所述组播组的组播成员包括第二计算设备和第三计算设备,
所述方法还包括:
在所述第一IO设备接收到第一完成消息和第二完成消息后,所述第一IO设备向所述第一主机包括的处理器发送第三完成消息,所述第三完成消息用于指示所述第一请求已成功执行,所述第一完成消息用于指示所述第二计算设备已成功执行所述第一请求,所述第二完成消息用于指示所述第三计算设备已成功执行所述第一请求。
16.一种组播传输装置,其特征在于,包括收发单元和处理单元,
所述收发单元,用于获取第一请求;
所述处理单元,用于根据第一信息和所述第一请求,生成第一数据包,所述第一信息包括组播信息,所述组播信息用于标识组播组的组播成员与所述组播传输装置之间的链路连接,所述第一数据包携带所述组播信息和所述第一请求对应的待写入数据;
所述收发单元,还用于向所述组播组的组播成员发送所述第一数据包。
17.根据权利要求16述的装置,其特征在于,
所述组播信息包括组播标识符,所述组播标识符是所述组播传输装置与所述组播组建立链路连接时获得的。
18.根据权利要求16或17所述的装置,其特征在于,
所述第一数据包还包括端口号,所述端口号用于指示传输所述第一数据包的方式为组播传输方式。
19.根据权利要求16至18任一项所述的装置,其特征在于,
所述处理单元发送所述第一数据包采用的传输协议为传输控制协议/因特网互联协议TCP/IP,或为基于以太网的远程直接数据存取RDMA。
20.一种输入输出IO设备,其特征在于,所述IO设备包括至少一个处理器和通信接口,所述至少一个处理器,用于执行计算机程序或指令,以使得所述IO设备执行如权利要求1至15中任一项所述的方法。
21.一种计算设备,其特征在于,所述计算设备包括主机和输入输出IO设备,所述主机和所述IO设备通过IO网络通信;
所述主机用于运行应用程序,向所述IO设备发送所述应用程序产生的请求;
所述IO设备用于执行如权利要求1至15中任一项所述的方法。
22.一种计算机可读存储介质,其特征在于,包括计算机程序,当所述计算机程序在计算机上运行时,使得所述计算机执行如权利要求1至15中任一项所述的方法。
23.一种组播传输系统,其特征在于,所述系统包括第一计算设备和组播组,所述组播组为权利要求1至15中任一项所述的方法中的组播组,所述第一计算设备包括第一输入输出IO设备,所述第一IO设备用于执行权利要求1至15中任一项所述的方法的操作步骤。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111556558.4A CN116266800A (zh) | 2021-12-17 | 2021-12-17 | 组播传输方法、装置和系统 |
PCT/CN2022/139219 WO2023109891A1 (zh) | 2021-12-17 | 2022-12-15 | 组播传输方法、装置和系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111556558.4A CN116266800A (zh) | 2021-12-17 | 2021-12-17 | 组播传输方法、装置和系统 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN116266800A true CN116266800A (zh) | 2023-06-20 |
Family
ID=86743952
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111556558.4A Pending CN116266800A (zh) | 2021-12-17 | 2021-12-17 | 组播传输方法、装置和系统 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN116266800A (zh) |
WO (1) | WO2023109891A1 (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117240642A (zh) * | 2023-11-15 | 2023-12-15 | 常州楠菲微电子有限公司 | 一种ib组播报文复制和接收装置及方法 |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101325536A (zh) * | 2007-06-15 | 2008-12-17 | 上海贝尔阿尔卡特股份有限公司 | WiMAX系统的基站和网关中控制组播数据包传输的方法及装置 |
CN104378217B (zh) * | 2014-11-26 | 2018-03-06 | 中国联合网络通信集团有限公司 | 确定组播组数据的方法及装置 |
CN110768709A (zh) * | 2018-07-27 | 2020-02-07 | 清华大学 | 一种组播与单播协同的数据传输方法、服务器和终端 |
CN110768708B (zh) * | 2018-07-27 | 2021-08-06 | 清华大学 | 一种基于通信卫星的组播方法、服务器和终端 |
CN109067578B (zh) * | 2018-07-31 | 2021-05-25 | 杭州迪普科技股份有限公司 | 一种组播快速切换的方法和装置 |
-
2021
- 2021-12-17 CN CN202111556558.4A patent/CN116266800A/zh active Pending
-
2022
- 2022-12-15 WO PCT/CN2022/139219 patent/WO2023109891A1/zh unknown
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117240642A (zh) * | 2023-11-15 | 2023-12-15 | 常州楠菲微电子有限公司 | 一种ib组播报文复制和接收装置及方法 |
CN117240642B (zh) * | 2023-11-15 | 2024-01-19 | 常州楠菲微电子有限公司 | 一种ib组播报文复制和接收装置及方法 |
Also Published As
Publication number | Publication date |
---|---|
WO2023109891A1 (zh) | 2023-06-22 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11991072B2 (en) | System and method for facilitating efficient event notification management for a network interface controller (NIC) | |
US20230188465A1 (en) | Medical device communication method | |
US10013390B2 (en) | Secure handle for intra-and inter-processor communications | |
US10148581B2 (en) | End-to-end enhanced reliable datagram transport | |
US11381514B2 (en) | Methods and apparatus for early delivery of data link layer packets | |
US20080002578A1 (en) | Network with a constrained usage model supporting remote direct memory access | |
WO2023109891A1 (zh) | 组播传输方法、装置和系统 | |
CN115827549A (zh) | 网络接口卡、消息发送方法和存储装置 | |
Wang et al. | An Optimized RDMA QP Communication Mechanism for Hyperscale AI Infrastructure |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication |