专利名称:在发射服务器的应用层使网络传输减速的方法和系统的制作方法
技术领域:
本发明涉及改进的数据处理系统,具体地说,涉及多计算机数据传送的方法和设备。更具体地说,本发明提供一种计算机到计算机数据传送管理的方法和设备。
背景技术:
网络地带宽是需要仔细管理的资源。当许多数据传输一起在网络内多路复用时,即使当发射实体试图超出介入的网络链路的带宽时,网络也必须有效地传递这些数据流,并保持最佳的可能传送质量。从而,在发送实体,例如服务器,和多个目标接收实体,例如一组客户机之间,在分布式数据处理系统内传送数据的情况下,需要解决的一个问题是在管理网络带宽的时候,从服务器向接收器传送数据的方式。更具体地说,该问题可包括控制服务器的在恰当一段时间内,向接收器发送恰当数量的数据的能力。
网络带宽容量通常因接收器而异。从而,在接收器间均分网络带宽,并以相同的速率向所有接收器传送数据的简单网络管理方案将导致一个或多个接收器的带宽容量利用不足或者过度利用。虽然通过利用各种阈限值,可静态地管理数据的传输,但是网络带宽未被有效利用。
其它方案通过在OSI传输层监视带宽利用率,动态地使源实体的数据传输减速。开放系统互连(OSI)参考模型是关于通信和计算机网络协议设备的七层抽象描述,它把网络通信的功能分成一批或一系列层次。传输层的目的是在最终用户之间提供数据的透明传输,从而使上面各层免除关于提供可靠并且节省成本的数据传输的任何关切;TCP/IP(传输控制协议/网际协议)是通常使用的OSI层4协议。虽然在OSI传输层应用带宽控制能够产生有效的带宽利用,但是这些方法都具有一个明显缺陷,因为它们需要替换通常捆绑在多数操作系统内的标准TCP/IP软件。但是,要求用可能影响众多的应用软件的特殊TCP/IP实现对操作系统进行重大修改,以便获得单一软件产品的有效带宽利用目的,并不是许多软件产品的选择。
于是,有利的是在向具有不同网络带宽容量的多个接收器传送数据的服务器内提供一种带宽控制机构,以致带宽控制机构整个包含在单一应用内。
发明内容
提供一种使数据处理系统内的数据传输减速(throttle)的方法、设备、系统和计算机程序产品。在服务器的应用层内接收关于从服务器到客户机的数据传输的信息,服务器的应用层保存关于数据传的输信息以及关于从服务器到客户机的许多近来的数据传输的信息,以便创建关于数据传输的历史信息的滑动窗口。关于数据传输的信息可包括数据传输中的字节数的字节计数,和从服务器的应用层的数据传输的近似传输时间。响应从服务器到客户机的所述许多近来的数据传输的平均数据传输速率会超过数据传输速率阈限参数的确定,在服务器的应用层内,自服务器的应用层的数据传输被延迟与计算的延迟时间值近似相等的时间量。响应从服务器到客户机的所述许多近来的数据传输的平均数据传输速率并不超过数据传输速率阈限参数的确定,数据传输被释放,以便在不使自服务器的应用层的数据传输被延迟与计算的延迟时间值近似相等的时间量的情况下执行数据传输。
数据传输信息也可和关于从服务器到多个客户机的许多近来的数据传输的信息一起被保存在服务器的应用层内。即使响应从服务器到客户机的所述许多近来的数据传输的平均数据传输速率会超过数据传输速率阈限参数的确定,数据传输未被延迟与计算的延迟时间值近似相等的时间量,响应从服务器到多个客户机的所述许多近来的数据传输的平均集合(aggregate)数据传输速率会超过集合数据传输速率阈限参数的确定,在服务器的应用层内,自服务器的应用层的数据传输可被延迟与计算的延迟时间值近似相等的时间量。
在附加权利要求中陈述了本发明特有的新特征。结合附图,参考下面的详细说明,将更好地理解发明本身,其它目的及其优点,其中
图1A描述均可实现本发明的数据处理系统的典型网络;
图1B描述可用在其中可实现本发明的数据处理系统中的典型计算机体系结构;
图2是表示利用包含在中央服务器的应用层内的带宽控制,支持向数据处理系统内的多个接收器的数据分组的传输的中央处理器的方框图3是表示基于每个接收器管理输出数据分组的带宽的带宽控制模块的方框图4是表示在应用层内的带宽控制模块中,控制各个数据分组的数据传输速率的一般化进程的流程图5是一对条形图,以图形方式描述时间线内的数据传输历史,其中数据传输历史反映通过特定于接收器的数据流以及集合数据流宣称的带宽控制,集合数据流代表从服务器发送给多个数据接收器的特定于接收器的数据流的组合;
图6是表示计算将应用于接收的数据分组,以便比起当前的数据传输历史,降低平均数据传输速率的延迟时间的进程的流程图7是表示计算将相对于当前数据分组应用的,以便延迟当前数据传输的延迟时间的进程的流程图8图解说明沿着时间线的一组时间点,所述一组时间点表示不活动阈限时间值与各种数据传输之间的关系;
图9图解说明沿着时间线的一组时间点,所述一组时间点表示计划的发送时间值与延迟时间之间的关系;
图10是表示根据本发明的实施例的多线程机构的方框图,所述多线程机构用于利用服务器的应用层内的带宽控制模块中的集中数据缓冲器,使数据流减速;
图11是表示根据本发明的实施例的多线程机构的方框图,所述多线程机构利用服务器的应用层内的带宽控制模块中的与按接收器的分组延迟线程相关的多分组缓冲器,使数据流减速;
图12是表示带宽控制模块用于监视数据传输历史的一些参数和数据结构的方框图。
具体实施例方式
一般来说,可包含或涉及本发明的设备包括各种数据处理技术。于是,作为背景,在更详细地描述本发明之前,先说明分布式数据处理系统内的硬件和软件组件的典型组织。
现在参见附图,图1A描述数据处理系统的典型网络,每个数据处理系统都可实现本发明的一部分。分布式数据处理系统100包含网络101,网络101是用于提供在分布式数据处理系统100内连接在一起的各种设备和计算机之间的通信链路的介质。网络101可包括永久连接,例如电线或光缆,或者通过电话通信或无线通信产生的临时连接。在描述的例子中,服务器102和服务器103连同存储单元104一起与网络101连接。另外,客户机105-107也与网络101连接。客户机10-107和服务器102-103可由各种计算设备代表,例如大型机、个人计算机、个人数字助手(PDA)等。分布式数据处理系统100可包括未示出的另外的服务器、客户机、路由器、其它设备和对等体系结构。
在描述的例子中,分布式数据处理系统100可包括具有代表网络和网关的全球集合的网络101的因特网,所述网络和网关使用各种协议来相互通信,例如轻型目录访问协议(LDAP),传输控制协议/网际协议(TCP/IP),超文本传送协议(HTTP),无线应用协议(WAP)等。当然,分布式数据处理系统100还可包括许多不同类型的网络,例如企业内部网,局域网(LAN)或广域网(WAN)。例如,服务器102直接支持网络109和客户机110;网络109包括无线通信链路。具有网络能力的电话机111和PDA 112能够利用适当的技术,例如通过允许创建所谓的个人区域网(PAN)或个人ad-hoc网的蓝牙无线技术或Wi-Fi技术(IEEE 802.11),跨越无线链路113在它们之间直接传送数据。电话机111通过无线链路114与网络109连接,PDA 113通过无线链路115与网络109连接。按照类似的方式,PDA 113能够通过无线链路向PDA107传送数据。
本发明可在各种硬件平台上实现;图1A只是异质计算环境的一个例子,而不是对本发明的结构限制。
现在参见图1B,图中描述了其中可实现本发明的数据处理系统,例如图1A中所示的数据处理系统的典型计算机体系结构。数据处理系统120包含与内部系统总线123连接的一个或多个中央处理器(CPU)122,内部系统总线123互连随机存取存储器(RAM)124,只读存储器126,和输入/输出适配器128,输入/输出适配器128支持各种I/O设备,例如打印机130、磁盘机132或者未示出的其它设备,例如音频输出系统等。系统总线123还连接提供对通信链路136的访问的通信适配器134。用户接口适配器148连接各种用户设备,例如键盘140和鼠标142,或者未示出的其它设备,例如触摸屏,铁笔,麦克风等。显示适配器144连接系统总线123和显示设备146。
本领域的普通技术人员会认识到图1B中的硬件可随着系统实现而变化。例如,系统可具有一个或多个处理器,比如IntelPentium处理器和数字信号处理器(DSP),和一种或多种易失性及非易失性存储器。除了图1B中所描述的硬件或者代替图1B中描述的硬件,可以使用其它外转设备。描述的例子并不是对本发明的结构限制。
除了能够在各种硬件平台上实现之外,本发明还可在各种软件环境中实现。典型的操作系统可被用于控制每个数据处理系统内的程序执行。例如,一个设备可运行Unix操作系统,而另一设备包含简单的Java运行时环境。代表性的计算机平台可包括浏览器,所述浏览器是公知的应用软件,用于访问各种格式的超文本文档,例如图形文件,字处理文件,可扩展的置标语言(XML),超文本置标语言(HTML),手持设备置标语言(HDML),无线置标语言(WML),和各种其它格式及类型的文件。
本发明可在各种硬件和软件平台上实现,如上参考图1A和图1B所述。更具体地说,虽然,本发明目的在于一种改进的数据处理环境,用于降低从中央服务器或者第一系统、装置或设备,比如图1A中所示的服务器103,到多个接收器或者一组系统、装置或设备,比如客户机105-107和客户机110-112的单播传输的频率,即使各个接收器的网络带宽容量可能发生变化,也不会使任何单个接收器的网络带宽容量过载或者利用不足,也不会使中央服务器的集合网络带宽容量过载或利用不足。下面参考剩余的附图,更详细地说明本发明的各个实施例。
现在参考图2,方框图描述了根据本发明的利用包含在中央服务器的应用层内的带宽控制,支持向数据处理系统内的多个接收器的数据分组的传输的中央服务器。服务器200通过网络202向数据接收器204-208发送数据分组,数据接收器204-208代表各种客户机设备,例如图1A中所示的客户机设备。
图2图解说明本发明在开放式系统互连(OSI)网络通信模型内工作。OIS参考模型是一种关于通信和计算机网络协议设计的分层抽象描述,它把网络通信的功能分成一系列的层次。每层具有它只使用该层以下的功能,并且只向该层以上输出功能的性质。实现由一系列的这些层次组成的协议行为的系统被称为协议栈。OSI模型在计算、联网和通信行业内被广泛实现;其主要特征在于由关于一层如何与另一层交互作用,以致一个制造商编写的一层能够与来自另一制造商的一层协同工作的规范规定的各层之间的接合。各层的这种逻辑分离使推断协议栈的行为更为容易,允许设计完善但是高度可靠的协议栈。每一层为下一更高层进行服务,并完成下一较低层的请求。几个OSI层的一种实现常被称为栈,例如TCP/IP栈。
传输层210由较低的OSI层212支持,并支持其它OSI层214。传输层(层4)提供最终用户之间的数据的透明传输,从而使上面的各层免除提供可靠并且节省成本的数据传输的任何关心。路由和转发,以及寻址、网际互连、错误处理、拥塞控制和分组排序是该层的功能。
应用层216(层7)是最高层,它直接与应用进程(applicationprocess)通过界面连接,并为应用进程执行公共应用服务。公共应用服务提供相关的应用进程之间的语义转换。公共应用服务的例子包括虚拟文件、虚拟终端以及作业转移和处理协议。
现有的带宽控制方案一般包含在OSI传输层内;这些方案产生准确的带宽控制率,但是具有显著的缺陷,因为它要求替换捆绑在常见的操作系统内的标准化TCP/IP软件,这可能对许多应用的执行产生不利的影响。
相反,本发明把带宽控制完全包含在应用层内。应用层16接受输出数据分组218,并在把它们作为带宽管制的输出数据分组222传送给较低的OSI层,例如传输层210之前,使输出数据分组218由带宽控制模块210处理。
下面的本发明的例证实施例的说明把带宽控制模块描述成执行各种操作。模块代表完成可配置的一组计算操作的软件或固件例程,子例程,接口,任务,进程(process),过程,函数,面向对象的方法或对象,程序或者子程序。从而,应注意带宽控制模块可包含多个协同工作的模块。
另外,下面的本发明的例证实施例的说明把带宽控制模块描述成完成从包含带宽控制模块的应用层的指定数据分组的传送或传输。但是,应注意在完全依赖于带宽控制的确定恰当延迟时间和/或引入恰当延迟时间的处理延迟的能力的时候,其它应用进程可完成从应用层的指定数据分组的实际传输。
另外,下面的本发明的例证实施例的说明把带宽控制模块描述成在从包含带宽控制模块的应用层的指定数据分级的传送或传输中引入延迟。但是,应注意在完全依赖于带宽控制的确定恰当延迟时间的能力的时候,其它应用进程可完成自应用层的指定数据分组的实际延迟。
现在参见图3,方框图描述了根据本发明,基于每个接收器管理输出数据分组的带宽的带宽控制模块。带宽控制模块302接收数据分组,并根据接收数据分组的目标接收器,带宽控制模块302计算每个数据分组的所需延迟时间值,随后根据计算的延迟时间值,延迟数据分组的任何另外的传送、处理或发射。带宽控制模块302可立即传送一些输出数据分组,而不延迟该数据分组,而其它的输出数据分组可被延迟计算的延迟时间周期。这样,带宽控制模块302把延迟周期插入正被发射给接收器的数据流中。带宽控制模块302计算延迟周期,例如每个接收器的分组延迟计算304-308,并根据反映各个接收器的最大通信带宽容量和/或服务器的最大通信带宽容量的可配置带宽容量参数,基于每个接收器地插入延迟周期,例如每个接收器的分组延迟插入310-314,如下详细所述。
现在参见图4,流程图描述了根据本发明的一个实施例,在应用层内的带宽控制模块中,控制各个数据分组的数据传输速率的一般化进程。该进程从数据分组的接收开始(步骤402),例如在来自应用进程的带宽接收模块。确定接收数据分组的目标接收器(步骤404),计算该数据分组的当前所需的延迟周期(步骤406)。如果计算的延迟周期大于0(步骤408),那么该数据分组的传送被延迟和计算的延迟周期近似相等的一段时间(步骤410)。如果在步骤408确定不需要延迟周期,那么该数据分组被释放,而不被根据计算的时间延迟周期被特别延迟。在该数据分组的其它处理已被延迟之后,或者在数据分组未被更多延迟即被释放之后,那么数据分组从应用层(步骤412)转送到传输层,从而结束该进程。
现在参见图5,一对条形形表示了根据本发明的时间线内的数据传输历史,其中数据传输历史反映通过特定于接收器的数据流以及集合数据流宣称的带宽控制,集合数据流代表从服务器发送给多个数据接收器的特定于接收器的数据流的组合。如前所述,服务器的应用层内的带宽控制模块计算延迟周期,并根据反映各个接收器的最大通信带宽容量和/或服务器的最大通信带宽容量的可配置带宽容量参数,基于每个接收器地插入延迟周期。通过记录每个接收器的接收器特有的数据传输历史,同时还记录所有接收器内,所有数据传输的集合数据传输历史,完成带宽控制;这些数据传输历史的记录可被表示成数据传输的一组滑动窗口。
例如,接收器特有的数据传输历史502表示以单一数据接收器名义执行的数据传输的滑动窗口;每个数据接收器具有对应的数据传输历史。集合数据传输历史504代表以所有数据接收器名义执行的数据传输,以从服务器到多个数据接收器的所有数据发射的滑动窗口。
接收器特有的数据传输历史502中的每个条目代表特定时间周期内,到一个数据接收器的单一数据传输;换句话说,条形图502内的每一条代表到单一数据接收器的单一数据传输。集合数据传输历史504中的每个条目代表特定时间周期内,对于任何数据接收器的数据传输;从而,集合数据传输历史504中的连续条目可代表到不同数据接收器的数据传输。
当数据分组被应用层内的带宽控制模块收到时,有关该数据分组的处理的信息被输入恰当的特定接收器的数据传输历史中,还被输入集合数据传输历史中。例如,条506代表恰当的接收器特有数据传输历史内,关于特定数据接收器的最新数据传输,条508代表集合数据传输历史内的该数据传输。最初,把条目加入到数据传输历史中,直到数据传输历史充满条目为止;一旦数据传输历史被充满,那么某一条目被重写,以便为新条目腾出空间。但是,如下更详细所述,有时根据不活动性,清除某一数据传输历史。这样,数据传输历史代表随同新条目不断向前移动的数据传输活动性的滑动时间窗口。
应注意条形图的纵轴被表示成未被定义;例如,条形图中的每一条可代表指定时间周期内,数据传输的许多字节,每个条形图的纵轴可被假定为被不同地比例缩放。还应注意条形图中的每一条代表指定数据传输的历史数据结构内的一个条目;条形图意图描述某一时间周期内的活动,但是条形图内各条的宽度并不描述其间发生指定数据传输的具体时间间隔。从而,可预期的是可按照时间上随机地,并且未间隔相等的时间间隔的方式处理数据分组,如图5中所示。
通过从对操作系统的系统调用获得时间戳记,以便获得所谓的墙钟时刻,数据传输历史中的每个条目具有关于发生相关数据传输的时刻的信息。数据传输历史中的每个条目还具有相对于相关的数据传输应用的延迟时间量的信息,以确保尝试的数据传输不会超出带宽容量参数。另外,数据传输历史中的每个条目具有相关数据传输的发射字节的数目的信息。从而,数据传输历史包含便于计算记录在数据传输历史的条目内的一组数据传输的近似数据传输速率的信息。
接收器特有的数据传输历史包含从服务器的应用层向指定数据接收器进行数据传输的时间的信息,还包含在这些记录的数据传输内发射的数据的数量的信息。通过研究由数据传输历史代表的时间周期内传输的字节的数目,能够对于接收器特有的数据传输历史计算特定数据接收器的平均数据传输速率,即((字节数)/时间量))。
同样地,集合数据传输历史包含从服务器的应用层向任何数据接收器进行数据传输的时间的信息,还包含在这些记录的数据传输内发射的数据的数量的信息。通过研究在该数据传输历史代表的时间周期内传输的字节的数目,能够对于集合数据传输历史,针对所有数据接收器计算在各数据流上的平均集合数据传输速率。
现在参见图6,流程图描述了计算为了降低当前数据传输历史内的平均数据传输速率,将对接收的数据分组应用的延迟时间的进程。在给出图2-5内呈现的本发明的概述的情况下,可更详细地说明本发明的数据传输减速机制;具体地说,图6中所示的进程提供图4中所示的步骤406的更多细节。一般来说,带宽控制模块通过使用上面参考图5简要描述的接收器特有的数据传输历史和集合数据传输历史,使到各个数据接收器的数据传输减速;下面更详细地说明数据传输历史的详细数据结构。
当带宽控制模块收到数据分组时,例如如在图4中的步骤402所示,当前数据分组或者当前数据传输的有关信息,例如当前数据分组中的字节数,以及数据分组将被传输给数据接收器的预期时间的时间戳记被记录在与当前数据分组将被发射给的数据接收器相联系的接收器特有数据传输历史的条目中(步骤602)。接收的数据分组是当前正被处理的数据分组;该数据分组可被描述成当前数据分组,其到恰当数据接收器的可能传输1可被描述成当前数据传输。此时,可假定当前数据分组将被无延迟地立即发射,从而记录的时间戳记只包含当前系统时间。
对于恰当数据接收器的接收器特有数据传输历史(包括当前数据分组),计算恰当数据接收器,即当前数据分组随后将被发射给的数据接收器的平均数据传输速率(步骤604)。如果当前数据分组包含足够数量的数据,那么数据分组的立即传输可能会导致适当数据接收器的最大带宽容量被超出;换句话说,对于数据传输历史内表示的时间周期来说,所传输字节的数目会过大。
从而,比较计算的数据传输速率与和适当数据接收器相关的接收器特有数据传输速率参数(步骤606)。如果计算的数据传输速率超过接收器特有的数据传输速率参数表示的最大阈限(步骤608),那么计算接收器特有的延迟时间(步骤610)。计算的延迟时间是带宽控制模块在传输数据分组之前应等待的时间量。通过延迟当前数据分组的传输,在适当的数据接收器的接收器特有数据传输历史内表示的时间量会被增大或延长,从而降低适当数据接收器的平均数据传输速率。
但是,除了任何数据接收器的带宽容量之外,本发明还关于服务器的带宽容量,管理数据传输速率。从而,除了确保接收器特有的平均数据传输速率不超过适当数据接收器的最大通信带宽容量之外,带宽控制模块还需要确保集合平均数据传输速率不超过服务器的最大通信带宽容量。如果根据在步骤610计算的接收器特有延迟时间延迟当前数据分组,并且随后将其传输给适当的数据接收器,那么即使没有超过适当数据接收器的最大通信带宽容量,也有可能超过了服务器的最大通信带宽容量。从而,必须关于集合平均数据传输速率处理当前数据分组,以检查当前数据分组是否必须被延迟更大的延迟时间,以便保证不超过服务器的最大通信带宽容量;关于集合平均数据传输速率处理当前数据分组的该组步骤,即如下所述,可并行于步骤602-610或者在步骤602-610之前执行,在步骤602-610中,关于接收器特有的平均数据传输速率处理当前数据分组。
当前数据传输的当前数据分组的有关信息,例如当前数据分组中的字节数和数据分组将被传输给数据接收器的预期时间的时间戳记被记录在集合数据传输历史的条目中(步骤612);步骤612的时间戳记规定为和在步骤602记录的时间戳记相同。
包括当前数据分组,在集合数据传输历史内计算服务器的平均数据传输速率(步骤614)。如果当前数据分组包含足够数量的数据,那么数据分组的立即传输可能会导致服务器的最大带宽容量被超过;换句话说,对于在数据传输历史内表示的时间周期来说,所传送字节的数目过大。从而,比较计算的数据传输速率与表示服务器的最大集合数据传输速率的集合数据传输速率参数(步骤616)。如果计算的数据传输速率超过集合数据传输速率参数表示的最大阈限(步骤618),那么计算集合延迟时间(步骤620)。计算的延迟时间是在传输数据分组之前,带宽控制模块应等待的时间量,以致通过延迟当前数据分组的传输,在集合数据传输历史内表示的时间量会被增大或延长,从而降低服务器的平均数据传输速率。
计算的集合延迟时间和计算的接收器特有延迟时间很可能不相等。为了在确保适当数据接收器的最大通信带宽容量不被超过的时候,还确保服务器的最大通信带宽容量不被超过,当前数据分组必须被延迟更大的计算延迟时间,无论是哪一个。从而,选择更大的计算延迟时间(步骤622),并根据需要调整数据传输历史,以反映在等待选择的延迟时间之后,将发射当前数据分组的预期时间(步骤624);由于当前数据分组的预期发射时间先前被记录为立即发生,因此如果当前数据分组将被延迟选择的延迟时间,那么在数据传输历史内,必须据此更新当前数据分组的预期发射时间。选择的延迟时间是在图4步骤406-410内使用的计算延迟时间,并结束计算适当延迟时间的进程。
现在参见图7,流程图描述计算为了延迟当前数据分组,将对当前数据分组应用的延迟时间的进程。图7中所示的进程可以和接收器特有数据传输历史或者集合数据传输历史一起使用,取决于使用哪个数据传输历史来抽取信息。从而,图7中所示的进程提供图6中的步骤610和步骤620的更多细节。
通过以表示当前系统时间的时间戳记值的形式,例如通过对操作系统的系统调用,获得当前数据分组的到达时间值(步骤702),开始该进程。随后从数据传输历史取回前一数据分组的发射时间,作为最后发送值(步骤704)。
随后根据服务器发送的任何数据分组的最大分组大小,以及根据与数据传输历史相关的最大数据传输速率,计算不活动阈限时间值(步骤706)。下面参考图8更详细地说明不活动阈限时间值。如果到达时间值和最后发送时间值之间的差异大于不活动阈限时间值(步骤708),那么除了已被记录在数据传输历史内的当前数据传输之外,清除数据传输历史(步骤710);否则,如果在步骤708,所述差异小于不活动阈限时间值,那么不清除当前的数据传输历史。
通过取回数据传输历史中最陈旧条目的发射时间,获得窗口起点时间值(步骤712);最陈旧条目代表数据传输历史的滑动窗口内的最陈旧数据传输。
随后通过把数据传输历史内的字节总数除以数据传输速率,并把作为结果获得的值与窗口起点时间值相加,计算计划的发送时间值(步骤714)。计划的发送时间值代表可能已以适当的数据传输速率,从服务器传送了记录在数据传输历史内的所有数据分组内的全部字节的假定时刻。就适当的数据传输速率而论,如果图7中的进程正在对特定的数据接收器计算可能的延迟时间,那么在步骤714,接收器特有的最大数据传输速率被用作恰当的数据传输速率;如果图7中的进程正在对服务器的集合数据传送计算可能的延迟时间,那么在步骤714,集合最大数据传输速率被用作适当的数据传输速率。下面参考图9更详细地说明计划的发送时间值与延迟时间之间的关系。
延迟时间值随后被计算为计划的发送时间值与到达时间值之间的差值(步骤716)。确定延迟时间值是否小于0(步骤718);如果是,那么当前数据分组的到达时间在计划的发送时间值之后,当前数据分组可被立即传输而不存在任何更进一步的延迟。延迟时间被重置为0(步骤720),以表示不需要延迟。计划的发送时间值被设置成等于到达时间(步骤722),到达时间近似为可无更多延迟地发射当前数据分组的时刻。计划的发送时间值随后被保存在数据传输历史内的当前数据分组的适当条目中(步骤724),并结束该进程。如果延迟时间值不小于0,那么计划的发送时间值在当前数据分组的到达时间之后;当前数据分组不能被立即传输,需要被延迟由延迟时间值表示的时间量;进程转到步骤724,保存计划的发送时间值,并结束该进程。计算的延迟时间值随后被用作图6的步骤610的接收器特有延迟时间,或者用作图6中步骤620的集合延迟时间。
现在参见图8,沿着时间线的一组时间点描述了不活动阈限时间值和各种数据传输之间的关系。图8图解说明了如上关于图7中的步骤706提及的不活动阈限时间值的重要性。根据服务器发送的任何数据分组的最大分组大小,以及根据与数据传输历史相关的最大数据传输速率,计算不活动阈限时间值。就适当的数据传输速率来说,如果图7中的进程正在关于特定的数据接收器计算可能的延迟时间,那么在步骤706,适当的接收器特有的最大数据传输速率被用作最大数据传输速率;如果图7中的进程正在关于服务器的集合数据传输计算可能的延迟时间,那么在步骤06,集合最大数据传输速率被用作最大数据传输速率。不活动阈限时间值的计算可具有一个乘法比例因数,或者另一方面,该计算可包含其它参数。
不活动阈限时间值代表数据传输历史内的数据传输之间的最小时间间隔,以致带宽控制模块不必过多地考虑后续数据传输的发射时间。换句话说,如果当前数据传输和前一数据传输之间的时间间隔超过不活动阈限时间值,那么当前数据传输的发射很可能不会使平均数据传输速率超过最大数据传输速率。
再次参见图8,前一数据传输的时间点802被表示成在当前数据传输的时间点804之前出现;这两个时间点之间的时间差可被看作过去的时间806。较长的不活动阈限时间值808大于所述过去的时间;这种情况下,当前数据分组的立即传输被认为有可能把数据传输历史的平均数据传输速率增大到超过最大数据传输速率,取决于数据传输历史内数据传输的时间间隔和这些数据传输中的数据量,因为对于将被认为已变得静止不变的平均数据速率来说,过去的时间量并不够。较短的不活动阈限时间值810小于过去的时间;这种情况下,当前数据分组的立即传输被认为不可能把数据传输历史的平均数据传输速率增大到超过最大数据传输速率,无论数据传输历史内的数据传输的时间间隔,以及这些数据传输中的数据量如何,因为对于将被认为已变得静止不变的平均数据传输速率来说,已过去了足够数量的时间。
现在参见图9,沿着时间线的一组时间点描述了计划的发送时间值和延迟时间之间的关系。图9图解说明了如上关于图7中的步骤714提及的计划的发送时间值的重要性。
通过取回数据传输历史中最陈旧条目的发射时间,获得窗口起点时间值902;最陈旧条目代表数据传输历史的滑动窗口内最陈旧的数据传输。以表示当前数据分组到达,供由带宽控制模块处理的系统时间的时间戳记的形式,获得当前数据分组的到达时间值904。
通过把数据传输历史内的字节总数除以数据传输速率,并把作为结果获得的值与窗口起点时间值902相加,计算计划的发送时间值。计划的发送时间值代表可能已以适当的数据传输速率,从服务器传送了记录在数据传输历史内的所有数据分组内的全部字节的假定时刻。图9表示了两种可能的时间点时间点906代表早于到达时间的假定时刻,时间点908代表晚于到达时间的假定时刻。
延迟时间被计算为计划的发送时间值与到达时间值之间的差值。图9中的例子表示了两种可能的计划发送时间值的两种可能延迟时间延迟时间910是负值,因为计划的发送时间值早于到达时间,延迟时间912是正值,因为计划的发送时间值晚于到达时间。
延迟时间910表示在到达时间之前,所有在先的数据传输假设都已被完成的情形;从而,在立即传输当前数据分组之前,当前数据分组不需要被延迟,因为当前数据分组的发射不会导致平均数据传输速度过度利用可用带宽,即,就服务器的集合带宽来说或者就接收器特有的带宽来说(取决于正在计算或考虑何种延迟时间值),不会使关于带宽的最大阈限被超过。
延迟时间912表示在到达时间之前,所有在先的数据传输假设还未被完成的情形;从而,在传输当前数据分组之前,当前数据分组需要被延迟,因为当前数据分组的发射会导致平均数据传输速度过度利用可用带宽,即,就服务器的集合带宽来说或者就接收器特有的带宽来说(取决于正在计算或考虑何种延迟时间值),会使关于带宽的最大阈限被超过。在这种情形下,最后例如在图4的步骤410,根据计算的延迟时间延迟当前数据分组。
在本发明的不同实现中,可在带宽控制模块中实现各种机构来按接收器处理数据流;例如,图10和图11描述根据计算的时间延迟值,管理数据分组的处理的不同多线程机构(multi-threaded mechanism)。但是,这些附图表示了本发明的备选实施例,以便举例说明本发明不依赖于处理单个数据分组的方式地基于每个接收器计算和插入时间延迟;可结合保存和处理输出的数据分组,而不影响本发明的各种机构实现本发明的不同实施例。
现在参见图10,方框图描述了根据本发明的一个实施例,利用服务器的应用层内的带宽控制模块中的集中数据缓冲器,使数据流减速的多线程机构。带宽控制模块1002包含数据分组接收模块1004,当从其它应用进程收到数据分组时,数据分组接收模块1004把数据分组保存到集中数据缓冲器1006中。在图10中所示的例证实施例中,每个数据接收器具有相关的线程,以致在数据接收器和分组延迟线程之间存在一一对应性。在确定接收的数据分组的目标接收器之后,数据分组接收模块1004通过利用包含指向接收的数据分组的指针的输入变量,调用适当的按接收器分组延迟线程,把接收的数据分组的存储位置通知适当的按接收器分组延迟线程,例如线程1008或线程1010。
适当的线程随后确保利用其延迟计算模块及其延迟插入模块,例如在相应线程1008和1010内的延迟计算模块1012和1014及延迟插入模块1016和1018,根据需要延迟数据分组。在根据需要延迟指定数据分组之后,例如通过利用包含指向指定数据分组的指针的输入变量,使适当的按接收器分组延迟线程调用带宽管制数据分组传输模块1020内的例程,适当的按接收器分组延迟线程通知带宽管制数据分组传输模块1020,指定的数据分组随时可以被发射。带宽管制数据分组传输模块1020把数据分组从应用层传输给较低的OSI层,例如传输层。
现在参见图11,方框图描述了根据本发明的一个实施例,利用与服务器的应用层内的带宽控制模块中的按接收器分组延迟线程相关的多个分组缓冲器,使数据流减速的多线程机构。带宽控制模块1102包含数据分组接收接口1104。当从其它应用进程收到数据分组时,在确定接收的数据分组的目标接收器之后,数据分组接收接口1104把数据分组传输给适当的按接收器分组延迟线程,例如线程1106或线程1108;在图11中所示的例证实施例中,每个数据接收器具有相关的线程,以致在数据接收器与分组延迟线程之间存在一一对应关系。通过调用其把接收的数据分组保存到其相应的分组缓冲器,例如分组缓冲器1114或1116中的分组处理模块,例如分组处理模块1110或1112,数据分组接收接口1104把接收的数据分组传送给适当的按接收器分组延迟线程。
适当的线程随后确保利用其延迟计算模块及其延迟插入模块,例如相应线程1106和1108内的延迟计算模块1118和1120及延迟插入模块1122和1124,根据需要延迟数据分组。在根据需要延迟指定的数据分组之后,适当的按接收器分组延迟线程把指定的数据分组传输给带宽管制数据分组传输接口1126。带宽管制数据分组传输接口1126把数据分组从应用层传输到较低的OSI层,比如传输层。
现在参见图12,方框图描述了根据本发明,由带宽控制模块用于监视数据传输历史的一些参数和数据结构。带宽控制模块1202保持每个数据接收器的接收器特有数据传输速率参数1204-1206;换句话说,唯一的数据传输速率参数与每个数据接收器相联系。特定的数据传输速率参数代表当向指定的数据接收器发送数据时,可供服务器使用的最大带宽容量;在备选但是类似的解释中,数据传输速率参数代表对于从服务器到指定数据接收器的数据流,指定的数据接收器可消耗的最大数据速率。带宽控制模块1202还保持集合数据传输速率参数1208,它代表对于到所有数据接收器的全部数据传输,可供服务器使用的最大带宽容量;在备选解释中,集合数据传输速率参数表示在从服务器到数据接收器的所有数据流中,所有数据接收器可消耗的最大数据速率。在授权的系统管理员的控制下,通过定制的管理实用程序,可配置数据传输速率参数。
带宽控制模块1202管理每个数据接收器的接收器特有数据传输历史数据结构1210-1212;换句话说,唯一的数据传输历史数据结构与每个数据接收器相联系。特定的数据传输历史数据结构保存已进行的各个数据传输的有关信息,包括可能正在执行过程中的当前数据传输。从而,接收器特有数据传输历史数据结构包含关于指定数据接收器的数据传输的信息。带宽控制模块1202还管理集合数据传输历史数据结构1214,它包含关于所有数据接收器的数据传输的信息。在授权的系统管理员的控制下,通过定制的管理实用程序,可配置数据传输历史数据结构的大小,即,存储容量或者条目的数目。
每个接收器特有数据传输历史数据结构包含对于指定的数据接收器,发生指定的数据传输的近似时间的有关时间信息;换句话说,每个接收器特有数据传输历史数据结构包含对于在指定数据接收器的数据传输历史内发生的一组数据传输,由数据传输历史覆盖的时间周期内的一组时间值,例如一个数据接收器的发射时间戳记1216,一个不同数据接收器的发射时间戳记1218。同样地,集合数据传输历史数据结构121包含从服务器到任何数据接收器发生的任何数据传输的近似时间的有关时间信息;换句话说,集合数据传输历史数据结构1214包含对于从服务器到所有数据接收器发生的所有数据传输,由数据传输历史覆盖的时间周期内的一组时间值,例如由发射时间戳记1220表示的时间值。发射时间值可保存在任何适当的数据结构中,例如具有相关头部索引指针和尾部索引指针的环形队列。
每个接收器特有数据传输历史数据结构包含对相对于指定数据接收器的指定数据传输应用的近似延迟时间的有关时间信息;换句话说,每个接收器特有数据传输历史数据结构包含对于在指定数据接收器的数据传输历史内发生的一组数据传输,由数据传输历史覆盖的时间周期内的一组延迟时间值,其中每个延迟时间值表示在被释放,以便从应用层传输之前,指定的数据传输被保存在应用层内的时间量,例如关于一个数据接收器的延迟时间1222,和关于一个不同数据接收器的延迟时间1224。同样地,集合数据传输历史数据结构1214包含对从服务器到任何数据接收器的任何数据传输应用的近似延迟时间的有关时间信息;换句话说,集合数据传输历史数据结构1214包含对于从服务器到所有数据接收器发生的所有数据传输,由数据传输历史覆盖的时间周期内的一组延迟时间值,其中每个延迟时间值表示在被释放,以便从应用层传输之前,指定的数据传输被保存在应用层内的时间量,例如由延迟时间1226表示。延迟时间值可被保存在任何适当的数据结构中,例如具有相关头部索引指针和尾部索引指针的环形队列中。
每个接收器特有的数据传输历史数据结构包含对于指定数据接收器,在指定数据传输内传输的字节数的有关信息;换句话说,每个接收器特有的数据传输历史数据结构包含对于指定数据结构,在数据传输历史内发生的一组数据传输,由数据传输历史覆盖的时间周期内的一组字节计数值,其中每个字节计数值表示在从应用层的指定数据传输中的字节的数目,例如关于一个数据接收器的字节计数1228,和关于一个不同数据接收器的字节计数1230。同样地,集合数据传输历史数据结构1214包含在从服务器到任何数据接收器的所有数据传输内传送的字节数的有关信息;换句话说,集合数据传输历史数据结构1214包含对于从服务器到所有数据接收器发生的所有数据传输,在由数据传输历史覆盖的时间周期内的一组字节计数值,其中每个字节计数值表示在从应用层的指定数据传输中的字节的数目,例如由字节计数1232表示。字节计数值可被保存在任何适当的数据结构中,例如具有相关头部索引指针和尾部索引指针的环形队列中。
每个接收器特有的数据传输历史数据结构包含表示在当前数据传输历史内,关于指定数据接收器传送的字节总数的数据值,例如关于一个数据接收器的字节计数1234,和关于一个不同数据接收器的字节计数1236。同样地,集合数据传输历史数据结构1214包含代表在当前数据传输历史内,在从服务器到任何数据接收器的所有数据传输内传送的字节总数的数据值,例如由字节计数1238表示。
表1包含根据本发明一个实施例的顶层函数的伪代码语句,所述顶级函数采用线程睡眠作为在从服务器的应用层的数据分组的传输中注入延迟的机构。在带宽控制模块把当前数据分组从OSI应用层传送给OSI传输层之前,如果需要,那么高级应用函数调用“do_sendPacket_delay”函数,以便在数据分级的处理中注入延迟。
变量“aggregate_senddelay”是包含从服务器到任何数据接收器的最后“N”个数据传输的数据传输历史数据结构;该数据传输历史被用于控制从服务器到数据接收器的集合平均数据传输速率。“aggregate_rate”变量是从服务器到数据接收器的集合最大传输速度或带宽容量。“packet_size”变量是每次从应用层向传输层传递的字节的数目,例如在对TCP API的单一调用中传递的字节的数目。变量“receiver_senddelay”是包含从服务器到特定数据接收器的最后“N”个数据传输的接收器特有数据传输历史数据结构;该数据传输历史被用于控制从服务器到将接收当前数据分组的特定数据接收器的接收器特有平均数据传输速率。
----------------------------------------void do_sendPacket_delay(sendDelay_t**aggregate_senddelay,sendDelay_t**receiver_senddelay,<!-- SIPO <DP n="20"> --><dp n="d20"/>long aggregate_rate,long receiver_rate,long packet_size,short slow_link){struct timeval*aggregate_stime;;struct timeval*receiver_stime;struct timeval*final_stime;;aggregate_stime=sendDelay(aggregate_rate,packet_size,aggregat e_senddelay,slow_link);reveiver_stime=sendDelay(receiver_rate,packet_size,receiver_senddelay,slow_link);final_stime=((receiver_stime->tv_sec>aggregate_stime->tv_sec)‖((receiver_stime->tv_sec==aggregate_stime->tv_sec)&&((receiver_stime->tv_usec>aggregate_stime->tv_usec)))?receiver_stimeaggregate_stime;adjustWindow(*aggregate_senddelay,*receiver_senddelay);if((final_stime->tv_usec>0)‖(final_stime->tv_sec>0)){do_thread_sleep(final_stime)}free(aggregate_stime);<!-- SIPO <DP n="21"> --><dp n="d21"/>free(receiver_stime);}-----------------------------------------表1
在表1中所示的“do_sendPacket_delay”函数中,计算集合延迟时间,以便确保集合数据传输使用比集合最大数据传输速率所规定带宽小的带宽,计算特定于接收器的延迟时间,以确保对特定数据接收器的数据传输(包括当前数据分组的数据传输)采用比接收器特有最大数据传输速率所规定带宽小的带宽。集合延迟时间和特定于接收器的延迟时间中的较大值被用于延迟从OSI应用层到OSI传输层的当前数据分组的传输。
表2包含定义或宣称数据传输历史或数据传输滑动窗口的伪代码语句。
____________________________________________________________
#define MAX_HISTORY_SIZE 128typedef struct_sendDelay{long rate;long newestEntryIndex;/*最新历史条目的索引*/long oldestEntryIndex;/*最旧历史条目的索引*/long bytesInWindow;/*在历史数组中发送的字节的总数*//*历史信息*/double timeSent[MAX_HISTORY_SIZE];long bytesSent[MAX_HISTORY_SIZE];double delayTime[MAX_HISTORY_SIZE];}sendDelay_t;
______________________________________________________________
表2
表3包含“sendDelay”函数的伪代码语句,“sendDelay”函数根据数据传送历史中的数据,计算延迟时间。从“do_sendPacket_delay”函数调用“sendDelay”函数两次一次用于计算集合延迟时间,另一次用于计算特定于接收器的延迟时间。
在某些条件下,数据传送历史内的数据被删除或擦除。当数据传送之间存在长的时间间隔时,产生这些条件之一。由于该算法使用来自前“N”个数据传送的数据,因此数据传送之间的长时间间隔后面可以是未被任何延迟隔开的较长一段时间的数据传送。从而,“slow_link”参数控制该算法将实现的补救传送的数量。根据网络通信量,当“slow_link”参数为TRUE时,长期平均数据传送速率将小于规定的最大数据传送速率。但是,当“slow_link”参数为FALSE时,长期平均数据传送速率将更加接近规定的最大数据传送速率。这样,利用数据流的短期饱和的潜能,均衡长期平均数据传输速率的近似。
______________________________________________________________
sturct timeval*sendDelay(long rate,long packetSize,sendDelay_t**tokenPtr,bool_t slow_link){sendDelay_t *sendDelayPtr;struct timeval *sleepTimeunsigned long seconds,microseconds;double arrivalTime;double delayTime;doubleprojectedSendTime;doublewindowDelayTime;doublestartOfWindow;doubleendOfWindow,lastSend;doubleelapsedTime;/*从窗口的起点到当前时间的时间量*/double threshold;/*把数据记录在条目上,并转换指针。*/sendDelayPtr=(sendDelay_t*)*tokenPtr;delayTime =0.0;<!-- SIPO <DP n="23"> --><dp n="d23"/>sleepTime=mg_calloc(1,sizeof(struct timeval));/*需要分配用于保存信息的结构?*/if(sendDelayPtr==NULL){sendDelayPtr=(sendDelay_t*)mg_calloc(1,sizeof(sendDelay_t));*tokenPtr=sendDelayPtr;}lastSend=sendDelayPtr->timeSent[sendDelayPtr->newestEntryIndex];currenTime(&seconds,&microSeconds);arrivalTime=seconds+microSeconds/1000000.00;if(slow_link)threshold=2*packetSize/rate;elsethreshold=200*packetSize/rate;/*调用者已请求数据传输速率改变或者自从最后的数据传输以<br/>来过去的时间已超过了阈值?当在暂停一段时间之后恢复数据分发<br/>时,会发生第二种情形。*/if((rate!=sendDelayPtr->rate)‖(arrivalTime-lastSend>threshold)){/*是,从而清除所有信息*/memset(sendDelayPtr,0,sizeof(sendDelay_t));sendDelayPtr->newestEntryIndex=MAX-HISTORY-SIZE-1;sendDelayPtr->oldestEntryIndex=0;sendDelayPtr->rate=rate;}startOfWindow=sendDelayPtr->timeSent[sendDelayPtr->oldestEntryIndex];endOfWindow=sendDelayPtr->timeSent[sendDelayPtr->newest<!-- SIPO <DP n="24"> --><dp n="d24"/>EntryIndex];elapsedTime=arrivalTime-startOfWindow;/*我们具有历史信息?*/if(sendDelayPtr->bytesInWindow==0){/*这是第一个条目,从而延迟不是必需的。*/elapsedTime=0.0projectedSendTime =arrivalTime;sleepTime->tv_sec =0;sleepTime->tv_usec =0;}else{/*历史信息存在,从而根据过去的信息和净间隔值计算延迟时间*/windowDelayTime=sendDelayPtr->bytesInWindow/rate;projectedSendTime=windowDelayTime+startOfWindow;delayTime=projectedSendTime-arrivalTime;/*我们在当前的平均数据传输速率之后?*/if(delayTime<=0.00){/*是,从而根据速率值,延迟不是必需的*/projectedSendTime=arrivalTime;delayTime =0.0;sleepTime->tv_sec =0;sleepTime->ty_usec=0;}else{/*否,从而延迟是必需的。*/sleepTime->tv_sec=delayTime;sleepTime->tv_usec=(delayTime-sleepTime->tv_sec)*1000000.00);<!-- SIPO <DP n="25"> --><dp n="d25"/>}}/*存在历史信息的末端*//*在睡眠之前更新历史,以允许其它线程查看它。*/updateHistory(sendDelayPtr,packetSize,proj ectedSendTime,delayTime);return sleeptime;}
_______________________________________________________
表3
表4包含更新数据传输历史,以便移动数据窗口的伪代码语句。
________________________________________________________
void updateHistory(sendDelay_t*sendDelayPtr,long packetSize,double sendTime,double delayTime){long saveBytesSent;/*该例程将管理历史数组中信息的更新。首先,第一索引被分配给最后的条目,最后的索引被设置为0。它使用循环缓冲器来保存历史信息。*//*把第一索引调整到下一逻辑位置。这行得通,因为最初把第一索引设置到最后位置*/sendDelayPtr->newestEntryIndex=(sendDelayPtr->newestEntryIndex+1)%MAX_HISTORY_SIZE;/*从将变成新的第一条目的条目中除去字节*/saveBytesSent=sendDelayPtr->bytesSent[sendDelayPtr->newest<br/>EntryIndex];sendDelayPtr->bytesInWindow-=<!-- SIPO <DP n="26"> --><dp n="d26"/>sendDelayPtr->bytesSent[sendDelayPtr->newestEntryIndex];/*现在保存要发送的当前字节和预期发生数据传输的时间。*//*另外,递增窗口内字节的总数。*/sendDelayPtr->bytesSent[sendDelayPtr->newestEntryIndex]=packetSize;sendDelayPtr->timeSent[sendDelayPtr->newestEntryIndex]=sendTime;sendDelayPtr->delayTime[sendDelayPtr->newestEntryIndex]=delayTime;sendDelayPtr->bytesInWindow+=packetSize;/*需要下述检查,以允许在调整最后的索引之前,数组被填满。当包含数据的数组被创建或者被重置时,bytesSent的值被设置为0。由于0是无效的数字,因此使用它来表示未用的条目。*/ifsaveBytesSent!=0){/*调整最后的索引*/sendDelayPtr->oldestEntryIndex=(sendDelayPtr->newestEntryIndex<br/>+1)%MAX_HISTORY_SIZE;}return;}
__________________________________________________________
表4
表5包含调整数据传输历史的伪代码语句。由于存在由数据传输历史表示的两个竞争滑动窗口,即集合数据传输历史和特定于接收器的数据传输历史,因此需要调整滑动窗口,以致在这两个滑动窗口内反映选择的延迟时间,即计算的集合延迟时间和计算的特定于接收器的延迟时间中较大者的选择。
_________________________________________________________
void<!-- SIPO <DP n="27"> --><dp n="d27"/>adjustWindow(sendDelay_t *aggregate_delay,sendDelay_t*receiver_delay){/**在集合延迟窗口中调整历史信息,以便在接收器窗口中反映可<br/>能的额外延迟。*在接收器延迟窗口中调整历史信息,以便在集合窗口中反映可<br/>能的额外延迟。*/receiver_delay_time=receiver_delay->delayTime[receiver_delay->newestEntryIndex];aggregate_delay_time=aggregate_delay->delayTime[aggregate_delay->newestEntryIndex];if(receiver_delay_time>aggregate_delay_time){aggregate_delay->timeSent[aggregate_delay->newestEntryIndex]+=(receiver_delay_time-aggregate_delay_time);aggregate_delay->delayTime[aggregate_delay->newestEntryIndex]=receiver_delay_time;}if(aggregate_delay_time>receiver_delay_time){receiver_delay->timeSent[receiver_delay->newestEntryIndex]+=(aggregate_delay_time-receiver_delay_time);receiver_delay->delayTime[receiver_delay->newestEntryIndex]=aggregate_delay_time;<!-- SIPO <DP n="28"> --><dp n="d28"/>}return;}
________________________________________________________
表5
鉴于上面提供的本发明的详细说明,本发明的优点应是明显的。现有技术的带宽控制方案一般包含在OSI传输层内;这些方案产生准确的带宽控制速率,但是这些方法具有一个显著的缺陷,因为它们要求替换捆绑在常见的操作系统内的标准化TCP/IP软件,这可能对许多应用的执行产生不利影响。
相反,本发明把带宽控制包含在应用层内,带宽控制模块能够完全从应用层控制带宽利用。带宽控制模块通过利用春中关于在先数据传输的历史信息被保存为信息的时间滑动窗口的特定于接收器的数据传输历史和集合数据传输历史,使到各个数据接收器的数据传输减速。检查数据传输历史中的信息,以确保当前数据传输不会导致最大带宽参数被超过。如果平均数据传输速率会被增大到最大带宽参数规定的阈值之上,那么当前数据分组的数据传输被延迟足够时间,以确保平均数据传输速率不会被增大到最大带宽参数规定的阈值之上。带宽控制模块计算延迟周期,并且按接收器地以及集合地插入延迟周期。按接收器插入延迟周期取决于反映各个接收器的最大通信带宽容量的可配置带宽容量参数,集合插入延迟周期取决于服务器的最大通信带宽容量,从而允许对于到各个数据接收器的数据流,以及对于到所有数据接收器的数据流的集合的带宽控制。在数据分组已被充分延迟之后,如果需要的话,那么带宽控制模块把当前数据分组从应用层传送到传输层,以便发射给数据接收器。
重要的是注意虽然在全功能数据处理系统的环境中描述了本发明,但是本领域的普通技术人员会认识到本发明的进程能够以计算机可读介质中的指令的形式以及各种其它形式分布,与实际用于实现所述分布的信号承载介质的特定类型无关。计算机可读介质的例子包括诸如EPROM、ROM、磁带、纸张、软盘、硬盘驱动器、RAM和CD-ROM之类的介质,以及诸如数字和模块通信链路之类的传输型介质。
方法一般被认为是导致所需结果的自身一致的步骤序列。这些步骤需要物理量的物理处理。通常(不过不是必需),这些物理量采取能够被保存、传输、组合、比较和以其它方式被处理的电信号或磁信号的形式。有时(主要由于一般使用的原因),适宜于把这些信号称为比特、数值、参数、项目、元素、对象、符号、字符、项,数字等。但是,应注意所有这些术语和类似术语与适当的物理量相联系,并且仅仅是应用于这些物理量的便利标记。
出于举例说明的目的,而不意图是详尽地或者局限于公开的实施例,给出了本发明的说明。对于本领域的普通技术人员来说,许多修改和变化是显而易见的。选择了实施例来说明本发明的原理及其实际应用,以便使本领域的其它普通技术人员能够理解本发明,以便实现具有适合于其它预期应用的各种修改的各种实施例。
权利要求
1、一种使数据处理系统内的数据传输减速的方法,所述方法包括
在服务器的应用层内接收关于从服务器到客户机的数据传输的信息;
在服务器的应用层内保存关于数据传输的信息以及关于从服务器到客户机的许多近来的数据传输的信息;和
响应从服务器到客户机的所述许多近来的数据传输的平均数据传输速率可能超过数据传输速率阈限参数的确定,在服务器的应用层内,把自服务器应用层的数据传输延迟与计算的延迟时间值近似相等的时间量。
2、按照权利要求1所述的方法,还包括
响应从服务器到客户机的所述许多近来的数据传输的平均数据传输速率不超过数据传输速率阈限参数的确定,释放数据传输,以便在不把自服务器应用层的数据传输延迟与计算的延迟时间值近似相等的时间量的情况下执行数据传输。
3、按照权利要求1所述的方法,还包括
获得关于数据传输的信息,所述关于数据传输的信息包括数据传输中的字节数的字节计数,和自服务器应用层的数据传输的近似传输时间。
4、按照权利要求1所述的方法,还包括
在服务器的应用层内,保存关于数据传输的信息以及关于从服务器到多个客户机的许多近来的数据传输的信息;和
响应从服务器到所述多个客户机的所述许多近来的数据传输的平均集合数据传输速率可能超过集合数据传输速率阈限参数的确定,在服务器的应用层内,把自服务器应用层的数据传输延迟与计算的延迟时间值近似相等的时间量。
5、按照权利要求4所述的方法,还包括
响应从服务器到所述多个客户机的所述许多近来的数据传输的平均集合数据传输速率不超过集合数据传输速率阈限参数的确定,释放数据传输,以便在不把自服务器应用层的数据传输延迟与计算的延迟时间值近似相等的时间量的情况下执行数据传输。
6、按照权利要求4所述的方法,还包括
利用关于从服务器到客户机的所述许多近来的数据传输的信息,计算第一延迟时间值;
利用关于从服务器到所述多个客户机的所述许多近来的数据传输的信息,计算第二延迟时间值;
根据哪个延迟时间值更大,选择第一延迟时间值或第二延迟时间值,作为延迟来自服务器应用层的数据传输的计算延迟时间值。
7、按照权利要求4所述的方法,还包括
通过多线程进程中的特定线程对数据传输进行另外的处理,所述多线程进程包含用于所述多个客户机中的每个客户机的唯一线程。
8、按照权利要求1所述的方法,其中延迟步骤还包括
执行线程睡眠一定时间,所述一定时间近似等于计算的延迟时间值。
9、一种使数据处理系统内的数据传输减速的设备,所述设备包括
在服务器的应用层内接收关于从服务器到客户机的数据传输的信息的装置;
在服务器的应用层内保存关于数据传输的信息以及关于从服务器到客户机的许多近来的数据传输的信息的装置;和
响应从服务器到客户机的所述许多近来的数据传输的平均数据传输速率可能超过数据传输速率阈限参数的确定,在服务器的应用层内,把自服务器应用层的数据传输延迟与计算的延迟时间值近似相等的时间量的装置。
10、按照权利要求9所述的设备,还包括
响应从服务器到客户机的所述许多近来的数据传输的平均数据传输速率不超过数据传输速率阈限参数的确定,释放数据传输,以便在不把自服务器应用层的数据传输延迟与计算的延迟时间值近似相等的时间量的情况下执行数据传输的装置。
11、按照权利要求9所述的设备,还包括
获得关于数据传输的信息的装置,所述关于数据传输的信息包括数据传输中的字节数的字节计数,和自服务器应用层的数据传输的近似传输时间。
12、按照权利要求9所述的设备,还包括
在服务器的应用层内,保存关于数据传输的信息以及关于从服务器到多个客户机的许多近来的数据传输的信息的装置;和
响应从服务器到所述多个客户机的所述许多近来的数据传输的平均集合数据传输速率可能超过集合数据传输速率阈限参数的确定,在服务器的应用层内,把自服务器应用层的数据传输延迟与计算的延迟时间值近似相等的时间量的装置。
13、按照权利要求12所述的设备,还包括
响应从服务器到所述多个客户机的所述许多近来的数据传输的平均集合数据传输速率不超过集合数据传输速率阈限参数的确定,释放数据传输,以便在不把自服务器应用层的数据传输延迟与计算的延迟时间值近似相等的时间量的情况下执行数据传输的装置。
14、按照权利要求12所述的设备,还包括
利用关于从服务器到客户机的所述许多近来的数据传输的信息,计算第一延迟时间值的装置;
利用关于从服务器到所述多个客户机的所述许多近来的数据传输的信息,计算第二延迟时间值的装置;
根据哪个延迟时间值更大,选择第一延迟时间值或第二延迟时间值,作为延迟来自服务器应用层的数据传输的计算延迟时间值的装置。
15、按照权利要求12所述的设备,还包括
通过多线程进程中的特定线程对数据传输进行另外处理的装置,所述多线程进程包含用于所述多个客户机中的每个客户机的唯一线程。
16、按照权利要求9所述的设备,其中延迟装置还包括
执行线程睡眠一定时间的装置,所述一定时间近似等于计算的延迟时间值。
17、供数据处理系统之用的计算机可读介质上的一种计算机程序产品,用于使数据处理系统内的数据传输减速,所述计算机程序产品包括
在服务器的应用层内接收关于从服务器到客户机的数据传输的信息的装置;
在服务器的应用层内保存关于数据传输的信息以及关于从服务器到客户机的许多近来的数据传输的信息的装置;和
响应从服务器到客户机的所述许多近来的数据传输的平均数据传输速率可能超过数据传输速率阈限参数的确定,在服务器的应用层内,把自服务器应用层的数据传输延迟与计算的延迟时间值近似相等的时间量的装置。
18、按照权利要求17所述的计算机程序产品,还包括
响应从服务器到客户机的所述许多近来的数据传输的平均数据传输速率不超过数据传输速率阈限参数的确定,释放数据传输,以便在不把自服务器应用层的数据传输延迟与计算的延迟时间值近似相等的时间量的情况下执行数据传输的装置。
19、按照权利要求17所述的计算机程序产品,还包括
获得关于数据传输的信息的装置,所述关于数据传输的信息包括数据传输中的字节数的字节计数,和自服务器应用层的数据传输的近似传输时间。
20、按照权利要求17所述的计算机程序产品,还包括
在服务器的应用层内,保存关于数据传输的信息,以及关于从服务器到多个客户机的许多近来的数据传输的信息的装置;和
响应从服务器到所述多个客户机的所述许多近来的数据传输的平均集合数据传输速率可能超过集合数据传输速率阈限参数的确定,在服务器的应用层内,把自服务器应用层的数据传输延迟与计算的延迟时间值近似相等的时间量的装置。
21、按照权利要求20所述的计算机程序产品,还包括
响应从服务器到所述多个客户机的所述许多近来的数据传输的平均集合数据传输速率不超过集合数据传输速率阈限参数的确定,释放数据传输,以便在不把自服务器应用层的数据传输延迟与计算的延迟时间值近似相等的时间量的情况下执行数据传输的装置。
22、按照权利要求20所述的计算机程序产品,还包括
利用关于从服务器到客户机的所述许多近来的数据传输的信息,计算第一延迟时间值的装置;
利用关于从服务器到所述多个客户机的所述许多近来的数据传输的信息,计算第二延迟时间值的装置;
根据哪个延迟时间值更大,选择第一延迟时间值或第二延迟时间值,作为延迟来自服务器应用层的数据传输的计算延迟时间值的装置。
23、按照权利要求20所述的计算机程序产品,还包括
利用多线程进程中的特定线程对数据传输进行另外处理的装置,所述多线程进程包含用于所述多个客户机中的每个客户机的一个唯一线程。
24、按照权利要求17所述的设备,其中延迟装置还包括
执行线程睡眠一定时间的装置,所述一定时间近似等于计算的延迟时间值。
全文摘要
提供一种使数据处理系统内的数据传输减速的方法。在服务器的应用层内接收关于从服务器到客户机的数据传输的信息,服务器的应用层保存关于数据传输的信息以及关于从服务器到客户机的许多近来的数据传输的信息,以便创建关于数据传输的历史信息的滑动窗口。响应从服务器到客户机的所述许多近来的数据传输的平均数据传输速率可能超过数据传输速率阈限参数的确定,在服务器的应用层内,把自服务器应用层的数据传输延迟与计算的延迟时间值近似相等的时间量。
文档编号H04L29/02GK1790969SQ20051012728
公开日2006年6月21日 申请日期2005年12月5日 优先权日2004年12月16日
发明者罗伯特·E.·古泽尔, 杰弗里·M.·阿克瑟曼 申请人:国际商业机器公司