计算机网络中输入/输出链路重试、故障及恢复的方法和设备 相关申请
本发明要求以下申请的优先权,即:发明人Ahmet Houssein,PaulA.Grun,Kenneth R.Drottar,和David S.Dunning于1997年8月29日提交的题为“互连的计算机、存储系统和其它输入/输出子系统之间通信的方法和设备”的美国临时申请No.60/057,221,以及发明人Christopher Dodd,Ahmet Houssein,Paul A.Grun,KennethR.Drottar,和David S.Dunning于1998年4月9日提交的题为“下一代输入/输出”的美国临时申请No.60/081,220。因此这些申请,包括其附图被引入作为参考,就如它们在这里被全部重复一样。而且,本申请涉及David S.Dunning和Kenneth R.Drottar在相同日期提交的、题为“控制服务器之间地数据流的方法和设备”的美国专利申请No.09/141,151。本申请还涉及David S.Dunning,KenDrottar和Richard Jensen在相同日期提交的、题为“利用优化发送器在服务器之间控制数据流的方法和设备”的美国专利申请No.09/141,134。
【发明背景】
本发明总地涉及在一个计算机网络中控制节点(或两个点)之间的数据流的方法和设备,更特别地涉及在一个系统区域网络中控制两个节点(或两个点)之间的数据流的方法和设备。
在本申请中,术语“节点“将被用来描述一条消息的起始点或一条消息的终止点。术语“点“将被用来指示两个节点之间传送的瞬时位置。本发明包括一个第一节点和一个第二节点,一个节点和作为链路一部分的一台交换机,一个第一交换机和包含一条链路的第二交换机,或一台交换机和一个节点之间的通信。
被称为停等式ARQ的现有的流量控制协议发送一个数据分组,然后在发送下一个分组之前等待一个确认(ACK)。当数据分组从一个点到下一个点在网络中流过时,等待时间成为一个问题。等待时间是由组成网络的结构中的很大数量的链路和交换机而导致的。这是因为在下一个数据分组被从发送节点中发送出之前每个分组都需要来自于一个接收节点的成功接收的确认。因此,由于从接收节点到达发送节点的确认的传输时间而存在固有延迟。
一个被称为退回n的ARQ的解决方案使用顺序编号的分组,其中序列号在包含分组的帧的头标中被发送。在这种情况下,几个连续的分组不用等待确认返回就被发送。根据这个协议,接收节点只接受正确顺序的分组并将请求号(RN)发送回发送节点。给定的请求号的作用是确认被请求的分组之前的所有分组并请求发送与该请求号相关的分组。退回号n是一个决定在没有一个新分组的请求时有多少连续分组能被从发送器中发送出去的参数。具体地,不允许发送节点在i被确认之前(即在i+1被请求之前)发送分组i+n。这样,如果i是从接收节点中最近接收到的请求,则允许发送器在接收到下一个确认之前发送窗口中的n个分组。在这个协议中,如果有一个错误,则由于接收节点只允许按顺序接收分组,而使得整个窗口必须被重传。这样,即使错误在窗口末端附近,整个窗口也必须被重传。这个协议最适合于有高错误概率的大规模网络。
在一个允许大数据分组的结构中,不必要的过量分组重传成为一个重要的效率问题。例如,重传整个窗口的数据分组而每个分组都约是4G字节,则这将会是相对低效率的。
另一个已知的流量控制协议只要求被错误接收的分组的重传。这要求接收器保留一个被正确接收的分组的缓冲器并且在重传的分组被成功接收后对它们重新排序。尽管这种协议保持带宽需求最小,但是它使得接收器的设计比起退回n的ARQ所要求的更复杂。
因此本发明针对开发一种在系统区域网络中控制节点之间的数据流以提高通信效率而不需要使接收端处理过度复杂化的方法和设备的问题。
发明概述
本发明提供一种在网络中从源节点发送数据到目的节点的方法。根据本发明的方法,数据分组被从源节点发送到至少一个中间点。每个分组都被源节点分配以一个相应的序列号。每个分组的一个拷贝都被保留到源节点的一个缓冲器中直到该分组被中间点成功接收的确认被接收到为止。在该中间点,一个中间点序列号被分配给每个被中间点接收到的分组。
本发明提供在多条链路构成的结构中的两条链路之间传送数据的设备。该设备包括两台交换机和一个缓冲器。第一台交换机被放置在一条链路的第一个点中且从链路中的第一个点发送数据分组到链路中的第二个点。第一台交换机将第一点序列号分配给该分组,其中第一点序列号独立于由分组源所分配的源序列号。缓冲器被放置在第一点中,它被连接到第一台交换机且存储每个分组直到接收到该分组已经被成功接收的确认或接收到的该分组的收到版本包含至少一个错误的错误指示为止。第二台交换机被放置在第二点中,接收每个被发送的数据分组,且在接收到一个无错误分组后就发送一个确认以指明对该无错误分组以及在上一个被确认的分组和该无错误分组之间的序列中的所有分组的成功接收。第二台交换机也将第二点序列号分配给所有被接收到的分组,其中第二点序列号是独立于第一点序列号的。
附图简述
图1示例了根据本发明的一个示范实施方案的整个NG I/O链接结构。
图2是根据本发明的一个示范实施方案、用于I/O通过的NG I/O结构的方块图。
图3是示例根据本发明的基于点的协议的操作。
图4是示例根据本发明的、多个节点情况下的基于点的协议的操作。
详细描述
结构总览
下一代输入/输出(NG I/O)结构是描述基于NG I/O概念且使用一个NG I/O架构的系统的通用术语。NG I/O架构是一组允许两个NG I/O装置通信的电线和交换机。NG I/O架构是被设计成将服务器节点连接成簇并且连接各种I/O装置(比如存储装置、桥和网络接口)的标准接口。一个或多个NG I/O“交换机”与一系列链路一起组成一个“架构”。
一条NG I/O链路是被用来互连两个点的线和在那些线上运行的伴随协议。一个I/O通过是基于装载/存储的存储器事务将I/O装置连接到一个计算机节点,或将两个计算机节点连接到一起的方法。一个基于I/O通过的互连是对处于该互连的任何一端的实体透明的。NGI/O(物理的)是互连两个实体的线和在链路上运行的协议的最小组。例如,将一个计算机节点连接到一台交换机的线和协议组成一条链路。捆绑的NG I/O是指并行连接两个或多个NG I/O链路在一起的能力。这种被捆绑的链路可以被用来获得增加的带宽或提高一条给定链路的整体可靠性。根据本发明,一台交换机可以被定义成任何能够通过一个或多个端口接收分组(也被称作I/O分组)并基于包含在该分组中的目的地址通过另一个端口重传那些分组的装置。在网络术语中,一台交换机典型地操作在开放系统互连(OSI)的数据链路层。
图1示例了根据本发明的一个示范实施方案的整体NG I/O链接结构。整体NG I/O链接结构可以被示例为包含一台或多台计算机210(例如,服务器,工作站,个人计算机或类似的机器),其中包含计算机210A和210B。计算机210通过包含一个含有网络层212、数据链路层214和物理层216的分层结构的交换NG I/O架构互相通信。一台NG I/O交换机220(例如,包含数据链路和物理层)与计算机210A和210B互连。每台计算机210能够利用例如根据本发明并将在下面被更详细描述的I/O通过技术226,而通过NG I/O架构与一个或多个I/O装置224(224A和224B)通信。每台计算机210能够替代地用一个分布式消息通过技术(DMP)227与一个或多个I/O装置224(224A和224B)通信。其结果是,I/O装置224可以位于每台计算机210的远端。
图2是根据本发明的实施方案用于I/O通过的NG I/O结构的方块图。NG I/O结构包括一台计算机310和一台计算机360,各个都可以是服务器、工作站、个人计算机(PC)或其它计算机。计算机310和360作为主机装置操作。通过包含一条或多条NG I/O链路(例如,NGI/O链路330A,330B,330C,330D)的交换NG I/O架构328,计算机310和360每个都被互连到I/O系统318A和318B。I/O系统318能够位于计算机310和360的远端。
计算机310包括:一个CPU/存储器组合312(包含未表示出的通过一条主机总线典型互连的一个CPU和主存储器),一个NG I/O主机桥314,辅助存储器315(例如一个硬盘驱动器),和一个网络控制器316。对于输出事务(例如从计算机310发送到I/O系统318的信息),NG I/O主机桥314操作以便将该主机事务打包到一个NG I/O分组中而在NG I/O架构328上传输。对于进入事务(例如,从I/O系统318发送到计算机310的信息),NG I/O主机桥314操作以便对在架构328上的一个NG I/0分组中提供的数据(例如,PCI事务)解包,然后将被解包的数据(例如,PCI事务)转换成一个主机事务。与计算机310类似,计算机360包括:一个CPU/存储器组合362,一个NG I/O主机桥364,辅助存储器365,和一个网络控制器366。计算机360以与计算机310相似的方式操作。
每个I/O系统318包含:一个NG I/O到PCI的桥320,一个通过一条PCI总线322连接到该NG I/O到PCI的桥的PCI存储控制器324,和一个或多个I/O装置326。(如图2所示,后缀A标识I/O系统318A的部件,而后缀B标识I/O系统318B的相应部件)。对于输出事务,NG I/O到PCI的桥320操作以便将在NG I/O架构328上接收到的NG I/O分组的数据解包,然后将被解包的数据(例如,一个主机事务或数据)转换成一个PCI事务。类似地,对于进入事务,NG I/O到PCI的桥320操作以便将PCI事务打包到一个NG I/O分组中用于在NG I/O架构328上传输到计算机310。
PCI存储控制器324操作来控制并协调PCI总线322和I/O装置326之间的PCI事务的发送和接收。I/O装置326可以包含,例如,一个SCSI存储装置,或其它I/O装置。
尽管图2所示例的本发明的NG I/O结构的实施方案包括一个NGI/O到PCI的桥320,本领域的技术人员应当理解其它类型的桥也可以被使用。例如,一般来讲,桥320可以被称作“网络到外围的桥”,用于使网络分组转换到与总线322(总线322可以是广泛的各种类型的I/O或外围总线,例如一条PCI总线)兼容的格式和从该格式转换回来。类似地,PCI存储控制器324一般可以被称作是用于几种类型的I/O装置的任意一种的“外围存储控制器”因此,本发明并不局限于PCI桥,而是可以应用于广泛的各种其它的I/O总线,例如工业标准结构(ISA)、扩展工业标准结构(EISA)、加速图形端口(AGP)等。PC只被用作描述本发明的原理的一个例子。类似的,NG I/O到主机的桥364一般被称作一个“网络到主机的桥”,因为它将(NG I/O)网络分组转换到一个主机格式(主机事务)和从主机格式转换回来。
图2示例了一个NG I/O架构328可以被用来将存储装置移出服务器机壳并将存储装置放置在计算机310的远程。架构328可以包含一个或多个计算机410和每个I/O系统418之间的点到点链路,或可以包含多个由一台或多台交换机互连的点到点链路。这个结构允许一个比当前可获得的更分布开的环境。
本发明提供了一个简单途径,用于生成一个带有流量控制机制、不允许由于拥塞而导致数据丢失和由于内部或外部系统噪声而导致瞬时比特错误的工作网络。本发明使用一种不要求端到端或链路到链路信用的流量控制方法,本发明将检测一个被破坏或失序分组的能力以及重试(重发)任何/所有分组以便维持所有数据都不被破坏地传送的能力相组合,而不丢失任何数据且保持数据被发送的顺序。这通过给每个分组分配一个序列号并计算一个32比特循环冗余校验(CRC)并确认(ACK)或否定确认(NAK)每个分组来实现。
本发明假设一个构建的、没有点到点链路的网络。参考图3,最小尺寸的网络10是通过架构15被连接的两个端点3和4。为简单起见,网络3和4中的两个端点分别被命名为源和目的地,并将被用于描述本发明,注意到本发明支持任何不限尺寸的网络。架构15包括一台交换机13和链路8和9。链路8将源连接到交换机13且链路9将目的与交换机13相连接。如上所述,NG I/O协议如所给出的,是在点到点间200工作而不是在端到端间100工作。
本发明假设在每个端点有发送队列和接收队列(即,在源一侧有一个发送队列SE1和一个接收队列RE1,且在目的地一侧,有一个发送队列SE2和一个接收队列RE2)以及在架构13中在每条链路交换连接上有发送和接收队列(即,在链路8的链路交换连接上有一个发送队列X1和一个接收队列X2,且在链路9的链路交换连接上,有一个发送队列X3和一个接收器队列X4)。发送队列SE1的尺寸不需要匹配于接收队列X2的尺寸,发送队列X1的尺寸也不需要匹配于接收器队列RE1的尺寸。对于去往和来自目的地4以及链路9的链路交换连接的发送和接收队列也是这样。一般地,发送队列要比接收队列大一些(不过,对于本发明不需要这样)。在这个例子中,源的发送队列RE1的尺寸被定义为S1,源的接收队列2的尺寸被定义为R1,目的地的发送队列2的尺寸被定义为S2,且目的地的接收队列2的尺寸被定义为R2。此外,发送和接收队列X1-X4的尺寸被分别定义为LX1-LX4。
源3被允许发送至多S1个分组到交换机13的接收队列X1。在无拥塞的条件下,在交换机13接收到的分组将被处理并立刻传送到目的地4。返回去参考图3中的例子,交换机13必须发送回来一个确认(ACK)以便通过确认一个序列号去通知源:分组已经被链路8的链路交换连接正确接收。分组有一个唯一的与链路相关的序列号。在任意给定的链路上,分组必须按照被发送的顺序到达。在任意给定的链路上,描述符被按照它们被排队的顺序重试。注意,作为对这个算法的效率提高,链路8的链路交换通过确认已经被正确接收的最高序列号就能够一次确认多个分组,即如果源3接收到对于分组#9的确认,然后接收到对于分组#14的确认,则分组#10-#13也被隐含确认。链路8的链路交换发送一个分组已经被正确发送的ACK后,交换机9的链路交换就把分组发送到目的地4。目的地4必须发送回一个确认给交换机9的链路交换以确认数据已被正确发送。一组新的序列号被分配给从交换机9的链路交换发送到目的地的分组。
瞬时错误是分组被从一个发送节点发送到一个接收节点时发生的错误。在一个归因于内部或外部系统噪声的瞬时错误事件中,数据可能在源3和目的地4之间被破坏。分组的接收器必须计算接收到的数据的CRC,并将它与被添加到该分组尾端的CRC相比较。如果被计算出的CRC与被接收到的CRC匹配,则该分组被确认。如果两个CRC不匹配,则该分组必须被否定确认,再次用序列号标识。在接收到否定确认后,发送器必须再次重发指定的分组,以及跟随在它后面的所有分组。例如,如果发送器已经发送了多达序列号16的分组却接收到一个分组#14的NAK,则它必须重发分组#14,以及后面的分组#15和分组#16。注意ACK和NAK还可以被组合。利用前面一段的例子,分组9被确认,然后分组#10-#13被假设没有数据破坏地被按顺序接收,随后的分组#14有被破坏的数据;则分组#14的NAK意味着分组#10-#13被无错误地接收,但分组#14被有错误接收且必须被重发。
图4是示例根据本发明的一个实施方案的NG I/O链路的方块图。架构400在分别被标注为401、402和403的节点A、B和C之间被连接。如图4所示,链路411被放置在节点A和架构400之间,链路412被放置在节点B和架构400之间且链路413被放置在节点C和架构400之间。每条链路是在架构400中的两个NG I/O连接点之间的双向通信路径。如图4所示,链路411的一条单向路径431被在节点A的输出端口422和架构400的一个输入端口414之间连接且一条单向路径432被在节点A的输入端口426和架构400的输出端口428之间连接,从而提供一条双向链路。
返回去参考图4,假设例如,节点A和C想通过发送数据分组到节点B去与节点B通信。根据本发明的原理,节点A可以通过链路411转送分组#1-#3到架构400。这些分组被分配以一个指明这些分组被接收点或节点接收的顺序的序列号。节点C也想与节点B通信,它通过链路413转送分组#11-#12到架构400。序列号再次被分配给这些分组以保证它们被按照发送的顺序接收。架构400包含至少一台被用来接收已发送的分组的交换机410。交换机410也分配一个新的序列号给它接收到的所有分组。例如,交换机410分配一个新的序列号给分组#1-#3和#11-#13。这些分组的序列号可以被按照不只一种方法安排,只要它们遵循分组被从发送器发送到交换机410的相同顺序。例如,交换机410可以分别分配新的序列号101-106给分组#1-#3和#11-#13。另外,新序列号101-106可以分别被分配给分组#1、#11、#2、#12、#3和#13。其它分配也是可能的只要不偏离本发明。
根据本发明的原理,不再需要对于发送分组的源的识别。这样,一旦分组被从源发送到交换机,并被交换机确认,就不再需要对源的识别。返回去参考前面的例子,被分配以新的序列号101-106的分组#1-#3和#11-#13,接着被转送到节点B。在节点B,这些分组被确认或否定确认。如果分组被确认,则成功的数据传输就被完成。或者,如果NAK被交换机从节点B接收到,则交换机确定哪些分组要被重发。根据本发明的特征,新的序列号101-106被用于标识分组。这样,对于序列号104的NAK意味着序列号101-103代表的分组被无错误接收,但序列号104-106代表的分组被有错误接收且必须被重传。
如果网络中发生了拥塞,则被接收到的分组就不能立即在网络中继续前进。网络中的拥塞是通过网络的分组发生拥挤而造成的。拥塞控制和拥塞管理是网络可以用来有效处理大业务量的两种机制。返回去参考图3,当在一个接收队列中本地缓冲器空间被填满时,额外的分组就将被丢失,例如,当队列X1填满时,随后的分组将被丢弃。不过,假设重试可以发生在网络的每个点而不是每端,则被丢弃的分组能相对简单地被恢复。接收队列X1一旦开始将分组移出其接收缓冲器,它就给出了用来接收额外分组的空间。接收队列X2将检查它接收的下一个分组的序列号。在源3已经发送了被丢弃的分组的事件中,第一个被丢弃的分组将被否定确认从而从该分组开始重传。
根据本发明,发送队列S1只是不断发送分组直到其发送队列已经被还未被确认的分组充满为止。在它能重新使用那些缓冲器之前,它必须等待对于那些分组的确认(如果需要的话,它需要能够重试那些分组)。
本发明有许多优点。例如,本发明允许被破坏的分组能在网络中的每个点而不只是在网络的源和目的地被重试。根据本发明,在第一个节点(源)发送到和从一个中间节点接收一个确认后,第一个节点就不再被依赖去重发信息,尽管该信息后来在从其它中间节点到目的地的传输路径中可能被破坏。这样,本发明的重试特征简化了数据传输并使得其更有效。由于在传输期间发生了破坏时第一个节点不再被依赖去重发数据,所以在第一个节点从第一个中间点接收到一个确认之后它就不用发送额外数据到其它位置或相同的目的地。
此外,本发明也允许在信元级检测错误分组。根据本发明的原理,分组中的每个信元被检查错误。在检测到分组中的第一个被破坏信元后,一个错误指示就被返回给分组的发送器。这样,整个分组在一个错误指示被返回之前不需要被检查。
另外,本发明实现了两个点之间的流量控制,它比传统的基于信用的流量控制(当所有信用被用尽时,一个基于信用的方案就停止发送分组,且传输不能被恢复直到额外的信用被收到为止)有更好的、提高链路效率的带宽。因此,在一个基于信用的方案中,开始和停止数据传送的时间依赖于经过的链路的往返行程时间。本发明的最有利之处在于它发送分组带有它们都被正确接收的预期而且不依赖于链路的往返行程时间。