用于传输数据的方法和设备、网桥及存储介质转让专利

申请号 : CN201480074625.0

文献号 : CN105960778B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 保罗·伯吉斯大卫·特洛塞尔

申请人 : 桥联有限公司

摘要 :

一种具有至少一个处理器和至少一个存储器的设备,该存储器中存储有计算机可读代码,当代码被执行时,控制至少一个处理器实施一种方法,包括:在通信路径上维持多个逻辑连接;在逻辑连接中的不同逻辑连接上发送数据包;监测针对通过逻辑连接中的不同逻辑连接发送的数据包、所接收到的确认;重用所发送的数据包的确认已被接收到的逻辑连接;当有数据包要在路径上发送且不存在可供重用的逻辑连接时,创建新的逻辑连接;以及终止多余的逻辑连接。这使得可以维持和使用最适合于链接条件和数据传输需求的多个逻辑连接,从而可能使传输速度最大化并使系统资源需求最小化。有利地,保留了一个多余的逻辑连接。这有助于进一步最小化系统资源需求。

权利要求 :

1.一种用于传输数据的方法,包括:

在通信路径上维持多个逻辑连接;

在所述逻辑连接中的不同逻辑连接上发送数据包;

监测针对通过所述逻辑连接中的所述不同逻辑连接发送的数据包、所接收到的确认;

重用所发送的数据包的确认已被接收到的逻辑连接;

当有数据包要在所述路径上发送且不存在可供重用的逻辑连接时,创建新的逻辑连接;以及终止多余的逻辑连接。

2.根据权利要求1所述的方法,包括通过确定存在多个可供重用的连接来识别多余的逻辑连接。

3.根据权利要求1或2所述的方法,包括:响应于接收到确认,终止多余的连接。

4.根据权利要求1或2所述的方法,包括在一次操作中终止一些但并非所有多余的逻辑连接。

5.根据权利要求4所述的方法,包括仅终止单个多余的逻辑连接并避免终止其它多余的逻辑连接。

6.根据权利要求1或2所述的方法,包括在一次操作中终止所有多余的逻辑连接。

7.根据权利要求1或2所述的方法,其中,终止逻辑连接包括向远程装置发送一指示不再有数据要发送的消息。

8.根据权利要求1或2所述的方法,其中,在所述多个逻辑连接和端口之间存在多对一的关系。

9.根据权利要求1或2所述的方法,其中,创建新的逻辑连接包括在第一装置和第二装置之间建立传输控制协议TCP流式套接字。

10.根据权利要求1或2所述的方法,其中,接收窗口大小参数针对一逻辑连接的值与该参数在所述逻辑连接的其他逻辑连接上的值无关。

11.根据权利要求1或2所述的方法,其中,由网桥来执行所述方法。

12.一种用于传输数据的设备,包括:

用于在通信路径上维持多个逻辑连接的装置;

用于在所述逻辑连接中的不同逻辑连接上发送数据包的装置;

用于对针对在所述逻辑连接中的所述不同逻辑连接上发送的数据包所接收到的确认进行监测的装置;

用于对所发送的数据包的确认已经被接收到的逻辑连接进行重用的装置;

用于当有数据包要在所述路径上发送且不存在可供重用的逻辑连接时创建新的逻辑连接的装置;以及用于终止多余的逻辑连接的装置。

13.根据权利要求12所述的设备,包括用于通过确定存在多个可供重用的连接来识别多余的逻辑连接的装置。

14.根据权利要求12或13所述的设备,包括用于响应于接收到确认而终止多余的连接的装置。

15.根据权利要求12或13所述的设备,包括用于在一次操作中终止一些但并非所有多余的逻辑连接的装置。

16.根据权利要求15所述的设备,包括用于仅终止单个多余的逻辑连接并避免终止其它多余的逻辑连接的装置。

17.根据权利要求12或13所述的设备,包括用于在一次操作中终止所有多余的逻辑连接的装置。

18.根据权利要求12或13所述的设备,其中,用于终止逻辑连接的所述装置包括用于向远程装置发送一指示不再有数据要发送的消息的装置。

19.根据权利要求12或13所述的设备,其中,在所述多个逻辑连接和端口之间存在多对一的关系。

20.根据权利要求12或13所述的设备,其中,用于创建新的逻辑连接的所述装置包括在第一装置和第二装置之间建立传输控制协议TCP流式套接字的装置。

21.根据权利要求12或13所述的设备,其中,接收窗口大小参数针对一逻辑连接的值与该参数在所述逻辑连接的其他逻辑连接上的值无关。

22.一种网桥,包括权利要求12至21中任一项所述的设备。

23.一种用于传输数据的设备,所述设备具有至少一个处理器和至少一个存储器,所述存储器中存储有计算机可读代码,当所述计算机可读代码被执行时,控制所述至少一个处理器执行一方法,所述方法包括:在通信路径上维持多个逻辑连接;

在所述逻辑连接中的不同逻辑连接上发送数据包;

监测针对通过所述逻辑连接中的所述不同逻辑连接发送的数据包、所接收到的确认;

重用所发送的数据包的确认已被接收到的逻辑连接;

当有数据包要在所述路径上发送并且不存在可供重用的逻辑连接时,创建新的逻辑连接;以及终止多余的逻辑连接。

24.一种其上存储有计算机可读代码的非暂时性计算机可读存储介质,当所述计算机可读代码被计算设备执行时,致使所述计算设备执行一方法,所述方法包括:在通信路径上维持多个逻辑连接;

在所述逻辑连接中的不同逻辑连接上发送数据包;

监测针对通过所述逻辑连接中的所述不同逻辑连接发送的数据包、所接收到的确认;

重用所发送的数据包的确认已被接收到的逻辑连接;

当有数据包要在所述路径上发送并且不存在可供重用的逻辑连接时,创建新的逻辑连接;以及终止多余的逻辑连接。

说明书 :

用于传输数据的方法和设备、网桥及存储介质

技术领域

[0001] 本发明涉及在通信路径上传输数据。

背景技术

[0002] 使用传统方法在网络节点之间传输数据的速率会受到一些因素限制。为了限制网络拥塞并确保可靠传输,在从第二接收节点接收到确认消息(ACK)之前,第一节点被允许仅发送有限的数据量。一旦ACK消息已经被第一节点接收,第二有限的数据量就会被发送给第二节点。
[0003] 在传输控制协议/网络互联协议(TCP/IP)系统中,该有限的数据量与能够存储在第二节点的接收缓冲区中的数据量有关,该有限的数据量被称为TCP/IP“接收窗口”。
[0004] 在传统系统中,TCP/IP窗口的大小可被设置成将第一节点和第二节点之间的往返时间以及可用带宽考虑在内。TCP/IP窗口的大小会影响数据在第一节点和第二节点之间传输的效率,这是因为当ACK消息没有在预定的时段(超时时长)内到达时,第一节点可以关闭至第二节点的连接。因此,如果TCP/IP窗口相对较大,则所述连接可能会“超时”。而且,数据量可能超过接收缓冲区的大小,造成错误恢复(error recovery)问题。然而,如果TCP/IP窗口相对较小,则可用带宽可能无法有效利用。此外,将需要第二节点发送更多数量的ACK消息,从而增加网络流量。在这样的系统中,数据传输率还由在第一节点处接收到所发送的数据包的确认所需的时间来确定。换句话说,数据传输率取决于第一节点和第二节点之间的往返时间。
[0005] 以上不足在传输大数据量的应用中特别地有意义。例如,存储在存储区域网络(SAN)上的数据可以在远程存储装置处进行备份,如在另一个存储区域网络(SAN)中的远程磁盘库。为了使本地存储数据和远程存储数据同时丢失的可能性最小,存储装置应该放在相当远的距离处。为此,备份数据必须通过网络发送给远程存储装置。但是,这种发送受到有限的数据传输率的制约。SAN常常利用能够支持相对较高速度的数据传输的光纤通道(FC)技术。然而,光纤通道协议(FCP)通常不能在大于10km的距离上使用,虽然可将其转换为TCP/IP流量以放宽距离限制,但却受到上述性能考虑的制约。

发明内容

[0006] 本发明的第一个方面提供了一种方法,该方法包括:
[0007] 在通信路径上维持多个逻辑连接;
[0008] 在所述逻辑连接中的不同逻辑连接上发送数据包;
[0009] 监测针对通过所述逻辑连接中的所述不同逻辑连接发送的数据包、所接收到的确认;
[0010] 重用所发送的数据包的确认已被接收到的逻辑连接;
[0011] 当有数据包要在所述路径上发送且不存在可供重用的逻辑连接时,创建新的逻辑连接;以及
[0012] 终止(destroy)多余的逻辑连接。
[0013] 所述方法可以包括通过确定存在多个可供重用的连接来识别多余的连接。
[0014] 所述方法可以包括:响应于接收到确认,终止多余的连接。
[0015] 所述方法可以包括在一次操作中终止一些但非所有多余的逻辑连接。所述方法可以包括仅终止单个多余的逻辑连接并避免终止其它多余的逻辑连接。
[0016] 可替换地,所述方法可以包括在一次操作中终止所有多余的逻辑连接。
[0017] 终止逻辑连接可以包括向远程装置发送一指示不再有数据要发送的消息。
[0018] 多个逻辑连接和端口之间可以存在多对一的关系。
[0019] 创建新的逻辑连接可以包括在第一装置和第二装置之间建立传输控制协议(TCP)流式套接字(socket)。
[0020] 接收窗口大小(Receive Window Size)参数针对一逻辑连接的值与该参数在所述逻辑连接的其他逻辑连接上的值无关。
[0021] 所述方法可以通过网桥来实施。
[0022] 本发明的第二个方面提供了包括机器可读指令的计算机程序,当机器可读指令被计算设备执行时,致使该计算设备执行以上任何方法。
[0023] 本发明的第三个方面提供了一种设备,该设备包括:
[0024] 用于在通信路径上维持多个逻辑连接的装置;
[0025] 用于在所述逻辑连接中的不同逻辑连接上发送数据包的装置;
[0026] 用于对针对在所述逻辑连接中的所述不同逻辑连接上发送的数据包所接收到的确认进行监测的装置;
[0027] 用于对所发送的数据包的确认已经被接收到的逻辑连接进行重用的装置;
[0028] 用于当有数据包要在所述路径上发送且不存在可供重用的逻辑连接时创建新的逻辑连接的装置;以及
[0029] 用于终止多余的逻辑连接的装置。
[0030] 所述设备可以包括用于通过确定存在多个可供重用的连接来识别多余的连接的装置。
[0031] 所述设备可以包括用于响应于接收到确认而终止多余的连接的装置。
[0032] 所述设备可以包括用于在一次操作中终止一些但并非所有多余的逻辑连接的装置。
[0033] 所述设备可以包括用于仅终止单个多余的逻辑连接并避免终止其它多余的逻辑连接的装置。
[0034] 所述设备可以包括用于在一次操作中终止所有多余的逻辑连接的装置。
[0035] 用于终止逻辑连接的装置可以包括用于向远程装置发送一指示不再有数据要发送的消息的装置。
[0036] 多个逻辑连接和端口之间可以存在多对一的关系。
[0037] 用于创建新的逻辑连接的装置可以包括在第一装置和第二装置之间建立传输控制协议(TCP)流式套接字。
[0038] 接收窗口大小参数针对一逻辑连接的值与该参数在所述逻辑连接的其他逻辑连接上的值无关。
[0039] 本发明还提供了包括如上设备的网桥。
[0040] 本发明的另一方面提供了一种设备,该设备具有至少一个处理器和至少一个存储器,该存储器中存储有计算机可读代码,当计算机可读代码被执行时,控制至少一个处理器执行一方法,该方法包括:
[0041] 在通信路径上维持多个逻辑连接;
[0042] 在所述逻辑连接中的不同逻辑连接上发送数据包;
[0043] 监测针对通过所述逻辑连接中的所述不同逻辑连接发送的数据包、所接收到的确认;
[0044] 重用所发送的数据包的确认已被接收到的逻辑连接;
[0045] 当有数据包要在所述路径上发送并且不存在可供重用的逻辑连接时,创建新的逻辑连接;以及
[0046] 终止多余的逻辑连接。
[0047] 本发明的另一个方面提供了一种其上计算机可读代码的非暂时性计算机可读存储介质,当所述计算机可读代码被计算设备执行时,致使所述计算设备执行一方法,所述方法包括:
[0048] 在通信路径上维持多个逻辑连接;
[0049] 在所述逻辑连接中的不同逻辑连接上发送数据包;
[0050] 监测针对通过所述逻辑连接中的所述不同逻辑连接发送的数据包、所接收到的确认;
[0051] 重用所发送的数据包的确认已被接收到的逻辑连接;
[0052] 当有数据包要在所述路径上发送并且不存在可供重用的逻辑连接时,创建新的逻辑连接;以及
[0053] 终止多余的逻辑连接。

附图说明

[0054] 现在将参照附图描述本发明的实施例,其中:
[0055] 图1描述了根据本发明的实施例的系统;
[0056] 图2描述了图1的系统中的节点;
[0057] 图3为示出了根据本发明实施例的系统的示意图,并且图3所示的系统为图1的系统的替代性方案;
[0058] 图4为示出了在发射机和接收机之间发送数据的方法的流程图;
[0059] 图5描述了图1或图3的系统中的数据传输;
[0060] 图6为示出了根据本发明实施例在发射机和接收机间发送数据的方法的流程图,并且图6所示的方法为图4的方法的替代性方案;
[0061] 图7为示出了根据本发明的实施例将输入包分组为传输包的方法的流程图;
[0062] 图8为示出了在图7的操作执行之前或之后IO矢量阵的示图;以及
[0063] 图9为示出了对形成图1或图3的系统的一部分的分配器进行操作的方法的流程图。

具体实施方式

[0064] 简而言之,本发明的实施例涉及在通信路径上通过多个逻辑连接来提供、维持和发送数据包,其中,每个数据包仅在一个逻辑连接上发送。基于所接收的确认,重用所发送的数据包的确认已被收到的逻辑连接。一旦逻辑连接变得可用,即确认被接收时,只要在发送缓冲区中有数据要在该逻辑连接上发送,就能够重用该逻辑连接。如果有数据包要在路径上发送且不存在可供重用的逻辑连接,则创建逻辑连接。并且,终止多余的逻辑连接。这使得能够维持和使用多个更适合于链接条件和数据发送要求的逻辑连接,从而有可能使发送速度最大化并且使系统资源需求最小化。有利地,保留了一个多余的逻辑连接。这进一步有助于使系统资源需求最小化。
[0065] 图1描述了根据本发明的实施例的系统。在该特定的示例中,系统包括本地存储区域网络(SAN)1和远程SAN 2。远程SAN 2设置为存储来自客户机、服务器和/或SAN 1中的本地数据存储器的备份数据。
[0066] 分别与本地SAN 1和远程SAN 2相关联的两个网桥3、4经由路径5进行连接。网桥3、4为网络节点的示例。路径5在网桥3、4之间提供了大量物理路径。在该特定的实施例中,路径5为位于IP网络上的路径,并且网桥3和4能够使用传输控制协议(TCP)互相通信。网桥3、4之间的通信路径包括任意数量的中间路由器和/或其它网络元件。本地SAN 1内的其它装置
6、7能够使用由网桥3和4及路径5形成的桥接系统与远程SAN 2中的装置8和9进行通信。
[0067] 图2为本地网桥3的框图。网桥3包括根据存储在存储器11中的软件来控制网桥3的操作的处理器10,所述操作包括生成以下进程:建立和释放到其他网桥4的连接以及介于网桥3和与其相关联的SAN 1内的其他设备6、7之间的连接。
[0068] 网桥3、4之间的连接利用了网桥3、4之间的I/O端口12-1至12-n,该I/O端口12-1至12-n为在TCP协议发送和接收时的物理端口。还可以提供多个光纤通道(FC)端口13-1至13-n用于和SAN1进行通信。FC端口13-1至13-n端口独立于端口12-n至12-1操作,并相对于端口
12-n至12-1有不同的类型和规格。网桥3能够使用端口12-n至12-1和端口13-1至13-n在多个连接上同时发送和接收数据。
[0069] 提供多个缓冲区14用于存储通过网桥3传输的数据。多个高速缓存15一起提供了大容量存储,同时时钟16被设置为提供定时功能。处理器10能够经由总线17和网桥3的不同部件通信。
[0070] 图3为示出了根据本发明实施例的系统的示意图,其中,与本地SAN 1和远程SAN 2分别相关联的网桥3、4经由第一和第二路径702、703相连接。在图3系统中原本应该呈现的来自图1系统的其他特征,但为了提高清晰度,这些特征被省略了。这些特征包括多个I/O端口12-1至12-n、光纤通道(FC)端口13-1至13-n等。
[0071] 存储器11存储软件(计算机程序指令),当软件被载入到处理器10中时,控制本地网桥3的操作。所述软件包括操作系统和其它的软件,例如固件和/或应用软件。
[0072] 计算机程序指令提供了使得网桥能够执行下述功能的逻辑和例程。计算机程序指令可以预编程到本地网桥3中。可替换地,计算机程序指令可以经由电磁载波信号到达本地网桥3或者可以从诸如计算机编程产品、非易失性电子存储装置(例如,闪存)之类的物理实体或诸如CD-ROM或DVD之类的记录介质中复制。计算机程序指令可以例如从服务器下载到本例网桥3中。
[0073] 处理器10可以是任何类型的带有处理电路的处理器。例如,处理器10可以是解释计算机程序指令和处理数据的可编程处理器。处理器10可以包括多个处理器。每个处理器可以具有一个或多个处理核。处理器10可包括具有多个核的单个处理器。可替换地,处理器10可以是例如带有嵌入式固件的可编程硬件。处理器10可以被称为处理装置。
[0074] 远程网桥4类似于本地网桥3来配置,图2以及上面的描述也适用于远程网桥4。
[0075] 虽然术语“存储器”也可以仅涵盖一个或更多易失性存储器、仅涵盖一个或更多非易失性存储器,或者涵盖一个或更多易失性存储器和一个或更多非易失性存储器,但是当在本发明中使用时,术语“存储器”主要涉及包括非易失性存储器和易失性存储器的存储器,除非上下文另有说明。易失性存储器的示例包括RAM、DRAM、SDRAM等,非易失性存储器的示例包括ROM、PROM、EEPROM、闪存、光存储器、磁存储器等。
[0076] 如图3所示的本地网桥3和远程网桥4包括大量互相连接的组件。现在将参照使得能够解释网桥3、4的操作及其交互的图3来描述网桥3、4。
[0077] 输入数据在本地网桥3中的数据高速缓存706的控制下被接收并存储在存储器中。为每个连接至远程网桥4的存储装置8、9提供一个数据高速缓存706。为了简化以下描述,将对单个数据高速缓存706的操作进行描述。输入数据作为离散的数据段被接收。虽然存在协议的去除/脱离,输入数据中的数据段仍处于它们在主机接口(即FC接口13)上被接收所处于的形式。数据段为需要传递到远程网桥4的数据。数据段可以为数据包,但是它们不应该与在本发明中讨论的传输包混淆。数据段包括报头,报头包含对数据、数据的信源和信宿、大小以及存储矢量的描述。
[0078] 数据高速缓存706的输出连接至分配器(dispatcher)704的输入。这样,输入数据通过数据高速缓存706提供给分配器704。分配器是数据处理模块的示例。
[0079] 输入数据存储在本地网桥3的存储器中,通过数据高速缓存706来管理。数据高速缓存706管理从SAN 1至SAN 2的方向及从SAN2至SAN1方向上通过的命令和数据的存储。高速缓存706管理和SANs 1、2及其它主机的协议交互。由高速缓存706执行的动作的示例包括接收写命令、打开通道以允许主机写数据等。
[0080] 从分配器704,输入数据可被提供到第一路径发射机接口707,或者被提供到第二路径发射机接口711。
[0081] 第一路径发射机接口707经由路径702连接至接收机中的第一路径接收机接口708。同样,第二路径发射机711通过路径703连接至远程网桥4中的第二路径接收机接口
712。
[0082] 路径702、703中的每一个包括多个逻辑连接。路径702、703中的每一个具有一个或更多物理端口。这些端口和物理连接可以参照图4按如下所述设置。可替换地,这些端口和物理连接可以参照图6按如下描述设置。在上述两种情况中的任一情况下,选择逻辑连接的数目以便于在各自的路径702、703上提供合适的数据传输的性能。在图6的方法的情况中,管理逻辑连接的数目以便于优化性能。
[0083] 图1的网桥3中所示的端口12-1至12-n包括在图3的第一发射机接口707中,但为了清晰度在图中被省略了。同样,端口12-1至12-n设置在第二发射机接口711中。相应的端口19-1至19-n设置在远程网桥704的第一和第二路径接收机接口708、712中。
[0084] 第一路径发射机人工界面(artificial interface,AI)模块709设置在本地网桥3中。第一路径发射机AI模块709以双向方式耦接至第一路径发射机接口707和分配器704。除此之外,它还被连接以从位于远程网桥4中的第一路径接收机AI模块710接收信令。第一路径接收机AI模块710以双向方式耦接至第一路径接收机接口708和输出高速缓存705。
[0085] 同样地,第二路径发射机AI模块713位于本地网桥3中,并且以双向方式连接到第二路径发射机接口711和分配器704。第二路径接收机AI模块714位于远程网桥4中,并双向耦接至输出高速缓存705及第二路径接收机接口712。第二路径发射机AI模块713被连接以从第二路径接收机AI模块714接收信令。
[0086] 分配器704配置为确定第一路径发射机AI接口707和第二路径发射机接口711中哪一个设置有用于在其各自的路径702、703上发送的数据段。下面详细描述分配器704的操作。
[0087] 在远程网桥4中,设置有合路器/高速缓存705。合路器/高速缓存705提供了高速缓存的功能和合路器的功能。可替换地,独立模块可以包括在远程网桥4中以便于提供这些功能。输出数据存储在在接收机702的存储器中且通过高速缓存/合路器705进行管理。
[0088] 合路器/高速缓存705使得通过第一路径和第二路径702、703所接收的数据在输出高速缓存705能进行合路。数据通过合路器705进行合路以使得高速缓存705所产生的输出数据包括按正确顺序排列的数据段,即,该数据段按在本地网桥3处被接收作为输入数据的顺序进行排列。输出高速缓存705内的数据的合路由合路器基于报头的检验来执行。
[0089] 参照图1和4,为了传输数据,在网桥3的口12-1至12-n和远程网桥4的相应的端口19-1至19-n中建立多个逻辑连接18-1至18-n。以此方式,第一批数据段D1-1能够经由逻辑连接18-1从所述端口12的中第一个端口发送。不用推迟任何进一步的发送直到接收到用于第一批数据段的确认ACK1-1,其他批数据段D1-2至D1-n使用其它的逻辑连接18-b至18-n来发送。一旦已经接收到确认ACK1-1,就将新的一批数据段D2-1经由第一逻辑连接18-1发送给远程网桥4,从而启动从逻辑连接18-1至18-n的重复发送序列。一旦接收到前一批的数据段D1-2经由相应的逻辑连接18-1至18-n发送的确认,每个剩余的逻辑连接就发送新的一批数据段D2-2。以此方式,数据传输的速率不受网桥3、4之间的往返时间限制。当使用多个端口12在网桥3、4之间发送数据时,多个逻辑连接18与每个端口相关联。正如下面所解释的,设置有给定端口12的逻辑连接的数量取决于物理路径能力和用于路径5的往返时间。
[0090] 在此,一批数据段构成了传输包。数据段没有报头这是因为他们在到达网桥3时已经脱离了协议。传输包具有相关联的报头,并且稍后将在本发明中详细讨论传输包的创建和处理。
[0091] 如下文所详述的那样,由数据段来创建多个网络有效载荷。简而言之,传输包包括一个数据段、多个数据段或数据段的一部分。网络有效载荷包括一个或更多传输包。每个传输包设置有报头尤其涉及传输包。虽然每个网络有效载荷包括至少一个传输包报头,但网络有效载荷没有设置报头。当网络有效载荷通过路径发送时,它典型地设置有用于那个路径的协议的报头。例如,通过TCP路径发送的网络有效载荷设置有通过协议处理器的TCP报头。
[0092] 现在将参照图1、3和4来描述本发明的实施例中使用的从网桥3到远程网桥4发送数据的方法。
[0093] 在步骤S3.0处开始,网桥3在其端口12-1至12-n和远程网桥4的对应的端口19-1至19-n之间配置了N个逻辑连接18-1至18-n(步骤S3.1)。每个端口12具有一个或更多与其相关联的逻辑连接18,即每个端口12有助于提供一个或更多逻辑连接18。
[0094] 其中网桥3从SAN 1传输数据,网桥3从其它的服务器、客户机和/或存储设施6、7开始请求可以存储在高速缓存15中的数据。在US 2007/0174470A1中描述了这样的高速缓存15和用于提高数据传输速度的技术,US 2007/0174470A1中的内容列入本发明中作参照。这种数据数据检索流程可以在接下来的步骤中继续使用。
[0095] 如上所述,用于给远程网桥4发送数据的过程包括多个依次使用逻辑连接18-1-18-n的发送循环。将标志位设置为0(步骤S3.2)来表示接下来的循环为该步骤内的第一次循环。
[0096] 将识别用于发送网络有效载荷的逻辑连接的变量i置为1(步骤S3.3、3.4)。
[0097] 由于该过程还未完成它的第一次循环(步骤S3.5),所以网桥3不需要检查用于上一次所发送的数据的确认。因此,处理器10传输第一批数据段D1-1以将其发送到高速缓存器14中(步骤S3.6)。第一批数据包一起组成了网络有效载荷。如下所述,选择网络有效载荷的大小以便于最大限度地提高数据传输的效率。所缓冲的数据段D1-1然后作为网络有效载荷经由逻辑连接18-i发送,在这个示例中逻辑连接18-i为逻辑连接18-1(步骤S3.7)。
[0098] 当保留了要发送的数据(步骤S3.8)且不是所有的逻辑连接18-1至18-n都已经在这次循环中被利用(步骤S3.9)时,i是递增的(步骤S3.4),为了识别下一个逻辑连接,执行步骤S3.9以使用逻辑连接12-i(即逻辑连接18-2)来发送第二批数据段D1-2(第二网络有效载荷)。重复步骤S3.4-S3.9直到各自批的数据段D1-1至D1-n(网络有效载荷)已经使用逻辑连接8-1至18-n的每一个发送到远程网桥4。
[0099] 当目前已经完成了第一次循环(步骤S3.10)时,标志位置为1(步骤S3.11),以使得根据先前的网络有效载荷是否已被确认来进行随后的数据发送。
[0100] 随后的循环通过将i重置为1开始(步骤S3.3、S3.4)。从端口18-1开始,确定是否已经接收到用于最近从端口12-1发送的网络有效载荷D1-1的ACK消息ACK1-1(步骤S3.12)。如果已经接收到ACK消息(步骤S3.12),则将网络有效载荷D2-1移入缓冲区14(步骤S3.6)并发送(步骤S3.7)。如果还没有接收到该ACK消息,则确定用于逻辑连接18-1的超时时长是否已期满(步骤S3.13)。若超时时长已期满(步骤S3.13),则经由逻辑连接18-1检索并发送未确认的数据(步骤S3.14)。
[0101] 如果尚未收到ACK消息(步骤S3.12),而超时时长还未期满(步骤S3.140),则在本次循环期间不再通过逻辑连接18-1进一步发送数据。这使得发送过程不用等待ACK消息而继续进行,为此在随后的循环中选用特定的逻辑连接18-1并检查待处理的ACK消息(步骤S3.12)直到或者接收到ACK消息,才使用逻辑连接18-1发送网络有效载荷(步骤S3.6、S3.7),或者直到超时时长期满(步骤S3.13),才再次发送网络有效载荷(步骤S3.14)。
[0102] 然后该过程移动至下一逻辑连接18-2,必要时重复步骤S3.4、S3.5、S3.12和S3.7至S3.9或步骤S3.4、S3.5、S3.12、S3.13和S3.14。
[0103] 一旦已经使用全部N个逻辑连接重新发送数据(步骤S3.9、S3.10),就重置i(步骤S3.3、S3.4),新循环开始。
[0104] 一旦已经发送完所有的数据(步骤S3.8),处理器10就等待待处理的ACK消息的接收(步骤S3.15)。如果在预定的时间段过后没有接收到任何ACKS(步骤S3.16),则从高速缓存15或SAN 1的相关元件6、7检索未确认的数据并再次发送(步骤S3.17)。为了确保有足够的时间来接收任何未处理的ACK消息,预定时间段可以等于或大于用于逻辑连接18-1至18-n的超时时长。
[0105] 当已经确认所有发送的数据或发送的数据的可接收的百分比时(步骤S3.16),流程结束(步骤S3.18)。
[0106] 在图3的方法中,连接的数目N大于1并且是固定的。相比仅使用一个连接的相应的系统,多个连接的使用使得可以改善数据发送的性能,但需要更多的系统资源。
[0107] 参照图6将描述一种替代性的发送数据的方法。该方法包括优化在路径5、702、703上传输数据所使用的逻辑连接的数目。
[0108] 此处,在步骤S1中启动操作。
[0109] 在步骤S2中,x和n的值初始化为0。被发送的网络有效载荷的数量由n表示。已经接收到的确认的数量由x表示。
[0110] 在步骤S3中,数据移到图2示出的发送缓冲区14,等待发送。
[0111] 在步骤S4中,确定逻辑连接18是否可用。通过检查之前已经创建的每一个逻辑连接18来进行确定,并确定在这些逻辑连接18中已经接收到用于网络有效载荷最终在哪个逻辑连接上发送的确认来实施该确定操作。若已经接收到最终发送的网络有效载荷的确认,则该逻辑连接18是可用的。
[0112] 参照图1和4根据以上描述将理解的是,在逻辑连接18和端口12之间有着多对一的关系。在TCP实施例中,可用的逻辑连接18是在网桥3、4之间建立的TCP连接而不是处理用来发送的数据,并且没有任何未处理消息。
[0113] 如果没有逻辑连接18可用,则在步骤S5中通过在网桥3、4之间建立TCP流式套接字来创建新的逻辑连接18。如果在步骤S4中确定逻辑连接18可用或在步骤5中创建新的逻辑连接18之后,则在步骤S6中,网络传输包n在逻辑连接18上发送。此处,逻辑连接18用于其中一个没有未处理的确认。对于新的逻辑连接18,将没有传输包已经通过之前的逻辑连接18发送。对于现有的逻辑连接18,之前已经发送了网络传输包但是已经接收到用于所发送的网络传输包的确认。
[0114] 步骤S6之后,n在步骤S7处递增。步骤S7之后,在步骤S8中确定步骤S3中移至缓冲区的数据是否构成了要发送的数据的结束。当没有更多的网络传输包要发送时,步骤S8因此形成了肯定的确定。当有至少一个网络传输包要发送时,步骤S8提供了否定的确定,操作进入到步骤S9。
[0115] 在步骤S9中,确定是否已经从远程网桥4接收到用于网络传输包x的确认。
[0116] 当确定没有接收到用于网络传输包x的确认时,在步骤S10确定用于数据的超时是否期满。在步骤S10中的超时确定中的定时器的值可以取任何合适的值。对于在网桥3和网桥4之间的较高的延迟路径,超时的取值可以相对较高一些。当超时已期满时,来自缓冲区x的网络传输包在步骤S11中再次发送。
[0117] 当在步骤S10中确定已经接收到的用于网络传输包x的确认时,x的值在步骤S12中递增。步骤S12之后,终止在步骤S12中多余的逻辑连接18。为了确定多余的逻辑连接,首先要对每个多余的逻辑连接进行验证以确保没有数据传输处于进程中并且没有确认未处理。以控制的方式终止多余的逻辑连接。这是随着由从网桥3到远程网桥4的FIN消息的发送而发生的,通过给网桥3发送ACK消息来回应对FIN消息进行确认。FIN消息是有关多余的逻辑连接的。FIN消息表示没有更多来自发送者的要发送的数据。在本地网桥3中完成了接收ACK消息的操作。
[0118] 在第一路径702的情况下,第一路径发射机接口707负责逻辑连接的创建和销毁,并且将第一路径发射机接口707配置为这样来创建和销毁。关于第二路径703,第二路径发射机接口711负责并配置为进行逻辑连接创建和销毁。当然,虽然通过第一和第二路径发送器接口707、711执行初始初始化操作,但第一和第二路径接收机接口708、712在逻辑连接的创建和销毁时仍是活动的。
[0119] 在步骤S12或步骤S11中,或在步骤10中确定超时未期满时,操作返回到步骤S3。此处,至少一个网络有效载荷移动到用于传输的缓冲区。
[0120] 根据以上将可以理解,当有更多数据(以网络有效载荷的形式)要发送时,管理逻辑连接18的数目以使正确合适的数目的逻辑连接18可用于发送数据。然而,这可以不用维持不必要的多个数据连接18来实现。特别地,要定期检查是否有多余的逻辑连接18,然后销毁任何所检测到的多余的连接。特别地,在这个示例中每当在步骤S9中已经接收到确认时对多余的连接进行检查。在一次操作中不用终止全部多余的连接,所检测到的任何多余的连接可以一次移走一个。也就是说,每当操作进行到步骤S3时可以移走一个多余的连接。这会使多个(一个或多个)空闲的逻辑连接留待备用,发射机707、711要求它们响应在路径5、702、703的条件下的变化。因为创建逻辑连接所需要的时间和计算资源大于终止逻辑连接的时间和计算资源,所以一次终止一个多余的逻辑连接可以利用更少的系统资源。
[0121] 然而,对于路径5、702、703,在一个相对稳定的条件下并且其中流入本地网桥3的数据相对稳定时,现有的逻辑连接的数量变化相对频繁。当路径5、702、703保持静止时,逻辑连接的数目然后减少到用于终止多余的逻辑连接的最佳水平。
[0122] 到目前为止图6的操作所描述的方面的影响是:现有的逻辑连接18的数量在任何给定的时间对于路径5是最佳的或者接近最佳。特别地,逻辑连接18的数量要足够高以允许发送需要发送的全部数据,但是不高于发送全部数据所需要的逻辑连接的数量,或者频繁终止至少多余的逻辑连接18以便于避免逻辑连接18的数量高于所需要的总的时间的很大一部分比例。这为在路径5、702、703上的数据传输提供了最佳的性能,而不浪费存储器等资源不需要的逻辑连接。
[0123] 当来自缓冲区14的所有数据已经发送(即当所有的网络传输包已经发送时)时,无论确认与否,步骤S8产生了肯定的结果。在这种情况下,操作进入到步骤S14,在该步骤中确定是否收到用于网络传输包x的确认。如果确定已经收到用于网络传输包x的确认,则x的值在步骤S15中递增。接下来,在步骤S16中,确定x的值是否等于n的值。因为x是确认的计数,n是网络有效载荷的计数,所以这相当于对是否已经接收到所有的发送的网络传输包的确认的评估。当为否定的确定时,表示并没有已经接收到全部确认,操作返回到步骤S8,在该步骤S8中再一次确定在缓冲区的数据是否结束发送。当从步骤S16到步骤S8时,在缓冲区处并没有已经接收到任何更多的数据,然后操作再一次进入步骤S14。步骤S8、S14、S15、S16的循环回路使得可以不发送任何数据而监测用于所发送的网络传输包的确认。
[0124] 如果在步骤S14处确定已经接收到用于网络传输包x的确认,则在步骤S19中确定用于网络传输包x的超时是否已到。若超时未到,则操作返回到步骤S8。若超时已到,则在步骤S20重新发送网络传输包x。
[0125] 重新发送步骤S11和步骤S20确保重新发送还未接收到确认的网络传输包。此外,重新发送还未接收到确认的网络传输包直到该网络传输包的接收已经通过远程网桥4确认。
[0126] 一旦步骤S16确定已经接收到的全部确认,操作就进入到步骤S17。此处,网桥3等待更多的要被接收的数据。一旦接收到数据,操作进入到步骤S3,在该步骤S3中,数据移动到用于发送缓冲区14。
[0127] 现在将参照图7来描述在图3的系统中对包括路径702、703的分配器704的操作。
[0128] 在步骤S1中启动操作。在步骤S2中,通过分配器704确定缓冲区中是否有数据并当需要被发送时由高速缓存706来表示。当为否定的确定时,在步骤S3中分配器706等待将要添加到高速缓存706中的数据。一旦确定用于发送的数据在高速缓存706的管理下处于输入缓冲区时,操作进入到步骤S4。
[0129] 在步骤S4中,分配器704检测702、703路径中的其中一个最需要数据的路径。这可以以任何一种适当的方式来实现。
[0130] 例如,分配器704可以使用由第一和第二路径吃发送AI模块709和703提供的信息来确定最需要数据的路径。特别地,分配器704可以基于由第一和第二路径AI发送AI模块709、703提供的信息来确定路径702和703哪一个最需要数据。这要求AI模块709、713配置为计算并提供相关的信息。
[0131] 在提供信息以帮助分配器来确定路径702、703中哪一个需要数据时,AI发射机模块709、713进行大量的计算。特别地,AI发射机模块709、713计算一些包括数据包丢失、延迟和发送速度(以字节/秒为单位)的发送参数。通过对没有(在超时窗口内)接收到确认的网络有效载荷在给定的时间段内进行计数并通过计算丢失网络有效载荷和成功发送网络有效载荷的比率来计算数据包的丢失。通过计算发送网络有效载荷和接收到用于该网络有效载荷的确认的平均时间,使用由发送接口707、711提供的定时信息来计算延迟。通过确定在时间窗口(例如1秒)中成功发送数据的量来计算物理路径5、702、703的速度。根据路径速度的计算结果来执行没有数据(没有网络有效载荷)要发送的时刻,因此所测量的路径速度只涉及当数据正在传输的时刻。
[0132] 基于这些测量的参数,对于各自的路径,AI发射机模块709、713计算每单位时间(即每秒)需要被放入路径的字节数。这是通过当前的延迟时间值(秒)乘以物理路径的带宽(MB/S)来计算的。
[0133] 在特定的时刻,AI发射机模块709、713能够确定已经发送但还没有收到确认的数据(字节)的量。该数据可以是被称为在飞行中的数据。在飞行中的数据必须保留在发送缓冲器中由逻辑连接管理,但是一旦收到用于数据的确认时,用于发送缓冲区的相应的存储器会重新分配数据。
[0134] 任何一个AI发射机模块709、713都能在预定的时刻针对已经接收到的我们的状态(如数据段的最后的数据字节)将在飞行中的数据的量报告给分配器704,或其它分配器704能够请求AI发射机模块709、713提供在飞行中的数据信息的量。在任何一种情形下,分配器704设置有来自AI发射机模块709、713的在飞行信息中的数据量,以在分配器需要该信息时对路径702、703的哪一个最需要数据进行评估。同样的情形适用于由AI发射机模块709、713计算的路径速度信息。
[0135] 对于每一个路径,分配器704计算路径满意值。例如,该路径满意值可以通过在飞行中的数据的量(以字节为单位)除以路径速度来计算。其中路径的延迟小于1秒并且路径速度测量值单位为字节每秒,用于路径的路径满意值在0到100之间取值。路径满意值较小表示对路径不太满意,并且对数据的需求相对较高。路径满意值较大表示对该路径相对比较满意,并且对数据的需求较低。
[0136] 通过用于路径的路径满意值来识别最需要数据的路径。这可能涉及仅识别哪一条路径的路径满意值最低,并将该路径选为最需要数据的路径。可替换地,可以额外地利用诸如用于路径702、703的路径速度或所测量的延迟之类的其它信息来识别最需要数据的路径。
[0137] 一旦在步骤S4中已经确定过路径702、703,分配器704就开始准备把来自数据高速缓存706的数据提供给用于路径702、703的发送接口707、711。这在步骤S5中启动,在步骤S5中获取用于路径702、703的OTPS参数的值。从相应的路径的AI发射机模块709、713中获取参数的值。OTPS参数的值参照图11由AI发射机模块709、713以以下描述的方式来计算。由于对于每个路径702、703的OTPS参数的值是单独来计算的,所以对于每个路径702、703可能存在不同的OTPS参数。
[0138] 在步骤S6中,分配器704选择在高速缓存706中的下一个数据段的第一部分。所选的部分数据段的长度小于所获取的OTPS参数的值。其中当数据段的长度小于或等于OTPS参数的值时,选择整个数据段。当数据段的长度大于OTPS参数的值时,选择长度等于OTPS参数的值的部分数据段。
[0139] 一旦已经从分配器704选了一定量的数据用于提供给路径,就由分配器704创建用于所选数据的IO矢量,以供所选路径的发送接口707、711使用。创建的IO矢量构成了传输包的供应。下面参照图8和9来更详细地描述IO矢量的创建进而描述传输包的创建。简言之,IO矢量的转换产生一IO矢量,该IO矢量所指向的传输包所具有的最大大小与步骤S5中所获得的、针对路径的OPTS参数所指示的大小相同。该IO矢量后来提供给与相关路径702、703相关联的FIFO缓冲区(未示出)。
[0140] 在步骤S6中创建IO矢量后,该IO矢量被传输至所选的路径702、703,特别地在步骤S7中被传输到所选路径的发送接口707、711的FIFO缓冲区(未示出)。步骤S7的结果为向形成了路径的发送接口707、711的一部分的FIFO缓冲区(未示出)提供包括指针的IO矢量,该路径为步骤S4中所检测到的对数据具有最大需求的路径,该指针指向传输包并且指示该传输包的长度。此外,路径702、703的FIFO缓冲区设置有IO矢量,该IO矢量与具有最佳传输包大小或可能较小的尺寸的传输包有关。这使得路径702、703尤其是相关的发送接口707、711能够访问(整个或部分)数据段。这所具有的最大尺寸为最佳传输包尺寸的传输包中设置有(整个或部分)数据段以通过所选的路径702、703的逻辑连接进行传输,最佳传输包尺寸是针对所选的路径来确定的。
[0141] 在步骤S8,确定是否已经到达数据段的末端。若为肯定的确定,操作返回到步骤S2,其中能够检索并处理下一个数据段。当为否定的确定时,操作返回到步骤S4。此处,对已下一部分数据段再次执行步骤S4到S7。
[0142] 当步骤S4识别到相同的路径702、703仍然最需要数据时,创建用于下一部分数据段的长度等于(或可能小于)用于路径702、703的OTPS的值的IO矢量(传输包)。对于相同的路径702、703,连续的数据传输包之间的OTPS的值通常不会改变,尽管这只是偶尔发生。
[0143] 当步骤S4识别到相反的路径702、703目前最需要数据时,创建用于下一部分数据段的长度等于(或可能小于)用于相反的路径702、703的OTPS的值的IO矢量(和传输包)。该下一个数据包的大小取决于不同的OTPS参数(相反路径的OTPS参数)的值,所以经常与之前的传输包的大小不同。
[0144] 对于数据段比在第一次处理时在步骤S5中获取的OTPS参数的值较长时,数据段的发送可以在两个不同的路径702、703上发生。但并不是该数据段在两个路径上发送。而是数据段的不同部分在不同的路径702、703上发送。
[0145] 现在参照图8,在图的左侧示出了用于缓冲区的IO矢量阵101,在图的右侧示出了用于传输包的IO矢量阵。
[0146] 缓冲区的IO矢量阵101由分配器704管理。
[0147] 现在将参照图9来描述分配器704在将缓冲区的矢量阵101转换到传输包的IO矢量阵102时的操作。
[0148] 在步骤S1中启动操作。在步骤S2中,矢量#i参数初始化为0。而且,数据段的大小置为变量X的值。此外,缓冲区中的数据段的起始存储地址设置为变量Y的值。
[0149] 然后开始在步骤S3中处理数据段。已经获取了用于路径702、703(这是在图7的步骤4中选择的路径)的OTPS参数的值,特别是通过图7的步骤S5的作用而形成。在步骤S3中,确定数据的大小X的值是否小于或等于所获得的OTPS参数的值。如果数据段大小X小于或等于OTPS参数的值,则表示所有的数据段能够放进一个传输包中。通过该确定,在步骤S4中创建IO矢量。使用与参数Y的值相等的值的起始存储地址(指针)来创建该矢量。该矢量的长度域包括与表示数据段的大小的X的值相等的长度参数。然后将IO矢量i提供给在相关发送接口中的FIFO缓冲区。IO矢量然后构成了传输包,尽管物理数据保留在它在缓冲区中的原始位置(即由分配器704优先处理的位置)。在步骤S4中随着IO矢量i的创建以及给FIFO缓冲区提供IO矢量,操作在步骤S5结束。
[0150] 如果在步骤S3中确定数据段的大小X大于OTPS参数的值,则操作进入到步骤S6。此处,分配器创建IO矢量i。此处,IO矢量i设置有值等于参数Y的起始内存地址(指针)。矢量i的长度等于OTPS参数的值。同样地,步骤S6包括创建IO矢量,该IO矢量指向长度等于最佳传输包大小并且在起始处具有未经处理的起始地址的数据。然后将该IO矢量提供给在相关的发送接口707、711中的FIFO缓冲区。IO矢量然后构成了传输包,尽管无理数据还保留在它在缓冲区中的原始位置(即由分配器704优先处理的位置)。
[0151] 步骤S7之后,起始存储地址参数Y随着OTPS参数的值而递增。这将使起始存储地址移动,例如指向仅由在步骤S6中创建的IO矢量i表示的数据后启动的数据。
[0152] 步骤S7之后,在步骤S8中数据段大小参数X的值随着OTPS参数的值而减小。这使得缓冲区大小参数X的值等于由在IO矢量阵102中的传输包表示的IO矢量数据段的数量。
[0153] 步骤S8之后,在步骤S9中矢量#i的值递增。同样地,当随后在步骤S6或步骤S4中创建矢量时,它涉及更高的矢量编号。
[0154] 将可以理解的是步骤S3中的检查使得执行由步骤S6到S9形成的循环回路直到保留在缓冲区中的数据的量小于或等于OTPS参数的值,同时在步骤S4中将保留的数据提供给最终的IO矢量。
[0155] 可以根据在图7的步骤S4中做出的确定来为不同的路径702、703创建步骤S4和S6中对数据段的不同部分创建的IO矢量。而且,所得到的传输包的长度可能会有所不同,这是因为在图7的步骤S5中获取用于一个或两个路径702、703的OTPS参数时,它们取决于一个或多个OTPS参数的值,还因为数据段的末端部分(last part)常常比OTPS参数的值所表示的长度短。同样地,所得到的IO矢量阵的传输包可以有许多不同的长度。
[0156] 然后给一个或多个相关路径702、703的一个或多个相关发送接口702、703的一个或多个缓冲区提供所得到的传输包的IO矢量阵102。根据在图7的步骤S4中的确定,路径702、703最需要数据,在传输包IO矢量阵中的不同的IO矢量可以包括在不同的发送接口
707、711中的不同的FIFO缓冲区中。一个或多个发送接口707、711然后使用在它们各自的缓冲区中的IO矢量来检索来自数据缓冲区704的数据段部分(传输包)并将其通过由各自的路径703、703提供的逻辑连接发送。
[0157] 当发送接口707、711准备在下一个逻辑连接上发送数据时,该发送接口707、711面向在其FIFO缓冲区中的下一个IO矢量。根据这个IO矢量,它提取了数据缓冲区704的存储地址,在数据缓冲区704中,要发送的数据开始并提取有关的传输包的长度。发送接口707、711然后从数据缓冲区704提取相应的数据并将其通过在它的路径702、703上的下一个逻辑连接发送。一旦发送接口707、711收到用于传输包的确认,就将该消息通知给分配器704以使得能够在数据缓冲区重新分配相应的数据。
[0158] 参照图8和9所描述的矢量阵的变换使得可以在不需要对数据进行不必要的复制的情况下发送至少一些具有所期望的长度(等于OTPS参数的值)的传输包。这可以实现是因为在传输包IO矢量阵102中的IO矢量包括直接有关传输包的地址和长度信息。因此,存储器读和写操作的数量被最小化,同时使得对输入到本地网桥3的数据和给远程网桥4发送所要长度的传输包的接收具有更高的灵活性。当然,某些传输包创建的长度小于OTPS参数的值。一旦已经在步骤S4中确定路径702、703时,分配器704就开始准备给用于路径702、703的发送接口707、711提供来自数据高速缓存706的数据。以上操作在步骤S5中开始,在步骤S5中获取用于路径702、703的OTPS参数的值。参数的值通过响应路径的AI发射机模块702、703来获取。参照图11由AI发射机模块709、713以下面描述的方式来计算OTPS参数的值。因为OTPS参数的值是分别对于每个路径702、703来计算的,所以对于每个路径702、703可能有不同的OTPS参数。
[0159] 在步骤S6中,分配器704选择在高速缓存706中的下一数据段的第一部分。所选择的部分数据段的长度等于所获取的OTPS参数的值。当所述数据段的长度小于或等于OTPS参数的值时,选择整个数据段。当所述数据段的长度大于OTPS参数的值时,选择长度等于OTPS参数的值的部分数据段。
[0160] 一旦已经从分配器704选择了一定量的数据用于提供给路径,就由分配器704创建用于所选数据的IO矢量,以供所选路径的发射机接口707、711使用。创建的IO矢量构成了传输包的提供。下面参照图8、9和10来更详细地描述IO矢量的创建进而描述传输包的创建。简言之,IO矢量的转换产生一IO矢量,该IO矢量所指向的传输包所具有的最大大小与步骤S5中所获得的、针对路径的OPTS参数所指示的大小相同。IO矢量稍后提供给与相关路径702、703相关联的FIFO缓冲区(未示出)。
[0161] 在步骤S6中IO矢量创建之后,该IO矢量被传输到所选路径702、703,并且特别地在步骤S7中被传输到路径702、703的发送接口707、711的FIFO缓冲区(未示出)。步骤S7的结果为向形成了路径的发送接口707、711的一部分的FIFO缓冲区(未示出)提供包括指针的IO矢量,该路径为步骤S4中所检测到的对数据具有最大需求的路径,该指针指向传输包并且指示该传输包的长度。此外,路径702、703的FIFO缓冲区设置有与具有最佳的或可能比较小传输包大小的传输包有关的IO矢量。这使得路径702、703尤其是相关的发送接口707、711能够访问(整个或部分)数据段。这所具有的最大尺寸为最佳传输包尺寸的传输包中设置有(整个或部分)数据段以通过所选的路径702、703的逻辑连接进行传输,最佳传输包尺寸是针对所选的路径来确定的。
[0162] 在步骤S8中,确定是否已经到达数据段的末端。当为肯定的确定时,操作返回到步骤S2,在步骤S2中能够检索并处理下一个数据段。当为否定的确定时,操作返回到步骤S4。此处,对于下一部分数据段再一次执行步骤S4到S7。
[0163] 当步骤S4识别到相同的路径702、703仍然最需要数据时,为下一部分数据段创建长度等于(或可能小于)用于相同的路径702、703的OTPS的值的IO矢量(和传输包)。OTPS的值常常在用于路径702、703的连续的传输包之间改变,尽管这只是偶尔发生。
[0164] 当步骤S4识别到相反的路径702、703目前最需要数据时,为下一部分数据段创建长度等于(或可能小于)用于相反的路径702、703的OTPS的值的IO矢量(和传输包)。下一个传输包的大小取决于不同的OTPS参数的值(用于相反路径的OTPS参数),因此常常与前一个传输包不同。
[0165] 对于比在步骤S5中当第一次处理数据段时获取的OTPS参数的值长的数据段,数据段的发送可以发生在两个不同的路径702、703上。并不是说数据段要在两个路径上发送。而是不同的数据段部分在不同的路径702、703上发送。
[0166] 现在将参照图9来描述分配器704在将缓冲区的矢量阵101转换到传输包的IO矢量阵1024的操作。
[0167] 在步骤S1中启动操作。在步骤S2中,矢量#i参数初始化为0。而且,数据段的大小置为变量X的值。此外,缓冲区中的数据段的起始存储地址设置为变量Y的值。
[0168] 然后开始在步骤S3中处理数据段。已经获取了用于路径702、703(这是在图7的步骤4中选择的路径)的OTPS参数的值,特别是通过图7的步骤S5的作用而形成。在步骤S3中,确定数据的大小X的值是否小于或等于所获得的OTPS参数的值。如果数据段大小X小于或等于OTPS参数的值,则表示所有的数据段能够放进一个传输包中。通过该确定,在步骤S4中创建IO矢量。使用与参数Y的值相等的值的起始存储地址(指针)来创建该矢量。该矢量的长度域包括与表示数据段的大小的X的值相等的长度参数。然后将IO矢量i提供给在相关发送接口中的FIFO缓冲区。IO矢量然后构成了传输包,尽管物理数据保留在它在缓冲区中的原始位置(即由分配器704优先处理的位置)。在步骤S4中随着IO矢量i的创建以及给FIFO缓冲区提供IO矢量,在步骤S5结束操作。
[0169] 如果在步骤S3中确定数据段的大小X大于OTPS参数的值,则操作进入到步骤S6。此处,分配器创建IO矢量i。此处,IO矢量i设置有与参数Y的值相等的值的起始存储地址(指针)。矢量i的长度等于OTPS参数的值。同样地,步骤S6包括创建IO矢量,该IO矢量指向长度等于最佳传输包大小并且在起始处具有未经处理的起始地址的数据。然后将该IO矢量提供给在相关的发送接口707、711中的FIFO缓冲区。IO矢量然后构成了传输包,尽管物理数据还保留在它在缓冲区中的原始位置(即由分配器704优先处理的位置)。
[0170] 步骤S7之后,起始内存地址参数Y随着OTPS参数的值而递增。这将使起始存储地址移动例如指向仅由在步骤S6中创建的IO矢量i表示的数据后启动的数据。
[0171] 步骤S7之后,在步骤S8中数据段大小参数X的值随着OTPS参数的值而减小。这使得缓冲区大小参数X的值等于由在IO矢量阵102中的传输包表示的IO矢量数据段的数量。
[0172] 步骤S8之后,在步骤S9中矢量#i的值递增。同样地,当随后在步骤S6或步骤S4中创建矢量时,它涉及更高的矢量编号。
[0173] 将可以理解的是在步骤S3中的检查可以使执行由步骤S6到S9形成的循环回路直到保留在缓冲区中的数据的量小于或等于OTPS参数的值,同时在步骤S4中将保留的数据提供给最终的IO矢量。
[0174] 可以根据在图7的步骤S4中做出的确定来为不同的路径702、703创建步骤S4和S6中对数据段的不同部分创建的IO矢量。而且,所得到的传输包的长度可能会有所不同,这是因为在图7的步骤S5中获取用于一个或两个路径702、703的OTPS参数时,它们取决于一个或多个OTPS参数的值,还因为数据段的最后部分常常比OTPS参数的值所表示的长度短。同样地,所得到的IO矢量阵的传输包可以有许多不同的长度。
[0175] 所得到的传输包的IO矢量阵102然后提供给一个或多个相关路径702、703的一个或多个相关发送接口702、703的一个或多个缓冲区。根据在图7的步骤S4中的确定,路径702、703最需要数据,在出书数据包IO矢量阵中的不同的IO矢量可以包括在不同的发送接口707、711中的不同的FIFO缓冲区中。一个或多个发送接口707、711然后使用在它们各自的缓冲区中的IO矢量来检索来自数据缓冲区704的数据段部分(传输包)并将其通过由各自的路径703、703提供的逻辑连接发送。
[0176] 当发送接口707、711准备在下一个逻辑连接上发送数据时,该发送接口707、711面向在其FIFO缓冲区中的下一个IO矢量。根据这个IO矢量,它提取了数据缓冲区704的内存地址,在数据缓冲区704中,要发送的数据开始并提取有关的传输包的长度。发送接口707、711然后从数据缓冲区704提取相应的数据并将其通过在它的路径702、703上的下一个逻辑连接发送。一旦发送接口707、711收到用于传输包的确认,就将该消息通知给分配器704以使得能够在数据缓冲区重新分配相应的数据。
[0177] 参照图8和9所描述的IO矢量阵的转换使得能够不要求不必要的数据复制来至少发送一些具有所需的长度(等于NTS参数的值)的传输包。这可以实现是因为在传输包适量阵列102中的IO矢量包括有关该传输包的地址和长度信息。因此,可以最小化存储器读和写操作的数量,同时允许在接收输入到本地网桥3的输入数据和给远程网桥4发送所需长度的传输包时更加灵活。当然,某些传输包创建的长度小于NTS参数的值。
[0178] 为了优化通过路径702、703的数据流程,用于每个传输接口的IO矢量大小应该等于活动的逻辑连接的数目乘以每个活动的逻辑连接的RWS。任何大于活动的逻辑连接的数目乘以每个活动的逻辑连接的RWS的乘积的IO矢量的大小都将需要在该IO矢量能够被释放且另一个IO矢量被下载之前不止一次使用多个逻辑连接。因为在下载新的IO矢量数据以前会有延迟,所以这会使没有数据的活动的逻辑连接暂停发送,因而导致效率低下且损失性能。
[0179] 这些熟悉TCP/IP协议的工作方式的人会理解同时用于在网桥3、4之间传输数据的多个逻辑连接12-1至12-n中的每一个具有彼此不同的用于RWS参数的值,这可以随着时间的推移随数据传输进程而变化。用于逻辑连接的RWS参数的值基于数据包损失由接收机4来确定,系统限制条件包括可用内存、自举大小设置和最大RWS大小设置。此外,根据由AI模块707、711检测的网络条件,逻辑连接的数目在延迟或任何其他网络事件的变化的响应中也可以不同。
[0180] 虽然在上面的实施例中两个路径用于发送数据,但在其它的实施例中还有另外的路径。在这些实施例中,每个路径都有各自的接收接口、发送接口、发送AI模块和接收AI模块。
[0181] 多个逻辑连接可以是TCP/IP连接或者可以是根据某些其它协议的逻辑连接,不管是标准化的还是专有的。接收到的与通过逻辑连接发送的数据包有关的监测确认可以由人工智能模块或由某些其它类的控制器来执行。重用所发送的数据包的确认已被接收到的逻辑连接包括在该确认已被接收到之后发送另外的数据包。发送另外的数据包的逻辑连接可以是用于最近已经收到最新发送的数据包的逻辑连接,或者可以是长期可用的逻辑连接。可以以任何适当的方式创建新的逻辑连接,而且可以通过路径在创建新的的逻辑连接上直接发送数据包以在创建完成时进行响应。可以以任何恰当的方式来终止多余的逻辑连接。
[0182] 除了需要两个或更路径时之外,上面所描述的有关图3实施例的特征也适用于图1的实施例,且适用于所有的特征。
[0183] 上述分配器704、第一AI模块709和第一发送接口707在某些实施例中在不存在第二AI模块和第二传输接口的情况下使用。在这些实施例中,只呈现了一条路径5、702。然而,使用多个逻辑连接,并创建传输包和网络有效载荷以通过路径5、702来提供对数据的优化传输。
[0184] 在发射机中形成的数据可采用任何合适的形式。例如,可以是用于记录在磁带或磁盘上的备份数据。可以是远程复制数据。可以是恢复数据,用于从数据已被丢失的位置恢复该数据。或者可以是来自文件传输协议(FTP)发送者的基于文件的数据。或者可以是来自相机的数据流,例如HTTP camStream。或者可以是简单的对象存储数据。这是一个非详尽的列表。
[0185] 虽然上述实施例涉及SAN,但是设备和方法能够用于其它的数据从一个节点传输到另一个节点的应用。该设备和方法还能够在使用ACK消息表示数据成功接收的协议而不是TCP/IP的系统中实施,如那些使用以太网光纤通道(FCOE)、因特网小型计算机系统接口(iSCSI)或网络附加存储(NAS)技术、标准以太网数据流或混合系统。
[0186] 此外,在上述实施例涉及使用ACK消息确认数据的系统时,该方法可以基于否定确认(NACK)消息的用于该系统中。例如,在图3的步骤S3.12中网桥3的处理器10确定是否已经接收到ACK消息。在基于NACK的实施例中,可以布置处理器10来确定是否已经在一定的时间内接收到NACK消息,若未收到,则使用端口i继续传输数据。