CN1980198B - 用于在网络上分条消息有效载荷数据的方法和设备 - Google Patents
用于在网络上分条消息有效载荷数据的方法和设备 Download PDFInfo
- Publication number
- CN1980198B CN1980198B CN2006100942501A CN200610094250A CN1980198B CN 1980198 B CN1980198 B CN 1980198B CN 2006100942501 A CN2006100942501 A CN 2006100942501A CN 200610094250 A CN200610094250 A CN 200610094250A CN 1980198 B CN1980198 B CN 1980198B
- Authority
- CN
- China
- Prior art keywords
- message
- sub
- node
- section point
- orderly
- 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.)
- Expired - Fee Related
Links
Images
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/10—Flow control; Congestion control
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/546—Message passing systems or structures, e.g. queues
-
- 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/34—Flow control; Congestion control ensuring sequence integrity, e.g. using sequence numbers
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L49/00—Packet switching elements
- H04L49/90—Buffering arrangements
-
- 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/9021—Plurality of buffers per packet
-
- 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/9084—Reactions to storage capacity overflow
- H04L49/9089—Reactions to storage capacity overflow replacing packets in a storage arrangement, e.g. pushout
- H04L49/9094—Arrangements for simultaneous transmit and receive, e.g. simultaneous reading/writing from/to the storage element
Abstract
提供了一种方法、设备和介质,用于响应于发送消息的请求而将消息有效载荷数据从网络的第一节点传送到网络的第二节点。该方法包括将待发送的数据有效载荷的长度分割为多个子消息有效载荷长度,即分割为至少第一子消息有效载荷长度和第二子消息有效载荷长度。然后,从第一节点发送第一有序子消息以便递送给第二节点,该第一有序子消息具有第一子消息有效载荷长度。然后,在第一节点中确定环境的第一状态,好像发送第一有序子消息的步骤已经完成。不必完成发送第一有序子消息的步骤,从第一节点发送第二有序子消息以便递送给第二节点,该第二子消息具有第二子消息有效载荷长度,该第二子消息是以考虑第一节点中的环境的第一状态的方式发送的。
Description
技术领域
本发明涉及数据通信,并且更特别地涉及一种在网络上以分条的(striped)方式传送消息有效载荷数据的方法。
背景技术
通信带宽是通信协议性能的一个关键要素。当消息被分条后,通信带宽有时可以增加。消息的分条是指经由可以从一个子消息到另一子消息变化的通信资源(网络适配器资源和通信路径)在网络的两个端点(源节点和“目标节点”或“目的节点”)之间将消息作为分开管理的子消息而发送。
当待发送的消息数据存储在用户缓冲器的连续位置处时,消息的分条相对直接。在这种情况下,可以容易地将消息分割为子消息,并且可以容易地确定待发送数据的起点和终点。
然而,还可以从不连续的数据,即分布在不同位置处的数据发送消息。不连续的数据传送协议的一个例子是通过一个程序的执行来限定待传送的数据的位置的协议。当执行这种程序时,由该程序得到的待传送数据的位置由诸如“在偏移10开始。复制(传送)12字节。跳过下8个字节。复制6字节。跳过下7字节”之类的一系列命令限定。在这种配置中,在执行数据传送程序之前,通常不可能确定不连续数据的位置会在何处。对于这些通信协议,消息的分条有可能成问题。
可以考虑这一点的另一种方式是在执行通信程序期间,该通信程序改变运行该通信程序的环境的状态。执行该通信程序时环境状态随时间的改变会对并行地发送一组有序的子消息产生深刻的影响。这种改变使得在实际组装和发送整个特定子消息之前难以确定对于该特定的子消息,例如第一子消息,数据在何处开始和结束。没有这种了解,就丢失了对消息进行分条的优点,原因是在已经完全发送第一子消息之前,不能开始发送第二有序子消息。
考虑到前述内容,需要一种方法和设备,通过这种方法和设备,即使当通信程序在一个环境中的执行改变了该环境的状态或需要确定不连续数据的位置时,也可以将消息有效载荷数据,尤其是不连续数据作为多个有序子消息而分条。
发明内容
因此,根据本发明的各方面,提供了一种方法、设备和记录介质,其用于响应于发送消息的请求而将消息有效载荷数据从网络的第一节点传送到该网络的第二节点。在根据本发明实施例的一种方法中,把将根据发送消息的请求而发送的数据有效载荷的长度分割为多个子消息有效载荷长度,即分割为至少第一子消息有效载荷长度和第二子消息有效载荷长度。然后,从第一节点发送具有第一子消息有效载荷长度的第一有序子消息以便递送给第二节点。然后,在第一节点中确定环境的第一状态,好像发送第一有序子消息的步骤已经完成。不必完成发送第一有序子消息的步骤,从第一节点发送第二有序子消息以便递送给第二节点,该第二子消息具有第二子消息有效载荷长度,并且该第二子消息是考虑了第一节点中的环境的第一状态而发送的。
附图说明
在本说明书的结尾部分特别地指出并明确地要求保护被视为本发明的主题。然而,通过参考以下结合附图进行的说明,将更好地理解本发明及其另外的目的和优点,其中:
图1是示出根据本发明实施例的数据集散机(“DGSM”)及其操作的框图;
图2是示出根据本发明实施例的伪数据集散机(“DGSM”)及其操作的框图;
图3是示出根据本发明实施例的对接收的消息数据的不连续部分的处理的框图;
图4是进一步示出根据本发明实施例的对接收的消息数据的不连续部分的处理中真实DGSM和伪DGSM的使用的框图;
图5是示出根据本发明实施例的对消息数据的不连续分条的子消息的处理的框图;
图6是示出根据本发明实施例的使用真实DGSM和伪DGSM来执行消息的子消息的发送(或接收)处理的框图;
图7是示出根据本发明实施例的用于响应于发送给定长度的数据有效载荷的请求而发送子消息的操作的流程图;
图8是示出根据本发明实施例的用于在接收节点处接收子消息的操作的流程图;并且
图9是示出根据本发明实施例的用于在接收节点处接收到来的子消息分组的操作的流程图。
具体实施方式
根据在此描述的本发明的实施例,提出了一种方法、设备和记录介质,通过这种方法、设备和记录介质,响应于发送消息的请求而将消息有效载荷数据从网络的一个节点传送到该网络的另一个节点。在这些实施例中,对将根据发送消息的请求而发送的数据有效载荷的长度进行分割,以确定用于将消息的多个部分作为准独立管理的子消息而发送的子消息有效载荷长度。然后,相对于第一节点上的环境执行通信程序,以从第一节点发送第一子消息,该第一子消息具有第一子消息有效载荷长度。由于通信程序需要知道环境的状态,以便发送多个子消息中的第二有序子消息,因此确定该环境的状态,并且此后相对于该环境执行通信程序,以发送第二子消息,该第二子消息具有第二子消息有效载荷长度。因此,通信程序在考虑存在为第一有序子消息的发送好像已经完成的环境状态的同时发送第二有序子消息。因此,通信程序不需要等到完成发送第一有序子消息的步骤之后再开始发送第二有序子消息,并且通信程序可以将消息分条为多个并行地发送的子消息组。
根据本发明的一个实施例,即使在消息有效载荷数据位于诸如节点上的用户缓冲器之类的存储器的不连续位置处时,也可以将消息有效载荷数据从网络的一个节点分条到另一节点。此外,即使在不连续位置由不规则算法(即所存储数据的第n个位置不是由统一应用的以确定所存储数据的第一个位置至最后一个位置的规则来确定的算法)限定时,也可以对消息有效载荷数据进行分条。不连续数据传送协议的一个例子是通过程序的执行来限定待传送数据的位置的协议。当执行这种程序时,由程序得到的待传送数据位置由诸如“在偏移10开始。复制(传送)1 2字节。跳过下8个字节。复制6字节。跳过下7字节”之类的一系列命令限定。在这种配置中,在执行该程序之前,通常不可能确定不连续数据的位置在何处。
在网络的两个节点之间发送和接收不连续数据的一种已知方式是通过线性数据集散程序(“DGSP”),诸如共同转让的美国专利No.6,820,264中所描述的DGSP。DGSP提供了用于发送和接收数据的已编译的程序指令,该数据可以包括不连续的数据表示,其例子有MPI数据类型(即根据行业标准消息传递接口(“MPI”)的数据类型)。可以将DGSP从源节点发送到目标(目的)节点,以便指示目标节点如何处理发送的数据,诸在特定消息中发送的数据。从由DGSP表示的MPI数据类型,可以确定将从中提取用于发送的源数据的源节点中的位置。此外,可以确定在接收到该数据之后将在目标节点中存储发送的数据的位置。
以其已编译的形式,DGSP可以包含在执行时需要解释的指令。例如,递归指令在执行时需要解释。递归指令是其执行依赖于执行其他指令的结果的那些指令。当解释器遇到递归指令时,该解释器确定该递归指令所依赖的其他指令是否已经执行。如果该其他指令还没有执行,例如,当该其他指令本身是依赖于下一个其他指令的执行的递归指令时,解释器必须确定该下一个其他指令是否已经执行。在最终遇到不依赖于执行另一个指令的结果的特定指令之前,有可能一遍又一遍地进行相同的确定。然后,一旦执行该特定指令,就可以以与解释器最初遇到每个递归指令的顺序相反的顺序来执行这些递归指令。然而,为了执行这一系列递归指令,解释器必须明了等待执行的第一个递归指令以及在遇到最终的可执行指令之前遇到的每个递归指令。解释器通常是通过堆栈实现这一点。堆栈以后进先出顺序临时地存储用于由解释器访问的执行环境的状态变量以及指令。后进先出顺序使得置于堆栈上的最后接收到的指令将是在解释器准备好执行时将再次从堆栈中弹出用于执行的第一个指令。作为与上述一系列递归指令有关的一个例子,在接收准备好执行指令之前接收到的最后一个递归指令是将从堆栈中弹出并随后执行的第一个指令。此后,从堆栈中弹出在该递归指令之前置于堆栈上的下一个指令用于执行,原因是此时该下一个指令变为可以使用已经从堆栈中弹出的该第一个指令的执行结果来执行。
为了处理DGSP中包含的包括递归指令的指令流,在通信的源节点和目标节点的每一个处,提供一个数据集散机(“DGSM”)。DGSM是DGSP中所包含的指令流和不连续数据表示的解释器,其例子包括MPI数据类型表示。DGSM取DGSP中所提供的指令,对其进行解释并将其解析为能够由DGSM所驻留的节点上的较低级执行可以处理的形式。通常,DGSM针对以某种方式(诸如在来自用户程序的数据移动命令中)指定给DGSM的多个字节执行DGSP。
参考图1,在典型的操作示例中,将特定的DGSP 102连同表明将处理的字节数的字节计数104提交给DGSM 100。DGSM执行DGSP以复制或移动来自源节点上的用户缓冲器的、用于通过网络适配器传送以便递送给该网络的目标节点的数据(108)。如上所述,DGSP允许包括递归指令并且允许采用递归来描述递归数据结构。为处理递归结构,DGSM创建并维护堆栈,并且在该DGSM执行DGSP时维护环境的状态110(以及正在处理的消息中的偏移)。类似于物理处理器硬件(硬件机器)对程序的执行,DGSP的执行通常包括在命令机器(DGSM)执行程序(DGSP)的第一个指令之前标准地建立运行时间环境。当执行DGSP时,执行环境的状态改变。由于执行环境随执行的进行而改变,因此当要在程序中特定的偏移处执行DGSP中的操作时,例如当要复制1000个字节消息中的第250个字节至第400个字节时,必须为DGSM建立与如果DGSM正好已经处理了直至字节数249的先前的消息字节,则DGSM将会具有的状态信息相同的状态信息106,包括在堆栈上存在任意未决的指令。因此,DGSM的操作方式类似于在实际的硬件机器上执行程序的方式,当在特定的偏移处执行程序时,要求该状态信息106正确并且堆栈包含正确信息。
在执行诸如DGSP之类的数据移动器程序期间或之后对状态信息和堆栈的维护对于冗长消息的发送和接收来说是关键的。尽管能够由诸如DGSP之类的数据移动器程序处理的消息长度具有很少的限制,但DGSM一次能够移动的数据量受到潜在传输协议所允许的最大传输单元(“MTU”)大小的限制。最大传输单元(MTU)定义为可以在基于分组的网络或基于帧的网络中发送的最大大小分组或帧,通常以八位位组(八位字节)的形式指定。因此,DGSM不能连续地执行。作为替代,调用DGSM以便处理以受MTU大小限制的突发的形式的到来的消息数据。在一个操作示例中,源节点上的DGSP针对一个消息的固定大小部分(MTU)而调用用于移动数据的DGSM。在DGSM完成处理该MTU之后,该DGSM停止执行。如果在DGSM停止执行之后,仍有要处理的消息字节,则从在该消息中该DGSM停止处理最近的MTU的点再次调用该DGSM以处理下一个MTU。然而,每当DGSM开始处理下一个MTU时,该DGSM取回代表该DGSM完成处理最近的MTU的点处的执行环境的状况的状态信息以及堆栈信息。
在实现DGSP的某些通信协议中,可以在目的地处以任意顺序接收不连续消息的分组。发送的分组对应于在不同的偏移处进入消息的消息数据。对于消息接收端的用以处理不连续分组中的数据的DGSP,DGSM必须处于正确的状态中,以处理在相应的偏移处进入接收消息空间的分组数据。因此,在不存在在特定到来数据之前已经处理了在源端发送的数据的某些或全部的DGSM的情况下,需要确定用于处理到来数据分组的正确状态。换言之,需要有一种方法来确定堆栈和环境的状态,而不管在当前分组到达用于由DGSM处理之前是否丢失了发送顺序中的某些分组。
根据本发明的实施例,对这一问题的解决方案是通过使用伪DGSM 200(图2)。伪DGSM是一种辅助解释器,其用于针对指定字节计数204执行DGSP 102,以便在当前到来分组到达之前的有序分组丢失时确定环境的状态。如同真实的DGSM,伪DGSM 200维护堆栈并针对输入其中的指定字节计数204跟踪环境的状态210。然而,伪DGSM在不执行由DGSP指定的任何数据传送(复制)操作的情况下实现这一点。伪DGSM的净效应(net effect)是跟踪从一个位置(对应于消息中的给定偏移)的环境状态到能够对在指定的偏移处进入消息的数据进行处理的新状态,所有不需要由DGSM处理丢失数据。
图3示出了关于伪DGSM 200如何与真实的DGSM一起使用来接收在目标(目的)节点顺序错乱地到达的消息数据部分的示例。如图3所示,不连续消息的某些部分已经到达目标节点,而其他部分还没有。具体而言,如图3所示,尽管消息的前A个字节还没有到达,但下B个字节已经到达。另一方面,尽管消息的下C个字节还没有到达,但消息的最后D个字节已经到达。
为处理已经到达的消息部分,如图4所示,伪DGSM和真实的DGSM一起使用来将已到达的数据分布到目标节点处的不连续缓冲器中。如图4所示,从初始状态306开始,伪DGSM 200在目标(接收)节点针对A个字节执行DGSP 302,以便以与真实DGSM 100为处理数据的前A个字节所做的相同的方式维护环境的状态信息和偏移。接下来,使用由伪DGSM输出的状态信息和偏移310,真实DGSM 100针对已经实际到达的B个字节执行DGSP 302,将数据传送到适当的接收器缓冲器中(如同DGSP所限定的那样并且环境的当前状态现在由真实DGSM 100维护)。在处理这B个字节之后,真实DGSM 100输出现在适合于处理在偏移A+B处数据的状态信息和偏移410,偏移A+B是对应于字节计数A与字节计数B之和的偏移。
现在,由于偏移A+B处的数据还没有到达,但在增加了字节计数C处出现在消息中的数据已经到达,因此伪DGSM 200再次针对字节计数C执行DGSP。以这种方式,伪DGSM产生了处理在偏移A+B+C处出现在消息中的数据的DGSM状态510。此后,真实DGSM 100再次针对字节计数D执行DGSP 302,以处理已经到达的D个字节,使用DGSP 302中的指令来将数据复制到接收节点上的适当目标缓冲器中。优选地,对初始状态进行高速缓存,以便在数据的初始A个字节到达时,真实DGSM 100可以随后执行在偏移0处的DGSP 302,以接收和处理该数据。同样,通过针对偏移A+B对状态进行高速缓存,当数据的C个字节最终到达时,真实DGSM 100可以随后执行在偏移A+B处的DGSP 302以接收和处理这C个字节。
类似地,伪DGSM和真实DGSM的相同组合可以用于帮助对发送大消息的请求的响应而有效分条通过网络从源节点到目标节点的这种消息。应用程序接口(“API”)根据对发送大消息的请求将待发送的数据有效载荷长度分割为一组有序子消息。优选地,每个子消息具有与所有其他子消息的子消息有效载荷长度相同的子消息有效载荷长度(字节计数),尽管这种分割为等大部分不是必须的。与用于处理在网络节点之间不连续地发送的数据的其他方案相比,这种分割是价值不大的低开销操作。将消息的数据有效载荷长度分割为子消息的处理缩减为产生每个子消息开始的偏移的简单处理。当要将消息分割为等大的部分时,通过简单的计算,即偏移(i)=(i-1)×(消息长度/子消息数目)来产生偏移,其中i等于有序子消息中的特定子消息,例如在1、2、3等之间。一旦已经产生每个子消息的开始偏移,并且已经知道每个子消息的长度,就可以由源节点上的消息传输协议层对每个子消息进行处理,仿佛该子消息是独立的消息。具体而言,由消息传输协议层对每个子消息进行处理,而不要求该协议层知道正在处理的任何其他子消息。
利用这样确定的每个子消息的开始偏移和字节计数,DGSM随后处理DGSP以产生子消息,以便传送对于源节点可用的数据。每个有序子消息由同一DGSP处理,但具有与构成整个消息的每个其他子消息不同的开始偏移和不同的结束偏移。所有子消息都由同一DGSP处理,但它们具有不同的开始偏移,以及可能的不同长度。然而,为易于描述,将假定每个子消息具有与所发送的所有其他子消息相同的长度。
参考图5,使用每个子消息的开始偏移,由伪DGSM执行在源节点处的共享DGSP以产生特定子消息特有的状态。例如,在图5中条带3处示出的子消息506在从消息的开始地址偏移2X处开始。为产生发送该子消息506的正确状态,从消息的开始地址和初始状态开始,由伪DGSM针对2X个字节执行共享DGSP。由此产生的状态随后用作处理(即发送)对应于第三子消息(条带3,506)的数据字节的初始状态。此时,源节点上的共享DGSP则由真实DGSM针对下X个字节而执行,该DGSM由此将数据从源节点上的一个或多个用户缓冲器复制或移动到发送缓冲器并从源节点发送第三条带的数据以便递送给该网络的目标(目的或接收)节点。
在根据本发明实施例的优选操作的一个示例中,应用进行对API的调用,例如“MPI_send” (MPI_发送),以发起数据传送操作。该调用通常发生在单一线程上。进行关于如何分条特定消息的判断的一部分库代码运行在该单一主线程上。以这种方式,序列化了判断进行和对该判断的派遣。然后,由此执行以处理消息条带的操作在逻辑上是并行的。例如,假定库API线程(主线程)决定使用四个条带来处理该调用,以便传输数据。然后,主线程将进行四次调用,每次调用将一个条带的处理分配给一个工作线程,假定有足够资源(处理器、存储器等)可用于四个工作线程并行地运行。主线程对共享计数器进行初始化并随后在每个工作线程完成对每个条带的处理并且每个依次递增了共享计数器时观察该共享计数器。以这种方式,主线程根据共享计数器来确定条带处理操作的进展和完成。
因此,根据以上描述,使得这些调用经由共享计数器来处理条带并监视其完成的主线程的示例性算法如下:
for(i=0;i<3;i++){
process_stripe(buff_addr,DGSP,offset(i),len(i));
}
watch shared counter to confirm all 4 stripes are done.
每个“process_stripe”调用发起(派遣)一个不同的工作线程并将一组参数传递给该线程。每个工作线程优选地运行于与运行每个其他工作线程的处理器不同的处理器上,以便条带处理操作具有高度的并行度。向每个工作线程传递不同的参数,包括与传递给其他工作线程的偏移和长度相比不同的偏移以及可能的不同长度(len)。每个工作线程执行相同的逻辑以并行地处理每个条带。以这种方式,由上述算法派遣的四个条带处理操作不需要等待任何其他所派遣的条带被处理。
在以上示例的一个可选变型中,主线程本身能够运行四个“process_stripe”操作之一,而不是仅将这些操作派遣给四个线程并监视共享计数器以确定进展。
一旦将这些操作派遣给各线程,就根据可以根据以下描述概括出的算法来处理每个条带,在下面参考图6的描述中更全面地对此进行了描述。
process_stripe(buff_addr,DGSP,my_offset,my_len){
create a private initial DGSM(ready to work at offset of 0)
run dummy_DGSM code for“my_offset”bytes(my_offset will be 0
for one of the stripes and the dummy_DGSM run willbe a NO-OP)
run real_DGSM code for my_len bytes(my_len may be different for
eachstripe)
increment shared counter
free any resources
exit
}
图6图形化地描绘了根据以上描述的由多个并行地运行的工作线程中的一个工作线程进行的用以发送消息的子消息(条带3)的处理。在此,工作线程利用由各工作线程所利用的多个真实DGSM实例中的一个真实DGSM实例来发送子消息。此外,工作线程还利用由各工作线程用于处理每个子消息的多个伪DGSM实例中的一个伪DGSM实例。如图6所示,当真实DGSM 100针对子消息有效载荷长度“X”执行DGSP 620时,对子消息的实际复制和移动操作发生在子消息块620中,从偏移“2X”处的环境状态开始,该状态存在为好像整个消息的前2x个字节已经由DGSP发送。由特定工作线程在伪DGSM上针对条带3而执行的DGSP跟踪存在为好像已实际发送前2X个字节的状态信息、堆栈信息和偏移,以便可以在此时正确地发送第三子消息。
根据以上描述,优选地由运行DGSM的各实例和伪DGSM的各实例的多个CPU(中央处理器)上的多个线程并行地处理每个消息的条带(子消息)。然而,这一点并非必须如此。在替代性的实施例中,可以在更少的CPU上逻辑上并行地处理这些条带,例如仍然使用多个线程、多个DGSM和多个伪DGSM但通过单一处理器上的时间分片实现。在处理器带宽超过了每个单独的通信路径的带宽的情况下,这种替代性的实施例有可能是有用的。
以类似的方式,在接收节点处,每个子消息不需要按顺序到达,并且每个子消息中的分组不需要按顺序到达。因此,在目标(接收节点)中发生的操作表现得与以上针对图6而描述的操作类似或与以上针对图4而描述的操作类似。
在源端每个子消息开始发送、完成发送以及在接收端开始接收每个子消息并且在某个以后的点上完全接收了每个子消息时,每个子消息之间的连接点由源节点处的一组共享的原子变量(即诸如上述共享计数器)以及目标节点处的另一组共享原子变量提供。这使得消息传输层可以跟踪何时已经完全发送或完全接收了整个消息,以便采取特定于消息传输层语义的与消息有关的动作。例如,在诸如LAPI(“低级应用程序编程接口”)之类的消息传输层中,有可能需要执行完成句柄(Completion handler)或对计数器进行更新。
概述上述处理,图7示出了一种算法,其用于处理将消息作为一组有序子消息进行发送的请求,并以子消息是独立的消息时将发送这些子消息的方式类似的方式发送每个子消息。具体而言,在优选实施例中,在步骤710中,将请求发送的消息的数据有效载荷长度分割为相等的子消息有效载荷长度。此后,在步骤720中,针对每个子消息而将一个激活消息条目加入队列(enqueue),该条目指定了使用与消息的其他子消息相同的源DGSP和相同的目标DGSP。然而,为每个子消息指定不同的偏移。
图8概括了用于在消息的源(发送)节点处处理发出子消息的算法。同样,如以上参考图4和图6所描述的,在步骤810中,在子消息的开始偏移之前,源DGSP由伪DGSM执行,以便达到正确的环境状态和偏移,以正确地处理该子消息中的发出数据。此后,在步骤820中,在真实DGSM上针对由子消息指定的数据有效载荷长度而运行源DGSP,以处理和创建用于从源节点传送发出数据的子消息。
图9是示出对到往网络的目标(接收)节点的特定到来分组的处理的详细处理示图。如图9所示,在第一处理步骤910中,读取到往目标节点的到来分组的头部。然后,在步骤920中确定该分组是否属于第一子消息。如果该分组不属于第一子消息,则在步骤930中,在由分组头部中包括的子消息ID(标识符)给定的子消息的开始偏移之前,在目标节点上的伪DGSM上运行目标DGSP。然后,处理前进到步骤940。然而,当在步骤920中,分组实际上属于第一子消息时,处理直接前进到步骤940。在步骤940中,确定到来分组是否为对应于该到来分组的子消息的下一个期望的分组。如果其不是期望的分组,则在步骤950中,在由目标节点的伪DGSM到达对应于该到来分组的偏移之前,在该伪DGSM上运行目标DGSP。该处理将环境状态(包括DGSM状态)设置为一个点,在该点处,真实DGSM就可以正确地处理到来分组的数据。当然,在方框940中,当确定到来分组实际上是该到来分组所属的子消息的下一个期望的分组,则跳过步骤950。然后,由于状态信息和偏移已经被高速缓存并且可由真实DGSM使用,因此不需要在伪DGSM上执行目标DGSP。在执行步骤950之后,在步骤960中,真实DGSM随后在该真实DGSM上执行目标DGSP,以将有效载荷数据从该分组复制或移动到目标节点处的目标用户缓冲器,从而完成分组的处理。在由DGSP确定的源节点上的数据的复制/移动之后,处理随后再次返回到步骤910,此时读取下一个到来分组的头部,并且对该下一个到来分组再次执行如上所述的相同步骤。
注意,在此提供的实例是说明性的,原因是不可能完整地描述在发明人通过以下所附权利要求要求保护的本发明的范围内的每个可能的替代性实施例。尽管已经根据本发明的某些优选实施例对本发明进行了描述,但在不偏离仅由以下所附权利要求所限定的本发明的真实范围和本质的情况下,可以对本发明进行多种修改和增强。
Claims (11)
1.一种从网络的第一节点传送消息有效载荷数据以便递送给所述网络的第二节点的方法,包括:
a)将待发送的数据有效载荷的长度分割为多个子消息有效载荷长度,包括第一子消息有效载荷长度和第二子消息有效载荷长度;
b)由第一节点上的数据通信机解释性地执行第一节点上的数据通信程序以从所述第一节点发送具有所述第一子消息有效载荷长度的第一有序子消息以便递送给所述第二节点,其中所述第一有序子消息的发送完成将导致第一节点中的环境改变到第一状态;
c)至少在完成步骤b)之前,由第一节点上的伪数据通信机解释性地执行所述第一节点上的数据通信程序,以确定所述第一节点中的环境的第一状态,好像步骤b)已经完成;以及
d)不必完成步骤b),利用在步骤c)中确定的所述第一节点中的环境的第一状态,由所述第一节点上的数据通信机解释性地执行所述第一节点上的数据通信程序,以从所述第一节点发送第二有序子消息以便递送给所述第二节点,所述第二有序子消息具有所述第二子消息有效载荷长度。
2.根据权利要求1所述的方法,其中在所述第一有序子消息和所述第二有序子消息中发送的数据有效载荷包括存储于所述第一节点中的不连续位置中的数据。
3.根据权利要求2所述的方法,其中发送所述第一有序子消息和所述第二有序子消息的步骤包括将存储在所述第一节点中的一个或多个用户缓冲器中的不连续位置处的数据复制到在与所述第一节点相关联的通信适配器中的存储器。
4.根据权利要求3所述的方法,其中所述第一子消息有效载荷长度和所述第二子消息有效载荷长度相同。
5.根据权利要求3所述的方法,还包括:
e)由第二节点上的数据通信机解释性地执行第二节点上的数据通信程序,以在第二节点接收第一有序子消息,其中第一有序子消息的接收完成将导致第二节点中的环境改变到第一状态;
f)至少在完成步骤e)之前,由第二节点上的伪数据通信机解释性地执行第二节点上的数据通信程序,以确定所述第二节点中的环境的第一状态,好像步骤e)已经完成;以及
g)不必完成步骤e),利用在步骤f)中确定的所述第二节点中的环境的第一状态,由所述第二节点上的数据通信机解释性地执行所述第二节点上的数据通信程序以不必首先在所述第二节点上接收所述第一有序子消息,在所述第二节点上接收所述第二有序子消息。
6.根据权利要求5所述的方法,其中接收所述第一有序子消息和接收所述第二有序子消息的步骤包括将所述第一有序子消息和所述第二有序子消息中的每个子消息的数据有效载荷存储于所述第二节点中的不连续位置中。
7.根据权利要求6所述的方法,其中接收所述第一有序子消息和接收所述第二有序子消息的步骤包括将其中的数据有效载荷从在与所述第二节点相关联的通信适配器中的存储器复制到所述第二节点中的一个或多个用户缓冲器中的不连续位置中。
8.一种可操作为从网络的第一节点传送消息有效载荷数据以便递送给所述网络的第二节点的系统,所述系统包括:
用于将待发送的数据有效载荷的长度分割为多个子消息有效载荷长度,包括第一子消息有效载荷长度和第二子消息有效载荷长度的装置;
第一节点上的数据通信机,用于解释性地执行第一节点上的数据通信程序以从所述第一节点发送具有所述第一子消息有效载荷长度的第一有序子消息以便递送给所述第二节点,其中所述第一有序子消息的发送完成将导致第一节点中的环境改变到第一状态;
第一节点上的伪数据通信机,用于至少在所述第一节点上的数据通信机完成执行所述第一节点上的数据通信程序以从所述第一节点发送具有所述第一子消息有效载荷长度的第一有序子消息之前,解释性地执行所述第一节点上的数据通信程序,以确定所述第一节点中的环境的第一状态,好像所述第一节点上的数据通信机执行所述第一节点上的数据通信程序以从所述第一节点发送具有所述第一子消息有效载荷长度的第一有序子消息已经完成;
其中所述第一节点上的数据通信机适于不必完成执行所述第一节点上数据通信程序以从所述第一节点发送具有所述第一子消息有效载荷长度的第一有序子消息,利用所述第一节点上的伪数据通信机确定的所述第一节点中的环境的第一状态,解释性地执行所述第一节点上的数据通信程序,以从所述第一节点发送第二有序子消息以便递送给所述第二节点,所述第二有序子消息具有所述第二子消息有效载荷长度。
9.根据权利要求8所述的系统,其中发送所述第一有序子消息和所述第二有序子消息包括将存储在所述第一节点中的一个或多个用户缓冲器中的不连续位置处的数据复制到在与所述第一节点相关联的通信适配器中的存储器。
10.根据权利要求8所述的系统,还包括:
第二节点上的数据通信机,用于解释性地执行第二节点上的数据通信程序,以在第二节点接收第一有序子消息,其中第一有序子消息的接收完成将导致第二节点中的环境改变到第一状态;
第二节点上的伪数据通信机,用于至少在所述第二节点上的数据通信机完成执行所述第二节点上的数据通信程序,以在第二节点接收第一有序子消息之前,解释性地执行所述第二节点上的数据通信程序,以确定所述第二节点中的环境的第一状态,好像所述第二节点上的数据通信机执行所述第二节点上的数据通信程序,以在第二节点接收第一有序子消息已经完成;
其中所述第二节点上的数据通信机适于不必完成执行所述第二节点上的数据通信程序,以在第二节点接收第一有序子消息,利用所述第二节点上的伪数据通信机在执行所述第二节点上的数据通信程序,以确定所述第二节点中的环境的第一状态中确定的所述第二节点中的环境的第一状态,解释性地执行所述第二节点上的数据通信程序以不必首先在所述第二节点上接收所述第一有序子消息,在所述第二节点上接收所述第二有序子消息。
11.根据权利要求10所述的系统,其中接收所述第一有序子消息和接收所述第二有序子消息包括将其中的数据有效载荷从在与所述第二节点相关联的通信适配器中的存储器复制到所述第二节点中的一个或多个用户缓冲器中的不连续位置中。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US11/298,322 US7835359B2 (en) | 2005-12-08 | 2005-12-08 | Method and apparatus for striping message payload data over a network |
US11/298,322 | 2005-12-08 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN1980198A CN1980198A (zh) | 2007-06-13 |
CN1980198B true CN1980198B (zh) | 2010-12-08 |
Family
ID=38131206
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2006100942501A Expired - Fee Related CN1980198B (zh) | 2005-12-08 | 2006-06-28 | 用于在网络上分条消息有效载荷数据的方法和设备 |
Country Status (2)
Country | Link |
---|---|
US (1) | US7835359B2 (zh) |
CN (1) | CN1980198B (zh) |
Families Citing this family (17)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7272672B1 (en) * | 2003-04-01 | 2007-09-18 | Extreme Networks, Inc. | High speed bus with flow control and extended burst enhancements between sender and receiver wherein counter is maintained at sender for free buffer space available |
US8468416B2 (en) | 2007-06-26 | 2013-06-18 | International Business Machines Corporation | Combined group ECC protection and subgroup parity protection |
US8230433B2 (en) | 2007-06-26 | 2012-07-24 | International Business Machines Corporation | Shared performance monitor in a multiprocessor system |
US7984448B2 (en) * | 2007-06-26 | 2011-07-19 | International Business Machines Corporation | Mechanism to support generic collective communication across a variety of programming models |
US7793038B2 (en) | 2007-06-26 | 2010-09-07 | International Business Machines Corporation | System and method for programmable bank selection for banked memory subsystems |
US8756350B2 (en) | 2007-06-26 | 2014-06-17 | International Business Machines Corporation | Method and apparatus for efficiently tracking queue entries relative to a timestamp |
US7877551B2 (en) * | 2007-06-26 | 2011-01-25 | International Business Machines Corporation | Programmable partitioning for high-performance coherence domains in a multiprocessor system |
US7886084B2 (en) * | 2007-06-26 | 2011-02-08 | International Business Machines Corporation | Optimized collectives using a DMA on a parallel computer |
US7827391B2 (en) | 2007-06-26 | 2010-11-02 | International Business Machines Corporation | Method and apparatus for single-stepping coherence events in a multiprocessor system under software control |
US7802025B2 (en) | 2007-06-26 | 2010-09-21 | International Business Machines Corporation | DMA engine for repeating communication patterns |
US8458282B2 (en) | 2007-06-26 | 2013-06-04 | International Business Machines Corporation | Extended write combining using a write continuation hint flag |
US8509255B2 (en) | 2007-06-26 | 2013-08-13 | International Business Machines Corporation | Hardware packet pacing using a DMA in a parallel computer |
US8103832B2 (en) * | 2007-06-26 | 2012-01-24 | International Business Machines Corporation | Method and apparatus of prefetching streams of varying prefetch depth |
US8010875B2 (en) | 2007-06-26 | 2011-08-30 | International Business Machines Corporation | Error correcting code with chip kill capability and power saving enhancement |
US8108738B2 (en) | 2007-06-26 | 2012-01-31 | International Business Machines Corporation | Data eye monitor method and apparatus |
US8140925B2 (en) | 2007-06-26 | 2012-03-20 | International Business Machines Corporation | Method and apparatus to debug an integrated circuit chip via synchronous clock stop and scan |
US8032892B2 (en) * | 2007-06-26 | 2011-10-04 | International Business Machines Corporation | Message passing with a limited number of DMA byte counters |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1402939A (zh) * | 1999-10-07 | 2003-03-12 | 通用仪器公司 | 从数据流析取消息的装置和方法 |
US6647438B1 (en) * | 2000-09-19 | 2003-11-11 | Intel Corporation | Direct memory access transfer reduction method and apparatus to overlay data on to scatter gather descriptors for bus-mastering I/O controllers |
Family Cites Families (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6820264B1 (en) | 2000-03-02 | 2004-11-16 | International Business Machines Corporation | Data gather/scatter machine |
JP2004524617A (ja) * | 2001-02-14 | 2004-08-12 | クリアスピード・テクノロジー・リミテッド | クロック分配システム |
US7155569B2 (en) | 2001-02-28 | 2006-12-26 | Lsi Logic Corporation | Method for raid striped I/O request generation using a shared scatter gather list |
US7027443B2 (en) * | 2001-08-23 | 2006-04-11 | Pmc-Sierra Ltd. | Reassembly engines for multilink applications |
US6754735B2 (en) | 2001-12-21 | 2004-06-22 | Agere Systems Inc. | Single descriptor scatter gather data transfer to or from a host processor |
US6877059B2 (en) | 2002-03-29 | 2005-04-05 | Emc Corporation | Communications architecture for a high throughput storage processor |
US6934803B2 (en) | 2002-05-29 | 2005-08-23 | Lsi Logic Corporation | Methods and structure for multi-drive mirroring in a resource constrained raid controller |
US7143260B2 (en) | 2002-12-20 | 2006-11-28 | Veritas Operating Corporation | Intermediate descriptions of intent for storage allocation |
US20070005881A1 (en) * | 2005-06-30 | 2007-01-04 | Garney John I | Minimizing memory bandwidth usage in optimal disk transfers |
EP1925114A1 (en) * | 2005-08-24 | 2008-05-28 | TELEFONAKTIEBOLAGET LM ERICSSON (publ) | Data unit transmission method |
US8259739B2 (en) * | 2005-10-31 | 2012-09-04 | Cisco Technology, Inc. | Scatter and gather scheme for aggregating multiple high speed point-to-point interfaces |
-
2005
- 2005-12-08 US US11/298,322 patent/US7835359B2/en not_active Expired - Fee Related
-
2006
- 2006-06-28 CN CN2006100942501A patent/CN1980198B/zh not_active Expired - Fee Related
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1402939A (zh) * | 1999-10-07 | 2003-03-12 | 通用仪器公司 | 从数据流析取消息的装置和方法 |
US6647438B1 (en) * | 2000-09-19 | 2003-11-11 | Intel Corporation | Direct memory access transfer reduction method and apparatus to overlay data on to scatter gather descriptors for bus-mastering I/O controllers |
Also Published As
Publication number | Publication date |
---|---|
US20070133536A1 (en) | 2007-06-14 |
US7835359B2 (en) | 2010-11-16 |
CN1980198A (zh) | 2007-06-13 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN1980198B (zh) | 用于在网络上分条消息有效载荷数据的方法和设备 | |
CN109768939B (zh) | 一种支持优先级的标签化网络栈方法和系统 | |
US9888048B1 (en) | Supporting millions of parallel light weight data streams in a distributed system | |
CN101848203B (zh) | 用于从网络适配器向主机系统传送数据的方法和系统 | |
CN113728595A (zh) | 促进通过网络接口控制器(nic)进行高效主机存储器访问的系统和方法 | |
EP3005129B1 (en) | Adaptive interrupt coalescing in a converged network | |
CN100403739C (zh) | 基于链表的进程间消息传递方法 | |
US20080148013A1 (en) | RDMA Method for MPI_REDUCE/MPI_ALLREDUCE on Large Vectors | |
US9639403B2 (en) | Receive-side scaling in a computer system using sub-queues assigned to processing cores | |
US9569291B1 (en) | Systems and methods for inter-process messaging | |
CN105511954A (zh) | 一种报文处理方法及装置 | |
CN102204183A (zh) | 报文保序处理方法、保序协处理器和网络设备 | |
CN103946803A (zh) | 具有高效工作排队的处理器 | |
US11502967B2 (en) | Methods and apparatuses for packet scheduling for software-defined networking in edge computing environment | |
CN101188477A (zh) | 一种数据包序列接收的方法及设备 | |
CN107181698A (zh) | 单队列多流业务整形的系统和方法 | |
US20120102243A1 (en) | Method for the recovery of a clock and system for the transmission of data between data memories by remote direct memory access and network station set up to operate in the method as a transmitting or,respectively,receiving station | |
CN103885840A (zh) | 一种基于AXI4总线的FCoE协议加速引擎IP核 | |
CN103049240A (zh) | Pci-e设备及其接收数据重排序方法 | |
CN101771595A (zh) | 一种报文保序的方法和装置 | |
US7305387B2 (en) | Method and apparatus for managing data object size in a multi-user environment | |
CN103262452A (zh) | 发送装置、接收装置、通信装置、通信系统以及发送方法 | |
CN114584560A (zh) | 一种分片帧重组方法及装置 | |
CN107819697A (zh) | 数据传输方法、交换机及数据中心 | |
CN105915930A (zh) | 一种视频文件发送方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20101208 Termination date: 20160628 |
|
CF01 | Termination of patent right due to non-payment of annual fee |