用于传输卸载引擎的重发系统和方法

文档序号:7601631阅读:160来源:国知局
专利名称:用于传输卸载引擎的重发系统和方法
技术领域
本发明是关于用于传输卸载引擎,更特别的,是关于利用卸载引擎处理重发请求。
背景技术
传输卸载引擎(TOE)包含为优化处理能力和降低处理器的利用的目的而在高速系统中得到普及的技术。TOE组件经常被整合在各种印刷电路板中的一种,所述印刷电路板例如网卡(NIC)、主机总线适配器(HBA)、主板或任何其它希望的卸载设备(offloadingcontext)。
近年来,系统通讯速度的增长远高于处理器速度的增长,这已经产生了一个输入/输出(I/O)瓶颈。处理器主要被设计用于计算,而不是用于I/O;因而典型地跟不上遍及网络的数据流。因而,数据流的处理速度小于网络速度。TOE技术通过从处理器和/或I/O子系统除去负荷(例如卸载)解决了这个问题。
现有技术的图1显示了一个TOE的典型的操作100。如现有技术的图1所示,一个本地处理器(任何形式)首先向TOE发送一个传输数据的指令,以根据传输控制协议(TCP)连接,从具有TOE的处理器向网络上的一个远端处理器传输数据,见操作102。
接着,在操作104,TOE获得该数据,并将其分成多个分段,并向每一个数据段加上以太网、TCP、和网络协议(IP)标头,以生成一个对应于每一个数据段的TCP/IP信息包。此后,TOE将得到的信息包发送到网络,如操作106所示。
远端处理器接收并确认该信息包后,远端处理器向本地处理器发回确认(ACK),以指示有多少数据已被成功接收。一旦接收一条用于所有已发送数据的ACK(见判定108),则TOE发送一条完成指令到本地处理器,以指示发送指令已通过TOE的传输功能被完成,见操作110。然后额外数据可以被发送,如操作112所示。
如果TOE在相应的信息包发出后的一个预定的时间没有收到ACK,这指示了一个出错的情况,TCP数据被从TOE的存储器重新取出,见操作114。然后在操作116,TOE可以重发部分或全部未被确认的信息包。
因此,当通过一个信息包转换的网络传输数据时,数据可能丢失,且这些数据必须被重发。因为这个原因,TOE存储所有未被确认的数据。但是,使用一个10Gbps的连接和一个可能的200ms的来回程延迟的广域网,这可能意味着大到10Gbps×200ms,或者说2千兆的信息必须被存储。不幸的是,这么大量的数据很难以成本节约的方式存储在一个集成的TOE上,因为在TOE上的集成电路存储器可能是非常昂贵的。
因而需要有一种经济有效的技术用于实现网络重发。

发明内容
本发明提供了一种用于在网络上实现数据重发的系统和方法,包括一个与系统存储器和一个网络通信连接的卸载引擎。该卸载引擎用于管理网络中被发送的数据的重发。
为了实现这一目的,该卸载引擎确定那些需要重发的数据,找回存储在系统存储器中的那些需要重发的数据,并发送这些找回的数据。通过以这样一种方式利用系统存储器,本发明提供了一种用于完成网络重发的经济有效的技术。
在一个实施例中,该卸载引擎可以发送一个状态到一个处理器,以启动需要重发的数据的找回。优选的,这个状态信息可以基于收到的至少一个确认或确认缺失(由于超时等)而发送。而且,该状态信息可以包括一个用于控制模块的句柄(handle),该句柄用于接口(socket)、序列号和/或与重发请求相关的重发数据的大小。
而且,响应该状态信息,处理器可以向卸载引擎发送一个重发指令信息。该重发指令信息可以包括一个序列号、指向一个主机缓冲的指针(pointer)等。需要注意的是,该指针可以由卸载引擎和/或处理器来维护。
优选的,该重发指令信息还可以包含一个补偿,该补偿与指针共同使用,以确定需要重发的数据。如果需要重发的数据缓冲(buffer)只有部分被确认,则该重发指令信息可以优选地包含这个补偿。而且,该重发指令信息可以包含一个用于控制模块的句柄,该句柄用于接口。
使用中,卸载引擎可以请求一个直接存储访问(DMA)以响应重发指令信息,找回需要重发的数据。响应需要重发的数据的接收,卸载引擎可以启动一个涉及序列号的比较。此后,卸载引擎可以根据比较重发该数据。
需注意到的是,系统存储器可以通过一根总线连接到一个处理器和/或驻留在该处理器上。而且,该卸载引擎可以包括一个接收器、一个轮询器、存储器、一个状态信息发生器、一个解析器、一个发送请求器、一个DMA队列(queue)、一个信息包发生器和/或其它任何需要的组件。


图1为现有技术的用于从一个主机发送和重发数据的方法的流程图,该主机具有界面设备,例如一个卸载引擎。
图2显示了根据一个实施例的一个网络系统。
图3显示了一个典型的结构,该结构可以实现一个实施例。
图4显示了根据一个实施例的、在网络中进行数据重发的一个典型的方法。
图5显示了根据一个实施例的、用于产生重发指令信息的一个典型的方法。
图6显示了根据一个实施例的、用于处理重发请求的一个典型的设计和操作。
图7显示了根据一个实施例的、用于跟踪数据发送的SGL的一个典型的设计。
具体实施例方式
根据一个实施例,图2显示了一个网络系统200。如图所示,提供了一个网络202。在本网路系统200的上下文中,网络系统202可以采用任何形式,包括但不局限于局域网(LAN)、广域网(WAN)例如互联网等。
连接到网络202的是一个本地主机204和一个远端主机206,它们能够通过网络202进行通信。在现有描述的上下文中,这些主机204、206可以是网络服务器、桌面电脑、笔记本电脑、手提电脑、打印机或任何其它类型的硬件/软件。需要注意的是,每一个前述组件以及其它任何未说明的设备都可以通过一个或多个网络相互连接。
图3为一个典型的结构300,该结构可以实现一个实施例。在一个实施例中,该结构300可以表示图2的主机204、206中的一个。当然,虽然这样,应该注意到,结构300可以在任何希望的上下文中实现。
例如,结构300可以在下列情况下实现常规计算机系统、电路板系统、用于娱乐目的的游戏控制系统、机顶盒、路由器、网络系统、存储系统、特定应用系统或与网络202相关的任何其它希望的系统。
如图所示,结构300包括多个通过一根总线302相连接的组件,包括至少一个用于处理数据的处理器304。而该处理器304可以采用任何形式,在一个实施例中,处理器304采用的形式有中央处理单元(CPU)、芯片组(例如一组集成电路等,设计成作为一个单元用于实现相关功能),或任何其它希望的能够处理数据的处理设备。
另外,结构300还包括一个处理系统存储器306,与处理器304相互通信以用于存储数据。该处理系统存储器306可以采用的形式包括机载(on-board)或离机(off-board)随机访问存储器(RAM),硬盘驱动器,可移动存储驱动器(例如软盘驱动器、磁盘驱动器、光盘驱动器等),和/或任意其它形式的可用于存储数据的希望的存储器。
使用中,优选的,程序、控制逻辑算法可以任意地存储于处理系统存储器306。当执行时,这些程序使结构300完成各种功能。当然,结构300可以简单地直接连接。
此外还显示了一个与处理器304和网络(例如图2所示的网络202)通信的卸载引擎312。在一个实施例中,卸载引擎312可以通过总线302保持与处理器304的通信。当然,尽管这样,卸载引擎312可以通过任意提供相互间连接的设备保持与处理器304之间的通信。卸载引擎312可以包括一个传输(例如TCP/IP)卸载引擎(TOE),或任意能够管理网络中传输的数据的集成电路。
在操作中,为了提供一种用于实现网络重发的经济有效的技术,该卸载引擎312用于确定需要重发的数据,找回存储在系统存储器(例如,处理器系统存储器306)中的需要重发的数据,并重发那些找回的数据。通过使用系统存储器存储那些重发的数据,卸载引擎312的生产可以具有更小的集成存储器或不需要存储器。从而提供了一种更为经济有效的技术。参考让卸载引擎312以前述方式使用系统存储器的典型的方法,更多的信息可以被提供。
根据一个实施例,图4显示了一种在网络上进行数据重发的典型的方法400。作为选择,方法400可以在图3的典型结构300的上下文中实现。当然,尽管这样,应该注意的是,方法400可以在任何所希望的上下文中实现。而且,重要的是应当理解,如果可以给这些典型组件(例如上述的各种组件)分配各种功能,则所述各种功能可以通过任何希望的实体(entity)实现。
如图所示,在判断401中,该判断是确定确保数据重发的标准是否满足。正是通过例中的方式,所述标准可以基于以下事项至少一个确认(ACK)或确认缺失、一个重复的ACK阀值、超时、各种计时参数和/或任何其它希望的标准。例如,在一个例子中,该标准包括一个重复的ACK阀值,该重复的ACK阀值可以是任何预先设定的,或用户设定的接收的ACK的数量,或其它任何与ACK相关的参数。在本描述的上下文中,ACK包括任何从接收主机发送到发送主机的、指示数据已被成功发送的信号。
通过判断401,如果重发的标准被确定为符合,则生成一条状态信息,并发送到一个处理器(例如图3的处理器304),如操作402所示。在一个实施例中,是利用一个卸载引擎(例如图3的卸载引擎312)生成该状态信息。而且,状态信息可以采用任何能够请求存储于系统存储器(例如图3的存储器306)的数据重发的形式。
作为选择,该状态信息可以包括便于请求数据重发的各种信息。例如,该状态信息可以包括一个序列号。在本发明的上下文中,这种序列号可以包括与重发的数据相关的号码,该号码反映该数据相对于其它发送数据的顺序。
作为又一个选择,该状态信息可以包括重发数据的大小。典型的,该重发数据的大小是以字节规定的数据、例如一个远端主机能够在一个单一的、未分段的片段中处理的数据的最大值。重发数据的大小也可以根据本地主机接收到的远端主机的ACK而规定。在这种情况下,远端主机可以请求多个用于重发的TCP信息包。而且,该状态信息可以包括一个用于接口的控制模块(CB)句柄,或任何其它希望的信息。应该注意,所述CB可以包括各种信息,例如与最新确认的数据相关的信息。
表1显示了一个典型的状态信息的格式。该格式仅用于说明的目的,不应认为是任何方式的限制。
表1

接着,作为对该状态信息的响应,处理器生成一条重发指令信息并发送到该卸载引擎。见操作404。在本描述的上下文中,重发指令信息包括任何便于找回需要重发的数据的信息,其方式将在下面被阐述。参考图5,与这个重发指令信息相关的更多信息将被更加详细地阐述。
作为对重发指令信息的响应,该卸载引擎将请求一个直接存储访问(DMA),见操作406。请求该DMA是为了找回存储在系统存储器中的需要被重发的数据。应该注意,在本描述的上下文中,DMA可以允许数据从存储器直接发送,这样,处理器可以避免被卷入特定数据的发送,从而加快了整个操作。
一旦成功完成DMA,并且所述数据也被接收,接着根据即时数据,确定是否接收到ACK,在此同时,各种前述的操作也被执行,见判定408。这个操作可以通过任何所希望的方式完成,优选的,可以通过启动一个上述序列号的比较来完成。特别是,如果一个ACK的序列号比先前收集的序列号大,那么可以假设,数据的部分或全部已被远端主机成功接收。
因此,根据判定408的先前的比较,通过使用该卸载引擎,所述数据可以通过网络被重发,见操作410。特别的,如果所述数据没有被确认已被成功接收,则该数据可以被重发。
根据一个实施例,图5显示了一个用于生成一个重发指令信息的典型的方法500。作为选择,方法500可以在图4的操作404的上下文中实现。当然,尽管这样,应该注意,方法500可以通过任何希望的情形实现。而且,重要的是应当理解,如果可以给这些典型组件(例如上述的各种组件)分配各种功能,则所述各种功能可以通过任何希望的实体实现。
如图所示,在操作502,一个缓冲(buffer)被处理器(如图3的处理器304)确定。如表1所列举的状态信息所示,该缓冲可以通过CB句柄来确定。一般而言,将被重发的缓冲是与上述CB句柄相关的未确认的最旧的缓冲。
接着在判断504,该缓冲被确定是否已被远端主机部分接收。换句话说,由处理器确定在确定的缓冲中的需要重发的数据是否以一个成功的方式被部分接收。如果数据缓冲已被至少部分确认,则一个用于补偿与前述DMA(见图4的操作406)相关的启动地址的补偿(offset)被确定,见操作506。如果不需要补偿,则跳过操作506。作为替换,与上述DMA相关的启动地址可以由补偿的值予以修改,从而排除了一个独立的补偿指示器(offset indicator)的需要。
接着,判断该数据的大小是否小于前述状态信息指示的重发数据。如果是这种情况,则加入一个额外的缓冲,见操作510。但是如果不是,则跳过操作510。
这样,类似于表1的状态信息,重发指令信息也可以包括各种信息。例如,用于DMA操作的启动地址可以作为一个补偿加入到一个与接口相关的分散-收集表(SGL)。而且,重发指令信息还可以包括前文所述的序列号。此外,重发指令信息可以包括一个用于接口的CB句柄,或任何其它希望的信息。
表2显示了一个典型的重发指令信息的格式。该格式仅用于说明的目的,不应认为是任何方式的限制。
表2

因此,重发指令信息可以用于那些位于图4中操作404(如图4的操作406-410)之后的操作。
根据一个实施例,图6显示了一个用于处理重发请求的典型的设计和操作600。作为选择,该设计和操作600可以在前述附图所公开的上下文中实现。当然,尽管这样,应该注意,该设计和操作600可以在任何希望的情况下实现。最重要的是,该典型的设计和操作600仅用于说明的目的,不应认为是任何方式的限制。
如图所示,该典型的设计和操作600包括一个与处理器相连接的主机驱动器618,该处理器又与一个卸载引擎601通信连接,该卸载引擎具有多个典型的组件。例如,所示的卸载引擎601包括一个接收器604、一个CB轮询器602、一个状态信息发生器606、一个指令模块(IB)队列620、一个IB解析器608、一个重发请求器610、一个DMA队列612、CB存储器614和一个数据信息包发生器616。这些组件如图所示进行连接。在下文的对典型设计和操作600的讨论中,各种组件的功能将被更为详细的阐述。
如图所示,通过检查CB存储器中一个重发的时间戳,CB轮询器确定重发是否需要一个接口。接着,状态信息发生器606生成一条重发状态信息,并通过主机驱动器618发送到本地主机。如前文所述,该状态信息可以包括与重发请求相关的序列号,并由来自CB存储器614的最新的未确认序列号域得到。该状态信息也可以包括与重发请求相关的重发数据的大小。
该本地主机(或卸载引擎601,两者都可以)可以维持一个用于接口的SGL。如果本地主机接收到状态信息,驱动器618就将表中最旧的缓冲取出,并在重发指令信息中使用。如前文所述,如果最旧的缓冲的数据的量小于远端主机要求重发的数据的大小,则本地主机就按照需要,在重发指令信息中加入尽量多的缓冲。
由于本地主机通过状态信息而获得用于接口的事件进展的所有ACK。因而,如果远端主机的缓冲中有部分确认的数据,本地主机也知道。在这种情况下,如上文所解释,本地主机可以适当的对缓冲中的启动地址进行补偿。表3显示了一个ACK状态信息的典型格式。该格式仅用于说明的目的,不应认为是任何方式的限制。
表3

本地主机收到状态信息后,将产生一个重发指令信息,并将该信息发送到卸载引擎601,并排在本地的缓冲中。
当IB解析器608收到该重发指令信息后,解析器将对该指令信息进行解析;一旦确定该信息是一个重发指令,解析器将把该请求发送到发送请求器610。然后,发送请求器610从CB存储器614中找回必要的参数,并请求一个DMA操作以找回主机系统中的重发数据。然后,该DMA请求排在DMA队列的一个FIFO中。该DMA操作可以类似于通常的数据发送请求。来自重发指令信息的序列号,连同一个额外的部分,将与DMA请求一起被发送,以指示该数据请求是用于重发。
如果该DMA完成,该数据信息包发生器616可以确定该请求是一个重发请求,因为该重发部分与一个DMA数据的有效指针一起被维持。如果数据信息包发生器616遇到了这个情况,则数据信息包发生器616会将需要被重发的信息包的序列号与CB存储器614中最旧的未确认的序列号进行比较。如果二者相一致,则重发有效,信息包被重发。如果CB存储器中的序列号的版本大于重发数据的序列号,则表明远端主机已经在重发请求发出与DMA操作完成之间的时间内完成全部或部分数据的确认。在这种情况下,根据被确认数据的量,数据重发请求可以被放弃或继续。
使用中,由重复的ACK或选择性的确认(SACK)选项引发的重发,也可以由指向本地主机的一个状态信息引发。根据远端主机的观点,没有必要观察不同重发类型之间的区别。对于这些情况,接收器604可以被配置成请求状态信息。一旦收到的重复ACK的数量值,则达到界限,接收器604可以请求一条重发状态信息并在接口CB存储器614中规定一个重复ACK状态。如果接收器接收到进一步的重复ACK并观察到这个部分仍然存在,则接收器不再重新请求进一步的重发。如果数据信息包发生器616发送了该重发信息包,则数据信息包发生器就可以清除前述的该部分。
如果接收器604接收到的来自远端主机的信息包含有SACK选项,则接收器也可以请求一条重发状态信息。与重复的ACK不一样,一条重发状态信息可以被请求用于每一个收到的SACK选项。重发数据的大小也可以由SACK选项中收到的参数而得知。
图7显示了一个SGL列表的典型的设计,该列表被维持以用于每一个接口。SGL700含有一个入口(entry)的列表,该列表规定了接口上发送的数据。
每个SGL入口包含一个指针,该指针指示被发送信息在主机存储器上的位置,以及将被发送的数据的量。表4显示了一个典型的SGL入口格式。该格式仅用于说明的目的,不应认为是任何方式的限制。
表4

用于每一个SGL的指针有两个。第一个指针指示下一个项目在SGL中将被写入的位置,见701。当更多的数据需要在接口发送,则该指针所指示的SGL位置将被一个SGL项目写入,该项目包含放置数据的主机地址,以及有多少数据将被发送。
用于SGL的第二个指针是指向最旧的未确认数据缓冲,见702。当收到一条重发状态信息时,该指针用于追踪哪个数据需要被重发。由于本地主机收到了指示有多少数据已被远端主机接收的ACK状态信息,因此指针被增长。如果在最旧的SGL选项中的所有数据都被确认了,则上述选项所指示的缓冲可以被释放,并被本地主机重新使用。通过这种方式,当本地主机接收到重发状态信息时,可以快速的对需要重发的数据进行定位。
尽管前文描述了多种不同的实施例,但是,这些实施例仅仅用于举例说明本发明,并不是用来限制本发明。因此,上述的典型的实施例不应限制这些优选的实施例的应用范围,这些实施例的应用范围应该依据权利要求进行限制。
权利要求
1.一个卸载引擎系统,用于在网络上执行数据重发,其特征在于,该系统包括一个卸载引擎,与系统存储器以及网络进行通信;其中,所述卸载引擎用于管理网络中发送的数据的重发。
2.如权利要求1所述的系统,其特征在于,所述卸载引擎与处理器进行通信,并管理数据的重发,通过确定将被重发的数据;找回存储在系统存储器中的、需要重发的数据;重发找回的数据。
3.如权利要求2所述的系统,其特征在于,所述卸载引擎向处理器发送一条状态信息,以启动需要重发的数据的找回;且该状态信息的发送是基于接收的至少一个确认或者确认缺失。
4.如权利要求2所述的系统,其特征在于,所述卸载引擎向处理器发送一条状态信息,以启动需要重发的数据的找回;且该状态信息基于超时而发送。
5.如权利要求2所述的系统,其特征在于,所述卸载引擎向处理器发送一条状态信息,以启动需要重发的数据的找回;且该状态信息包括一个用于控制模块的句柄,该控制模块用于接口。
6.如权利要求2所述的系统,其特征在于,所述卸载引擎向处理器发送一条状态信息,以启动需要重发的数据的找回;且该状态信息包括一个序列号。
7.如权利要求2所述的系统,其特征在于,所述卸载引擎向处理器发送一条状态信息,以启动需要重发的数据的找回;且该状态信息包括一个重发数据的大小。
8.如权利要求2所述的系统,其特征在于,所述卸载引擎向处理器发送一条状态信息,以启动需要重发的数据的找回;响应该状态信息,该处理器向该卸载引擎发送一条重发指令信息。
9.如权利要求8所述的系统,其特征在于,所述重发指令信息包括一个序列号。
10.如权利要求8所述的系统,其特征在于,所述重发指令信息包括至少一个指针,该指针指向至少一个主机缓冲。
11.如权利要求10所述的系统,其特征在于,所述指针由该卸载引擎维持。
12.如权利要求10所述的系统,其特征在于,所述指针由该处理器维持。
13.如权利要求10所述的系统,其特征在于,所述重发指令信息包括一个补偿,该补偿与该指针一起用于确定将被重发的数据。
14.如权利要求13述的系统,其特征在于,所述补偿被包括是为了规定缓冲列表中的一个起始位置,该缓冲列表用于将被重发的数据。
15.如权利要求8所述的系统,其特征在于,所述重发指令信息包括一个用于控制模块的句柄,该控制模块用于接口。
16.如权利要求15所述的系统,其特征在于,所述控制模块包括与最新确认的数据相关的信息。
17.如权利要求8所述的系统,其特征在于,响应该重发指令信息,所述卸载引擎请求一个直接存储访问以找回将被重发的数据。
18.如权利要求17所述的系统,其特征在于,响应收到将被重发的所述数据,所述卸载引擎启动一个涉及序列号的比较。
19.如权利要求18所述的系统,其特征在于,所述卸载引擎基于所述比较重发所述数据。
20.如权利要求1所述的系统,其特征在于,所述卸载引擎向一个处理器发送一条状态信息,以指示已从远端主机收到一条用于发送的数据的确认。
21.如权利要求20所述的系统,其特征在于,所述状态信息包括一个控制模块的句柄,该控制模块用于接口。
22.如权利要求20所述的系统,其特征在于,状态信息包括一个确认号码。
23.一个卸载引擎子系统,用于在网络上执行数据重发,其特征在于,该系统包括一个卸载引擎,与一个存储器和一个网络进行通信;其中,所述卸载引擎管理网络中数据的发送,通过确定将被重发的数据;找回存储与处理系统存储器中的需要被重发的数据;重发该找回的数据。
24.一种利用卸载引擎在网络上执行数据重发的方法,其特征在于,该方法包括确定将被重发的数据;找回存储与处理系统存储器中的需要被重发的数据;和重发该找回的数据。
全文摘要
一种系统和方法,该系统和方法用于在网络中进行数据重发。该系统和方法包括一个卸载引擎,该卸载引擎与系统存储器以及网络进行通信。该卸载引擎用于管理网络中被发送数据的重发。
文档编号H04L29/06GK1638319SQ20041010498
公开日2005年7月13日 申请日期2004年12月20日 优先权日2003年12月19日
发明者米纳米·约翰·希吉托, 约翰逊·迈克尔·瓦尔德, 库里德·安德鲁, 卡努里·姆鲁杜拉 申请人:恩维迪亚公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1