在第一网络节点和第二网络节点之间传输数据的制作方法

文档序号:10579262阅读:325来源:国知局
在第一网络节点和第二网络节点之间传输数据的制作方法
【专利摘要】一种装置,包括:第一发送器接口和第二发送器接口(702、711)、第一发送缓冲区和第二发送缓冲区、一个或多个路径能力确定模块(709、713)、输入数据缓冲区(706)以及数据处理模块(704);每一个发送器接口被配置成在各自包含有一个或多个逻辑连接的通信路径(702、703)上发送数据;所述第一发送缓冲区和第二发送缓冲区分别构成所述第一发送器接口和所述第二发送器接口的一部分,所述第一发送缓冲区和第二发送缓冲区被配置成对在其各自的通信路径上传输的数据包进行储存;所述一个或多个路径能力确定模块(709、713)被配置成对所述通信路径中的每一个的用于发送数据的能力的测量值进行确定;所述输入数据缓冲区(706)被配置成储存数据以提供给所述第一发送缓冲区和第二发送缓冲区用于后续传输;所述数据处理模块(704)被配置成通过以下方式对确定所述输入缓冲区存在用于传输的数据进行响应:使用所述通信路径所测量的能力以及储存在所述发送缓冲区中的数据量的测量值,来选择所述第一发送器接口和第二发送器接口两者之一发送数据;以及向所述第一发送器接口和第二发送器接口中选定的发送器接口的发送缓冲区提供至少一个数据包。
【专利说明】
在第一网络节点和第二网络节点之间传输数据
技术领域
[0001]本说明书涉及在第一网络节点和第二网络节点之间传输数据。
【背景技术】
[0002]使用常规方法在网络节点之间传输数据的速率会受到多个因素的限制。为了限制网络拥塞并且确保可靠的传输,在从第二接收节点接收到确认消息(acknowledgementmessage,ACK)之前,第一节点被允许仅发送有限的数据量。一旦第一节点已接收到ACK消息,第二有限的数据量便可被发送至第二节点。
[0003]在传输控制协议/互联网协议(Transmiss1nControl Pro toco I/InternetProtocol,TCP/IP)系统中,该有限的数据量与能够被储存在第二节点的接收缓冲区中的数据量有关,并且被称为TCP/IP“接收窗口”。
[0004]在常规系统中,可以通过考虑第一节点和第二节点之间的往返时间以及可用带宽来设置TCP/IP窗口的大小。TCP/IP窗口的大小可以影响第一节点和第二节点之间的数据传输效率,这是因为如果ACK消息没有在预定时段(超时期限)内抵达,则第一节点会关闭与第二节点的连接。因此,如果TCP/IP窗口相对较大,则连接会“超时”。此外,数据量会超过接收缓冲区的大小,以致引起错误恢复(error-recovery)问题。然而,如果TCP/IP窗口相对较小,则不能有效地利用可用带宽。此外,第二节点将被要求发送更多个ACK消息,因而增加了网络通信量。在这样的系统中,数据传输速率还由在第一节点处接收到对发送的数据包的确认所需要的时间来确定。换言之,数据传输速率取决于第一节点和第二节点之间的往返时间。
[0005]在将传输大量数据的应用中,上述缺陷尤其显著。例如,储存在存储区域网络(Storage Area Network,SAN)上的数据可以被备份在诸如另一存储区域网络(SAN)中的远程磁盘库之类的远程存储设施上。为了使本地存储数据和远程存储数据同时丢失的可能性最小化,该存储设施应当位于相当远的位置上。为了实现这一目的,备份数据必须经由网络发送至远程存储设施。然而,该传输受制于有限的数据传输速率。SAN通常利用光纤通道(Fibre Channel,FC)技术,该技术能够支持相对高速的数据传输。然而,光纤通道协议(Fibre Channel Protocol,FCP)通常不适用于距离大于1km的情况,虽然可以通过米用到TCP/IP通信的转换来扩展距离限制,但是该转换受制于上述性能考虑。

【发明内容】

[0006]本说明书的第一方面提供了一种装置,该装置包括:
[0007]第一发送器接口和第二发送器接口,每一个发送器接口被配置成在各自的包含有一个或多个逻辑连接的通信路径上发送数据;
[0008]第一发送缓冲区和第二发送缓冲区,第一发送缓冲区和第二发送缓冲区分别构成第一发送器接口和第二发送器接口的一部分,第一发送缓冲区和第二发送缓冲区被配置成对在其各自的通信路径上传输的数据包进行储存;
[0009]一个或多个路径能力确定模块,被配置成确定所述通信路径中的每一个用于的用于发送数据的能力的测量值;
[0010]输入数据缓冲区,其被配置成储存数据以提供给第一发送缓冲区和第二发送缓冲区用于后续传输;以及
[0011]数据处理模块,其被配置成通过以下方式对确定输入缓冲区中存在用于传输的数据进行响应:
[0012]使用通信路径所测量的能力以及储存在发送缓冲区中的数据量的测量值,来选择第一发送器接口和第二发送器接口中的一个发送数据;以及
[0013]向第一发送器接口和第二发送器接口中选定的发送器接口的发送缓冲区提供至少一个数据包。
[0014]所述一个或多个路径能力确定模块可以被配置成测量一个或多个传输参数,并且使用所测量的一个或多个传输参数来确定通信路径中的每一个的用于发送数据的能力的测量值。
[0015]所述一个或多个传输参数包括以下各项中的一项或多项:包丢失率、延时和路径速度。
[0016]所述一个或多个传输参数至少包括路径速度。
[0017]该装置包括第一路径能力确定模块和第二路径能力确定模块,每一个路径能力确定模块涉及通信路径中不同的通信路径。
[0018]通信路径中的每一个的用于发送数据的能力的测量值包括每单位时间内所述路径上需要被载入的字节数。
[0019]所述数据处理模块可以被配置成使用已经在通信路径上发送但确认还未被接收到的数据量的测量值,来在第一发送器接口和第二发送器接口中选择一个发送数据。
[0020]所述一个或多个路径能力确定模块可以被配置成确定已经在通信路径上发送但确认还没有被接收到的数据量。
[0021]所述数据处理模块可以被配置成根据路径速度和已经在通信路径上发送但确认还未被接收到的数据量来计算路径饱和值,并且使用该路径饱和值来在第一发送器接口和第二发送器接口中选择一个用于发送数据。
[0022]向第一发送器接口和第二发送器接口中选定的发送器接口的发送缓冲区提供至少一个数据包包括:提供长度等于或小于对应路径的最优包长度的传送包。
[0023]向第一发送器接口和第二发送器接口中选定的发送器接口的发送缓冲区提供至少一个数据包可以包括:
[0024]确定输入数据缓冲区中的数据段的长度是否具有超过对应路径的最优包长度;
[0025]基于肯定的确定,形成长度等于该路径的最优包长度的传送包,以用于将该传送包提供给第一发送器接口和第二发送器接口中选定的发送器接口的所述发送缓冲区;以及
[0026]向第一发送器接口和第二发送器接口中选定的发送器接口的发送缓冲区提供所形成的传送包。
[0027 ]本说明书的第二方面提供了一种方法,该方法包括:
[0028]第一发送器接口和第二发送器接口中的每一个在各自包含有一个或多个逻辑连接的通信路径上发送数据;
[0029]第一发送缓冲区和第二发送缓冲区中的每一个对在其各自的通信路径上传输的数据包进行储存,所述第一发送缓冲区和所述第二发送缓冲区分别构成所述第一发送器接口和所述第二发送器接口的一部分;
[0030]一个或多个路径能力确定模块对通信路径中的每一个的用于发送数据的能力的测量值进行确定;
[0031]输入数据缓冲区储存数据以提供给第一发送缓冲区和第二发送缓冲区用于后续传输;以及
[0032]数据处理模块通过以下方式对确定输入缓冲区中存在用于传输的数据进行响应:
[0033]使用通信路径所测量的能力以及储存在发送缓冲区中的数据量的测量值,来选择第一发送器接口和第二发送器接口两者之一发送数据;以及
[0034]向第一发送器接口和第二发送器接口中选定的发送器接口的发送缓冲区提供至少一个数据包。
[0035]该方法可包括一个或多个路径能力确定模块对一个或多个传输参数进行测量,并且使用所测量的一个或多个传输参数来确定通信路径中的每一个的用于发送数据的能力的测量值。
[0036]所述一个或多个传输参数包括以下各项中的一项或多项:包丢失率、延时和路径速度。
[0037]所述一个或多个传输参数至少包括路径速度。
[0038]可以存在第一路径能力确定模块和第二路径能力确定模块,每一个路径能力确定模块涉及通信路径中不同的通信路径。
[0039]通信路径中的每一个的用于发送数据的能力的测量值包括每单位时间内所述路径上需要被载入的字节数。
[0040]该方法可以包括数据处理模块使用已经在通信路径上发送但确认还未被接收到的数据的测量值,来在第一发送器接口和第二发送器接口中选择一个用于发送数据。
[0041]该方法可以包括一个或多个路径能力确定模块确定已经在通信路径上发送但确认还没有被接收到的数据量。
[0042]该方法可以包括数据处理模块根据路径速度和已经在通信路径上发送但确认还未被接收到的数据量来计算路径饱和值,并且使用该路径饱和值来在第一发送器接口和第二发送器接口中选择一个用于发送数据。
[0043]向第一发送器接口和第二发送器接口中选定的发送器接口的发送缓冲区提供至少一个数据包包括:提供长度等于或小于对应路径的最优包长度的传送包。
[0044]向第一发送器接口和第二发送器接口中选定的发送器接口的发送缓冲区提供至少一个数据包可以包括:
[0045]确定输入数据缓冲区中的数据段的长度是否超过对应路径的最优包长度;
[0046]基于肯定的确定,构成长度等于路径的最优包长度的传送包,以用于将该传送包提供给第一发送器接口和第二发送器接口中选定的发送器接口的发送缓冲区;以及
[0047]向第一发送器接口和第二发送器接口中选定的发送器接口的发送缓冲区提供所构成的传送包。
[0048]该方法可以由桥来实现。
[0049]本说明书的第三方面提供了一种包括机器可读指令的计算机程序,该机器可读指令由计算装置执行时,使所述计算装置执行上述任一方法。
[0050]本说明书的第四方面提供了一种具有至少一个处理器和至少一个存储器的装置,该存储器具有储存在其中的计算机可读代码,当该计算机可读代码在被执行时控制所述至少一个处理器执行包括下述内容的方法:
[0051 ]第一发送器接口和第二发送器接口中的每一个在各自的包含有一个或多个逻辑连接的通信路径上发送数据;
[0052]第一发送缓冲区和第二发送缓冲区中的每一个对在其各自的通信路径上传输的数据包进行储存,所述第一发送缓冲区和所述第二发送缓冲区分别构成所述第一发送器接口和所述第二发送器接口的一部分;
[0053]一个或多个路径能力确定模块对通信路径中的每一个的用于发送数据的能力的测量值进行确定;
[0054]输入数据缓冲区储存数据以提供给第一发送缓冲区和第二发送缓冲区用于后续传输;以及
[0055]数据处理模块通过以下方式对确定输入缓冲区中存在用于传输的数据进行响应:
[0056]使用通信路径所测量的能力以及储存在发送缓冲区中的数据量的测量值,来选择第一发送器接口和第二发送器接口两者之一发送数据;以及
[0057]向第一发送器接口和第二发送器接口中选定的发送器接口的发送缓冲区提供至少一个数据包。
[0058]本说明书的第五方面提供了一种其上存储有计算机可读代码的非易失性计算机可读存储介质,当该计算机可读代码由计算装置执行时,使所述计算装置执行包括下述内容的方法:
[0059]第一发送器接口和第二发送器接口中的每一个在各自包含有一个或多个逻辑连接的通信路径上发送数据;
[0060]第一发送缓冲区和第二发送缓冲区中的每一个对在其各自的通信路径上传输的数据包进行储存,所述第一发送缓冲区和所述第二发送缓冲区分别构成所述第一发送器接口和所述第二发送器接口的一部分;
[0061]一个或多个路径能力确定模块对通信路径中的每一个的用于发送数据的能力的测量值进行确定;
[0062]输入数据缓冲区储存数据以提供给第一发送缓冲区和第二发送用于后续传输;以及
[0063]数据处理模块通过以下方式对确定输入缓冲区中存在用于传输的数据进行响应:
[0064]使用通信路径所测量的能力以及储存在发送缓冲区中的数据量的测量值,来选择第一发送器接口和第二发送器接口中两者之一发送数据;以及
[0065]向第一发送器接口和第二发送器接口中选定的发送器接口的发送缓冲区提供至少一个数据包。
【附图说明】
[0066]现在将参照附图对本说明书的实施例进行描述,附图中:
[0067]图1描绘了根据本说明书的实施例的一个系统;
[0068]图2描绘了图1中系统的一个节点;
[0069]图3是示出了根据本说明书的实施例的示意图,并且是图1中系统的一个替换例;
[0070]图4是示出了根据本说明书的实施例在发送器和接收器之间传输数据的方法的流程图;
[0071 ]图5描绘了图1或图3的系统中的数据传输;
[0072]图6是示出了根据本说明书的实施例在发送器和接收器之间传输数据的方法的流程图,并且该流程图是图4中方法的一个替换例;
[0073]图7是示出了根据本说明书的实施例将输入包分组为传送包的方法的流程图;
[0074]图8是示出了在执行图7中的操作之前和之后的1矢量阵列的示意图;
[0075]图9是示出了对构成图1或图3中系统的一部分的分派器进行操作的方法的流程图;
[0076]图10是示出了对构成图1或图3中系统的一部分的分派器进行操作的方法的流程图;以及
[0077]图11是示出了根据本说明书的实施例计算传送包大小参数的方法的流程图。
【具体实施方式】
[0078]简而言之,本说明书的实施例涉及包含第一发送器接口和第二发送器接口的桥。每个发送器接口被配置成通过各自的包括一个(或有利地多于一个)逻辑连接的通信路径来传输数据。每个接口具有各自的发送缓冲区,该发送缓冲区被配置成储存用于通过各自的通信路径来传输的数据包。一个或多个路径能力确定模块(例如人工智能模块)对通信路径中的每一个的用于传输数据的能力的测量值进行确定。分派器使用该信息连同储存在发送缓冲区中的数据量的测量值来确定哪个发送缓冲区将从输入缓冲区接收下一个数据包。特别地,如果路径包括两个以上的逻辑连接,则提供给发送缓冲区的数据包的大小可以远大于通过逻辑连接所传输的数据包的大小,在此意义上而言,提供给发送缓冲区的数据包被分割并且不同的部分通过多个逻辑连接发送。特别地在通信路径具有不同的特征和不同的传输数据能力的情况下,这些实施例使得能够通过包含多个通信路径的链路有效地传输数据。
[0079]图1描绘了根据本说明书的实施例的一个系统。在该特定的示例中,该系统包括本地存储区域网络(SAN) i和远程SAN2。远程SAN2被设置成用于储存来自本地SAN1中的客户端、服务器和/或本地数据存储器的备份数据。
[0080]与本地SANi相关联的桥3以及与远程SAN2相关联的桥4经由路径5相连。桥3、4是网络节点的示例。路径5提供了桥3、4之间的多个物理路径。在该特定的示例中,路径5是IP网络上的一个路径,并且桥3和4能够使用传输通信协议(TCP)彼此通信。桥3、4之间的通信路径可以包括任意数量的中间路由器和/或其他网络元件。本地SAN1中的其他设备6、7能够使用由桥3、4和路径5形成的桥接系统来与远程SAN2中的设备8和9通信。
[0081]图2是本地桥3的框图。桥3包括处理器10,该处理器10根据储存在存储器11中的软件来控制桥3的工作,包括生成用于建立和释放与其他桥4的连接的进程以及在与桥3相关联的SAN1内连接和释放桥3与其他设备6、7的连接的进程。
[0082]桥3、4之间的连接使用了I/O端口 12-1?12-n,该I/O端口 12-1?12-n是发送和接收TCP协议所经由的物理端口。还可以提供用于与SAN1通信的多个光纤通道(FC)端口 13-1?13-n AC端口 13-1?13-n独立于端口 12-1?12-n工作,并且与端口 12-1?12-n具有不同的类型和规格。桥3能够使用端口 12-1?12-n和FC端口 13-1?13_n通过多个连接同时发送和接收数据。
[0083]多个缓冲区14被提供用于储存由桥3传输的数据。多个高速缓存15共同提供了大容量存储,同时时钟16被设置为提供定时功能。处理器10能够经由总线17与桥3的多个其他组件进行通信。
[0084]图3是示出了根据本说明书的系统的示意图,该系统中,与本地SAN1相关联的桥3以及和远程SAN2相关联的桥4通过第一路径702和第二路径703相连。图1系统的其他特征存在于图3的系统中,但是为了更加清楚,在图3中省略了这些特征。这些特征包括多个I/O端口 12-1?12-n、光纤通道(FC)端口 13-1?13-n等。
[0085]存储器11储存了当被载入处理器10时控制本地桥3工作的软件(计算机程序指令)。该软件包括操作系统和其他软件,例如固件和/或应用软件。
[0086]计算机程序指令提供使本地桥3能够实现下述功能的逻辑和例程。该计算机程序指令可以被预编程到本地桥3中。替代性地,该计算机程序指令可以借助电磁载波信号抵达本地桥3,或可以从诸如计算机程序产品、非易失性电子存储器设备(例如,闪存)、或诸如CD-ROM或DVD的记录介质之类的物理实体中复制该计算机程序指令。例如可以从服务器将该计算机程序指令下载至本地桥3。
[0087]处理器10可以是具有处理电路系统的任何类型的处理器。例如,处理器10可以是对计算机程序指令进行翻译并处理数据的可编程处理器。处理器10可以包括多个处理器。每个处理器具有一个或多个处理内核。处理器10可以包括具有多个内核的单个处理器。替代性地,处理器10可以例如为具有嵌入固件的可编程硬件。处理器10可被称为处理装置。
[0088]远程桥4与本地桥3相似地配置,并且图2和上述内容也适用于远程桥4。
[0089]除非上下文以其他方式暗示,否则本说明书中所使用的术语“存储器”旨在主要涉及包括非易失性存储器和易失性存储器的存储器,虽然该术语也可以仅涵盖一个或多个易失性存储器、仅涵盖一个或多个非易失性存储器、或者一个或多个易失性存储器和一个或多个非易失性存储器。易失性存储器的示例包括RAM、DRAM、SDRAM等。非易失性存储器的示例包括ROM、PROM、EPROM、闪存、光学存储器、磁存储器等。
[0090]图3中所示的本地桥3和远程桥4包括多个互相连接的组件。现将参照图3来描述桥
3、4,并将对两个桥的工作和它们的交互工作进行阐释。
[0091 ]通过控制本地桥3中的数据高速缓存706,输入数据被接收并储存在存储器中。为连接至远程桥4的每个存储设备8、9提供一个数据高速缓存706。为了简化以下描述,将描述单个数据高速缓存706的操作。输入数据被接收为离散的数据段。虽然删除/脱离了协议,但是输入数据中的该数据段采用在主机接口(例如,FC接口 13)被接收的形式。该数据段是需要与远程桥4进行通信的数据。该数据段可以是数据包,但是不应与本说明书中所探讨的传送包混淆。该数据段包括含有数据说明、数据来源和目的地、数据大小、以及存储器矢量的报头。
[0092]数据高速缓存706的输出端连接至分派器704的输入端。因此,输入数据通过数据高速缓存706被提供给分派器704。分派器是数据处理模块的一个示例。
[0093]输入数据被储存在本地桥3的存储器中,并且由数据高速缓存706管理。数据高速缓存706对在SANjP SAN2之间双向传递(即,从SANjIj SAN2以及从SAN2到SANi)的命令和数据的存储等进行管理。高速缓存706对与SAN1、SAN2或其他主机的协议交互进行管理。由高速缓存706所执行的行为示例包括接收写命令、打开信道以允许主机写入数据等。
[0094]输入数据可以从分派器704提供给第一路径发送器接口707或第二路径发送器接□ 711。
[0095]第一路径发送器接口707通过路径702连接至接收器中的第一路径接收器接口
708。类似地,第二路径发送器接口711通过第二路径703被连接至远程桥4中的第二路径接收器接口 712。
[0096]路径702、703中的每一个包括多个逻辑连接。路径702、703中的每一个具有一个或多个物理端口。这些端口和逻辑连接可以按照下文参照图4的描述设置。替代性地,这些端口和逻辑连接可以按照下文参照图6的描述设置。在上述任一种情况中,逻辑连接的数量被选择为使得能够提供各个路径702、703上的适当的数据传送性能。在图6中方法的情况中,管理逻辑连接的数量以优化性能。
[0097]图1的桥3中所示的端口12-1?12-n包含在图3的第一发送器接口 707中,但是为了清楚起见而被省略。类似地,在第二发送器端口 711中设置了端口 12-1?12-n。在远程桥4的第一路径接收器708和第二路径接收器712中设置了对应的端口 19-1?19-n。
[0098]在本地桥3中设置了第一路径发送器人工接口(Artificial Interface,AI)模块
709。第一路径发送器Al模块709以双向方式耦接至第一路径发送器接口707和分派器704。另外,第一路径发送器Al模块707被连接为从位于远程桥4中的第一路径接收器Al模块710接收信号。第一路径接收器Al模块710以双向方式耦接至第一路径接收器接口 708和输出高速缓存705。
[0099]类似地,第二路径发送器Al模块713位于本地桥3中,并且以双向方式连接至第二路径发送器接口711和分派器704。第二路径接收器Al模块714位于远程桥4中,并且以双向方式耦接至输出高速缓存705和第二路径接收器接口 712。第二路径Al模块713被连接为从第二路径接收器Al模块714接收信号。
[0100]分派器704被配置成确定将各个路径702和703上所传输的数据段提供给第一路径发送器接口 707和第二路径发送器接口 711中的哪一个。以下将详细描述分派器704的操作。
[0101]在远程桥4中,设置了合并器/高速缓存705。合并器/高速缓存705提供了高速缓存功能和合并器功能。替代性地,分立的模块可以被包含在远程桥4中以提供这些功能。输出数据被储存在接收器702中的存储器内,并且由数据高速缓存/合并器705管理。
[0102]合并器/高速缓存705使输出高速缓存705内通过第一路径702和第二路径703接收到的数据合并。数据由合并器705进行合并,使得由高速缓存705产生的输出数据包括以正确顺序排列的数据段,即接收数据段的顺序符合输入数据输入本地桥3的顺序。在输出高速缓存705内的数据合并由合并器705基于对报头的检查来执行。
[0103]参照图1和图4,为了传输数据,在桥3的端口12-1?12_n与远程桥4中的对应端口19-1?19-n之间建立多个逻辑连接18-1?18-n。以这种方式,可以通过逻辑连接18-1从上述端口 12中的第一个端口发出第一批数据段Dl-1。延迟任何其他的传输直到接收到针对第一批数据段的确认ACKl-1后,使用其它逻辑连接18-b?18-n来传输其余批次的数据段Dl-2?Dl-n。一旦确认ACKl-1已被接收,新一批的数据段D2-1通过第一逻辑连接18-1被发送至远程桥4,从而开始重复进行从逻辑连接18-1?18-n的传输序列。一旦通过对应的逻辑连接18-1?18-n发送的针对前一批数据段D1-2的确认被接收到,每个剩余的逻辑连接便传输新一批的数据段D2-2。以这种方式,数据传输的速率不必受限于桥3、4之间的往返时间。当多个端口 12被用于在桥3、4之间传输数据时,多个逻辑连接18与每个端口相关联。如下文所述,为给定端口 12设置的逻辑连接的数量取决于物理路径能力和该路径5的往返时间。
[0104]在该环境中的一批数据段构成一个传送包。由于当数据段抵达桥3时已经被去除了协议,因此数据段没有报头。传送包具有相关的报头,并且随后将在本说明书中对传送包的创建和处理进行详细讨论。
[0105]如在下文中更详细描述的那样,根据数据段创建了多个网络有效载荷包。简言之,传送包包括一个数据段、多个数据段或数据段中的一部分。网络有效载荷包包括一个或多个传送包。每个传送包被设置有具体涉及该传送包的报头。虽然每个网络有效载荷包包括至少一个传送包报头,但网络有效载荷包没有设置报头。当网络有效载荷包通过路径被发送时,该网络有效载荷包通常由用于该路径的协议提供报头。例如,通过TCP路径发送的网络有效载荷包由协议处理方设置TCP报头。
[0106]现将参照图1、3和4对本说明书的实施例中所使用的将数据从桥3传输至远程桥4的方法进行描述。
[0107]在步骤S3.0处开始,桥3在其端口 12-1?12-n与远程桥4的对应端口 19-1?19-n之间配置了N个逻辑连接(步骤s3.1)。每个端口 12具有与之相关联的一个或多个逻辑连接18,即每个端口 12致力于提供一个或多个逻辑连接18。
[0108]在桥3从SAN1传输数据的情况下,桥3可以开始从其他本地服务器、客户端和/或存储设施6、7请求数据,该数据可以储存在高速缓存15中。这样的高速缓存15和用于提高在SAN中的数据传输速度的技术在US2007/00174470 Al中进行了描述,其内容通过引用方式合并于此。这样的数据检索处理可以在下述过程(procedure)中继续进行。
[0109]如上所述,用于将数据传输至远程桥4的过程包括顺序地使用逻辑连接18-1?18-n的多个传输周期(transmiss1n cycle)。标志位被设置为0(步骤s3.2)以指示下一个周期是该过程中的第一个周期。
[0110]表示识别用于传输网络有效载荷包的逻辑连接的变量i被设置为I(步骤3.3、3.4)0
[0111]由于该过程还没有完成其第一个周期(步骤S3.5),因此桥3无需对之前传输数据的确认进行检查。因此,处理器10传送待传输至缓冲区14中的第一批数据段Dl-1 (步骤s3.6)。第一批数据包一起构成网络有效载荷包。如下所述,网络有效载荷包的大小被选择为使得数据传送的效率最大化。随后,缓冲的数据段Dl-1作为网络有效载荷包通过逻辑连接18-1传输(步骤s3.7),在本示例中该逻辑连接18-1为逻辑连接18-1。
[0112]由于仍然存在待传输的数据(步骤s3.8)并且在该周期中并未使用所有的逻辑连接18-1?18-n(步骤s3.9),因而使i递增(步骤s3.4),以识别下一个逻辑连接,并且执行步骤s3.5-s3.9以使用逻辑连接12-1(即逻辑连接18-2)传输第二批数据段Dl-2(第二网络有效载荷包)ο重复进行步骤s3.4-s3.9直到使用逻辑连接8-1?18-n中的每一个逻辑连接将各批数据段Dl-1至Dl-n(网络有效载荷包)发送至远程桥4。
[0113]由于第一周期现已完成(步骤S3.10),因此标志位被设置为1(步骤S3.11),使得根据前一网络有效载荷包是否已经被确认来进行后续的数据传输。
[0114]后续循环通过将i重置为I开始(步骤S3.3、s3.4)。由端口 18_1开始,确定从端口12-1最新发出的网络有效载荷包Dl-1的ACK消息ACKl-1是否已经被接收(步骤s3.12)。如果ACK消息已被接收(步骤s3.12),则新的网络有效载荷包D2-1被移入缓冲区14中(步骤s3.6)并被传输(步骤s3.7)。如果ACK消息还未被接收,则确定是否已超过了逻辑连接18-1的超时期限(步骤s3.13)。如果已超过了超时期限(步骤s3.13),则检索未被确认的数据并通过逻辑连接18-1重新传输该数据(步骤s3.14)。
[0115]如果ACK消息还未被接收(步骤S3.12)但还没有超过超时期限(步骤S3.14),则在该周期中不再从逻辑连接18-1传输其他数据。这使得能够在无需等待该特定逻辑连接18-1的ACK消息的情况下继续进行传输,并且在后续的周期中对该未完成的ACK消息进行检查(步骤s3.12),直到ACK被接收且网络有效载荷包D2-1通过使用逻辑连接18-1进行传输(步骤s3.6、s3.7),或超过了超时期限(步骤s3.13)并且重新传输网络有效载荷包Dl-1 (步骤s3.14)0
[0116]随后,该过程移至下一个逻辑连接18-2,按需重复进行步骤s3.4、s3.5、s3.12和83.7至83.9,或步骤83.4、83.5、83.12、83.13和83.14。
[0117]—旦使用所有N个逻辑连接重新传输数据(步骤s3.9、s3.10),i被重置(步骤S3.3、s3.4)并且开始进行新的周期。
[0118]一旦所有数据已被传输(步骤S3.8),处理器10等待接收未完成的ACK消息(步骤s3.15)。如果在一预定时段后还没有接收到任何ACK(步骤s3.16),则从高速缓存15或SAN1的相关元件6、7中检索未被确认的数据并进行重新传输(步骤s3.17)。该预定时段可以等于或大于逻辑连接18-1?18-n的超时期限,以便确保有充足的时间来接收任何未确认的ACK消息。
[0119]当所有传输数据或所有传输数据中的可接受的百分比已被确认(步骤s3.16)时,该过程结束(步骤s3.18)。
[0120]在图3的方法中,连接的数量N大于I,并且该连接数量是固定的。使用多个连接使得相较于仅使用一个连接的对应系统,数据传输的性能得到了提升,但是会比这样的对应系统使用更多的系统资源。
[0121]现在将参照图6对传输数据的一个替代方法进行描述。该方法涉及对用于在路径5、702、703上传输数据的逻辑连接的数量进行优化。
[0122]这里,该操作开始于步骤SI。
[0123]在步骤S2处,X和η的值被初始化为O。对传输的网络有效载荷包的计数由η表示。对已接收到的确认的计数由X表示。
[0124]在步骤S3处,数据被移至图2中所示的发送缓冲区14,以准备传输。
[0125]在步骤S4处,确定逻辑连接18是否可用。该确定通过以下方式执行:对先前已创建的逻辑连接18中的每一个进行检验并确定针对这些逻辑连接18中的哪一个逻辑连接上的最新传输的网络有效载荷包的确认已被接收到。如果最新传输的网络有效载荷包的确认已被接收,则逻辑连接18是可用的。
[0126]从上述参照图1和图4的描述中将能理解的是,逻辑连接18与端口12之间存在多对一的关系。在TCP实施例中,可用的逻辑连接18是在桥3、4之间建立的TCP连接,该TCP连接不处理用于传输的数据并且没有未完成的确认。
[0127]如果逻辑连接18是不可用的,则在步骤S5处通过在桥3、4之间建立TCP流式套接字(TCP Stream socket)来创建新的逻辑连接18。如果在步骤S4处或在步骤S5处创建了新的逻辑连接18之后确定逻辑连接18是可用的,则在步骤S6处,在逻辑连接18上传输网络传送包η。这里,逻辑连接18是不存在未完成确认的逻辑连接。对于新的逻辑连接18,不存在之前通过该逻辑连接18发送的网络传送包。对于现存的逻辑连接18,之前已经发送过网络传送包但是针对所传输的网络传送包的确认已被接收到。
[0128]步骤S6后,在步骤S7处使η递增。步骤S7后,在步骤S8处确定在步骤S3中移至缓冲区的数据是否为待传输数据的末尾。如果不再有网络传送包需要被传输,则步骤S8产生肯定的确定。如果存在至少一个网络传送包需要被传输,则步骤S8提供否定的确定,并且该操作继续进行至步骤S9。
[0129]在步骤S9处,确定是否已经从远程桥4接收到网络传送包X的确认。
[0130]如果确定网络传送包X的确认没有被接收,则在步骤SlO处确定是否已超过该数据的超时期限。在步骤SlO处的超时确定中所使用的定时器的值可以采用任何适当的值。对于桥3和4之间的高度时延路径,超时期限的值可以相对较大。如果已经超过该超时期限,则在步骤S11处对来自缓冲区的网络传送包X重新传输。
[0131]如果在步骤S9处确定已接收到网络传送包X的确认,则在步骤S12处使X的值递增。步骤S12后,在步骤S12处破坏多余的逻辑连接18。为了确定多余的逻辑连接,首先核实每个逻辑连接以确保没有处于进程中的数据传输并且没有未完成的确认。以控制方式来破坏多余的逻辑连接。这可以通过将FIN消息从桥3发送至远程桥4来实现,远程桥4通过向桥3发送ACK消息来响应对FIN消息的确认。FIN消息与多余的逻辑连接相关。FIN消息表示从发送器不再发出数据。在本地桥3处接收到ACK消息便完成了该操作过程。
[0132]在第一路径702的情况中,第一路径发送器接口707负责创建和消除逻辑连接,并且被配置成用于这种创建和破坏。关于第二路径703,第二路径发送器接口 711负责并且被配置成执行逻辑连接的创建和消除。当然,尽管逻辑连接的发起过程由第一路径发送器接口 707和第二路径发送器接口 711执行,但是在逻辑连接的创建和消除中第一路径接收器接口 708和第二路径接收器接口 712是有效的。
[0133]步骤S12或步骤Sll后,或在步骤SlO处确定并未超过超时期限后,该操作过程返回步骤S3。这里,至少有另一个网络有效载荷包被移入缓冲区以用于传输。
[0134]根据上述内容可以理解的是,虽然存在更多的数据(以网络有效载荷包的形式)需要被传输,但是逻辑连接18的数量被管理为使得恰当数量的逻辑连接18可用于发送数据。然而,这可以在无需保持不必要的高数量的逻辑连接18的情况下实现。特别地,定期检测是否存在多余的逻辑连接18,并且之后对检测到的任何多余的连接进行破坏。特别地,在本示例中,每次都进行对多余连接的检测,即在步骤S9处指出确认已被接收到。并非破坏一次操作中的所有多余连接,而是每次从所检测到的任何多余连接中去除一个连接。即,每次操作执行步骤S13时可以去除一个多余连接。这在发送器707、711响应于路径5、702、703的状态变化而需要这些空闲的逻辑连接时,能够使大量(一个或多个)的空闲的逻辑连接被保留以供使用。因为创建逻辑连接所需的时间和计算资源大于破坏逻辑连接所需的时间和计算资源,因此每次破坏一个多余的逻辑连接可以使用更少的系统资源。
[0135]然而,对于处于相对稳定状态的路径5、702、703而言以及在数据流入本地桥3相对稳定的情况下,现存的逻辑连接的数量的变化相对不太频繁。如果路径5、702、703保持稳定,则无论使用何种破坏多余逻辑连接的选项,逻辑连接的数量减小至最优水平。
[0136]至此所描述的图6中操作过程的方面的结果在于,在任何给定时刻下,现存的逻辑连接18的数量对于路径5都是最优的或接近最优的。特别地,逻辑连接18的数量可足够大以允许对所有需要发送的数据进行传输,但是不得大于所需的数量,或至少多余的逻辑连接18被频繁地破坏以避免逻辑连接18的数量大于整体时间中一大部分所需的逻辑连接的数量。这提供了在路径5、702、703上传送数据的最优性能而并未浪费不需要的逻辑连接上的存储器等资源。
[0137]当来自缓冲区14的所有数据已被传输(即当所有网络传送包已被传输)时,无论这些数据是否已全部被确认,步骤S8均能产生肯定的结果。在这种情况下,该操作继续进行至步骤S14,在此确定网络传送包X的确认是否已被接收到。如果确定已接收到网络传送包X的确认,则在步骤S15处使X的值增加。之后,在步骤S16处确定X的值是否等于η的值。由于X是对确认的计数并且η是对网络有效载荷包的计数,因此这相当于针对是否所有传输的网络传送包的确认已被接收到的评估。基于表示并非所有确认已被接收到的否定确定,该操作返回至步骤S8,在此再次确定是否抵达缓冲区中数据的末尾。当在缓冲区处不再接收到任何数据的同时从步骤S16抵达步骤S8时,该操作继续再次进行至步骤S14。步骤S8、S14、S15和S16的循环致使该操作在无需发送更多数据的情况下能够对传输的网络传送包的确认进行监视。
[0138]如果在步骤S14处确定没有接收到网络传送包X的确认,则在步骤S19处确定网络传送包X是否已超时。如果没有超时,则该操作返回至步骤S8。如果已经超时,则在步骤S20处对网络传送包X进行重新传输。
[0139]重新传输步骤Sll和S20确保确认未被接收的网络传送包被重新传输。此外,该网络传送包被继续重新传输直到网络传送包的接收已被远程桥14确认。
[0140]一旦步骤S16确定所有确认已经被接收到,该操作可继续至步骤S17。这里,桥3等待接收更多的数据。一旦数据被接收到,该操作继续至步骤S3,在该步骤中,数据被移至缓冲区14以用于传输。
[0141]在图3系统中的分派器704的操作包括两条路径702、703,现将参照图7对该操作进行描述。
[0142]该操作开始于步骤SI。在步骤S2处,由分派器704确定缓冲区中是否存在且由高速缓存706指示为需要传输的数据。对于否定的确定,在步骤S3处分派器706等待需要添加至高速缓存706中的数据。一旦确定用于传输的数据位于高速缓存706管理下的输入缓冲区中,该操作进行至步骤S4。
[0143]在步骤S4处,分派器704检测出路径702、703两者中具有最大数据需求的一个。这可以以任何适当的方式实现。
[0144]例如,分派器704可以使用由第一路径传输Al模块709和第二路径传输Al模块713提供的信息来确定具有最大数据需求的路径。特别地,分派器704可以基于由第一路径Al发送器模块709和第二路径Al发送器模块713提供的信息来确定路径702和703两者中的哪一个具有最大数据需求。这要求Al模块709、713被配置成计算并提供相关信息。
[0145]在提供信息以协助分派器704确定路径702和703中的哪一个具有最大数据需求的过程中,Al发送器模块709、713执行多次计算。特别地,Al发送器模块709、713对某些传输参数进行计算,该传输参数包括数据包的丢失率、延时以及速度(以每秒的字节数表示)。通过对给定时间段(在超时窗口)内未被接收到确认的网络有效载荷包进行计数并且计算丢失的网络有效载荷包与成功传输的网络有效载荷包的比率来计算数据包丢失率。通过使用由发送接口 707、711所提供的时间信息计算传输网络有效载荷包与接收到该网络有效载荷包的确认之间的平均时间,来计算延时。通过确定在时间窗口(例如I秒内)中成功传输的数据量,来确定物理路径5、702、703的速度。没有数据(没有网络有效载荷包)传输的时间段可以从路径速度计算中排除,因而所测算的路径速度仅涉及存在数据传输的时间段。
[0146]基于这些测算的参数,Al发送器模块709、713对每个单位时间中(例如每秒)需要进入其各自路径702、703中的字节数进行计算。通过将物理路径的单位为MB/s的带宽乘以单位为秒的当前延时值来计算上述内容。在时间段中的特定时刻,Al发送器模块709、713能够确定已被发送但是其确认还未被接收到的数据量(以字节表示)。该数据可以被称为飞行数据。飞行数据必须保留在发送缓冲区中,由逻辑连接来管理,但是一旦接收到该数据的确认,能够重新分配发送缓冲区对应的存储器。
[0147]Al发送器模块709、713中的任一个能够在预定的时刻将飞行数据量报告给分派器704以表明我们的状态,诸如数据段中数据的最后一个字节已经被发送,或者分派器704能够请求Al发送器模块709、713提供飞行数据量信息。在任一种情况中,分派器704在需要来自Al发送器模块709、713的飞行数据量信息时被提供该飞行数据量信息,以便评估路径702、703中的哪一个具有最大的数据需求。相同的原理可应用于由Al发送器模块709、713计算的路径速度信息。
[0148]对于每个路径,分派器704对路径饱和值进行计算。例如,可以通过用飞行数据量(例如,字节数)除以路径速度来计算该路径饱和值。在路径延时小于I秒的情况中且在路径速度测量值的单位为字节数每秒的情况中,该路径的路径饱和值介于O到100之间。较低的值指示路径没有高度饱和,并且具有相对较高的数据需求。较高的值指示路径已经相对高度饱和,并且具有相对较低的数据需求。
[0149]使用路径的路径饱和值来识别具有最大数据需求的路径。这可以简单地涉及识别哪个路径具有最小的路径饱和值,并且选择该路径作为具有最大数据需求的路径。替代性地,对具有最大数据需求的路径的识别可以另外使用其他信息,例如针对于路径702、703所测量的路径速度或延时。
[0150]一旦在步骤S4处确定出路径702、703两者之一,分派器704便开始准备为路径702、703的发送接口 707、711提供来自数据高速缓存706中的数据。这开始于步骤S5,在此获取路径702、703的OTPS参数的值。该参数的值从相应路径的Al发送器模块709、713获取。Al发送器模块709、713按照下文参照图11所描述的方式来计算OTPS参数的值。由于路径702、703中的每一个的OTPS参数的值是分别计算的,因此路径702、703中的每一个可以具有不同的OTPS参数。
[0151]在步骤S6处,分派器704选择高速缓存706中的下一个数据段的第一部分。该数据段所选择的部分的长度与所获取的OTPS参数的值相等。在该数据段的长度小于或等于OPTS参数的值的情况下,选择整个数据段。在该数据段的长度大于OPTS参数的值的情况下,选择该数据段中长度与OPTS参数的值相等的部分。
[0152]一旦已从分派器704选择提供给路径的数据量,便可以由分派器704创建用于所选数据的1矢量,以由所选路径的发送接口 707、711使用。1矢量的创建组成了传送包的提供。下文将参照图8和图9更详细地描述1矢量的创建以及由此的传送包的创建。简而言之,1矢量的转换产生了一指向至多与在步骤S5处获取的该路径的OTPS参数所指示的大小相同的传送包的1矢量。该1矢量之后被提供给与相关路径702、703相关联的FIFO缓冲区(未示出)。
[0153]在步骤S6处创建1矢量之后,该1矢量被传送至所选路径702、703,并且特别地在步骤S7处,被传送至该路径的发送接口 707、711的FIFO缓冲区(未示出)。步骤S7的结果在于向构成在步骤S4处检测到的具有最大数据需求的路径的发送接口 707、711的一部分的FIFO缓冲区(未示出)提供包括指向传送包的指针并指示该传送包长度的10矢量。此外,路径702、703的FIFO缓冲区被提供有与具有最优传送包尺寸或可能更小尺寸的传送包有关的10矢量。这使得路径702、703,尤其是相关的发送接口 707、711能够访问(整个或部分)数据段。这提供了用于在所选路径702、703的逻辑连接上进行传输的至多具有所选路径已确定的最优传送包尺寸的传送包中的(整个或部分)数据段。
[0154]在步骤S8处,确定是否已经到达该数据段的末尾。基于肯定的确定,该操作返回至步骤S2,在此可以检索并处理下一个数据段。基于否定的确定,该操作则返回至步骤S4。这里,对该数据段中的下一部分再次执行步骤S4至S7。
[0155]如果步骤S4识别出同一个路径702、703仍然具有最大数据需求,则创建针对该数据段中长度等于(或可能小于)该路径702、703的OTPS值的下一部分的10矢量(以及传送包)C3OTPS的值通常不会在同一个路径702、703的连续传送包之间变化,即使该情况可能会偶尔发生。
[0156]如果步骤S4识别出相对路径702、703现具有最大数据需求,则创建针对该数据段中长度等于(或可能小于)该相对路径702、703的OTPS值的下一部分的10矢量(以及传送包)。下一个传送包的大小取决于不同的OPTS参数(用于相对路径的OPTS参数)的值,因此通常与在先传送包的大小不同。
[0157]对于长度大于在步骤S5处所获取的OPTS参数的值的数据段,当首次处理该数据段时,该数据段的传输可以发生在两个不同的路径702、703上。这并不是说该数据段可同时在两个路径上传输。相反地,该数据段的不同部分可以在不同的路径702、703上传输。
[0158]现参照图8,该图的左侧示出了用于缓冲区的10矢量阵列101,并且该图的右侧示出了用于传送包的10矢量阵列102。
[0159]缓冲区的10矢量阵列101由分派器704管理。
[0160]现将参照图9来描述分派器704将缓冲区10矢量阵列101转换成传送包10矢量阵列102的操作。
[0161]该操作开始于步骤SI。在步骤S2处,矢量料参数被初始化为O。同样地,数据段的长度被设置为变量X的值。另外,该数据段在缓冲区中的起始存储器地址被设置为变量Y的值。
[0162]之后在步骤S3处开始处理该数据段。用于路径702、703(这是在图7中的步骤S4处所选择的路径)的OPTS参数的值已经被获取,特别地是通过图7中的步骤S5的行为来获取。在步骤S3处,确定该数据段长度X的值是否小于或等于所获取的OTPS参数的值。如果该数据段长度X小于或等于OTPS参数的值,则这指示整个数据段可置于一个传送包中。基于这个确定,在步骤S4处创建一个1矢量。该矢量被创建为具有数值等于参数Y值的起始存储器地址(指针)。该矢量具有长度字段,该长度字段包括等于X的值的长度参数,该长度参数指示该数据段的长度。随后,1矢量i被提供给相关发送接口 707、711的FIFO缓冲区。那么,尽管物理数据仍保留在缓冲区内该物理数据的原始位置(即被分派器704处理之前的位置)中,但该1矢量组成了传送包。在步骤S4中创建1矢量i并且将该1矢量提供给FIFO缓冲区之后,该操作在步骤S5处结束。
[0163]如果在步骤S3处确定该数据段长度X大于OTPS参数的值,则该操作进行至步骤S6。这里,分派器704创建1矢量i。这里,1矢量i被设置有值等于参数Y的起始存储器地址(指针)。矢量i的长度等于OTPS参数的值。因此,步骤S6涉及创建一指向长度等于最优传送包大小且起始处具有还未被处理的起始地址的数据的1矢量。随后,该1矢量i被提供给相关发送接口707、711的FIFO缓冲区。那么,尽管物理数据仍保留在缓冲区中该物理数据的原始位置(即被分派器704处理之前的位置)中,但该1矢量组成了传送包。
[0164]步骤S7后,将起始存储器地址参数Y的值增加OTPS参数的值。这将使起始存储器地址移动以指向在步骤S6中创建的由1矢量i指示的数据之后紧接的数据起始处。
[0165]步骤S7后,在步骤S8处将该数据段长度参数X的值减小OTPS参数的值。这使得缓冲区长度参数X的值等于仍由1矢量阵列102中的传送包1矢量指示的段数据量。
[0166]在步骤S8之后,在步骤S9处矢量#i被增加。因此,当在步骤S6或步骤S4处相继创建矢量时,这会涉及更大的矢量数量。
[0167]可以理解的是,在步骤S3处的检查导致由步骤S6至S9形成的循环被执行直到保留在缓冲区中的数据量小于或等于OTPS参数的值,此时剩余的数据在步骤S4处被提供至最终1矢量i中。
[0168]根据在图7中步骤S4处所做的确定,在步骤S4和S6处创建的用于同一数据段的不同部分的1矢量可以被创建为用于路径702、703中的不同部分。同样地,产生的传送包的长度可以不同,这是因为该长度取决于在图7的步骤S5处获取一个或多个路径702、703的OPTS参数时的一个或多个OPTS参数的值,并且因为数据段的最后一部分通常比OTPS参数的值更短。因此,产生的1矢量阵列的传送包可以具有多个不同的长度。
[0169]产生的传送包1矢量阵列102之后被提供给一个或多个相关路径702、703的相关发送接口 707、711的一个或多个FIFO缓冲区。根据在图7中的步骤S4处对哪个路径具有最大数据需求所做的确定,传送包1矢量阵列中的不同的1矢量可以包含在不同传输接口 707、711的不同FIFO缓冲区中。随后,一个或多个传输接口 707、711使用其各自FIFO缓冲区中的10矢量来从数据缓冲区704中检索该数据段的部分(传送包),并且将该数据段的部分通过各个路径702、703所提供的逻辑连接进行传输。
[0170]当发送接口707、711已经准备好在下一个逻辑连接上传输数据时,发送接口 707、711在其FIFO缓冲区中查找下一个10矢量。从该10矢量中提取待传输的数据开始处的数据缓冲区704的存储器地址,并且提取相关的传送包长度。发送接口 707、711之后从数据缓冲区704中提取相应的数据,并且通过路径702、703上的下一个逻辑连接传输该数据。一旦发送接口 707、711接收到了对该传送包的确认,便通知分派器704使得数据缓冲区中对应的存储器可以被重新配置。
[0171]参照图8和9所描述的1矢量阵列的转换导致在无需进行不必要的数据拷贝的情况下发送至少某些具有期望长度(等于OTPS参数的值)的传送包。这可以实现的原因在于,传送包1矢量阵列102中的1矢量包括直接涉及传送包的地址和长度信息。因此,存储器读写操作的次数被最小化,同时使得将输入数据接收至本地桥3中以及将期望长度的传送包发送至远程桥4的过程具有较高的灵活性。当然,某些传送包被创建为长度小于OTPS参数的值。一旦在步骤S4处确定出路径702、703两者之一,分派器704便开始准备从数据高速缓存706为路径702、703的发送接口 707、711提供数据。这开始于步骤S5,在此获取用于路径702、703的OTPS参数的值。该参数的值从对应路径的Al发送器模块709、713中获取。OTPS参数的值由Al发送器模块709、713按照下文参照图11所描述的方式来计算。由于OTPS参数的值针对路径702、703中的每一个进行单独计算,因此路径702、703中的每一个可以具有不同的OTPS参数。
[0172]在步骤S6处,分派器704选择高速缓存706中的下一个数据段的第一部分。该数据段所选择的部分的长度与所获取的OTPS参数的值相等。在该数据区段的长度小于或等于OPTS参数的值的情况下,选择整个数据段。在该数据区段的长度大于OPTS参数的值的情况下,选择该数据段中长度与OPTS参数的值相等的部分。
[0173]一旦已从分派器704中选择提供给路径的数据量,便可以由分派器704来创建用于所选数据的1矢量,以由所选路径的发送接口 707、711使用。1矢量的创建组成了传送包的提供。下文将参照图8、9和10更详细地描述1矢量的创建以及由此的传送包的创建。简而言之,1矢量的转换产生了一指向至多与在步骤S5处获取的该路径的OTPS参数所指示的大小相同的传送包的1矢量。该1矢量之后被提供给与相关路径702、703相关联的FIFO缓冲区(未示出)。
[0174]在步骤S6处创建1矢量之后,该1矢量被传送至所选路径702、703,并且特别地在步骤S7处,被传送至该路径的发送接口 707、711的FIFO缓冲区(未示出)。步骤S7的结果在于向构成在步骤S4处检测到的具有最大数据需求的路径的发送接口 707、711的一部分的FIFO缓冲区(未示出)提供包括指向传送包的指针并指示该传送包长度的1矢量。此外,路径702、703的FIFO缓冲区被提供有与具有最优传送包尺寸或可能更小尺寸的传送包有关的1矢量。这使得路径702、703,尤其是相关的发送接口 707、711能够访问(整个或部分)数据段。这提供了用于在所选路径702、703的逻辑连接上进行传输的至多具有所选路径已确定的最优传送包尺寸的传送包中的(整个或部分)数据段。
[0175]在步骤S8处,确定是否已经到达数据段的末尾。基于肯定的确定,该操作返回至步骤S2,在此可以检索并处理下一个数据段。基于否定的确定,该操作则返回至步骤S4。这里,对该数据段中的下一部分再次执行步骤S4至S7。
[0176]如果步骤S4识别出同一个路径702、703仍然具有最大数据需求,则创建针对该数据段中长度等于(或可能小于)该路径702、703的OTPS值的下一部分的1矢量(以及传送包)C3OTPS的值通常不会在同一个路径702、703的连续传送包之间变化,即使该情况可能会偶尔发生。
[0177]如果步骤S4识别出相对路径702、703现具有最大数据需求,则创建针对该数据段中长度等于(或可能小于)该相对路径702、703的OTPS值的下一部分的1矢量(以及传送包)ο该下一个传送包的大小取决于不同的OPTS参数(用于相对路径的OPTS参数)的值,因此通常与在先传送包的大小不同。
[0178]对于长度大于在步骤S5处所获取的OPTS参数的值的数据段,当首次处理该数据段时,该数据段的传输可以发生在两个不同的路径702、703上。这并不是说该数据段可同时在两个路径上传输。相反地,该数据区段的不同部分可以在不同的路径702、703上传输。
[0179]现将参照图9来描述分派器704将缓冲区1矢量阵列101转换成传送包1矢量阵列102的操作。
[0180]该操作开始于步骤SI。在步骤S2处,矢量料参数被初始化为O。同样,数据段的长度被设置为变量X的值。另外,该数据段在缓冲区中的起始存储器地址被设置为变量Y的值。
[0181]之后在步骤S3处开始处理该数据区段。用于路径702、703(这是在图7中的步骤S4处所选择的路径)的OPTS参数的值已被获取,特别地是通过图7中的步骤S5的行为来获取。在步骤S3处,确定该数据段长度X的值是否小于或等于所获取的OTPS参数的值。如果该数据段长度X小于或等于OTPS参数的值,则这指示整个数据段可置于一个传送包中。基于这个确定,在步骤S4处创建一个1矢量。该矢量被创建为具有数值等于参数Y值的起始存储器地址(指针)。该矢量具有长度字段,该长度字段包括等于X的值的长度参数,该长度参数指示了该数据段的长度。随后,1矢量i被提供给相关发送接口707、711的FIFO缓冲区。那么,尽管物理数据仍保留在缓冲区内该物理数据的原始位置(即被分派器704处理之前的位置)中,但该1矢量组成了传送包。在步骤S4中创建1矢量i并且将该1矢量提供给FIFO缓冲区之后,该操作在步骤S5处结束。
[0182]如果在步骤S3处确定该数据区段长度X大于OTPS参数的值,则该操作进行至步骤S6。这里,分派器704创建1矢量i。这里,1矢量i被设置有值等于参数Y的起始存储器地址(指针)。矢量i的长度等于OTPS参数的值。因此,步骤S6涉及创建一指向长度等于最优传送包大小且起始处具有还未被处理的起始地址的数据的1矢量。随后,该1矢量i被提供给相关发送接口707、711的FIFO缓冲区。那么,尽管物理数据仍保留在缓冲区中该物理数据的原始位置(即被分派器704处理之前的位置)中,但该1矢量组成了传送包。
[0183]步骤S7后,将起始存储器地址参数Y的值增加OTPS参数的值。这将使起始存储器地址移动以指向在步骤S6中创建的由1矢量i指示的数据之后紧接的数据起始处。
[0184]步骤S7后,在步骤S8处将该数据段长度参数X的值减小OTPS参数的值。这使得缓冲区长度参数X的值等于仍由1矢量阵列102中的传送包1矢量指示的段数据量。
[0185]在步骤S8之后,在步骤S9处矢量#i被增加。因此,当在步骤S6或步骤S4处相继创建矢量时,这会涉及更大的矢量数量。
[0186]可以理解的是,在步骤S3处的检查导致由步骤S6至S9形成的循环被执行直到保留在缓冲区中的数据量小于或等于OTPS参数的值,此时剩余的数据在步骤S4处被提供至最终1矢量i中。
[0187]根据在图7中步骤S4处所做的确定,在步骤S4和S6处创建的用于同一个数据段的不同部分的1矢量可以被创建为用于路径702、703中的不同部分。同样地,产生的传送包的长度可以不同,这是因为该长度取决于在图7的步骤S5处获取一个或多个路径702、703的OPTS参数时的一个或多个OPTS参数的值,并且因为数据段的最后一部分通常比OTPS参数的值更短。因此,产生的1矢量阵列的传送包可以具有多个不同的长度。
[0188]产生的传送包1矢量阵列102之后被提供给一个或多个相关路径702、703的相关发送接口 707、711的一个或多个FIFO缓冲区。根据在图7的步骤S4处对哪个路径具有最大数据需求所做的确定,传送包1矢量阵列中的不同的1矢量可以包含在不同传输接口 707、711的不同FIFO缓冲区中。随后,一个或多个传输接口 707、711使用其各自FIFO缓冲区中的1矢量来从数据缓冲区704中检索该数据段的部分(传送包),并且将该数据段的部分通过各个路径702、703所提供的逻辑连接进行传输。
[0189]当发送接口707、711已经准备好在下一个逻辑连接上传输数据时,发送接口 707、711在其FIFO缓冲区中查找下一个1矢量。从该1矢量中提取待传输数据开始处的数据缓冲区704的存储器地址,并且提取相关的传送包长度。发送接口 707、711之后从数据缓冲区704中提取相应的数据,并且通过发送接口的路径702、703上的下一个逻辑连接传输该数据。一旦发送接口 707、711接收到了对所述传送包的确认,便通知分派器704使得数据缓冲区中对应的存储器可以被重新配置。
[0190]参照图8和9所描述的1矢量阵列的转换导致在无需进行不必要的数据拷贝的情况下发送至少某些具有期望长度(等于NTS参数值)的传送包。这可以实现的原因在于,传送包1矢量阵列102中的1矢量包括直接涉及传送包的地址和长度信息。因此,存储器读写操作的次数被最小化,同时使得将输入数据接收至本地桥3中以及将期望长度的传送包发送至远程桥4的过程具有较高的灵活性。当然,某些传送包被创建为长度小于NTS参数的值。
[0191]为了对经由路径702、703的数据流进行优化,每个发送接口的1矢量长度应该等于有效逻辑连接数量乘以每个有效逻辑连接的RWS。长度大于该值的任何1矢量将需要多个逻辑连接,该多个逻辑连接在该1矢量可以被释放并且另一个1矢量被载入之前可以被使用两次以上。这将使有效逻辑连接不传输数据,从而会因载入新的1矢量数据之前的延时而导致低效和性能的损失。以类似的方式,过小的1矢量长度将具有类似但更不显著的效果。
[0192]熟悉TCP/IP协议工作的人员可以理解的是,同时被用于在桥3、4之间传送数据的多个逻辑连接12-1?12-n中的每一个可以具有互不相同的RWS参数的值,并且该值可以随着数据传送过程的进行而发生变化。接收器4基于数据包丢失率、包括可用存储器、斜升大小设置以及最大RWS大小设置的系统限制来确定用于逻辑连接的RWS参数的值。此外,根据Al模块707、711所检测到的网络情况,逻辑连接的数量也可以响应于延时或任何其他网络事件而发生变化。
[0193]现将对图10中的操作进行描述。图10的操作由本地桥3的发送接口707、711来执行。图10的操作导致网络有效载荷包的创建和传输,该网络有效载荷包具有提供路径702、703的良好(可能是最大)性能的尺寸(长度)。这可以基于分段的输入数据来实现,其中被接收为输入数据的数据段的长度是变化的。
[0194]图10的操作由发送接口707、711中的每一个执行。此外,该操作由独立于另一发送接口的一个发送接口 707、711执行。每个发送接口 707、711在其FIFO缓冲区中具有不同的传送包,并且传输接口可以具有不同的OTPS参数。
[0195]该操作开始于步骤SI。在步骤S2处,通过使用来自与所讨论路径702、703相关的逻辑连接的代表性样本TCP接收窗口大小(Receive Window Size,RWS)来计算初始NTS。该初始NTS连同有效逻辑连接的数量一起通过常规方法获得。
[0196]在步骤S3处,获得最优包传送大小参数(Packet Transfer Size Parameter,OPTS)。该参数的计算需考虑物理路径上的实际传输情况,并且在下文参照图11对该参数进行阐释。最优包传送大小参数涉及根据实时地或近乎实时地测量到的路径5、702、703的性能所确定的网络有效载荷包的理想大小。
[0197]TCP RWS参数的值偶尔会发生变化,并且变化的频率取决于一个或多个物理网络路径的稳定性。TCP协议内的一个功能试图将TCP RWS参数的值增加为自身程序一部分,以提高数据传送过程的效率。然而,如果根据TCP协议的发送器操作在传输中遇到丢失包或超时,则会减小TCP RWS参数的值。这有助于提高传输过程的可靠性。因此,传递的用于在TCP协议下传输的传送包的大小针对路径和TCP RWS参数的值进行优化,这对于桥3、4之间的传送的整体效率是重要的。最优包传送大小(OPTS)参数的值也会根据路径702、703的情况和稳定性发生变化。典型地,路径702、703的OPTS参数的值不会对每个传送包发生变化,但是可能会平均每几十、几百或几千个传送包发生变化,这取决于在物理路径上检测到的相关变化的发生频率。下文将参照图11对用于路径702、703的OTPS参数的值的计算进行描述。
[0198]再次参照图10,在步骤S4处计算了TCPRWS参数和OPTS参数中的最小值。该最小值为这些数值中的最小(最低)值。在步骤S4处计算的最小值提供了网络传送大小(NetworkTransfer Size,NTS)参数的值。虽然在某些情况下(特别地在TCP RWS参数的值小于OPTS参数的值的情况下),该参数的值可以由TCP RWS参数表示,但该参数并不是TCP参数。
[0199]在步骤S5处,从FIFO缓冲区中获取下一个可用的传送包,并且该传送包之后将作为当前传送包进行处理。该包的大小已经预先通过前述过程确定,并且被包括在组成与该传送包相关联的元数据的10矢量中。
[0200]在步骤S6处,将当前传送包的大小与在步骤S4中计算的NTS参数的值进行比较。如果传送包的大小大于或等于NTS值,则该传送包被标记为网络有效载荷包并且在步骤S7处作为网络有效载荷包进行传输。
[0201]在步骤S8处,对涉及缓冲区中下一个传送包的10矢量进行检查,并且指出该下一个传送包的大小。之后确定将缓冲区中的下一个传送包添加至现有包是否会超过NTS参数的值。如果超过该NTS参数值,即如果当前传送包和下一个传送包的大小(长度)总和超过TCP RWS参数和OPTS参数中的最小值,则当前传送包被标记为网络有效载荷包并且在步骤S7处作为网络有效载荷包被传输。这里,下一个传送包还没有包含在该传送包中。
[0202]如果将两个传送包连接在一起没有超过NTS参数的值,则该操作继续至步骤S9。这里,下一个传送包被采用并且与前一个包连接或添加至前一个包中,以形成连接的传送包。该连接的传送包之后在执行步骤S6和步骤S8时被视为单个传送包。当然,连接的传送包具有多于一个的报头。该连接的传送包的长度等于所包含的传送包的有效载荷的长度加上所包含的传送包的报头的长度。
[0203]当在步骤S9处已经创建了连接的传送包时,在步骤S5处按照与上述相同的方式将该连接的传送包作为当前传送包处理。如果加入FIFO缓冲区中的下一个传送包不会导致超过NTS参数的值,则连接的传送包可以变得更大,否则将连接的传送包标记为网络有效载荷包。
[0204]在步骤S7处传输网络有效载荷包之后,该操作返回至步骤S2。在步骤S2和S3处,重新得到相关路径702、703的TCP RWS参数和OPTS参数的值,并且当在步骤S4处确定NTS参数的新值时使用这些值。NTS参数的值可以在步骤S4的连续执行之间发生变化,但是通常不会在连续的网络有效载荷包之间发生变化。
[0205]可以理解的是,步骤S2至S4不必在每次传输网络有效载荷包时都执行。相反地,这些步骤可以按照固定的时间间隔或按照固定数量的网络有效载荷包而被周期性地执行。替代性地,可以仅在确定TCP RWS参数的值已经改变或OPTS参数的值已经改变的情况下才执行上述步骤,如在物理路径发生变化时可能发生,诸如包丢失率的变化、往返时间的变化、包超时参数值的变化、路径下降的变化等。
[0206]步骤S5至S8的结果是对多个网络有效载荷包进行传输,每个网络有效载荷包可以包括来自FIFO缓冲区的一个或多个传送包。此外,这些步骤的执行结果是使得所传输的网络有效载荷包的大小小于或等于TCP RWS参数和OPTS参数中最小的一个。所传输的网络有效载荷包的大小决不能超过TCP RWS参数和OPTS参数中的任一个。
[0207]此外,上述操作可以在无需对来自缓冲区的数据段进行任何重新排序的情况下实现;相反,这些数据段按照其被接收到的顺序被发送至发送接口707、711的FIFO缓冲区,并且以同一顺序或可能以略微不同的顺序在网络有效载荷包中传输。
[0208]现将参照图11对最优包传输大小(OPTS)参数的计算进行描述。图11的操作由本地桥3中的发送人工智能(transmit artificial intelligence,AI)模块709、713执行。图 11的操作由每个发送Al模块709、713执行。此外,该操作由独立于另一发送Al模块709、713的一个发送Al模块709、713执行。每个发送接口 707、713被连接至不同的路径702、703,并且可以在给定时间内对用于不同路径的不同的OPTS参数进行计算。
[0209]该操作开始于步骤SI。在步骤S2处,最大传输大小被设置为OTPS参数的值。首先,最大传输大小的值例如由操作系统定义的最大TCP RWS参数的值所指示的系统约束确定,该系统约束为例如可用存储器和TCP接收窗口大小的最大容许大小。OPTS参数的值可以例如初始被设置为与TCP RWS参数的值相等的最大传输大小。OPTS参数的值可以初始被设置为与用于逻辑连接的TCP RWS参数的总和相等或与逻辑连接数量和TCP RWS参数的乘积相等的最大传输大小。
[0210]在步骤S3处,对路径的性能进行测量。这涉及根据图10所示的操作使用在图11的步骤S2中的最大值设置时的OPTS的值来通过发送接口 707、711传输网络有效载荷包。在测量性能之前允许执行一段时间的传输,以使路径702、703稳定。需要时间使路径稳定,这是因为路径702、703内的中间设备(未示出)和其他因素影响了初始稳定。在允许路径702、703经过一段时间稳定之后,对路径的性能进行测量。
[0211]这里所测量的性能是就吞吐量而言的,例如以字节数每秒的形式。该性能在预定的时间段或预定传送的数据量两者或两者之一内测量。预定的数据量可以以字节数或网络有效载荷包表示。时间段可以以秒或分钟表示。
[0212]在步骤S3之后,在步骤S4处OPTS的值被减小。该减小程度可以是固定量、最大传送大小的分数倍或百分比,或者可以是取决于所测量性能的动态量。例如,在OPTS参数的值为IMB的情况下,OPTS参数的值可以被减小100KB、25%的OPTS或0PTS/2(S卩512KB)。
[0213]在步骤S5处,确定OPTS的值在经过步骤S4的减小之后是否为最小值。该最小值可以是预定的,并且可以采用任何适当的数值。该最小值可以由诸如13-1?13-n之类的存储接口的类型来定义,在光纤信道的情况中为2KB(光纤信道包内的有效载荷大小)。诸如iSCS1、SAS和SCSI之类的其他存储接口协议给出了OPTS参数的不同最小值。形成SAN1、SAN2一部分的存储外围设备的类型规定了 OTPS参数的最小值。例如,磁带设备相较于磁盘驱动器具有截然不同的高速缓存和块大小差异。OPTS的最小值可以例如为比最大OPTS值小一个或两个数量级。本地桥3中的发送接口 707、711之后使用减小的OPTS值来发送网络有效载荷包,并且在步骤S6处对具有该减小的OPTS值的路径的性能进行测量。按照与上文参照步骤S3所描述的方式相同的方式并且在相同的时间段或数据量中完成性能测量。路径的性能测量的开始可以被延迟以允许路径702、703经过一段时间稳定。
[0214]在已对性能进行测量之后,在步骤S7处确定该性能是否被提高。如果在步骤S6处测量的性能大于在前一个测算实例处所测量的性能,则确定性能得到了提高。如果确定性能得到了提高,则该操作返回至步骤S4,在此OPTS的值被再次减小。
[0215]一旦在步骤S7处确定性能没有被提高,则在步骤S8处增加OPTS参数的值。增加的量可以是固定和预定的,或可以是取决于所检测到的性能中的变化的动态量。
[0216]在步骤S8之后,确定OPTS的值是否等于最大值。如果OPTS的值等于最大值,则该值在步骤S4处被减小。如果OPTS的值不是最大值,则在步骤SlO处再次对性能进行测量。之后在步骤Sll处,确定性能是否得到了提高。如果性能已被提高,在增加OPTS的值之后,在步骤S8处该值被再次增加。如果性能没有得到提高,则在步骤S4处减小OPTS的值。
[0217]应当理解的是,图11的操作导致路径5上的数据传输性能的测量,该测量考虑到特定OPTS大小,沿一个方向(增大或减小)改变OPTS的值直到确定性能无需再被提高,之后沿另一个方向(即分别减小或增大)改变OPTS的值。
[0218]一旦达到了最优传送包大小并且当路径5上的情况稳定时,由于OPTS首先被增加之后被减小然后再次被增加等,因而性能将被视作在针对连续测量的提高与下降之间进行交替。
[0219]图11的方法导致在给定时间内提供路径最优性能的OPTS值的提供。此外,该方法的实现考虑了至服务器和外围设备(例如SANjPSAN2)的传送或来自服务器和外围设备的传送的最优化。因此,所优化的是从服务器到外围设备的完整数据路径。此外,上述内容的实现仅基于所测量的性能,而非任何理论的性能或查询的性能。因此,在无需考虑路径情况以及无需做出任何关于在考虑路径情况下如何最佳地传输数据的假设的情况下,所提供的OPTS参数的值是提供了考虑路径情况下的最优性能的值。
[0220]如上所述,路径702、703中的每一个包括多个逻辑连接。路径702、703中的每一个具有物理端口,并且在大多数情况中具有一个以上的端口。这些端口和逻辑连接可以按照上文参照图1至3所描述的内容提供。替代性地,这些端口和逻辑连接可以按照上文参照图6所描述的内容提供。在上述任一种情况下,逻辑连接的数量被选择为使得能够提供在各个路径702、703上的适当的数据传送性能。在图6中方法的情况下,对逻辑连接的数量进行管理以使性能最优。
[0221]第一路径发送器Al模块709执行上文参照图11描述的最优包传送大小计算。因此,第一路径发送器Al模块709计算在考虑到第一路径702上的传输情况下最优的OPTS的值。
[0222]类似地,第二路径发送器Al模块713执行图11的OPTS计算操作,以计算提供在第二路径703上数据通信的最优性能的OPTS值。
[0223]因此,每个发送器Al模块使用其各自路径702、703的测量性能来计算用于在其各自路径702、703上传输数据的参数。
[0224]每个发送器Al模块709、713独立地工作。每个发送器Al模块709、713使用对其可用的所有信息来对各自路径702、703上的数据传输进行优化,该信息包括来自远程桥4的第一路径接收接口 708、712的确认等。
[0225]每个发送器Al模块709、713(通过分派器704的控制)产生将由其各自发送接口
707、711根据发送器Al模块709、713所确定的路径的需求从高速缓存706中获取的数据量(等于OTPS参数的值)。上文已参照图7对此进行了详细地描述。
[0226]一个发送器Al模块709、713独立于另一发送器Al模块709、713工作。因此,一个发送器Al模块709、713无法了解另一发送器Al模块709、713的操作,并且无法了解到在不受另一发送器Al模块709、713控制的路径702、703上传输的数据。此外,每个发送器Al模块709、713根据其路径702、703的情况而独立于另一路径的情况进行操作。
[0227]对每个路径702、703使用不同的发送器Al模块709、713提供了多个优势。
[0228]首先,相较于构造单个发送器Al模块来优化两个独立路径上的数据传输,尤其在考虑路径上存在多个逻辑连接的对应情景下,这能够使发送器Al模块709、713在构造和操作上更简单。这减少了发送器Al模块709、713的硬件需求。
[0229]第二,这使得每个发送器Al模块709、713能够对其路径702、703上的传输情况产生高度响应。如果仅使用单个Al模块,则上述内容可能难以实现。如上所述,由于分派器704根据路径的需求来为路径提供传送包的操作,这个优势更加显著。
[0230]第三,允许使用两个截然不同的路径702、703,然而这样的情况通过使用单个Al模块甚至不可能实现并且肯定非常难以实现。这在需要从诸如笔记本电脑、平板电脑之类的便携式设备传送大量数据的情形中可能特别地有利。在这些情形中,便携式设备中内容的备份或其他传送可以使用两个不同的无线通信路径(诸如WiFi和4G蜂窝),或使用一个该无线通信路径与一个有线通信路径(诸如USB、Firewire、Thunderbolt、以太网等)。
[0231]如果每个发送器Al模块709、713运行在不同的线程上,并且优选地(虽然不是必要的)在不同的处理器内核上,则两个单独的发送器Al模块709、713的工作效率被增强。
[0232]通过对路径中各个元件提供数据的供应不足和供应过度之间良好的平衡,在设备1、6、7和其他设备8、9之间的数据传送的性能可以被最大化。这里使用前瞻性反馈机制来实现,该前瞻性反馈机制将在下文进行描述。由于供应不足可能引起数据流的中断并由此引起性能损失,因此平衡使性能最大化。同样地,过度供应可能导致危险的指令或请求超时,从而降低性能。
[0233]为了有益于理解这个过程,现将在一个示例中解释数据流是如何在模块之间被管理的,在该示例中,如图1所描述并在如7中示出的那样,数据从作为主机并且连接至本地桥3的SAN1经由SAN2提供给连接至远程桥4的存储设备8。
[0234]作为对来自存储设备8、9的需求的响应,合并器/高速缓存705向存储设备8、9提供数据。在高速缓存705中提供了一个或多个水标(water mark)。水标是涉及能够储存在数据高速缓存705中的数据量比例的阈值(高速缓存的容量或高速缓存的大小)。可以通过接收Al模块710、714首先设置一个高水标,例如数据高速缓存705容量的80%。例如,可以将低水标设置为能够储存在数据高速缓存705中的数据量的20 %。如果在给定时间内存在一个以上的连接至高速缓存705的存储设备8、9,则每个设备8、9具有自身的一组独立的高水标和低水标。高速缓存705内的水标中的每一个能够通过Al模块710、714调节。
[0235]有利地,数据高速缓存705的大小是动态配置的。数据高速缓存705的大小可以随着连接至远程桥4的存储设备8、9的数量的变化而变化。即,数据高速缓存705的大小根据远程桥4的需求增加或减小。数据高速缓存705的大小还被控制为使得在考虑到系统情况下的第一路径和第二路径702、703上的数据传送的性能为最优。
[0236]有利地,本地桥中的数据高速缓存706的大小是动态配置的。本地桥3中数据高速缓存706的大小可以随着连接至远程桥4的存储设备8、9的数量以及该存储设备8、9的一个或多个类型的变化而变化。即,数据高速缓存706的大小根据远程桥4的需求增加或减小。数据高速缓存706的大小还被控制为使得在考虑到系统情况下的第一路径和第二路径702、703上的数据传送的性能为最优。如果存在一个以上连接至高速缓存706的主机端口 13,则每个主机端口具有在高速缓存中的自身的一组独立的高水标和低水标。本地桥中数据高速缓存706的数量可以随着连接至远程桥4的存储设备8、9的数量以该存储设备8、9的一个或多个类型的变化而变化。数据高速缓存的相应数量包含在远程桥4中。特别地,存在多个高速缓存705。为了清楚起见,在这里主要对单个高速缓存关系的功能进行阐释,即使也描述了在多个高速缓存系统中的某些操作。
[0237]远程桥4使用关于高速缓存705(或在存在多个高速缓存时关于多个高速缓存)的信息来计算远程桥4的空缺度(hungrine s s)的测量值。特别地,该信息包括高速缓存705中的内部高水标和低水标。该信息还包括数据流出高速缓存705流入设备8、9的速率(排空速度)。如果存在多个有效设备8、9,则信息反馈包括多组高水标和低水标,另外,排空速度信息是所有高速缓存的外部数据流的组合。
[0238]桥4(特别地为接收器Al模块710、714)使用该信息来计算远程桥4的空缺度的测量值,并且特别地计算路径702、703中每一个的空缺度测量值。
[0239]特别地,桥4使用涉及高速缓存705的信息连同关于接收接口708、712内的FIFO缓冲区的状态、路径的一个或多个TCP RWS参数的值以及路径702、703的延时的信息,来计算相对于桥4的路径702、703中的每一个的空缺度的测量值。
[0240]在图12中示出了该内容。在步骤S12.1处,高速缓存705从本地桥3接收数据。在步骤S12.2处,远程桥4对涉及高速缓存705的信息连同关于接收接口 708、712内的FIFO缓冲区的状态、路径的一个或多个TCP RWS参数的值以及路径702、703的延时的信息进行识别。在步骤S12.3处,远程桥4对用于与远程桥4相关的路径702、703中的每一个的空缺参数进行计算,该空缺参数为空缺度的测量值。在步骤12.4处,一个或多个空缺参数被发送至本地桥3。[0241 ]在一个示例中,空缺度被计算如下:
[0242]远程空缺率= A*(TCP RWS)+B*(FIF0状态)+C*(延时)+D*(高速缓存排空速度)*1/米样率。
[0243]其中,A、B、C和D是变量,并且组成权重因数。
[0244]针对每个路径702、703计算的远程空缺率被传输至本地桥3,本地桥3使用该远程空缺率来改变其工作状态,以提高从SAN1到设备8、9的整体路径的性能。
[0245]特别地,桥3使用远程桥4处的路径702、703的远程空缺率连同关于发送接口707、711内FIFO缓冲区的状态和路径702、703的OTPS的值的信息,来计算相对于本地桥3的每个路径702、703的空缺度的测量值。
[0246]特别地,分派器704使用远程桥4处的路径702、703的远程空缺率来计算相对于本地桥3的每个路径702、703的空缺度的测量值。
[0247]在图13中示出了该内容。在步骤S13.1处,来自主机的数据被缓存在高速缓存706中。在步骤S13.2处,对关于发送接口 707、711内FIFO缓冲区的状态和路径702、703的OTPS的值的信息进行识别。在步骤S13.3处,对相对于本地桥3的每个路径702、703的分派器空缺率进行计算,该分派器空缺率为空缺度的测量值。
[0248]在一个示例中,空缺度被计算如下:
[0249]分派器空缺率=G*(FIF0状态)+H*(0TPS)+I*(远程空缺率)*1/采样率。
[0250]其中,G、H和I是变量,并且组成权重因数。
[0251]可以使用NTS参数的值来代替使用TCPRWS参数的值。
[0252 ]同样,可以使用NTS参数的值来代替使用OTPS参数的值。
[0253]在上述内容中,参数FIFO状态指示了储存在相关发送接口707、711中或接收接口
708、712中的FIFO缓冲区内的数据量。
[0254]由此计算的分派器空缺率被用于两个用途。
[0255]第一,分派器704使用该分派器空缺率来确定将下一个传送包提供给哪个路径。这是上述图7中的步骤S4。
[0256]第二,分派器空缺率由本地桥3的高速缓存706使用。高速缓存706使用该分派器空缺率来改变其工作状态使得整个系统的性能最优。
[0257]高速缓存706对通过端口 13-1?13-n流向主机SAN或从主机SAN流出的数据流进行控制,在本示例中端口 13-1?13-n为光纤通道端口(不过这些端口可以被替代为另一个SAN或存储协议接口端口,诸如以太网光纤通道(Fibre Channel over Ethernet,FCoE)、iSCS1、串行SCSI(SAS)、并行SCS1、无限带宽等)或诸如FTP或RESTful之类的基于文件的协议。无论采用哪种协议,数据高速缓存706均包含有高水标和低水标流控制系统,以管理流向主机1、6、7或从主机1、6、7流出的数据流。对流进行管理以提供稳定的数据流供分派器704使用。随着高速缓存状态接近低水标,高速缓存706开始通过端口 13与主机通信,以从主机1、6、7请求更多的命令(以及相关联的数据)。随着高速缓存接近高水标,高速缓存706通过适当的消息和/或状态标志位向主机发信号以停止发送数据。
[0258]特别地,发送Al模块709、713将分派器空缺率提供给输入高速缓存706。高速缓存706在考虑分派器空缺率的情况下动态地调节自身的大小和/或水标。调节旨在提尚性能。在(针对一个或多个路径的)空缺率为高的情况下,低水标被提升,以产生更多的来自主机
1、6、7的数据请求一一图13中的步骤13.4。在(针对一个或多个路径的)空缺率为低的情况下,高水标被降低,以产生较少的来自主机1、6、7的数据请求一一图13中的步骤13.5。当分派器空缺率为高时通过增加高速缓存的大小以及当分派器空缺率为低时通过减小高速缓存的大小可以实现类似的结果。
[0259]如果远程桥4和与之相关联的存储设备8远离(例如几千公里)本地桥3和主机1、6、7,则在需要更多数据的存储设备和将请求发出至主机以发送更多数据的高速缓存706之间的时间延迟可以很长,例如可以超过I秒。在现有技术的系统中,这种情形可能会产生在主机已开始传输下一序列的命令和数据之前将位于桥内的不同缓冲区和高速缓存中的所有数据排空的时间段。
[0260]在本实施例中,通过基于远程桥4所提供的远程空缺率来对数据高速缓存706进行预填充而避免了上述问题。为了对数据高速缓存706进行预填充,分派器空缺率值由发送Al模块709、713基于远程空缺率值来计算,并且分派器空缺率值之后被用于改变数据高速缓存706的大小并修改低水标和高水标的值。例如,当发送Al模块709、713预测高速缓存大小被增加时,低水标被向上移动至超过当前的高速缓存地址指针,以迫使高速缓存开始与主机进行通信来对命令和数据初始化。以类似的方式,当Al模块确定数据速率高于所要求的值时,高速缓存的大小被减小和/或低水标被降低。
[0261]参数A、B、C、D、G、H和I的最优值通过改变这些参数的值直到实现最优性能来确定。
[0262]反馈系统的目的在于使流过系统中所有元件的数据流保持恒定,以使存储设备和主机之间的数据流最大化。在数据路径中的不同元件内存在空闲容量的情况下,反馈系统能够发送肯定的需求,并且可以发送否定的需求以在检测到输出至存储设备的输出数据的速率相对于来自主机的输入数据的速率过低的情况下减缓数据从主机进入的速率。
[0263]尽管在上文中,两个路径702、703被用于传输数据,但在其他实施例中还存在其他路径。在这些实施例中,每个路径具有相应的发送接口、接收接口、发送接口、发送Al模块和接收Al模块。
[0264]除了需要两个或更多个路径的情况,以上参照图3的实施例描述的特征也适用于图1的实施例。这适用于所有特征。
[0265]逻辑连接可以是TCP/IP连接或可以是根据某些其他标准化的或专用的协议的逻辑连接。
[0266]在某些实施例中,上述分派器74、第一Al模块709和第一发送接口707在没有第二Al模块和第二发送接口的情况下使用。在这些实施例中,仅存在一个路径5、702 ο然而,使用多个逻辑连接,并且传送包、网络有效载荷包被创建以提供路径5、702上的最优数据传送。
[0267]形成发送器处或发送器中的数据的数据能够采用任何适当的形式。例如,该数据可以是用于记录在磁带或磁盘上的备份数据。该数据可以是远程复制数据。该数据可以是恢复数据,其用于从数据丢失位置处恢复数据。该数据可以替代性地为来自文件传输协议(File Transmiss1n Protocol,FTP)发送器的基于文件的数据。该数据可以替代性地为来自照相机的数据流,例如HTTP相机流。该数据可以替代性地为单一对象存储数据。以上是非穷举列表。
[0268]尽管上述实施例涉及SAN,但是所述装置和方法可以用在数据从一个节点被传送至另一节点的其他应用中。该装置和方法还可以被应用在使用了其中ACK消息被用于指示成功的数据接收的协议且非TCP/IP协议的系统中,例如使用以太网光纤通道(FC0E)、互联网小型计算机系统接口(Internet Small Computer Systems Interface,iSCSI)或网络附加存储(Network Attached Storage,NAS)技术、标准以太网通信的系统或混合系统。
[0269]此外,虽然上述实施例涉及其中使用ACK消息确认数据的系统,但是该方法可以被用在基于否定确认(Negative Acknowledgement,NACK)消息的系统中。例如,在图3中的步骤S3.12处,桥3的处理器10确定是否已经接收到ACK消息。在基于NACK的实施例中,处理器10可以相反地被配置成确定NACK消息是否已经在预定的时间段内被接收到,如果没有接收到,则使用端口 i继续进行数据传送。
【主权项】
1.一种装置,包括: 第一发送器接口和第二发送器接口( 702、711),每个发送器接口被配置成在各自包含有一个或多个逻辑连接的通信路径(702、703)上发送数据; 第一发送缓冲区和第二发送缓冲区,所述第一发送缓冲区和所述第二发送缓冲区分别构成所述第一发送器接口和所述第二发送器接口的一部分,所述第一发送缓冲区和所述第二发送缓冲区被配置成对在其各自的通信路径上传输的数据包进行储存; 一个或多个路径能力确定模块(709、713),其被配置成确定所述通信路径中的每一个的用于发送数据的能力的测量值; 输入数据缓冲区(706),其被配置成储存数据以提供给所述第一发送缓冲区和所述第二发送缓冲区用于后续传输;以及 数据处理模块(704),其被配置成通过以下方式对确定输入缓冲区中存在用于传输的数据进行响应: 使用所述通信路径所测量的能力和储存在发送缓冲区中的数据量的测量值,来选择所述第一发送器接口和所述第二发送器接口两者之一发送数据;以及 向所述第一发送器接口和所述第二发送器接口中选定的发送器接口的发送缓冲区提供至少一个数据包。2.根据权利要求1所述的装置,其中,所述一个或多个路径能力确定模块(709、713)被配置成测量一个或多个传输参数,并且使用所测量的一个或多个传输参数来确定所述通信路径中的每一个的用于发送数据的能力的测量值。3.根据权利要求2所述的装置,其中,所述一个或多个传输参数包括以下各项中的一项或多项:包丢失率、延时和路径速度。4.根据权利要求2所述的装置,其中,所述一个或多个传输参数至少包括路径速度。5.根据前述权利要求中任一项所述的装置,包括第一路径能力确定模块和第二路径能力确定模块(709、713),每个路径能力确定模块涉及所述通信路径中不同的通信路径。6.根据前述权利要求中任一项所述的装置,其中,所述通信路径中的每一个的用于发送数据的能力的测量值包括每单位时间内所述路径上需要被载入的字节数。7.根据前述权利要求中任一项所述的装置,其中,所述数据处理模块(704)被配置成使用已经在所述通信路径上发送但确认还未被接收到的数据量的测量值,来选择所述第一发送器接口和所述第二发送器接口两者之一发送数据。8.根据权利要求7所述的装置,其中,所述一个或多个路径能力确定模块(709、713)被配置成确定已经在通信路径上发送但确认还未被接收到的数据量。9.根据权利要求7或8所述的装置,其中,所述数据处理模块(704)被配置成根据路径速度和已经在通信路径上发送但确认还未被接收到的数据量来计算路径饱和值,并且使用该路径饱和值选择所述第一发送器接口和所述第二发送器接口两者之一发送数据。10.根据前述权利要求中任一项所述的装置,其中,向所述第一发送器接口和所述第二发送器接口中选定的发送器接口的发送缓冲区提供至少一个数据包包括:提供长度等于或小于对应路径的最优包长度的传送包。11.根据前述权利要求中任一项所述的装置,其中,向所述第一发送器接口和所述第二发送器接口中选定的发送器接口的发送缓冲区提供至少一个数据包包括: 确定所述输入数据缓冲区中的数据段的长度是否超过对应路径的最优包长度; 基于肯定的确定,构成长度等于所述路径的最优包长度的传送包,以用于将该传送包提供给所述第一发送器接口和所述第二发送器接口中选定的发送器接口的发送缓冲区;以及 向所述第一发送器接口和所述第二发送器接口中所选定的发送器接口的发送缓冲区提供所构成的传送包。12.一种方法,包括: 第一发送器接口和第二发送器接口( 702、711)中的每一个在各自包含有一个或多个逻辑连接的通信路径(702、703)上发送数据; 第一发送缓冲区和第二发送缓冲区中的每一个对在其各自的通信路径上传输的数据包进行储存,所述第一发送缓冲区和所述第二发送缓冲区分别构成所述第一发送器接口和所述第二发送器接口的一部分; 一个或多个路径能力确定模块(709、713)对所述通信路径中的每一个的用于发送数据的能力的测量值进行确定; 输入数据缓冲区(706)储存数据以提供给所述第一发送缓冲区和所述第二发送缓冲区用于后续传输;以及 数据处理模块(704)通过以下方式对确定所述输入缓冲区中存在用于传输的数据进行响应: 使用所述通信路径所测量的能力和储存在所述发送缓冲区中的数据量的测量值,来选择所述第一发送器接口和所述第二发送器接口两者之一发送数据;以及 向所述第一发送器接口和所述第二发送器接口中选定的发送器接口的发送缓冲区提供至少一个数据包。13.根据权利要求12所述的方法,包括:所述一个或多个路径能力确定模块(709、713)测量一个或多个传输参数,并且使用所测量的一个或多个传输参数来确定所述通信路径中的每一个的用于发送数据的能力的测量值。14.根据权利要求13所述的方法,其中,所述一个或多个传输参数包括以下各项中的一项或多项:包丢失率、延时和路径速度。15.根据权利要求13所述的方法,其中,所述一个或多个传输参数至少包括路径速度。16.根据权利要求12至15中任一项所述的方法,其中,存在第一路径能力确定模块和第二路径能力确定模块(709、713),每个路径能力确定模块涉及所述通信路径中不同的通信路径。17.根据权利要求12至16中任一项所述的方法,其中,所述通信路径中的每一个的用于发送数据的能力的测量值包括每单位时间内所述路径上需要被载入的字节数。18.根据权利要求12至17中任一项所述的方法,包括:数据处理模块(704)使用已经在所述通信路径上发送但确认还未被接收到的数据量的测量值,来选择所述第一发送器接口和所述第二发送器接口两者之一发送数据。19.根据权利要求18所述的方法,包括:所述一个或多个路径能力确定模块(709、713)确定已经在通信路径上发送但确认还未被接收到的数据量。20.根据权利要求18或19所述的方法,包括:所述数据处理模块(704)根据路径速度和已经在通信路径发送上但确认还未被接收到的数据量来计算路径饱和值,并且使用该路径饱和值来选择所述第一发送器接口和所述第二发送器接口两者之一发送数据。21.根据权利要求12至20中任一项所述的装置,其中,向所述第一发送器接口和所述第二发送器接口中选定的发送器接口的发送缓冲区提供至少一个数据包包括:提供长度等于或小于对应路径的最优包长度的传送包。22.根据权利要求12至21中任一项所述的方法,其中,向所述第一发送器接口和所述第二发送器接口中选定的发送器接口的发送缓冲区提供至少一个数据包包括: 确定所述输入数据缓冲区中的数据段的长度是否超过对应路径的最优包长度; 基于肯定的确定,构成长度等于所述路径的最优包长度的传送包,以用于将该传送包提供给所述第一发送器接口和所述第二发送器接口中选定的发送器接口的发送缓冲区;以及 向所述第一发送器接口和所述第二发送器接口中所选定的发送器接口的发送缓冲区提供所构成的传送包。23.—种根据权利要求12至23中任一项所述的方法,其中,所述方法由桥实现。24.—种包括机器可读指令的计算机程序,所述机器可读指令在由计算装置执行时,使所述计算装置执行权利要求12至23中任一项所述的方法。25.一种装置,该装置具有至少一个处理器和至少一个存储器,该存储器具有储存在其中的计算机可读代码,所述计算机可读代码在被执行时控制所述至少一个处理器执行包括下述内容的方法: 第一发送器接口和第二发送器接口( 702、711)中的每一个在各自包含有一个或多个逻辑连接的通信路径(702、703)上发送数据; 第一发送缓冲区和第二发送缓冲区中的每一个对在其各自的通信路径上传输的数据包进行储存,所述第一发送缓冲区和所述第二发送缓冲区分别构成所述第一发送器接口和所述第二发送器接口的一部分; 一个或多个路径能力确定模块(709、713)对所述通信路径中的每一个的用于发送数据的能力的测量值进行确定; 输入数据缓冲区(706)储存数据以提供给所述第一发送缓冲区和所述第二发送缓冲区的数据用于后续传输;以及 数据处理模块(704)通过以下方式对确定所述输入缓冲区中存在用于传输的数据进行响应: 使用所述通信路径所测量的能力和储存在所述发送缓冲区中的数据量的测量值,来选择所述第一发送器接口和所述第二发送器接口两者之一发送数据;以及 向所述第一发送器接口和所述第二发送器接口中选定的发送器接口的发送缓冲区提供至少一个数据包。26.—种非易失性计算机可读存储介质,其上存储有计算机可读代码,该计算机可读代码在由计算装置执行时,使所述计算装置执行包括下述内容的方法: 第一发送器接口和第二发送器接口( 702、711)中的每一个在各自包含有一个或多个逻辑连接的通信路径(702、703)上发送数据; 第一发送缓冲区和第二发送缓冲区中的每一个对在其各自的通信路径上传输的数据包进行储存,所述第一发送缓冲区和所述第二发送缓冲区分别构成所述第一发送器接口和所述第二发送器接口的一部分; 一个或多个路径能力确定模块(709、713)对所述通信路径中的每一个的用于发送数据的能力的测量值进行确定; 输入数据缓冲区(706)储存数据以提供给所述第一发送缓冲区和所述第二发送缓冲区的数据用于后续传输;以及 数据处理模块(704)通过以下方式对确定所述输入缓冲区中存在数据进行响应: 使用所述通信路径所测量的能力和储存在所述发送缓冲区中的数据量的测量值,来选择所述第一发送器接口和所述第二发送器接口两者之一发送数据;以及 向所述第一发送器接口和所述第二发送器接口中选定的发送器接口的发送缓冲区提供至少一个数据包。
【文档编号】H04L12/825GK105940639SQ201480074608
【公开日】2016年9月14日
【申请日】2014年11月28日
【发明人】保罗·伯吉斯, 大卫·特洛塞尔
【申请人】桥联有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1