网络设备和业务量整形方法转让专利

申请号 : CN200580023768.X

文献号 : CN1985482B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : T·克柯

申请人 : 诺基亚公司

摘要 :

在宽带接入设备的网络设备中,通过引入除传统上会提供的速率之外的中间速率来改进队列速率的粒度。例如,当业务流需要介于第一10Mbps队列速率和第二5Mbps队列速率之间的中间速率时,业务量整形器中的跳过间隔被配置为根据所述5Mbps速率计算跳过间隔值,而所述特定业务流的每个PDU还会经历覆盖间隔计算的确定:例如以50%的概率,将(用于所述10Mbps速率的)跳过零队列间隔应用于所述PDU,而不是在所述业务量整形器中针对所述PDU计算的跳过间隔值。结果,获得诸如7.5Mbps的中间速率。

权利要求 :

1.一种业务量调度和整形的方法,包括:

在队列中缓冲业务流的分组数据单元PDU的数据块,以便随后向具有端口速率R1的逻辑输出端口进行发送,从所述队列将分组数据单元的数据块读取到调度器,基于速率R1/N和所述分组数据单元的长度,计算对于所述分组数据单元的数据块的队列间隔,其中,N是等于或大于1的整数,所述队列间隔表示在当前分组数据单元之后在下一次从所述队列读取数据块之前将跳过的时隙的数目,以预定的概率,使用预先确定的较短的或为零的队列间隔随机地覆盖所述计算的队列间隔,由此提供介于速率R1和R1/N之间的有效的中间队列速率。

2.如权利要求1所述的方法,其中所述预定的概率为50%。

3.如权利要求1所述的方法,包括

在网络处理器的先前的分类、做标记、监管或业务量管理阶段中生成对于所述分组数据单元的覆盖间隔标记,所述标记以50%的概率随机采取第一状态,将所述覆盖间隔标记传送给所述调度器,

所述随机覆盖步骤包括以下进一步的步骤:在所述调度器中检查所述覆盖间隔标记,如果所述覆盖间隔标记处于第一状态,则使用所述预先确定的较短的或者为零的队列间隔覆盖所述计算的队列间隔,否则使用所计算的队列间隔。

4.如权利要求1或3所述的方法,其中,R1=10Mbps,N=2,R1/N=5Mbps,并且所述中间队列速率为7.5Mbps。

5.一种业务量调度和整形的方法,包括:

在队列中缓冲业务流的分组数据单元PDU的数据块,以便随后向具有端口速率R1的逻辑输出端口进行发送,从所述队列将分组数据单元的第一数据块读取到调度器,确定所述分组数据单元的长度,并且基于速率R1/N和所述分组数据单元的长度,计算对于所述分组数据单元的所述第一数据块的队列间隔,其中,N是等于或大于1的整数,所述队列间隔表示在当前分组数据单元之后在下一次从所述队列读取数据块之前将跳过的时隙的数目,从所述队列中读取所述分组数据单元的后续数据块。

6.一种业务量调度和整形的方法,包括:

在至少两个队列中缓冲至少两个业务流的分组数据单元PDU的数据块,以便随后向具有端口速率R1的逻辑输出端口进行发送,为所述逻辑输出端口分配至少两个动态调度器,

当准备就绪将另一数据块发送给所述输出端口时,选择所述调度器中的具有最高优先级和业务量的一个,以进行发送,从所选调度器的队列集中选择将被服务的下一队列,从等待在所述所选队列中的下一分组数据单元将第一数据块读取到所选调度器,确定所述分组数据单元的长度,并且基于速率R1/N和所确定的所述分组数据单元的长度,计算所述分组数据单元的所述第一数据块的队列间隔,其中,N是等于或大于1的整数,所述队列间隔表示在当前分组数据单元之后在下一次从相同队列读取数据块之前将跳过的时隙的数目,以预先设置的概率,使用预先确定的较短的或为零的队列间隔,随机地覆盖所述计算的队列间隔,由此提供介于速率R1和R1/N之间的有效的中间队列速率,从所述所选队列读取所述分组数据单元的后续数据块。

7.如权利要求6所述的业务量调度和整形的方法,其中所述预先设置的概率为50%。

8.一种网络设备,包括

用于在队列中缓冲业务流的分组数据单元PDU的数据块以便随后向具有端口速率R1的逻辑输出端口进行发送的装置,用于从所述队列将分组数据单元的数据块读取到调度器的装置,基于速率R1/N和所述分组数据单元的长度计算对于所述分组数据单元的所述数据块的队列间隔的装置,其中,N是等于或大于1的整数,所述队列间隔表示在当前分组数据单元之后在下一次从相同队列读取数据块之前将跳过的时隙的数目,以及用于以50%的概率使用预先确定的较短的或为零的队列间隔随机地覆盖所述计算的队列间隔,由此提供介于速率R1和R1/N之间的有效的中间队列速率的装置。

9.如权利要求8所述的网络设备,包括

用于在网络处理器的先前的分类、做标记、监管或流量管理阶段中生成对于所述PDU的覆盖间隔标记的装置,其中所述标记以预先设置的概率随机采取第一状态,用于将所述覆盖间隔标记传送给所述调度器的装置,所述覆盖装置进一步包括:用于在所述调度器中检查所述覆盖间隔标记的装置,用于在所述覆盖间隔标记处于第一状态的条件下使用所述预先确定的较短的或者为零的队列间隔覆盖所述计算的队列间隔的装置,以及用于在所述覆盖间隔标记不处于第一状态的条件下使用所计算的队列间隔的装置。

10.如权利要求9所述的网络设备,其中所述概率为50%。

11.如权利要求8或9所述的网络设备,其中,R1=10Mbps,N=2,R1/N=5Mbps,并且所述中间队列速率为7.5Mbps。

12.如权利要求8到10中的任何一项所述的网络设备,包括:至少两个队列缓冲器,其用于在至少两个队列中缓冲至少两个业务流的分组数据单元的数据块以便随后向具有端口速率R1的逻辑输出端口进行发送,至少两个调度器,一个或多个不同的队列被分配给每一调度器,主调度控制器,其用于在准备就绪将另一数据块发送给所述输出端口时选择所述调度器中的具有最高优先级和业务量的一个以进行发送,所选择的调度器被配置为,从所述被分配给所述调度器的一个或多个不同的队列中选择将被服务的下一队列,并且读取等待在所选队列中的下一分组数据单元的数据块。

13.如权利要求11所述的网络设备,包括:

至少两个队列缓冲器,其用于在至少两个队列中缓冲至少两个业务流的分组数据单元的数据块以便随后向具有端口速率R1的逻辑输出端口进行发送,至少两个调度器,一个或多个不同的队列被分配给每一调度器,主调度控制器,其用于在准备就绪将另一数据块发送给所述输出端口时选择所述调度器中的具有最高优先级和业务量的一个以进行发送,所选择的调度器被配置为,从所述被分配给所述调度器的一个或多个不同的队列中选择将被服务的下一队列,并且读取等待在所选队列中的下一分组数据单元的数据块。

14.如权利要求12所述的网络设备,包括:

用于第一服务质量类型的业务量的第一队列,

用于第二服务质量类型的业务量和第一服务等级类型的业务量的第二队列,用于第三服务质量类型的业务量和第二服务等级类型的业务量的第三队列,用于第四服务质量类型的业务量的第四队列,用于第五服务质量类型的业务量和第三服务等级类型的业务量的第五队列,用于第一和第二队列的第一动态调度器,用于第三队列的第二动态调度器,

用于第四和第五队列的先入先出调度器。

15.如权利要求13所述的网络设备,包括:

用于第一服务质量类型的业务量的第一队列,

用于第二服务质量类型的业务量和第一服务等级类型的业务量的第二队列,用于第三服务质量类型的业务量和第二服务等级类型的业务量的第三队列,用于第四服务质量类型的业务量的第四队列,用于第五服务质量类型的业务量和第三服务等级类型的业务量的第五队列,用于第一和第二队列的第一动态调度器,用于第三队列的第二动态调度器,

用于第四和第五队列的先入先出调度器。

16.如权利要求14所述的网络设备,其特征在于,所述第一服务质量类型的业务量包括恒定比特速率类型的业务量,所述第二服务质量类型的业务量包括实时可变比特速率类型的业务量,所述第三服务质量类型的业务量包括非实时可变比特速率类型的业务量,所述第四服务质量类型的业务量包括非实时可变比特速率类型的业务量,以及所述第五服务质量类型的业务量包括未定比特速率类型的业务量。

17.如权利要求15所述的网络设备,其特征在于,所述第一服务质量类型的业务量包括恒定比特速率类型的业务量,所述第二服务质量类型的业务量包括实时可变比特速率类型的业务量,所述第三服务质量类型的业务量包括非实时可变比特速率类型的业务量,所述第四服务质量类型的业务量包括非实时可变比特速率类型的业务量,以及所述第五服务质量类型的业务量包括未定比特速率类型的业务量。

18.如权利要求14所述的网络设备,其特征在于,所述第一服务等级类型的业务量包括加速转发类型的业务量,所述第二服务等级类型的业务量包括确保转发类型的业务量,以及所述第三服务等级类型的业务量包括缺省转发类型的业务量。

19.如权利要求15所述的网络设备,其特征在于,所述第一服务等级类型的业务量包括加速转发类型的业务量,所述第二服务等级类型的业务量包括确保转发类型的业务量,以及所述第三服务等级类型的业务量包括缺省转发类型的业务量。

20.如权利要求16所述的网络设备,其特征在于,所述第一服务等级类型的业务量包括加速转发类型的业务量,所述第二服务等级类型的业务量包括确保转发类型的业务量,以及所述第三服务等级类型的业务量包括缺省转发类型的业务量。

21.如权利要求17所述的网络设备,其特征在于,所述第一服务等级类型的业务量包括加速转发类型的业务量,所述第二服务等级类型的业务量包括确保转发类型的业务量,以及所述第三服务等级类型的业务量包括缺省转发类型的业务量。

22.一种网络设备,包括

至少两个队列缓冲器,其用于在至少两个队列中缓冲至少两个业务流的分组数据单元PDU的数据块以便随后向具有端口速率R1的逻辑输出端口进行发送,至少两个调度器,一个或多个不同队列被分配给每一调度器,主调度控制器,其用于在准备就绪将另一数据块发送给所述输出端口时选择所述调度器中的具有最高优先级和业务量的一个以进行发送,所选择的调度器被配置为,从被分配给所述调度器的所述一个或多个不同队列中选择将被服务的下一队列,并读取等待在所述所选队列中的下一分组数据单元的第一数据块,计算装置,其用于基于速率R1/N和所述分组数据单元的长度计算对于所述分组数据单元的所述第一数据块的队列间隔,其中,N是等于或大于1的整数,所述队列间隔表示在当前PDU之后在下一次从所述队列读取数据块之前将跳过的时隙的数目,覆盖装置,其用于以预先设置的概率使用预先确定的较短的或为零的队列间隔随机地覆盖所述计算的队列间隔,由此提供介于速率R1和R1/N之间的有效中间队列速率。

23.如权利要求22所述的网络设备,其中所述预先设置的概率为50%。

24.如权利要求22所述的网络设备,包括

用于第一服务质量类型的业务量的第一队列,

用于第二服务质量类型的业务量和第一服务等级类型的业务量的第二队列,用于第三服务质量类型的业务量和第二服务等级类型的业务量的第三队列,用于第四服务质量类型的业务量的第四队列,用于第五服务质量类型的业务量和第三服务等级类型的业务量的第五队列,用于所述第一和第二队列的第一动态调度器,用于所述第三队列的第二动态调度器,

用于所述第四和第五队列的先入先出调度器。

25.如权利要求24所述的网络设备,其中,

所述第一服务质量类型的业务量包括恒定比特速率类型的业务量,所述第二服务质量类型的业务量包括可变比特速率实时类型的业务量,所述第三服务质量类型的业务量包括非实时可变比特速率类型的业务量,所述第四服务质量类型的业务量包括非实时可变比特速率类型的业务量,以及所述第五服务质量类型的业务量包括未定比特速率类型的业务量。

26.如权利要求24所述的网络设备,其中,

所述第一服务等级类的业务量包括加速转发类型的业务量,所述第二服务等级类型的业务量包括确保转发类型的业务量,以及所述第三服务等级类型的业务量包括缺省转发类型的业务量。

27.如权利要求25所述的网络设备,其中,

所述第一服务等级类的业务量包括加速转发类型的业务量,所述第二服务等级类型的业务量包括确保转发类型的业务量,以及所述第三服务等级类型的业务量包括缺省转发类型的业务量。

28.如权利要求24至27中的任何一项所述的网络设备,其中,所述计算装置被设置在所述调度器中的至少一个中,所述计算装置进一步包括,基于针对所述队列速率与所述端口速率的比所提供的有效带宽来计算基本间隔的装置,以及基于所述基本间隔和所述分组数据单元的长度来计算所述队列间隔的比特移位装置。

29.一种数字用户线路接入复用器,包括如权利要求8至28中的任何一项所述的网络设备。

30.一种用于业务量调度和整形的装置,包括:

用于在至少两个队列中缓冲至少两个业务流的分组数据单元PDU的数据块,以便随后向具有端口速率R1的逻辑输出端口进行发送的装置,用于为所述逻辑输出端口分配至少两个动态调度器的装置,用于当准备就绪将另一数据块发送给所述输出端口时,选择所述调度器中的具有最高优先级和业务量的一个,以进行发送的装置,用于从所选调度器的队列集中选择将被服务的下一队列的装置,用于从等待在所述所选队列中的下一分组数据单元将第一数据块读取到所选调度器的装置,用于确定所述分组数据单元的长度,并且基于速率R1/N和所确定的所述分组数据单元的长度,计算所述分组数据单元的所述第一数据块的队列间隔的装置,其中,N是等于或大于1的整数,所述队列间隔表示在当前分组数据单元之后在下一次从相同队列读取数据块之前将跳过的时隙的数目,用于以预先设置的概率,使用预先确定的较短的或为零的队列间隔,随机地覆盖所述计算的队列间隔,由此提供介于速率R1和R1/N之间的有效的中间队列速率的装置,用于从所述所选队列读取所述分组数据单元的后续数据块的装置。

31.如权利要求30所述的用于业务量调度和整形的装置,其中所述预先设置的概率为

50%。

说明书 :

网络设备和业务量整形方法

技术领域

[0001] 本发明涉及宽带接入系统,特别是用于DSL(数字用户线路)接入系统的网络设备。

背景技术

[0002] 目前,向家庭提供的基本宽带服务是高速因特网接入,其将家庭计算机变为“总是在线”的家庭设备。例如,公共电话网络通常利用以56kbps的速率发送数据的调制解调器。在所述电话网络中,所述调制解调器使用与电话发送语音时相同的频率范围,即从400Hz到4KHz。然而,在交换中心和用户之间的线路,也就是用户线路,允许使用比0到4KHz高得多的频率,从而允许发送更多的数据。此4KHz的限制是由于位于交换中心并从提供给所述骨干网络的信号中过滤额外频率的滤波器所致。实际上,在通常由双绞铜线对组成的用户线路中,可以发送高达几兆赫兹的频率。
[0003] DSL(数字用户线路)是一种用于将高带宽信息通过普通的铜质电话线路送给诸如家庭和小型公司的技术。数字用户线路是一种可以保证数字数据无需变为模拟形式并再变回的技术。数字数据直接以数字数据被发送给用户,这允许使用比传统电话系统宽得多的带宽发送数据。可以提供几种DSL接口,诸如ADSL(非对称DSL)、SHDSL(单对高速DSL)和VDSL(甚高数据速率DSL)。
[0004] xDSL系统的一个例子在图1中示出。用户的终端用户设备(例如,路由器、调制解调器,或者网络接口卡NIC)1位于由使用网络服务的用户所拥有或控制的驻地,通常称为用户驻地设备CPE。在所述网络侧,复用设备2通常被称为数字用户线路接入复用器DSLAM,可以包含中心局分离器、xDSL调制解调器和其他电子设备的高度集中,以将业务量连接到数据网络。特别地,DSLAM通过现有铜质电话线路传送高速数据传送内容,并且控制和路由在所述CPE和所述网络服务提供商的网络(例如,ATM/IP网络)之间的数字用户线路(xDSL)业务量。
[0005] DSL运营商面临的挑战之一是为所述宽带服务选择和部署正确的部署模型。目前,运营商选择了不同模型:少数运营商采用点到点协议(PPP)over ATM,一些采用1483路由,而大多数运营商采用PPP over以太网或者1483桥接。运营商选择所述部署模型有不同的标准。例如,他们的选择可以根据所需的公共IP地址数目、所述CPE或者CPE安装和批发模型的价格。现在,所述关键标准之一是在接入网络中使用的第2层技术。
[0006] 所述标准规定在物理ADSL层之上的传输层中使用ATM。如果ATM也用在所述网络侧,那么能够使用ATM PVC(永久虚连接)容易地建立和交换来自DSL用户的连接,并且无需IP级智能。ATM接入网络基本上支持所有的部署模型,但引入不必要的开销,并且难于管理,而基于以太网的接入网络无法支持存在ATM的部署网络。如果利用以太网网络,那么需要将所述传统的ATM交换模型替换为分组交换,所述分组交换既能够在以太网层(第2层)也可以在IP层(第3层)实现,这取决于所选择的部署模型。
[0007] 两种接入技术都有着它们的局限和优势,并且对所有可能性的支持导致对于所述DSLAM的更多要求。DSLAM必须支持来自ATM和IP接口的同时输入,而且它应当同时提供在QoS(ATM)和CoS(IP)连接与流两者之上的所需服务级别。ATM QoS(服务质量)使得服务提供商可以充分利用可获得的带宽,同时管理多个服务等级,诸如恒定比特速率(CBR)、实时可变比特速率(VBR-rt)和非实时可变比特速率(VBR-nrt)。IP CoS提供有关如何管理IP流的规则。典型的IP服务等级分类包括加速转发(EF)、确保转发(AF)和缺省转发(DF)。
[0008] 实现DSLAM的一个方法在图2中所示。当分组、ATM信元和IP业务流进入所述DSLAM时,会经历4个主要步骤,以确保根据其正在承载的服务或信息类型而恰当地对其进行处理:分类和作标记、监管、排队,以及调度和整形。这些操作可通过使用网络处理器来执行,其中,所述网络处理器能够提供带有灵活编程环境的线速性能,并同时支持多种不同通信协议。如此的一个处理器是Agere系统的PayloadPlus业务量管理网络处理器。在DSLAM应用中,所述网络处理器可被配置为如同集中交换机那样工作,并且可以为多个DSL线路卡供给,其中每一线路卡有多个端口。内部逻辑提供网络处理器调度功能的高层控制,也就是,业务量管理器(TM)和业务量整形器(TS)计算引擎(CE)。网络处理器中的TM计算引擎(CE)通过精简并优化的C指令集提供完全可编程的业务量管理能力,包括缓冲器管理策略。为了实现缓冲器管理策略,在所述缓冲器管理处理引擎上执行短的脚本。所述业务量管理脚本确定是舍弃业务量还是允许对业务量进行调度。这个决定基于用户编程的舍弃策略。此外,网络处理器具有使用多种调度算法调度基于信元和帧的业务量的能力。所述处理器的配置、业务量整形器(TS)计算引擎(CE)和可编程的排队定义决定了所述业务量整形。例如,在所述网络处理器中传统的ATM恒定比特速率(CBR)、可变比特速率(VBR)和未定比特速率(UBR)调度器是可编程的。所述业务量整形器计算引擎在每次调度事件时执行所定义的程序。所述业务量整形器也可以用于支持使用诸如加权轮询的算法为基于帧的业务量进行服务等级队列选择;使用双漏桶算法进行可变比特速率基于信元的业务量调度;以及通过跟踪每一队列的速率信用进行基于帧的平滑的亏空加权轮询调度。
[0009] 在业务量整形器计算机引擎中,对于每个逻辑输出端口(例如,映射到xDSL端口)可以有几个队列和业务量整形调度器。从所述队列到所述逻辑输出端口的信元或块传送是基于所谓的主调度时间转轮原则被调度的。所述逻辑输出端口具有预先确定的端口速率,例如10Mbps。QoS(ATM)和/或CoS(IP)连接和流共享所述端口速率。为了该目的,针对每个队列动态地确定队列间隔。所述队列间隔限定了在从特定队列发送下一个块或信元之前将跳过的主调度时隙的数目。如果将被跳过的时隙的数目是零,那么还从相同的队列发送下一个块,除非所述队列是空的。这意味着所述队列速率是10Mbps。如果将被跳过的时隙的数目是1,那么在再次从第一个队列发送之前,所述业务量整形器CE从具有下一最高优先级的另一个队列进行发送。这意味着队列速率是5Mbps。类似地,当将被跳过的时隙的数目是2或者3时,分别获得3.33Mbps或者2.5Mbps的队列速率。
[0010] 使用这个方法的问题是在使用通用QoS/CoS业务量整形时QoS提供的粒度不足:对于10Mbps端口,我们只获得10、5、3.3、2.5、2、1.7、1.3和1Mbps的队列速率。另外,在充分理解所述调度参数时中容易出现明显的延迟,于是所述QoS提供不是十分精确。进一步说,由于十分有限的脚本接口,则需要精巧的脚本以便于ATM和分组数据业务量的混合。所述业务量调度器是通过针对每个块执行的可编程脚本进行控制的。在所述Agere的网络处理器中,这意味着所述脚本必须被执行在22个时钟周期(RSP全局脉冲)内,这严格限制了算法可具有的复杂度。

发明内容

[0011] 本发明的目的是一种加强的调度和业务量整形,其可减轻或者克服上述问题中的至少一个。
[0012] 本发明的主要方面在所附的独立权利要求中公开。此外,本发明的实施例在附属权利要求中公开。
[0013] 根据本发明的一个方面,通过引入除传统上提供的速率之外的中间速率,来改进队列速率的粒度。当业务流需要介于相对较高的第一队列速率(例如,10Mbps)和第二较低的队列速率(例如,5Mbps)之间的中间速率时,在所述业务量整形器中的跳过间隔被配置为根据所述第二较低速率(例如,5Mbps)计算跳过间隔值。传统上,这会产生等于第二速率(5Mbps)的队列速率。然而,根据本发明的实施例,还会对特定业务流的每个PDU进行覆盖间隔计算的确定:以预先设置的概率(优选近似为50%)将跳过零队列间隔应用于所述PDU,而不是将在所述业务量整形器中针对所述PDU所计算的跳过间隔值应用于所述PDU。
[0014] 根据本发明的另一方面,减轻了现有技术中遇到的延迟和计时问题,以便确定PDU长度(以块数的形式),并且计算队列间隔并将其写入已用于从队列中读取的PDU的第一个块的间隔寄存器中。因此,所述寄存器中的间隔设置在所述PDU的最后一个块被从所述队列读取和发送之前(的固有延迟时间之后)生效。
[0015] 这些方面均适用于QoS业务量和CoS业务量两者,允许同时按每个端口五种不同的ATM QoS业务量类型和三种不同的分组CoS业务量类型来区分优先级并进行调度。

附图说明

[0016] 以下,参照附图并结合优选实施例详细描述本发明,其中:
[0017] 图1示出xDSL系统的例子;
[0018] 图2示出实现DSLAM的一种方式;
[0019] 图3示出根据本发明实施例的路由交换处理器RSP的调度组件的例子;
[0020] 图4是流程图,示出本发明的一个方面;以及
[0021] 图5是流程图,示出本发明的进一步的方面。

具体实施方式

[0022] 即使以下将结合DSL接入系统描述本发明的使用,但这并不限制本发明在其他接入和通信系统中的应用。
[0023] 在图2中所示的功能块可以按多种替代方式分布在网络处理器的不同部分之间。例如,Agere Payload Plus网络处理器包含三个主要单元,快速模式处理器(FPP)、Agere系统接口(ASI)和路由交换处理器(RSP)。例如,分类、做标记和监管21可以位于FPP和/或ASI中,而业务量管理22、队列23、业务量整形24和流编辑25可以位于所述RSP中。
[0024] 通常,分类标识出PDU,监管确保一致性,调度提供所述队列的适当服务,于是就分类优先级而论业务量能够以适当的方式出现在所述网络中。由于作为基于连接的协议ATM不同于基于分组的协议(诸如IP),因此所述流量管理也是不同的,其取决于协议。利用ATM QoS,能够保证严格的性能值,而IP CoS只允许进行分组的相对优先级的指定。不提供为某种优先级的分组指定不同的撤销优先性。
[0025] 本发明的优选实施例支持四种ATM服务质量级别(即,CBR、rt-VBR、nrt-VBR和UBR)和三种IP服务等级级别(即,EF、AF和DF)。例如,如果ATM中要求CBR的服务是IP流,则该IP流将会要求EF。在本发明的优选实施例中,根据业务量参数和优先级级别来处理业务量,而与所述业务量是ATM还是IP无关,因此会提供相同级别的服务质量而与协议无关。
[0026] 业务量监管意味着激活处理监控和实施在业务量协商中包含的规则。对于ATM和IP业务量,可以相同的方式实现处理监管。输入的分组被标记上描述速率和优先级的标识符。业务量监管确保提交给网络的业务量不超过为所述连接设置的业务量描述符。业务量监管基于例如用于信元的通用信元速率算法(GCRA)或者用于分组的TrTCM,标记PDU以用于内部使用。
[0027] 在业务量管理计算引擎22中,或者对所述PDU进行排队,或者基于监管结果(标记)和所述目的队列的充满程度来舍弃所述PDU。如果PDU未被舍弃,那么所述PDU被添加到合适的队列23以进行调度。合适队列23是基于从分类和监管阶段21获得的信息而确定的。队列23被编程为以不同的方式处理PDU,也就是,实现不同的服务质量(QoS)和服务等级(CoS)队列。
[0028] 图3示出根据本发明实施例的路由交换处理器RSP的调度组件的例子。RSP输出端口33是用于发送业务量的物理接口。例如,RSP输出端口33可以是连往用户连接的xDSL接口。端口管理器(PM)32定义一个或多个逻辑端口34的速率。在图3的例子中,在每个RSP单元(RSP 1到4)中存在5个端口管理器32和相应的端口管理器块。逻辑端口34定义用于单个业务流的连接。每个逻辑端口34配置有调度器表。每个调度器35、36和37支持特定类型的业务量。在图3中,配置了三个调度器:第一动态调度器35、第二动态调度器36和先入先出(FIFO)调度器37。每个调度器维持一张队列表。对于第一和第二动态(例如,VBR)调度器35和36,以及还对于FIFO调度器37,所述队列表可以是用于向队列分配时隙的时隙表。第一和第二动态调度器35和36根据业务量整形器计算引擎24的脚本编程来动态地分配时隙,该脚本编程可以包括业务量特性和所述RSP的状态。不需要整形的业务量,例如UBR业务量,采用FIFO调度器37进行调度。
[0029] 在图3的例子中,为QoS和CoS类型的数据流配置了5个队列。带有队列标识QID1的第一队列被配置为用于CBR业务流。第二队列QID2配置为用于VBRrt和EF业务流。第三队列QID3被配置为用于带有w/o标签的VBRnrt业务流和AF41业务流。第四队列QID4被配置为用于VBRnrt w标签业务流。第五队列QID5被配置为用于UBR和DF业务流。
[0030] 队列QID1和QID2被分配给第一动态调度器35,队列QID3被分配给第二动态调度器36,而队列QID4和QID5被分配给FIFO调度器37。
[0031] 在此处所描述的例子中,动态调度的基本功能通过队列——64/48字节的数据块时隙表队列间隔单元以及主调度时间转轮来执行。在一个时隙中可以向所述逻辑端口发送一个64或48字节的数据块。这样,所述队列中的PDU以64或48字节的块而被调度。每次所述RSP准备发送另一个块时,全局速率时钟启动,也就是说,它定义了时隙配置。每次所述RSP准备发送一块数据时,所述调度处理首先开始选择端口管理器32,随后选择逻辑端口34。接着,执行调度器35、36或37的选择。通常,所述调度器拥有优先级顺序,按该顺序对其进行选择。在此处描述的例子中,第一动态调度器35具有最高的优先级,而FIFO调度器37具有最低优先级。最后,调度器35到37拥有定义任何将所述时隙分配给所述各个调度器的队列的时隙表。
[0032] 队列间隔是针对每个队列动态确定的。所述队列间隔定义在从特定队列发送下一个块或信元之前将跳过的主调度时隙数目。因此,所述间隔与所述队列的数据速率相关。间隔值0意味着被跳过的时隙的数目是0,并且如果所述队列非空,那么在下一个时隙中还从相同的队列发送块。如果PDU大小是一个块或更小,那么这导致相对所述逻辑端口速率的100%带宽。类似地,间隔值1意味着跳过一个时隙,在再次从第一队列发送之前,业务量整形器CE 24接着从拥有下一高优先级的另一个队列进行发送。这产生所述端口速率x
的50%速率。原则上,所述速率对应于基本公式y=1/2,其中,y是所述速率,x是所述间隔值。假设所述端口速率是10Mbps。那么,所述间隔值0、1、2、3、4、5、6、7、8和9将分别产生10Mbps、5Mbps、3.33Mbps、2.5Mbps、2Mbps、1.7Mbps、1.3Mbps、1.1Mbps和1Mbps的队列速率。这个粒度不允许对队列进行非常精确的速率调整,特别是在相对于所述端口速率较高的速率。
[0033] 所述业务量管理器TM和所述业务量整形器TS是通过可编程脚本来控制的,在TM中时针对每个PDU执行所述脚本,而在TS中时针对每个块执行所述脚本。每一个调度器只能使用一个脚本。如果所述调度器必须同时处理ATM QoS业务量和分组CoS业务量,那么需要一种新的脚本和整形方法。传统的独立的ATM和分组业务量整形脚本不适用于该目的。
[0034] 根据本发明的实施例,通过引入除传统上提供的速率之外的中间速率,来改进所述队列速率的粒度。当业务流需要介于相对较高的第一队列速率R1(例如,10Mbps)和第二较低队列速率R1/N(例如,5Mbps)的中间速率时,所述业务量整形器中的跳过间隔被配置为根据所述第二较低速率(例如,5Mbps)来计算所述跳过间隔值。这通常会产生等于所述第二速率(5Mbps)的队列速率。然而,根据本发明的实施例,还会对所述特定业务流的每个PDU进行覆盖间隔计算确定:以预先设置的概率(优选近似50%概率),将所述PDU标记为接收跳过零调度,而不是在所述业务量整形器中所计算的跳过间隔值。换句话说,业务量整形调度器以50%的概率将所述间隔值零用于PDU,而不是将所计算的间隔值用于所述PDU。统计上,这会产生增添在所述第一和第二队列速率之间的中间队列比特速率值的效果。如果所述第一和第二队列速率是10Mbps和5Mbps,当采取近似50%的概率时,所获得的所述中间队列速率平均近似为7.5Mbps。类似地,能够提供介于任何两个传统队列速率之间的中间队列速率。
[0035] 在优选的实施例中,所述PDU被标记,以用于在所述分类或监管阶段中的或在所述业务量管理计算引擎中的覆盖间隔计算确定。因为所述操作仅需对每个PDU执行一次,所以这很有利。所述覆盖间隔计算确定的结果与特定间隔覆盖标记一起被传送给所述业务量整形器,所述间隔覆盖标记可以由任何参数、比特、字节或任何其它合适的数据结构来构成。所述覆盖间隔标记可以采用诸如TRUE或1的第一状态,和诸如FALSE或0的第二状态。可以使用任何合适的随机算法来设置所述标记,以使得两个状态以相同的概率出现。附录
1中示出了包含为所述业务量整形器提供随机0/1标记比特的指令的业务量管理器脚本例子。
[0036] 所述业务量整形器可以按照惯例或者根据下面所述的新的创造性概念(图4中步骤41),来计算所述PDU的队列间隔。不管所述间隔如何计算,所述业务量整形器检查所述间隔覆盖标记的状态(步骤42和43)。如果所述状态是FALSE/0,则所述业务量整形器向间隔寄存器写入所述零跳过间隔值(步骤45)。如果所述状态是TRUE/1,则所述业务量整形器向所述间隔寄存器写入所计算的间隔值(步骤44)。附录2中示出了包含用于检查随机0/1标记比特并据此写入所述间隔寄存器的指令的业务量整形器脚本的例子。结果,因为间隔出现“0.5”(0和1各50%),我们得到75%的有效带宽。如果不是使用50%而是另一概率,则所述有效带宽也因此而改变。
[0037] 在现有技术中,仅在PDU的所有块都被从队列中读取和计数后,队列间隔才被计算和写入间隔寄存器中。在所述间隔寄存器的新设置生效之前存在4个块的持续时间的固有延迟时间。因此,有可能在所述实际PDU之后读取并且发送来自所述队列中下一PDU的四个块。这种不期望的事件会扰乱所述业务量整形器计算引擎的计时,从而影响相同逻辑端口的其他队列。
[0038] 根据本发明的进一步的方面,会减轻现有技术的这些问题,以便确定PDU长度(以块数的形式)(图5中步骤52),计算队列间隔(步骤53)并将其写入已用于从队列读取(步骤51)的PDU的第一个块的队列间隔寄存器(步骤54)。从所述队列读取下一个块(步骤55)。因此,在从所述队列读取和发送所述PDU的最后一个块之前(在4个块固有延迟时间之后),所述寄存器的间隔设置生效。所述PDU长度可以从CE硬件提供的TS寄存器中读取。
[0039] 在应用本发明这个进一步的方面的实施例中,首先基于针对所述队列与端口的速率比所提供的有效带宽,由软件使用二倍数学,来计算基本间隔。为了在任何进一步的(整数)计算中能够更精确,所述基本间隔乘以64。选择值64是因为其对应于位操作“左移6位”,并且比特移位是在业务量整形器TS脚本中执行数学运算的唯一可行方法。然后,所述基本间隔作为所述队列的TS参数而被给出,在每次执行TS脚本时(也就是,对于每个64字节的块)被读取。
[0040] 所述业务量整形和所述间隔计算也优选考虑正被调度的PDU长度。在本发明的实施例中,这在TS脚本中实现,以便PDU大小通过相应的左移计数来改变所述间隔倍增的结pduLengthShiftLeft果(也就是,长度间隔=基本间隔×2 )。所述PDU长度可以从CE硬件所提供
的TS寄存器中读取。因此,所述PDU大小以下面的方式影响左移的数量:
[0041] PDU大小 左移
[0042] <=64 0
[0043] 513-102 1
[0044] 513-103 2
[0045] 513-104 3
[0046] 513-105 4
[0047] 1025> 5
[0048] 通过将所述长度间隔除以64计算得到所述实际间隔值,也就是通过位操作“右移6位”,因此消除了由软件对所述基本间隔执行的最初的64倍增。如上所述,这个间隔值能够被写到所述间隔寄存器中。执行这些步骤的TS脚本的例子在附录2中示出。
[0049] 所述本发明的进一步的方面极大地平滑了不同PDU大小对其他队列中的数据流的影响,并且减少了在所述RSP调度机制中进行处理的间隔寄存器相关的四个块左右的时间延迟的影响。
[0050] 还与所述本发明的进一步的方面有关的是,如以上本发明第一个方面有关的描述,能够通过随机地以零跳过间隔值覆盖所计算的间隔值来实现中间速率。因此,在所述长度间隔除以64之后,并且在将所述间隔写到所述TS寄存器中之前,检查写入所计算的间隔值还是零。可以通过从用于特定PDU中的所有块的TM传送到所述TS的特定比特或标记,来对此进行判定。如上所述,所述TM使用随机函数进行比特计算,以50%的概率设置该比特。执行这些步骤的TS脚本的例子在附录2中示出。
[0051] 对于本领域技术人员来说,随着技术的进步,本发明的基本观点可以以多种方式实现。因此,本发明的内容和实施例并不局限于上述例子,在本发明的权利要求范围内可以进行变化。
[0052] 附录1
[0053] /********************************************************************[0054] *********
[0055] *TM script for Agere
[0056] *********************************************************************[0057] *********/
[0058] //Include files
[0059] #include″tm.h″
[0060] #pragma multiplySupport
[0061] /*Configurable parameters for drop precedence 0*/
[0062] //Minimum threshold to start discard
[0063] unsigned prm_Q_thresh_min0 param_block_in[0:1];
[0064] //Maximum buffer threshold after which all PDUs are discarded[0065] unsigned prm_Q_thresh_max0 param_block_in[2:3];
[0066] //EFCI threshold for the queue.Note that this does not separate[0067] //ATM and packet traffic unless that will be indicated by FPP.[0068] uns igned prm_Q_thresh_efci param_block_in[6:7];//old name[0069] width used in some context.
[0070] /*Statistics */
[0071] unsigned prm_stat_pdu_passed param_block_inout[2:3];
[0072] unsigned prm_stat_pdu_drop param_block_inout[6:7];
[0073] //Store the temporary block in queue
[0074] unsigned(2)new_blocks_in_Q;
[0075] /******************************************************************
[0076] Parameter flag bit defs:
[0077] parameters
[0078] 7 unused
[0079] 6 TM to TS:random 1/0
[0080] 5 FPP to TM:policing Discard
[0081] 4 FPP to TM:policing Tag
[0082] 3 FPP to SED:NAT cell header PT1
[0083] 2 FPP to SED:NAT cell header PT2 EFCI
[0084] 1 FPP to SED:NAT cell header PT3(AAL5 last cell)
[0085] 0 FPP to SED:NAT cell header CLP
[0086] parameters_tm (FPP fTransmit Extended Flags)
[0087] 7 unused
[0088] 6 unused
[0089] 5 unused
[0090] 4 unused
[0091] 3 unused
[0092] 2 FPP to TM:Multicast
[0093] 1 FPP to TM:RSP ID MSB
[0094] 0 FPP to TM:RSP ID LSB
[0095] *******************************************************************/[0096] script tm_rsp_0
[0097] {
[0098] //Check RSP ID;if not corresponding to this one,drop the[0099] PDU,unless multicast PDU.
[0100] if(((parameters_tm&0x03)!=0)&&//set the comparison[0101] value according to RSP this script is meant for
[0102] ((parameters_tm&0x04)==0))
[0103] {
[0104] drop=true;
[0105] }
[0106] //Check Policing Bits
[0107] if((parameters&0x20)!=0)//Drop bitset by
[0108] FPP/policing.
[0109] {
[0110] drop=true ;
[0111] }
[0112] //Just a sanity check for development phase;if#of blocks[0113] stored in RSP mem>total mem/2,drop.
[0114] if(used_mem>32000)
[0115] {
[0116] drop=true;
[0117] }
[0118] //CLP and EFCI marking,used by SED script.First zero out the[0119] PT2(congestion)
[0120] //bit in flags.Do not touch PT1 nor PT3 since they are[0121] delivered as is in ATM
[0122] //connection case.This concerns also CLP,unless specifically[0123] requested for marking
[0124] //by policing.
[0125] parameters=parameters&0x3b ;
[0126] if((parameters&0x10)!=0)//Tag bit set by FPP/policing.[0127] {
[0128] parameters=parameters|0x01;
[0129] }
[0130] new_blocks_in_Q=blocks_in_Q+pdu_blocks ;
[0131] if((prm_Q_thresh_efci!=0)&&(new_blocks_in_Q>=
[0132] prm_Q_thresh_efci))
[0133] {
[0134] parameters=parameters|0x04;//SetEFCI bit.
[0135] }
[0136] //set second bit with 50% probability.The bit can be used by[0137] Traffic Shaper script.
[0138] parameters=parameters|(random[1]&0x40);
[0139] if((new_blocks_in_Q>prm_Q_thresh_min0)&&
[0140] (((random[1]&0x01)!=0)||((parameters&0x10)!=0))[0141] )
[0142] {//Drop CLP tagged,50% chance for dropping for the rest[0143] drop=true;
[0144] }
[0145] if(new_blocks_in_Q>=prm_Q_thresh_max0)//Buffer reserved[0146] for the queue used up completely.
[0147] {
[0148] drop=true;
[0149] }
[0150] }
[0151] 附录2
[0152] /***********************************************************
[0153] *Script for calculating Interval value for a PDU or ATM cell.[0154] /***********************************************************/
[0155] #include″ts.h″
[0156] //#pragma multiplySupport//1.0 Asic should support*operator[0157] unsigned prm_interval param_block[0:1];
[0158] unsigned curr_interval param_block_inout[0:1];
[0159] unsigned(4) tmp_interval;
[0160] unsigned(1)pduLengthShift;
[0161] unsigned(1)intervalAdjust;
[0162] script new_interval
[0163] {
[0164] //intervalAdjust=1;
[0165] //Since multiplying still does not work,we must increase the[0166] //PDU size granularity in calculation and use bit shifting.[0167] if(pdu_length>32)
[0168] pduLengthShift=1;
[0169] //if(pdu_length>128)
[0170] //pduLengthShift=1;
[0171] if(pdu_length>256)
[0172] pduLengthShift=2;
[0173] if(pdu_length>512)
[0174] {
[0175] pduLengthShift=3;
[0176] }
[0177] if(pdu_length>1024)
[0178] pduLengthShift=4;
[0179] //The equation is
[0180] //((prm_interval-64)*((pduSizeInBytes+12)/64)/64)+2,
[0181] //where 2 is the Agere interval for max rate,12 is ATM cell to block[0182] //adjustment,and prm_interval is precalculated by CPU as[0183] //64*portRate/newRate.
[0184] //
[0185] //Factor 64 or 32 is used(e.g.instead of 100)since it can be neatly[0186] //utilized via 6 or 5 bit shifting once increasing the calculation[0187] //integer accuracy,and bytes-to-blocks division can be done[0188] //the same way by adding another 6 bit right shift.
[0189] //
[0190] //E.g if port rate is 8 megs and needed bandwidth is 8 megs,[0191] //and PDU size is 1500 bytes(23 64-byte blocks),we get
[0192] //prm_interval 64*8000000/8000000=64=>
[0193] //((64-64)*(1512/64)/64)+2=2.
[0194] //
[0195] //If the wanted rate is 50%,4 megs,we get prm_interval 128,and hence
[0196] //((128-64)*(1512/64)/64)+2=23+2=25,ie.23 blocks are[0197] //transmitted,and then RSP leaves 25-2=23 gaps.[0198] //
[0199] //tmp_interval=(prm_interval-64)*(pdu_length+12);
[0200] tmp_interval=prm_interval<<pduLengthShift;
[0201] tmp_interval=(tmp_interval>>6)&0xffff;
[0202] if((parameters&0x40)!=0)//bit delivered from TM with 50% probability for each
[0203] PDU/cell.
[0204] {
[0205] pdu_interval=0;
[0206] }
[0207] else
[0208] {
[0209] pdu_interval=tmp_interval;
[0210] }
[0211] //For debug:
[0212] //curr_interval=pdu_interval;
[0213] upd_interval=true;