CN118694724A - 一种报文传输方法、系统及设备 - Google Patents
一种报文传输方法、系统及设备 Download PDFInfo
- Publication number
- CN118694724A CN118694724A CN202310327309.0A CN202310327309A CN118694724A CN 118694724 A CN118694724 A CN 118694724A CN 202310327309 A CN202310327309 A CN 202310327309A CN 118694724 A CN118694724 A CN 118694724A
- Authority
- CN
- China
- Prior art keywords
- messages
- message
- queue number
- group
- port
- 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
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L47/00—Traffic control in data switching networks
- H04L47/50—Queue scheduling
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L47/00—Traffic control in data switching networks
- H04L47/10—Flow control; Congestion control
- H04L47/43—Assembling or disassembling of packets, e.g. segmentation and reassembly [SAR]
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/50—Network services
- H04L67/56—Provisioning of proxy services
- H04L67/568—Storing data temporarily at an intermediate stage, e.g. caching
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
一种报文传输方法、系统及设备,本申请中,第一设备的第一端口对待发送的报文流中的报文分组,形成至少一组报文,为每组报文中的报文配置组队列号,每组报文中的报文的组队列号相同。第一端口向存储设备的第二端口发送报文流中的报文。第二端口按照组队列号的大小顺序依次将组队列号相同的报文发送给存储设备,存储设备根据报文存储报文中携带的数据。作为报文的接收方,存储设备的第二端口按照组队列号的大小顺序依次将组队列号相同的报文发送给存储设备,保证存储设备有序的获取该报文流中的报文,报文传输效率有效提升,存储设备无需额外向第一设备反馈接收成功消息,减少了生产者‑消费者的传输模型中的信令交互。
Description
技术领域
本申请涉及通信技术领域,尤其涉及一种报文传输方法、系统及设备。
背景技术
生产者-消费者(producer-consumer)的传输模型中,生产者可以向存储设备发送数据报文以及指示数据传输完成的标志位报文。存储设备根据数据报文中携带的数据地址存储该数据报文所携带的数据,存储设备根据标志位报文中携带的标志位地址存储标志位。生产者将数据地址以及标志位地址通知给消费者。消费者在根据标志位地址从存储设备读取标志位后,根据数据地址从存储设备读取数据。
可见,对于存储设备来说,需要在标志位报文中携带的标志位地址存储标志位之前将数据报文中的数据存储起来,这样才能保证消费者根据数据地址从存储设备读取的数据才是正确的数据。
为了能够保证储装置接收到所有数据报文,可以对生产者-消费者的传输模型进行改进。存储设备可以在每接收到一个数据报文后向生产者发送接收成功消息,该接收成功消息中携带了数据报文中携带的数据的长度,生产者可以根据接收到的各个接收成功消息中携带的数据的长度确定存储设备是否已接受到所有数据报文。生产者在确定接收到所有数据报文后,生产者向存储设备发送标志位报文,以及向消费者通知数据地址以及标志位地址。但这种方式中存储设备需要反馈接收成功消息,在数据报文较多的情况下,接收成功消息的传输会占用较多的带宽。
发明内容
本申请提供一种报文传输方法、系统及设备,用以减少生产者-消费者的传输模型中的信令交互,提升报文传输效率。
第一方面,本申请实施例提供了一种报文传输方法,该方法主要由第一设备的第一端口以及存储设备的第二端口配合执行。该方法中,第一设备待发送的一个或多个报文流中的报文需要经过第一端口,由第一端口发送该一个或多个报文流中的报文。以发送一个报文流为例,第一设备的第一端口对待发送的报文流以的报文分组,形成至少一组报文,每一组报文中包括一个或多个报文,第一端口可以为每组报文中的报文配置组队列号,每组报文中的报文的组队列号相同。可见,一个组队列号能够标识一组报文。
第一端口可以向存储设备的第二端口发送报文流中的报文。本申请并不限定第一端口发送该报文流中报文的顺序。该报文流中的报文会经过第一端口以及第二端口之间的传输路径到达存储设备的第二端口。第二端口按照组队列号的大小顺序依次将组队列号相同的报文发送给存储设备,存储设备根据报文存储报文中携带的数据。
通过上述方法,第一端口能够为报文流中的报文配置组队列号,作为报文的接收方,存储设备的第二端口可以按照组队列号的大小顺序依次将组队列号相同的报文发送给存储设备,也即当第二端口将一组报文中所有报文传输给存储设备后,才可以传输下一组报文中的报文,保证存储设备能够有序的获取该报文流中的报文,报文传输效率有效提升,且存储设备无需额外再向第一设备反馈接收成功消息,减少了生产者-消费者的传输模型中的信令交互。
在一种可能的实现方式中,该报文流中可以仅包括数据报文,也可以既包括数据报文以及标志位报文。其中,数据报文用于携带数据,标志位报文相当于该报文流最后一个报文。标志这该报文流的结束。存储设备在接收到该标志位报文后,会根据该标志位报文存储标志位。而作为数据的消费者(如第二设备),在从存储设备中读取标志位后,则可以按照第一设备通知的数据在存储设备中的地址从存储设备中读取数据。在报文流包括数据报文以及标志位报文的情况下,报文流的标志位报文的组队列号大于报文流中数据报文的组队列号。
通过上述方法,由于标志位报文的组队列号大于报文流中数据报文的组队列号,对于存储设备来说,标志位报文会该报文流的所有数据报文传输到存储设备后,才会被第二端口发送给存储设备。换句话说,标志位一定是在报文流的所有数据报文中所携带的数据均存储在存储设备后存储。作为数据的消费者(如本申请中的第二设备),在从存储设备中读取标志位后,能够从存储设备读取正确的数据,保证了生产者-消费者传输模式中数据传输的准确性。
在一种可能的实现方式中,第一设备的第一端口对待发送报文流以的报文分组时,除了至少一组报文中的报文配置组队列号,还会为至少一组报文中的报文配置包队列号,为该报文流中的每个报文配置的包队列号不同。组队列号大的报文,该报文的包队列号也较大。也就是说,第一值小于第二值时,组队列号为第一值的一组报文中任一报文的包队列号小于组队列号为第二值的一组报文中任一报文的包队列号。
通过上述方法,报文流中的每个报文的包队列号能够区分出该报文流中的各个报文,便于存储设备侧的第二端口能够利用包队列号判断一组报文是否已完全传输到存储设备。
在一种可能的实现方式中,若报文流中包括数据报文以及标志位报文,该报文流的标志位报文的包队列号大于报文流中任一数据报文的包队列号。
通过上述方法,标志位报文的包队列号大于任一数据报文的包队列号,进一步保存该标志位报文是该报文流中最后一个被传输到存储设备的报文。
在一种可能的实现方式中,以第二端口传输组队列号为第一值和第二值的两组报文为例,第一值小于第二值,第二端口在将组队列号为第一值的所有报文传输给存储设备后,再向存储设备传输组队列号为第二值的报文。
通过上述方法,第二端口可以按照组队列号从小到大的顺序依次向存储设备传输各组报文中的报文,保证存储设备能够有序地接收到该报文流中的各个报文。
需要说明的是,第二端口也可以按照组队列号从大到小的顺序依次向存储设备传输各组报文中的报文,在本申请中,仅是以第二端口按照组队列号从小到大的顺序依次向存储设备传输各组报文中的报文为例进行说明,事实上,这两种传输方式的原理类似,本申请不再对按照组队列号从大到小的顺序依次向存储设备传输各组报文中的报文的方式进行赘述。
在一种可能的实现方式中,第二端口在将组队列号为第一值的所有报文传输给存储设备的过程中,若接收到组队列号为第二值的报文,第二端口可以将组队列号为第二值的报文存储在第二端口的缓存中。在组队列号为第一值的所有报文传输到存储设备后,再将缓存中或接收到的组队列号为第二值的报文传输给存储设备。
通过上述方法,第二端口能够暂时将无需传输给存储设备的报文缓存起来,便于后续能快速地从缓存中获取该报文,传输该报文。
在一种可能的实现方式中,第二端口在将组队列号为第一值的报文传输给存储设备时,需要判断组队列号为第一值的所有报文是否均已传输该存储设备。这种情况下,第二端口可以借助各个报文的包队列包进行判断。例如,第二端口确定包队列号大于缓存中组队列号为第二值的报文的最小包队列号的报文均已传输给存储设备;或第二端口确定包队列号大于当前接收到的组队列号为第二值的报文的包队列号的报文均已传输给存储设备,能够表明组队列号小于第二值的所有报文(适用于第二端口按照组队列号从小到大的次序传输的场景)均已传输给存储设备,也即组队列号为第一值的所有报文均已传输该存储设备。这样,第二端口可以向存储设备传输组队列号为第二值的报文。
通过上述方法,借助报文的包队列号能够简单、快速的确定组队列号为第一值的所有报文是否均已传输该存储设备,避免遗漏传输组队列号为第一值的报文,进一步确保存储设备能够有序接收各组报文。
在一种可能的实现方式中,当第二端口接收到的报文的组队列并非当前需要传输的报文的组队列号,第二端口接收的报文为需要缓存的报文。第二端口在存在需要缓存的报文且缓存中无空闲存储空间的情况下,第二端口可以将缓存中缓存的报文中的一个或多个报文丢弃,如将缓存中包队列号最大的一个或多个报文丢弃,再缓存中保存该需要缓存的报文。第二端口也可以直接丢弃该需要缓存的所有或部分报文。第二端口还可以将缓存中的报文以及需要缓存的报文中包队列号最大的一个或多个报文丢弃,将未丢弃的需要缓存的报文保存在缓存中。而对于丢弃的报文,第二端口可以通知第一设备重新传输丢弃的一个或多个报文,将未丢弃的需要缓存的报文保存在缓存中。
通过上述方法,第二端口能够通过丢弃报文的方式有效利用缓存中的存储空间,选择将包队列号较大的报文丢弃,能够保证该缓存中能够缓存较多后续短时间内需要传输的报文,保证了报文传输的效率。
在一种可能的实现方式中,第一端口在发送了报文流的所有报文后,第一设备还可以向第二设备发送通知消息,通知消息用于通知报文流中报文携带的数据在存储设备中的地址,该地址即为报文流中各个报文中携带的地址。对于数据报文,该地址即为数据地址,对于标志位报文,该地址即为标志位地址。第二设备在接收到通知消息后,可以根据通知消息从存储设备中读取报文流中报文携带的数据。
通过上述方法,存储设备能够有序的接收该报文流中的各个报文,这样第二设备在利用通知消息所告知的地址能够从存储设备中读取正确的数据。
第二方面,本申请实施例提供了一种报文传输系统,该系统包括第一设备以及存储设备。有益效果可以参见第一方面的相关描述,此处不再赘述。该系统中包括第一设备以及存储设备,第一设备包括第一端口,存储设备包括第二端口。在本申请中为了方便说明第二端口的作用,将第二端口与存储设备中除第二端口外的部分独立起来,第二端口与存储设备之间的交互,实际上为第二端口与存储设备中除第二端口外的部分之间的交互。同样的描述方式还存在于第一设备与第一端口的相关描述中。
在该系统中,第一设备的第一端口可以对待发送报文流中的报文分组,形成至少一组报文,为每组报文中的报文配置组队列号,每组报文中的报文的组队列号相同;第一端口向存储设备的第二端口发送报文流中的报文。
存储设备的第二端口可以按照组队列号的大小顺序依次将组队列号相同的报文发送给存储设备;存储设备根据报文存储报文中携带的数据。
在一种可能的实现方式中,报文流中的报文可以仅包括数据报文,也可以包括数据报文以及标志位报文,报文流的标志位报文的组队列号大于报文流中数据报文的组队列号。
在一种可能的实现方式中,第一设备的第一端口对报文流中的报文进行分组,形成至少一组报文,为至少一组报文中的报文配置组队列号,并为至少一组报文中的报文配置包队列号,报文流中的每个报文的包队列号不同,组队列号为第一值的一组报文中的报文的包队列号大小于组队列号为第二值的一组报文中的报文的包队列号,第一值小于第二值。
在一种可能的实现方式中,报文流的标志位报文的包队列号大于报文流中任一数据报文的包队列号。
在一种可能的实现方式中,第二端口在向存储设备传输报文时,在将组队列号为第一值的所有报文传输给存储设备后,再向存储设备传输组队列号为第二值的报文,其中,第一值小于第二值。
在一种可能的实现方式中,第二端口在将组队列号为第一值的所有报文传输给存储设备的过程中,若第二端口接收到组队列号为第二值的报文,第二端口可以将组队列号为第二值的报文存储在第二端口的缓存中。
在一种可能的实现方式中,第二端口在向存储设备传输组队列号为第二值的报文之前,可以确定包队列号大于缓存中组队列号为第二值的报文的最小包队列号的报文均已传输给存储设备;或确定包队列号大于当前接收到的组队列号为第二值的报文的包队列号的报文均已传输给存储设备。
在一种可能的实现方式中,第二端口在存在需要缓存的报文且缓存中无空闲存储空间的情况下,将缓存中的报文以及需要缓存的报文中包队列号最大的一个或多个报文丢弃,通知第一设备重新传输丢弃的一个或多个报文,将未丢弃的需要缓存的报文保存在缓存中。
在一种可能的实现方式中,系统还包括第二设备,第一设备向第二设备发送通知消息,通知消息用于通知报文流中报文携带的数据在存储设备中的地址。第二设备根据通知消息从存储设备中读取报文流中报文携带的数据。
第三方面,本申请实施例还提供了一种报文发送装置,该报文发送装置具有实现上述第一方面的方法实例中第一端口行为的功能,有益效果可以参见第一方面的描述此处不再赘述。功能可以通过硬件实现,也可以通过硬件执行相应的软件实现。硬件或软件包括一个或多个与上述功能相对应的模块。在一个可能的设计中,装置的结构中包括分组模块、以及发送模块,这些模块可以执行上述第一方面方法示例中的相应功能,具体参见方法示例中的详细描述,此处不做赘述。
第四方面,本申请实施例还提供了一种报文接收装置,报文接收装置具有实现上述第三方面的方法实例中第二端口行为的功能,有益效果可以参见第一方面的描述此处不再赘述。功能可以通过硬件实现,也可以通过硬件执行相应的软件实现。硬件或软件包括一个或多个与上述功能相对应的模块。在一个可能的设计中,装置的结构中包括传输模块,可选的还包括缓存模块,这些模块可以执行上述第一方面方法示例中的相应功能,具体参见方法示例中的详细描述,此处不做赘述。
第五方面,本申请实施例还提供了一种计算设备,该计算设备具有实现上述第一方面的方法实例中包括有第一端口的第一设备、或包括第二端口的存储设备行为的功能,有益效果可以参见第一方面的描述此处不再赘述。
具有实现上述第一方面的方法实例中包括有第一端口的第一设备行为的功能的计算设备包括处理器以及端口。所述处理器能够向端口传输报文流,端口被配置为支持所述计算设备执行上述第一方面方法中第一端口相应的功能。
具有实现上述第一方面的方法实例中包括有第二端口的存储设备行为的功能的计算设备包括存储器以及端口。存储器用于存储所述端口传输的报文中携带的数据,端口被配置为支持所述计算设备执行上述第一方面方法中第二端口相应的功能。
第六方面,本申请还提供一种计算机可读存储介质,所述计算机可读存储介质中存储有指令,当其在计算机上运行时,使得计算机执行上述第一方面以及第一方面的各个可能的实现方式中所述的方法。
第七方面,本申请还提供一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行上述第一方面以及第一方面的各个可能的实施方式中所述的方法。
第八方面,本申请还提供一种计算机芯片,所述芯片与存储器相连,所述芯片用于读取并执行所述存储器中存储的软件程序,执行上述第一方面以及第一方面的各个可能的实施方式中所述的方法。
附图说明
图1A为本申请提供的一种系统的架构示意图;
图1B为本申请提供的一种第一设备的结构示意图;
图1C为本申请提供的一种存储设备的结构示意图;
图2为本申请提供的一种报文传输方法示意图;
图3为本申请提供的一种报文分组的示意图;
图4为本申请提供的一种报文分组的示意图;
图5为本申请提供的一种报文传输的流程示意图;
图6为本申请提供的一种报文传输的流程示意图;
图7为本申请提供的一种报文发送装置的结构示意图;
图8为本申请提供的一种报文接收装置的结构示意图。
具体实施方式
如图1A所示,为本申请实施例提供的一种系统架构示意图,该系统包括第一设备100、存储设备300、以及第二设备200。第一设备100、存储设备300、以及第二设备200之间连接。本申请实施例并不限定第一设备100、存储设备300、以及第二设备200之间的连接方式,也不限定第一设备100、存储设备300、以及第二设备200的具体形态,第一设备100或第二设备200可以为独立的计算设备,也可以为计算设备中的一个组件,存储设备300可以为计算设备中的内存或硬盘等存储器,也可以为其他具体存储功能的设备或组件。
第一设备100与第二设备200可以通过存储设备300传输数据。在本申请实施例中以第一设备100通过存储设备300向第二设备200传输数据为例进行说明,对于第二设备200通过存储设备300向第一设备100传输数据的方式,与第一设备100通过存储设备300向第二设备200传输数据的方式类似,本申请实施例不再对此进行赘述。
第一设备100通过存储设备300向第二设备200传输数据时,可以将待传输的数据携带在数据报文中。本申请并不限定数据报文的数量,当数据量较小时,数据可以携带在一个数据报文中。当数据量较大时,数据可以分拆为多份,分别携带在多个数据报文中。数据报文除了会携带数据,携带有数据地址,该数据地址即为数据在存储设备300中的地址。第一设备100向存储设备300发送数据报文。
存储设备300接收到任一数据报文时,会根据数据报文中携带的数据地址存储该数据报文所携带的数据。
第一设备100在发送了数据报之后,会向第二设备200发送通知消息,该通知消息用于告知第二设备200该数据地址。第二设备200可以根据该数据地址从存储设备300读取数据。
在实际应用中,第一设备100可能需要通过存储设备300向第二设备200传输多个不同的数据。对于任一数据,第一设备100可以向存储设备300传输包括一个或多个数据报文的报文流。对于存储设备300来说,存储设备300可以接收到多个报文流。每个报文流携带了第一设备100需要传输给第二设备200的一个数据。
在一些可能的场景中,第一设备100侧为了能够使得第二设备200成功接收到一个报文流中的所有数据报文,第一设备100除了会发送携带有数据的数据报文,还会发送标志位报文。第一设备100向存储设备300传输包括有标志位报文以及数据报文的报文流。标志位报文会携带标志位在存储设备300中的地址(在本申请实施例中,将标志位在存储设备300中的地址简称为标志位地址)。可选的,标志位报文还会携带标志位。若第一设备100、存储设备300、以及第二设备200之间未预先约定标志位,第一设备100可以自行设计标志位,在这种情况下,标志位报文需要携带该标志位。当然,第一设备100、存储设备300、以及第二设备200之间已预先约定标志位,标志位报文中也可以不携带标志位。标志位报文实质上也是一种“数据报文”,标志位报文需要携带的“数据”为标志位。
存储设备300在接收到任一数据报文时,会根据数据报文中携带的数据地址存储该数据报文所携带的数据。存储设备300在接收到标志位报文时,会根据标志位报文中携带的标志位地址存储该标志位报文所携带的标志位;或者存储设备300接收到标志位报文时,会在该标志位地址上写入标志位。
第一设备100在发送了标志位报文以及数据报之后,会向第二设备200发送通知消息,该通知消息用于告知第二设备200该数据地址以及该标志位地址。
第二设备200在接收到通知消息后,在根据标志位地址从存储设备300读取该标志位后,可以根据该数据地址从存储设备300中读取数据。若根据标志位地址在存储设备300无法读取该标志位,说明存储设备300还没有收到标志位报文,第二设备200需要等到根据标志位地址能够从存储设备300读取该标志位,才会按照该数据地址从存储设备300中读取数据。标志位报文的存在是为了保证第二设备200能够从存储设备300中读取数据。
类似的,在实际应用中,第一设备100可能需要通过存储设备300向第二设备200传输多个不同的数据(也即需要传输多个不同的报文流)。对于任一数据,第一设备100可以向存储设备300传输包括标志位报文以及一个或多个数据报文的报文流。对于存储设备300来说,存储设备300可以接收到多个报文流。每个报文流携带了第一设备100需要传输给第二设备200的一个数据。
无论是否发送标志位报文,第一设备100通过存储设备300向第二设备200传输数据的模式属于生产者-消费者(producer-consumer)模式。第一设备100是产生数据的生产者(producer),第二设备200是消费数据的消费者(consumer)。
在本申请实施例中,第一设备100具备第一端口110,第一设备100需要发送的数据报文或者标志位报文均需要经过第一端口110。存储设备300具备第二端口310,存储设备300需要接收的数据报文或者标志位报文是由该第二端口310接收、并传输给存储设备300的。
在第一设备100侧,若第一设备100需要向存储设备300发送一个报文流为例,第一端口110能够对该报文流中的报文(如数据报文、以及标志位报文)进行分组,并为每组报文中的报文配置组队列号。同一组的报文具备相同的组队列号。若该报文流中包括标志位报文,那么,该报文流中的标志位报文的组队列号大于该报文流中任一数据报文的组队列号。第一端口110会将报文的组队列号封装在报文中,也即第一端口110所发出的报文中会携带组队列号。
若第一设备100需要向存储设备300发送多个报文流,第一端口110能够对每个报文流中的报文(如数据报文、以及标志位报文)进行分组,并为每组报文中的报文配置组队列号。同一组的报文具备相同的组队列号。前一个需要发送的报文流中任一数据报文的组队列号小于后一个需要发送的报文流中任一数据报文的组队列号。
若该多个报文中的一个报文流中包括标志位报文,那么,该报文流中的标志位报文的组队列号大于该报文流中任一数据报文的组队列号。前一个需要发送的报文流中的标志位报文可以单独为一组,该前一个需要发送的报文流中的标志位报文的组队列号可以小于后一个需要发送的报文流中任一数据报文的组队列号。前一个需要发送的报文流中的标志位报文也可以与后一个需要发送的报文流中的数据报文为一组,该前一个需要发送的报文流中的标志位报文的组队列号可以等于后一个需要发送的报文流中一个或多个数据报文的组队列号。
在存储设备300侧,第二端口310能够接收第一端口110发送的报文,第二端口310会按照组队列号的大小关系依次将每组报文中的报文传输给存储设备300。也就是说,第二端口310在将报文传输给存储设备300时,第二端口310在将一组报文中的所有报文传输给存储设备300之后,才会传输向存储设备300传输另一组报文(也可以称为下一组报文)中的报文。若报文流中包括标志位报文,由于该报文流中的标志位报文的组队列号大于该报文流中任一数据报文的组队列号,该报文流中的标志位报文一定是在该报文流中的所有数据报文之后传输至存储设备300。若报文流中不包括标志位报文,由于前一个报文流中的数据报文的组队列号大于后一个报文流中任一数据报文的组队列号,后一个报文流中的数据报文一定是在前一个报文流中的所有数据报文之后传输至存储设备300。
这种按照组队列号将报文传输给存储设备300的方式能够保证存储设备300能够有序接收到一个或多个报文流中的数据报文,这样,存储设备300能够依次存储每个报文流携带的数据。
对于第二设备200来说,第二设备200能够利用第一设备100通知的数据地址(可选的,以及标志位报文)从存储设备300侧依次读取一个或多个报文流所携带的数据。对于报文流中包括标志位报文的情况下,当第二设备200能够一个报文流中的标志位地址从存储设备300读取该报文流中的标志位,则说明该报文流中的所有数据报文已经被存储设备300所接收,且数据报文所携带的数据也已经存储在存储设备300中。第二设备200根据数据地址从存储设备300所读取的数据是该数据报文所携带的数据,第二设备200能够读取正确的数据。
另外,第一设备100(第一设备100中的第一端口110)还可以对需要发送一个或多个报文流中的报文(如数据报文、以及标志位报文)配置包队列号。每个报文的包队列号不同,该包队列号可以是一个递增的数值。前一个需要发送的报文流中任一报文的组队列号小于后一个需要发送的报文流中任一报文的组队列号。若报文流中包括标志位报文,那么,该报文流中的标志位报文的包队列号大于该报文流中任一个数据报文的包队列号。第一端口110会将报文的包队列号封装在报文中,也即第一端口110所发出的报文中会携带包队列号。
在报文(如数据报文、以及标志位报文)既配置包队列号又配置组队列号的情况下,第二端口310也可以借助所接收到一组报文中的一个报文的包队列号确定该组报文的前一组报文中所有数据报文是否已传输到存储设备300,或确定是否需要缓存接收到的该报文。例如,第二端口310可以在接收到一个报文,若该报文的组队列号大于当前需要传输的一组报文中报文的组队列号,可以先判断包队列号大于该报文的包队列号的数据报文是否均已传输给存储设备300,若均传输给存储设备300,说明当前需要传输的一组报文中所有报文已传输到存储设备300,若包队列号大于该报文的包队列号的报文中存在未接收到的数据报文,说明当前需要传输的一组报文中所有报文并未全部传输到存储设备300,第二端口310可以暂时缓存该报文,直至包队列号大于该报文的包队列号的数据报文均已传输给存储设备300,再将该报文传输给存储设备300。例如,第二端口310可以确定所缓存的组队列号大于当前需要传输的一组报文中报文的组队列号的报文的最小包队列号,可以先判断包队列号大于该报文的包队列号的数据报文均已传输给存储设备300,若均传输给存储设备300,说明当前需要传输的一组报文中所有报文已传输到存储设备300,可以开始传输该报文的组队列号所标识的该组报文。若包队列号大于该报文的包队列号的报文中存在未接收到的数据报文,说明当前需要传输的一组报文中所有报文并未均传输到存储设备300,第二端口310还需要继续等待,以接收当前需要传输的一组报文中的报文,直至包队列号大于该报文的包队列号的数据报文均已传输给存储设备300,再开始传输该报文的组队列号所标识的该组报文。
报文(如数据报文、以及标志位报文)的包队列号的配置,能够保证存储设备300准确的将各个数据报文,避免数据报文遗漏的情况。
第二端口310能够缓存接收到的报文,第二端口310配置有缓存。本申请实施例并不限定为第二端口310的缓存的大小。第二端口310可以将暂时无法传输给存储设备300的报文存储在该缓存中。例如,第二端口310可以将组队列号大于当前需要传输给存储设备300的报文的组队列号的报文先缓存在该缓存中。在当前组队列号所标识的一组报文中的所有报文均传输给存储报文后,再将缓存的报文传输给存储设备300。
缓存的存储空间是有限的,第二端口310能够将缓存中所缓存的报文丢弃,以使得缓存中有空闲的存储空间继续缓存报文。例如,当第二端口310需要在缓存中缓存报文时,若缓存中无空闲的存储空间,且需要缓存的报文的包队列号小于缓存中缓存的报文的包队列号,第二端口310可以丢弃掉缓存中包队列号最大的报文。第二端口310在丢弃报文后,还会通知第一设备100重新传输该报文。
本申请实施例中并不限定第一设备100、第二设备200以及存储设备300的具体形态,第一设备100或第二设备200可以仅是计算设备中的一个组件(如处理器、网卡、协处理器等),第一设备100或第二设备200也可以为一个独立的计算设备。
如图1B所示,为本申请实施例提供的一种第一设备100的结构示意图,该第一设备100包括处理器120以及第一端口110,可选的,还包括存储器130等。关于第一端口110的功能可以参见前述说明,此处不再赘述。
其中,处理器120可以为中央处理器(central processing unit,CPU),处理器120还可以是其他通用处理器、数字信号处理器(digital signal processor,DSP)、专用集成电路(application specific integrated circuit,ASIC)、现场可编程门阵列(fieldprogrammable gate array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件、人工智能(artificial intelligence,AI)芯片、片上系统(system onchip,SoC)等。通用处理器120可以是微处理器或者是任何常规的处理器等。
存储器130可以包括易失性存储器(volatile memory),例如随机存取存储器(random access memory,RAM)。存储器130还可以包括非易失性存储器130(non-volatilememory),例如只读存储器(read-only memory,ROM),快闪存储器,机械硬盘(hard diskdrive,HDD)或固态硬盘(solid state drive,SSD)。
第二设备200的结构与第一设备100的结构类似,具体可以参见第一设备100的结构的相关说明,此处不再赘述。
存储设备300可以是计算设备中的内存,也可以是计算设备中的持久化存储器(如硬盘等),也可以是具备存储功能的设备。
如图1C所示,为本申请实施例提供的一种存储设备300的结构示意图,该存储设备300包括存储器320以及第二端口310,可选的,还包括处理模块330等。关于第二端口310的功能可以参见前述说明,此处不再赘述。处理模块330可以是处理器(处理器的类型可以参见前述第一设备100中处理器120的说明,此处不再赘述),处理模块330也可以是其他具备处理功能的电路逻辑或组件。关于存储器320的类型可以参见第一设备100中存储器130的说明,此处不再赘述。
在本申请实施例中,第一端口110向第二设备200所发送的报文中携带有组队列号,第二端口310按照组队列号的大小依次将报文传输给存储设备300,在将携带同一个组队列号的所有报文传输给存装置之后再传输携带其他组队列号的报文。这样,保证存储设备300能够有序的接收到各个报文,保证第二设备200能够从存储设备300中读取正确的数据。
下面结合如图2对本申请实施例提供的一种报文传输方法进行说明,该方法包括:
步骤201:第一设备100的第一端口110对待发送一个或多个报文流中的报文分组,为报文配置组队列号。若报文流中仅包括数据报文,步骤201中提及的报文即为数据报文。前一个报文流中的任一报文的组队列号小于该下一个报文流的任一报文的组队列号。若报文流中既包括数据报文又包括标志位报文,步骤201中提及的报文为数据报文以及标志位报文的统称。前一个报文流中的任一报文的组队列号小于该下一个报文流的任一报文的组队列号,且一个报文流中的标志位报文的组队列号大于该报文流的任一数据报文的组队列号。
第一设备100需要将一个或多个数据存储在存储设备300中时,通过第一端口110发送一个或多个报文流,每个报文流用于传输其中一个数据。每个报文流中包括一个或多个数据报文,每个数据报文中携带的数据为该报文流所传输的数据或部分数据。每个数据报文中还会携带数据地址。该数据地址指向数据在存储设备300的存储位置。每个数据报文还会携带数据长度等信息。报文流中除了数据报文,还可以包括标志位报文,标志位报文的作用是为了让第二设备200能够更加准确的接收到该报文流所传输的数据。标志位报文可以视为该报文流的结尾。
一个或多个报文流中的报文先到达第一端口110,第一端口110获取该一个或多个报文流中的报文时,会执行步骤201。
第一设备100在向第一端口110传输一个或多个报文流的报文时,还会指示该第一端口110对该一个或多个报文流的报文分组方式,也即指示第一端口110报文的组数(也即分为几组报文),以及每组报文中需要包括的报文。本申请实施例并限定报文分组的方式。第一设备100指示该第一端口110对该一个或多个报文流的报文分组方式的操作可以是由第一设备100上运行的软件程序执行的。
假若报文流中包括标志位报文,这里列举几种可能的报文分组方式。例如,对于任一报文流,该报文流的标志位报文单独分为一组,该报文流中多个数据报文分为包含数据报文的数量相同的多组报文。又例如,对于任一报文流,该报文流的标志位报文单独分为一组,该报文流中多个数据报文分为包含数据报文的数量不完全相同或不同的多组报文。又例如,将多个报文流中分为多组报文,每组报文中的报文数量可以相同,也可以不同。且前一个报文流的标志位报文可以与下一个报文流的一个或多个数据报文位于同一组。
假若报文流中不包括标志位报文,这里列举几种可能的报文分组方式。例如,对于任一报文流,该报文流中多个数据报文分为包含数据报文的数量相同的多组报文。不同报文流的报文位于不同组。又例如,对于任一报文流,该报文流中多个数据报文分为包含数据报文的数量不完全相同或不同的多组报文。
本申请实施例中第一端口110除了为每组报文配置组队列号,还可以为每个报文配置包队列号。
第一设备100向第一端口110传输一个或多个报文流的报文时,指示该第一端口110对该一个或多个报文流的报文分组以及每组报文中包括的报文。第一端口110在第一设备100的指示下对该一个或多个报文流的报文进行分组,配置组队列号。同一组报文中的数据报文的组队列号相同。组队列号也可以为一个递增的编号。第一端口110在配置组队列号时,还可以为报文配置包队列号。第一端口110可以按照组队列号的大小顺序为每组报文中的配置包队列号,每个报文的包队列号不同,包队列号为一个递增的编号。这样,前一组报文的包队列号小于后一组报文的包队列号,这里前一组以及后一组是以组队列号的大小区分的,组队列号小的一组报文为前一组报文,组队列号大的一组报文为后一组报文。按照这种方式所配置的包队列号使得前一个报文流的报文的包队列号也会小于后一个报文流的报文。
如图3所示,第一设备100的第一端口110接收到一个报文流中的四个数据报文以及一个标志位报文,第一设备100的第一端口110按照第一设备100的指示将四个数据报文构成一组报文。第一端口110为该组报文配置组队列号G0,第一端口110为四个数据报文配置包队列号,分别为0、1、2、3。第一设备100的第一端口110按照第一设备100的指示将包队列号为4的标志位报文单独组建为一组报文。第一端口110为该组报文配置组队列号G1,第一端口110为标志位报文配置包队列号4。
需要说明的是,第一设备100在指示第一端口110对该一个或多个报文流的报文分组时,可以仅告知哪几个报文为一组。组队列号的具体取值可以由第一端口110自行按照递增的方式为每组报文中的报文配置。当然,第一设备100在指示第一端口110对该一个或多个报文流的报文分组时,可以告知哪几个报文为一组,也可以同时告知该组报文的组队列号。
如图4所示,第一设备100的第一端口110先后接收到的两个报文流中的报文,也即接收到8个数据报文以及2个标志位报文,其中,每四个数据报文与一个标志位报文为同一个报文流中的报文。第一设备100的第一端口110在第一设备100的指示下将先接收到的前一个报文流的前四个报文(也即四个数据报文)构成一组报文,第一端口110为该组报文配置组队列号G0,第一端口110为前一个报文流中的四个数据报文配置包队列号,分别为0、1、2、3。
第一设备100的第一端口110在第一设备100的指示下将接收到的前一个报文流的第五个报文(也即标志位报文)单独组建为一组报文。第一端口110为该组报文配置组队列号G1。第一端口110为前一个报文流中的标志位报文配置包队列号4。
第一设备100的第一端口110在第一设备100的指示下将接收到的后一个报文流的前四个报文(也即四个数据报文)构成一组报文,第一端口110为该组报文配置组队列号G2,第一端口110为后一个报文流中的四个数据报文配置包队列号,分别为5、6、7、8。
第一设备100的第一端口110在第一设备100的指示下将接收到的后一个报文流的第五个报文(也即标志位报文)单独组建为一组报文。第一端口110为该组报文配置组队列号G3。第一端口110为后一个报文流中的标志位报文配置包队列号9。
第一设备100的第一端口110在为一个或多个报文流中的报文配置了组队列号后,该一个或多个报文流中的报文可以携带各自的组队列号。第一端口110在为该至少一个数据报文以及标志位报文配置了包队列号后,该一个或多个报文流中的报文中可以携带各自的包队列号。本申请并不限定数据报文以及标志位报文携带组队列号或包队列号的方式。例如,在一个或多个报文流中的报文的报文头中可以增加用于记录组队列号的字段或者用于记录包队列号的字段,第一端口110在执行步骤202之前,可以将组队列号或包队列号封装在数据报文或标志位报文的报文头中。
步骤202:第一设备100的第一端口110向存储设备300(存储设备300的第二端口310)发送该一个或多个报文流。
第一设备100的第一端口110向存储设备300发送该一个或多个报文流时,并不限定该一个或多个报文流中的报文的发送顺序。第一设备100的第一端口110可以按照包队列号或者组队列号依次发送该一个或多个报文流中的报文。第一设备100的第一端口110可以随机地发送该一个或多个报文流中的报文。
该一个或多个报文流中各个报文从第一端口110到存储设备300的第二端口310的传输路径可以相同,也可以不同。这里的传输路径可以是物理传输路径,也即第一设备100的第一端口110与存储设备300侧的第二端口310之间的物理路径。这里的传输路径也可以是逻辑传输路径,第一设备100的第一端口110与存储设备300侧的第二端口310之间的物理路径上可以部署多条逻辑路径。
步骤203:对于每个报文流,第一设备100向第二设备200发送通知消息,该通知消息用于告知第二设备200该报文流中各个数据报文所携带的数据地址。若该报文流中还包括标志位报文,该通知消息还用于告知第二设备200标志位在存储设备300的标志位地址。
步骤204:存储设备300的第二端口310按照组队列号的大小依次将各组报文中的报文发送给存储设备300。
由于在步骤202中并不限定一个或多个报文流中的报文的发送顺序以及报文的传输路径,导致在存储设备300的第二端口310接收报文时并非是按照包队列号或者组队列号的大小顺序依次接收各个报文的。
存储设备300的第二端口310在执行步骤204时,会将一组报文中的所有报文发送给存储设备300后,才会发送另一组报文中的报文。
存储设备300的第二端口310在每接收到一个报文时,会先判断该报文的组队列号是否为该第二端口310当前处理的组队列号。若是,存储设备300的第二端口310则将该报文传输给存储设备300。否则,存储设备300的第二端口310可以丢弃该报文,通知第一设备100重新传输该报文。存储设备300的第二端口310也可以将该报文存储在缓存中。其中,当前处理的组队列号是指当前需要传输给存储设备300的报文的组队列号,当前处理的组队列号会随着报文的传输发生变化。
在当前处理的组队列号所标识的该组报文中的所有报文均已传输给存储设备300的情况下,存储设备300的第二端口310可以开始传输下一个组队列号所标识的一组报文中的报文。
本申请实施例并不限定存储设备300的第二端口310确定当前处理的组队列号所标识的该组报文中的所有报文均已传输给存储设备300的方式。
例如,存储设备300的第二端口310与第一设备100的第一端口110之间可以预先约定同一个组队列号所标识的一组报文中报文的数量,存储设备300的第二端口310可以记录已传输给存储设备300的、当前处理的组队列号所标识的该组报文中的报文的数量,在确定所记录的报文的数量与预先约定的数量一致时,可以确定当前处理的组队列号所标识的该组报文中的所有报文均已传输给存储设备300。
又例如,第一设备100的第一端口110可以将同一个组队列号所标识的一组报文中报文的数量通知给第二端口310,如数据报文的报文头中可以记录该报文的组队列号所标识的一组报文中报文的数量。存储设备300的第二端口310可以记录已传输给存储设备300的、当前处理的组队列号所标识的该组报文中的报文的数量,在确定所记录的报文的数量与报文头中携带的该报文的组队列号所标识的一组报文中报文的数量一致时,可以确定当前处理的组队列号所标识的该组报文中的所有报文均已传输给存储设备300。
又例如,存储设备300的第二端口310可以每向存储设备300传输一个报文,记录该报文的包队列号(可选的,也可以记录组队列号),存储设备300的第二端口310可以缓存当前处理的组队列号的下一个组队列号所标识的一组报文中的报文,存储设备300的第二端口310确定当前接收到的报文以及所缓存的当前处理的组队列号的下一个组队列号所标识的一组报文中的报文的最小包队列号,存储设备300可以根据已记录的已传输给存储设备300的报文的包队列号,确定最小包队列号之前所有包队列号所标识的报文是否已传输给存储设备300。若是,则说明当前处理的组队列号所标识的该组报文中的所有报文均已传输给存储设备300。否则,说明当前处理的组队列号所标识的该组报文中还有未传输给存储设备300的报文。
存储设备300的第二端口310与第一设备100的第一端口110之间可以预先约定最小的组队列号,第一设备100的第一端口110为各组报文配置组队列号是以最小的组队列号开始编号的,对于存储设备300的第二端口310来说,从最小的组队列号开始处理。存储设备300的第二端口310按照组队列号的大小从最小的组队列号开始,依次将每组报文中的报文发送给存储设备300。
如图5所示,以存储设备300的第二端口310需要接收到如图3所示的四个数据报文以及一个标志位报文。
由于四个数据报文以及一个标志位报文的传输路径以及发送顺序不同,导致包队列号为4、3、2的报文(也即两个数据报文以及一个标志位报文)先到达存储设备300的第二端口310。包队列号为0、1还在传输路径上。
存储设备300的第二端口310确定包队列号为3、2的报文的组队列号为当前处理的组队列号G0,存储设备300的第二端口310可以将包队列号为3、2的数据报文传输给存储设备300。存储设备300可以执行步骤205。
存储设备300的第二端口310确定包队列号4的报文(也即标志位报文)的组队列号与当前处理的组队列G0号不一致,比当前处理的组队列号大1,是需要下次处理的组队列号。存储设备300的第二端口310可以将包队列号为4的报文保存在第二端口310的缓存中。
之后,当存储设备300的第二端口310接收到包队列号为1、0的报文,存储设备300的第二端口310确定包队列号为0、1的报文的组队列号为当前处理的组队列号G0,存储设备300的第二端口310可以将包队列号为0、1的数据报文传输给存储设备300。存储设备300可以执行步骤205。
存储设备300的第二端口310根据已记录的传输给存储设备300的报文的包队列号,确定包队列号4的报文之前的报文,也即包队列号为0、1、2、3的报文已传输给存储设备300。
存储设备300可以开始处理下一个组队列号,这样组队列号G1就变为当前处理的组队列号,存储设备300的第二端口310开始向存储设备300传输队列号为G1的报文,存储设备300的第二端口310可以将包队列号4的报文传输给存储设备300。
若组队列号为G1的报文之后,还有存储设备300的第二端口310还接收到携带其他组队列号的报文,存储设备300可以采用如上类似的方式处理该报文。
在前述说明中提及,存储设备300的第二端口310可以将非当前处理的组队列号所标识的一组报文中的报文保存在缓存中。但缓存中的存储空间是有限的,随着非当前处理的组队列号所标识的一组报文中的报文的写入,缓存中的存储空间会被占满。若缓存中无空闲的存储空间存储设备300还需要再在该缓存中存储报文时,存储设备300可以直接丢弃掉当前需要缓存的报文,并通知第一设备100重新传输该报文。存储设备300也可以丢弃缓存中已缓存的报文。若缓存中无足够的存储空间缓存存储设备300当前需要缓存在该缓存中写入报文时,存储设备300可以直接丢弃掉当前需要缓存的部分报文,并通知第一设备100重新传输该报文。存储设备300也可以丢弃缓存中已缓存的报文中的部分报文。
例如,存储设备300可以选择将缓存中包队列号小于当前需要缓存的报文的包队列号的一个或多个报文丢弃,在丢弃了该一个或多个报文后,再将当前需要缓存的报文缓存在该缓存。又例如,存储设备300可以选择将缓存中组列号大于当前需要缓存的报文的组队列号的一个或多个报文丢弃,在丢弃了该一个或多个报文后,再将当前需要缓存的报文缓存在该缓存。又例如,存储设备300可以选择将需要缓存的包队列号最大的一个或多个报文丢弃,将需要缓存未丢弃的报文缓存在该缓存中。
如图6所示,以存储设备300的第二端口310需要接收到如图4所示的两个报文流的报文,也即8个数据报文以及2个标志位报文。以存储设备300的第二端口310的缓存最多能够存储两个报文为例进行。
由于8个数据报文以及2个标志位报文的传输路径以及发送顺序不同,导致包队列号为2、3、4、5、6的报文(也即四个数据报文以及一个标志位报文)先到达存储设备300的第二端口310。包队列号为0、1、7、8、9还在传输路径上。
存储设备300的第二端口310确定包队列号为3、2的报文的组队列号为当前处理的组队列号G0,存储设备300的第二端口310可以将包队列号为3、2的数据报文传输给存储设备300。存储设备300可以执行步骤205。
存储设备300的第二端口310确定包队列号4的报文(也即标志位报文)的组队列号与当前处理的组队列G0号不一致,比当前处理的组队列号大1,是需要下次处理的组队列号。存储设备300的第二端口310可以将包队列号为4的报文保存在第二端口310的缓存中。
存储设备300的第二端口310确定包队列号5、6的报文(也即数据报文)的组队列号与当前处理的组队列G0号不一致,比当前处理的组队列号大2。存储设备300的第二端口310需要将包队列号为5、6的报文保存在第二端口310的缓存中。但由于存储设备300的第二端口310中已经保存了包队列号为4的报文,当前缓存中最多容纳一个报文。存储设备300可以将包队列号为5的报文保存在第二端口310的缓存中,丢弃包队列号为6的报文,并通知第一设备100重传该包队列号为6的报文。
之后,当存储设备300的第二端口310接收到包队列号为1、0、7、8、9的报文,存储设备300的第二端口310确定包队列号为0、1的报文的组队列号为当前处理的组队列号G0,存储设备300的第二端口310可以将包队列号为0、1的数据报文传输给存储设备300。存储设备300可以执行步骤205。
存储设备300的第二端口310根据已记录的传输给存储设备300的报文的包队列号,确定包队列号4的报文之前的报文,也即包队列号为0、1、2、3的报文已传输给存储设备300。
存储设备300可以开始处理下一个组队列号,这样组队列号G1就变为当前处理的组队列号,存储设备300的第二端口310开始向存储设备300传输队列号为G1的报文,存储设备300的第二端口310可以将包队列号4的报文传输给存储设备300。
若组队列号为G1的报文之后,存储设备300的第二端口310根据已记录的传输给存储设备300的报文的包队列号,确定缓存中比组队列号大1的组队列号G2的一组报文中最小的包队列号5的报文之前的报文,也即包队列号为0、1、2、3、4的报文已传输给存储设备300,说明组队列号为G1的报文均已传输至存储设备300。
存储设备300可以开始处理下一个组队列号,这样组队列号G2就变为当前处理的组队列号,存储设备300的第二端口310开始向存储设备300传输队列号为G2的报文,存储设备300可以将包队列号为5、7、8的报文传输给存储设备300,将包队列号为9的报文保存在第二端口310的缓存中。
随着后续第一设备100重新传输的包队列号为6的报文到达存储设备300的第二端口310,存储设备300的第二端口310可以将包队列号为6的报文传输给存储设备300。
包队列号为6的报文传输给存储设备300之后,组队列号为G2的报文均已传输给存储设备300,存储设备300的第二端口310可以开始传输组队列号为G3的报文。
步骤205:存储设备300在接收到数据报文时,根据数据报文中携带的数据地址将数据报文携带的数据存储在该数据地址上。在接收到标志位报文时,根据标志位报文中携带的标志位地址将标志位写入到该标志位地址上。
存储设备300在将标志位写入到标志位地址上后,可以等待第二设备200从存储设备300中读取该标志位,也可以向第二设备200发起指示,指示该第二设备200读取标志位。
步骤206:第二设备200在每接收到一个报文流的通知消息,第二报文可以根据通知消息中的携带的数据地址从存储设备300中读取数据。
若通知消息中还携带了标志位地址,第二设备200可以根据通知消息中携带的标志位地址从存储设备300读取标志位。在读取成功后,根据通知消息中的携带的数据地址从存储设备300中读取数据。
第二设备200在接收到一个报文流的通知消息后,可以周期性的从存储设备300中读取标志位,直至读取成功,也可以等待存储设备300发起的指示,在接收到存储设备300发起的指示后,再执行步骤206。
本申请并不限定第一设备100、存储设备300、以及第二设备200之间的连接方式、以及第一设备100、存储设备300、第二设备200的具体形态。
第一设备100、存储设备300、以及第二设备200可以位于同一计算设备中,第一设备100、存储设备300、以及第二设备200之间通过总线连接,该总线可以为基于快捷外围部件互连标准(peripheral component interconnect express,PCIe)的线路,也可以为计算快速互联(compute express link,CXL)、统一总线(unified bus,Ubus或UB)或缓存一致互联协议(cache coherent interconnect for accelerators,CCIX)协议或其他协议的总线。
在第一设备100、存储设备300、以及第二设备200位于同一计算设备的场景下,本申请列举其中三种设备可能采用的具体形态。
第一种,第一设备100为计算设备中的处理器、第二设备200为计算设备中的智能网卡、存储设备300包括内存控制器以及内存。
该处理器可以为CPU、ASIC、FPGA、AI芯片、SoC或复杂可编程逻辑器件(complexprogrammable logic device,CPLD),图形处理器(graphics processing unit,GPU)等。
内存可以为易失性存储器,例如RAM、动态随机存取存储器(dynamic randomaccess memory,DRAM)等。内存也可以为非易失性存储器,例如ROM、存储级内存(storageclass memory,SCM)等。
智能网卡除了进行数据传输之外,还可以承载处理器卸载到智能网卡的数据处理任务。
智能网卡需要承载处理器卸载到智能网卡的数据处理任务。处理器可以将需要智能网卡处理的数据写入到内存中。智能网卡通过直接内存访问(direct memory access,DMA)从内存中读取数据。处理器通过内存向智能网卡传输数据时,可以采用如图3所示的数据传输方式。处理器可以通过处理器侧的端口向内存控制器发送数据报文(可选的,还可以发送标志位报文)。内存控制器侧的第二端口310可以按照组队列号的大小次序依次将每组报文中的报文传输给内存控制器,内存控制器在接收到报文后,可以根据报文中携带的数据地址或标志位地址在内存中写入数据或标志位。
处理器在通过处理器侧的端口向内存控制器发送数据报文以及标志位报文后,通知智能网卡数据地址以及标志位地址,智能网卡可以通过DMA的方式在从内存中读取标志位后,再从内存中读取数据。
类似的,智能网卡也可以通过内存向处理器传输数据,智能网卡通过内存向处理器传输数据的方式也可以采用如图3所示的数据传输方式。
智能网卡可以基于DMA技术通过智能网卡侧的端口向内存控制器发送数据报文以及标志位报文。内存控制器侧的第二端口310可以按照组队列号的大小次序依次将每组报文中的报文传输给内存控制器,内存控制器在接收到报文后,可以根据报文中携带的数据地址或标志位地址在内存中写入数据或标志位。
智能网卡在通过智能网卡侧的端口向内存控制器发送数据报文以及标志位报文后,通知处理器数据地址以及标志位地址,处理器可以从内存中读取标志位后,再从内存中读取数据。
第二种,第一设备100为计算设备中的中央处理器、第二设备200为计算设备中的协处理器、存储设备300包括内存控制器以及内存。
协处理器可以是一种协助中央处理器完成其无法执行或执行效率低下的处理任务的处理器,协处理器可以为数据处理单元(data process unit,DPU)、GPU、张量处理器(tensor processing unit,TPU)或神经网络处理器(neural network processing unit,NPU)等具有数据处理功能的处理器,还可以为ASIC、FPGA、AI芯片、SoC或CPLD。
处理器通过内存向协处理器传输数据的方式以及协处理器通过内存向处理器传输数据的方式均可以采用如图3所示的数据传输方式,此处处理器通过内存向协处理器传输数据的方式以及协处理器通过内存向处理器传输数据的方式与前述说明中处理器通过内存向智能网卡传输数据的方式以及智能网卡通过内存向处理器传输数据的方式类似,具体可以参见前述说明,此处不再赘述。
第三种,第一设备100为计算设备中的处理器、第二设备200为计算设备中的卸载卡、存储设备300为卸载卡中的内存。
关于计算设备中的处理器的说明可以参见前述说明,此处不再赘述。计算设备中的卸载卡的功能可以与前述提及的智能网卡类似,能够承担处理器所卸载的处理任务。卸载卡上可以部署处理器以及内存,卸载卡上的处理器可以为DPU、GPU、TPU、NPU等具有数据处理功能的处理器,还可以为ASIC、FPGA、AI芯片、SoC或CPLD。卸载卡中的内存的类型与计算设备中内存的类型类似,具体可以参见前述说明,此处不再赘述。
处理器可以将需要卸载卡处理的数据写入到卸载卡的内存中。智能网卡可以直接从内存中读取数据。处理器通过卸载卡的内存向卸载卡传输数据的方式与处理器通过内存向智能网卡传输数据的方式类似,区别在于卸载卡不需要利用DMA读取数据,仅需要直接访问自身的内存读取数据,具体可以参见前述说明,此处不再赘述。
类似的,卸载卡也可以通过卸载卡内存向处理器传输数据,卸载卡通过卸载卡的内存向处理器传输数据的方式与智能网卡通过内存向处理器传输数据的方式类似,区别在于卸载卡不需要利用DMA写入数据以及标志位,仅需要直接访问自身的内存写入数据以及标志位,具体可以参见前述说明,此处不再赘述。
第一设备100、存储设备300、以及第二设备200也可以位于不同的计算设备中,第一设备100、存储设备300、以及第二设备200之间通过网络连接。例如,第一设备100、以及第二设备200可以为超融合基础架构(hyper converged infrastructure,HCI)或可组合式分类基础架构(composable disaggregated infrastructure,CDI)架构中的物理形态的主机,存储设备300可以为HCI或CDI架构下的存储器。
在第一设备100、存储设备300、以及第二设备200位于不同计算设备的场景下,本申请列举其中两种设备可能采用的具体形态。
第一种、第一设备100以及第二设备200为同一数据中心中的计算设备,存储设备300为第一设备100与第二设备200的共享内存。当第一设备100以及第二设备200通过CXL总线连接时,CXL总线提供了能够被第一设备100以及第二设备200共同访问的共享内存。
第一设备100通过该共享内存与第二设备200交互数据,第一设备100通过该共享内存与第二设备200交互数据的方式与图3所示的数据传输方式类似,具体可以参见前述说明,此处不再赘述。
第二种、第一设备100为一个计算设备,第二设备200以及存储设备300位于另一个计算设备中,第二设备200为另一个计算设备中的智能网卡,存储设备300为该智能网卡的内存。
计算设备可以将需要另一个计算设备的智能网卡处理的数据写入到智能网卡的内存中。智能网卡从内存中读取数据。计算设备通过另一个计算设备的智能网卡的内存向该智能网卡传输数据的方式与计算设备的处理器通过该计算设备的智能网卡的内存向该智能网卡传输数据的方式类似,区别在于,计算设备访问另一个计算设备的智能网卡的内存时可以采用远程直接内存存取(remote direct memory access,RDMA)的方式将需要写入的数据或标志位传输给该智能网卡的内存。
类似的,另一个计算设备的智能网卡也可以通过智能网卡的内存向该计算设备传输数据,另一个计算设备的智能网卡通过智能网卡的内存向计算设备传输数据的方式与计算设备的智能网卡也可以通过智能网卡的内存向该计算设备的处理器传输数据的方式类似,区别在于,计算设备访问另一个计算设备的智能网卡的内存时可以采用RDMA的方式从智能网卡的内存中读取数据或标志位,具体可以参见前述说明,此处不再赘述。
基于与方法实施例同一发明构思,本申请实施例还提供了一种报文发送装置,该报文接收装置用于执行上述如图2所示的方法实施例中所述第一端口执行的方法,相关特征可参见上述方法实施例,此处不再赘述。如图7所示,该报文发送装置700包括分组模块701、以及发送模块702。
分组模块701,用于对待发送的报文流中的报文分组,形成至少一组报文,为每组报文中的报文配置组队列号,每组报文中的报文的组队列号相同。
发送模块702,用于向存储设备的第二端口发送报文流中的报文。
在一种可能的实施方式中,报文流中的报文包括数据报文以及标志位报文,报文流的标志位报文的组队列号大于报文流中数据报文的组队列号。
在一种可能的实施方式中,分组模块701可以对报文流中的报文进行分组,形成至少一组报文,为至少一组报文中的报文配置组队列号,并为至少一组报文中的报文配置包队列号,报文流中的每个报文的包队列号不同,组队列号为第一值的一组报文中的报文的包队列号小于组队列号为第二值的一组报文中的报文的包队列号,第一值小于第二值。
在一种可能的实施方式中,报文流的标志位报文的包队列号大于报文流中任一数据报文的包队列号。
在一种可能的实施方式中,发送模块702可以向第二设备发送通知消息,通知消息用于通知报文流中报文携带的数据在存储设备中的地址。
基于与方法实施例同一发明构思,本申请实施例还提供了一种报文接收装置,该报文接收装置用于执行上述如图2所示的方法实施例中第二端口执行的方法,相关特征可参见上述方法实施例,此处不再赘述。如图8所示,该报文接收装置800包括传输模块801,可选的,还包括缓存模块802。
传输模块801按照组队列号的大小顺序依次将组队列号相同的报文发送给存储设备。
在一种可能的实施方式中,报文流中的报文包括数据报文以及标志位报文,报文流的标志位报文的组队列号大于报文流中数据报文的组队列号。
在一种可能的实施方式中,报文流的标志位报文的包队列号大于报文流中任一数据报文的包队列号。
在一种可能的实施方式中,传输模块801在将组队列号为第一值的所有报文传输给存储设备后,再向存储设备传输组队列号为第二值的报文,其中,第一值小于第二值。
在一种可能的实施方式中,缓存模块802在传输模块801将组队列号为第一值的所有报文传输给存储设备的过程中,将组队列号为第二值的报文存储在第二端口的缓存中。
在一种可能的实施方式中,传输模块801在向存储设备传输组队列号为第二值的报文之前,确定包队列号大于缓存中组队列号为第二值的报文的最小包队列号的报文均已传输给存储设备;或确定包队列号大于当前接收到的组队列号为第二值的报文的包队列号的报文均已传输给存储设备。
在一种可能的实施方式中,缓存模块802在需要缓存的报文且缓存中无空闲存储空间的情况下,将缓存中的报文以及需要缓存的报文中包队列号最大的一个或多个报文丢弃,通知第一设备重新传输丢弃的一个或多个报文,将未丢弃的需要缓存的报文保存在缓存中。
需要说明的是,本申请实施例中对模块的划分是示意性的,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式。在本申请的实施例中的各功能模块可以集成在一个处理模块中,也可以是各个模块单独物理存在,也可以两个或两个以上模块集成在一个模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。
上述实施例,可以全部或部分地通过软件、硬件、固件或其他任意组合来实现。当使用软件实现时,上述实施例可以全部或部分地以计算机程序产品的形式实现。所述计算机程序产品包括一个或多个计算机指令。在计算机上加载或执行所述计算机程序指令时,全部或部分地产生按照本发明实施例所述的流程或功能。所述计算机可以为通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线(DSL))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集合的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质(例如,软盘、硬盘、磁带)、光介质(例如,DVD)、或者半导体介质。半导体介质可以是固态硬盘(solid state drive,SSD)。
本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本申请是参照根据本申请的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
显然,本领域的技术人员可以对本申请进行各种改动和变型而不脱离本申请范围。这样,倘若本申请的这些修改和变型属于本申请权利要求及其等同技术的范围之内,则本申请也意图包含这些改动和变型在内。
Claims (20)
1.一种报文传输方法,其特征在于,所述方法包括:
第一设备的第一端口对待发送的报文流中的报文分组,形成至少一组报文,为每组报文中的报文配置组队列号,所述每组报文中的报文的组队列号相同;
所述第一端口向存储设备的第二端口发送所述报文流中的报文;
所述第二端口按照组队列号的大小顺序依次将组队列号相同的报文发送给所述存储设备;
所述存储设备根据所述报文存储所述报文中携带的数据。
2.如权利要求1所述的方法,其特征在于,所述报文流中的报文包括数据报文以及标志位报文,所述报文流的标志位报文的组队列号大于所述报文流中数据报文的组队列号。
3.如权利要求1-2任一项所述的方法,其特征在于,所述第一设备的第一端口对待发送的报文流中的报文分组,包括:
所述第一端口对所述报文流中的报文进行分组,形成所述至少一组报文,为所述至少一组报文中的报文配置组队列号,并为所述至少一组报文中的报文配置包队列号,所述报文流中的每个报文的包队列号不同,组队列号为第一值的一组报文中的报文的包队列号小于组队列号为第二值的一组报文中的报文的包队列号,所述第一值小于所述第二值。
4.如权利要求2所述的方法,其特征在于,所述报文流的标志位报文的包队列号大于所述报文流中任一数据报文的包队列号。
5.如权利要求1-4任一项所述的方法,其特征在于,所述第二端口按照组队列号的大小顺序依次将组队列号相同的报文发送给所述存储设备,包括:
所述第二端口在将组队列号为第一值的所有报文传输给所述存储设备后,再向所述存储设备传输组队列号为第二值的报文,其中,所述第一值小于所述第二值。
6.如权利要求5所述的方法,其特征在于,所述方法还包括:
所述第二端口在将组队列号为所述第一值的所有报文传输给所述存储设备的过程中,将组队列号为所述第二值的报文存储在所述第二端口的缓存中。
7.如权利要求5或6所述的方法,其特征在于,所述第二端口向所述存储设备传输组队列号为第二值的报文之前,还包括:
所述第二端口确定包队列号大于所述缓存中组队列号为所述第二值的报文的最小包队列号的报文均已传输给所述存储设备;或
所述第二端口确定包队列号大于当前接收到的组队列号为所述第二值的报文的包队列号的报文均已传输给所述存储设备。
8.如权利要求6或7所述的方法,其特征在于,所述方法还包括:
所述第二端口在存在需要缓存的报文且所述缓存中无空闲存储空间的情况下,将所述缓存中的报文以及所述需要缓存的报文中包队列号最大的一个或多个报文丢弃,通知所述第一设备重新传输丢弃的所述一个或多个报文,将未丢弃的需要缓存的报文保存在所述缓存中。
9.如权利要求1-8任一项所述的方法,其特征在于,所述方法还包括:
所述第一设备向第二设备发送通知消息,所述通知消息用于通知所述报文流中报文携带的数据在所述存储设备中的地址;
所述第二设备根据所述通知消息从所述存储设备中读取所述报文流中报文携带的数据。
10.一种报文传输系统,其特征在于,所述系统包括:
第一设备的第一端口,用于对待发送的报文流中的报文分组,形成至少一组报文,为每组报文中的报文配置组队列号,所述每组报文中的报文的组队列号相同;向存储设备的第二端口发送所述报文流中的报文;
所述存储设备的第二端口,用于按照组队列号的大小顺序依次将组队列号相同的报文发送给所述存储设备;
所述存储设备,用于根据所述报文存储所述报文中携带的数据。
11.如权利要求10所述的系统,其特征在于,所述报文流中的报文包括数据报文以及标志位报文,所述报文流的标志位报文的组队列号大于所述报文流中数据报文的组队列号。
12.如权利要求10-11任一项所述的系统,其特征在于,所述第一设备的第一端口,用于:
对所述报文流中的报文进行分组,形成所述至少一组报文,为所述至少一组报文中的报文配置组队列号,并为所述至少一组报文中的报文配置包队列号,所述报文流中的每个报文的包队列号不同,组队列号为第一值的一组报文中的报文的包队列号小于组队列号为第二值的一组报文中的报文的包队列号,所述第一值小于所述第二值。
13.如权利要求12所述的系统,其特征在于,所述报文流的标志位报文的包队列号大于所述报文流中任一数据报文的包队列号。
14.如权利要求10-13任一项所述的系统,其特征在于,所述第二端口,用于:
在将组队列号为第一值的所有报文传输给所述存储设备后,再向所述存储设备传输组队列号为第二值的报文,其中,所述第一值小于所述第二值。
15.如权利要求14所述的系统,其特征在于,
所述第二端口,还用于在将组队列号为所述第一值的所有报文传输给所述存储设备的过程中,将组队列号为所述第二值的报文存储在所述第二端口的缓存中。
16.如权利要求14或15所述的系统,其特征在于,所述第二端口在向所述存储设备传输组队列号为第二值的报文之前,还用于:
确定包队列号大于所述缓存中组队列号为所述第二值的报文的最小包队列号的报文均已传输给所述存储设备;或
确定包队列号大于当前接收到的组队列号为所述第二值的报文的包队列号的报文均已传输给所述存储设备。
17.如权利要求15或16所述的系统,其特征在于,所述第二端口,还用于:在存在需要缓存的报文且所述缓存中无空闲存储空间的情况下,将所述缓存中的报文以及所述需要缓存的报文中包队列号最大的一个或多个报文丢弃,通知所述第一设备重新传输丢弃的所述一个或多个报文,将未丢弃的需要缓存的报文保存在所述缓存中。
18.如权利要求10-17任一项所述的系统,其特征在于,所述系统还包括第二设备,所述第一设备,还用于向所述第二设备发送通知消息,所述通知消息用于通知所述报文流中报文携带的数据在所述存储设备中的地址;
所述第二设备,用于根据所述通知消息从所述存储设备中读取所述报文流中报文携带的数据。
19.一种计算设备,其特征在于,包括端口和处理器;所述处理器用于向所述端口传输报文流,所述端口用于执行权利要求1-9任一所述的方法中所述第一端口执行的操作。
20.一种存储设备,其特征在于,包括存储器和端口;所述存储器用于存储所述端口传输的报文中携带的数据,所述端口用于执行权利要求1-9任一所述的方法中所述第二端口执行的操作。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310327309.0A CN118694724A (zh) | 2023-03-23 | 2023-03-23 | 一种报文传输方法、系统及设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310327309.0A CN118694724A (zh) | 2023-03-23 | 2023-03-23 | 一种报文传输方法、系统及设备 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN118694724A true CN118694724A (zh) | 2024-09-24 |
Family
ID=92770564
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310327309.0A Pending CN118694724A (zh) | 2023-03-23 | 2023-03-23 | 一种报文传输方法、系统及设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN118694724A (zh) |
-
2023
- 2023-03-23 CN CN202310327309.0A patent/CN118694724A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US20240291750A1 (en) | System and method for facilitating efficient event notification management for a network interface controller (nic) | |
US20060047849A1 (en) | Apparatus and method for packet coalescing within interconnection network routers | |
CN102439574B (zh) | 系统缓存中数据替换方法及多核通信处理器 | |
CN109117386B (zh) | 一种网络远程读写二级存储的系统及方法 | |
US10990326B2 (en) | High-speed replay of captured data packets | |
US9866639B2 (en) | Communication apparatus, information processor, communication method, and computer-readable storage medium | |
WO2022017454A1 (zh) | 一种报文处理方法、网络设备以及相关设备 | |
WO2024227389A1 (zh) | 数据传输系统、方法、装置、通信设备及存储介质 | |
CN113422792B (zh) | 数据传输方法、装置、电子设备及计算机存储介质 | |
CN118694724A (zh) | 一种报文传输方法、系统及设备 | |
CN118626435A (zh) | Dpu芯片、基于dpu芯片的数据传输方法、电子设备及计算机存储介质 | |
JP2020088517A (ja) | 通信装置、通信装置の制御方法およびプログラム | |
WO2022188807A1 (zh) | 数据传输系统及相关设备 | |
US20230066736A1 (en) | On-demand packetization for a chip-to-chip interface | |
CN110798366A (zh) | 任务逻辑的处理方法、装置及设备 | |
CN117176834A (zh) | 一种报文发送、接收方法、网卡以及计算设备 | |
US20190012282A1 (en) | Information processing system, information processing device, and control method of information processing system | |
CN112511463B (zh) | 报文的发送方法及装置 | |
JP2021064166A (ja) | メモリ制御装置、および制御方法 | |
CN118368293B (zh) | 一种数据传输方法、计算机设备及介质 | |
CN111200594B (zh) | 接收数据的方法、装置、数据接收设备和存储介质 | |
JP6938399B2 (ja) | 通信装置、通信方法およびプログラム | |
CN118567566A (zh) | 指令处理方法、电子设备及非瞬时计算机可读取记录媒体 | |
CN118426673A (zh) | 数据存取方法及相关装置 | |
CN117971748A (zh) | 一种通信方法、转换电路及计算机设备 |
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 |