分组调度方法和设备的制作方法

文档序号:7989393阅读:289来源:国知局
分组调度方法和设备的制作方法
【专利摘要】本文中描述供路由器(或其它网络元件)的网络接口等等中使用的改进分组调度方法和设备。在一种这样的改进方法中,将网络接口中缓冲的分组分段以供在通信链路上传送到各由调度树所表示的多个调度域中,各调度树被指配给独立虚拟端口调度引擎,以及顶级调度引擎用于在虚拟端口调度引擎的输出之间进行调度,以便进行关于哪一个所缓冲分组要在通信链路上传送(例如移动到网络接口的传送队列)的最终选择。通过使虚拟端口调度引擎并行地并且基本上相互无关地进行操作,能够将分组移入传送队列的速率可极大地增加,由此增加路由器的网络接口的带宽。
【专利说明】分组调度方法和设备
【技术领域】
[0001]本发明涉及分组调度。如本文所使用的,术语“分组”广泛地用于包含例如在OSI模型的任何层(例如网络层、传输层、数据物理通信链路层、应用层等)的任何数据单元。
【背景技术】
[0002]当多个分组争用共同出局通信链路(例如物理通信链路或者伪线)时,分组调度是必要的。这种情况通常在路由器(和其它网络元件)中发生。在其最简单形式,路由器将第一网络与第二网络连接。也就是说,存在将路由器的第一网络接口连接到第一网络的第一物理通信链路以及将路由器的第二网络接口连接到第二网络的第二物理通信链路,由此使路由器能够在两个网络之间路由分组。路由器可经由第一物理通信链路从第一网络接收预计送往第二网络中的节点的分组。在某些时间点,这些分组到达路由器的速率可超过路由器能够将分组传送到第二物理通信链路的速率(例如,第二物理通信链路可具有比第一物理通信链路要低的带宽)。因此,路由器可采用分组队列来暂时存储所接收分组。因此,在任何给定时间点,路由器可能在其分组队列中存储从第一网络接收并且预计送往第二网络的多个分组。由于可存在将路由器连接到第二网络的单个物理通信链路,所以排队分组将“争用”这个公共出局物理通信链路。因此,路由器要求分组调度的某种方法。也就是说,路由器需要选择排队分组的哪一个接下来将获得出局传输的某种方式。
[0003]一种分组调度技术涉及:(a)创建具有根调度节点、叶调度节点集合和零或更多聚合调度节点的调度树,其中每个叶调度节点与分组队列关联;以及(b)采用调度引擎连续地遍历调度树,以便到达叶调度节点并且将分组从与叶调度节点关联的分组队列移动到传送队列。这种技术的一个问题在于,调度引擎的性能可因存储器带宽限制以及用于访问和更新各调度节点的共享状态信息的争用开销等等而受到限制。
[0004]因此,所需的是一种改进的分组调度过程。

【发明内容】

[0005]本文中描述用于改进路由器(或其它网络元件)的网络接口中的分组调度的方法和设备。一种方法是:将网络接口中缓冲以供传输(例如供在物理通信链路或端口伪线或者链路聚合组(LAG)上的传输)的分组分段为多个调度域,其中各调度域由调度树来表示;将各调度树指配给独立虚拟端口调度引擎;以及采用顶级调度引擎在虚拟端口调度引擎的输出之间进行调度,以便进行对哪个缓冲分组要传送(以及移动到网络接口的传送队列)的最终选择。
[0006]使虚拟端口调度引擎并行地并且基本上相互无关地进行操作极大地减小对于每个单独调度决策必须考虑的共享状态的量。因此,通过这种技术,能够将分组移入传送队列的速率可实质上增加。因此,如果网络接口连接到高速通信链路(例如100千兆位/每秒(Gbps)物理通信链路),则调度系统足够迅速地进行操作以利用通信链路的全带宽的能力得到增强。[0007]相应地,在一个方面,提供一种分组调度设备。在一些实施例中,分组调度设备包括:第一调度引擎(例如第一虚拟端口调度引擎);第二调度引擎(例如第二虚拟端口调度引擎);以及第三调度引擎(例如顶级调度引擎)。第一调度引擎可操作以:(a)从分组队列的第一集合中选择分组队列;以及(b)将分组从所选分组队列移动到中间分组队列的第一集合中包含的中间分组队列。第一调度引擎可配置成使用与调度节点的第一集合(例如形成调度树的调度节点的分级设置集合)对应的信息来执行分组队列选择。
[0008]与第一调度引擎相似,第二调度引擎可操作以:(a)从分组队列的第二集合中选择分组队列;以及(b)将分组从所选分组队列移动到中间分组队列的第二集合中包含的中间分组队列。第二调度引擎可配置成使用与调度节点的第二集合对应的信息来执行分组队列选择。在一些实施例中,第一调度引擎和第二调度引擎配置成相互无关地选择分组队列,使得状态信息无需在第一与第二调度引擎之间共享。第三调度引擎可操作以:(a)从包括中间分组队列的第一集合和中间分组队列的第二集合的分组队列集合中选择分组队列;以及(b)将分组从所选分组队列移动到传送队列。
[0009]在一些实施例中,分组调度设备可在网络接口中实现,并且还包括配置成将分组从传送队列传送到通信链路上的分组传送器。
[0010]在一些实施例中,第一和第二调度引擎是包括计算机可读介质的基于软件的调度引擎,计算机可读介质中存储了加载到处理器并且由其来运行的计算机代码,以及第三调度引擎是使用专用集成电路(ASIC)来实现的基于纯硬件的调度引擎。
[0011]在一些实施例中,分组队列的第一集合中包含的分组队列集合与第一分组流关联,分组队列的第二集合中包含的分组队列集合与第二分组流关联,以及分组调度设备还包括配置成执行下列步骤的分组接入和处理单元(PRPU): (a)接收分组;(b)确定分组所属的分组流;以及(C)将分组放入与分组流关联的出口分组队列中。PRPU可以是基于软件的(例如PRPU可包括其中存储了加载到处理器并且由其来运行的计算机代码的计算机可读介质)或者基于硬件的(例如PRPU可使用专用集成电路(ASIC)来实现)。
[0012]在一些实施例中,第三调度引擎可操作以从包括中间分组队列的第一集合、中间分组队列的第二集合和分组队列的第三集合的分组队列集合中选择分组队列,其中分组队列的第三集合中包含的分组队列集合与第三分组流关联。在这类实施例中,PRPU配置成使得:(a)当PRI3U接收分组并且确定该分组属于第一分组流时,PRPU将分组放入与第一分组流关联的分组队列集合中包含的分组队列之一中;(b)当PRPU接收分组并且确定该分组属于第二分组流时,PRPU将分组放入与第二分组流关联的分组队列集合中包含的分组队列之一中;以及(c)当PRPU接收分组并且确定该分组属于第三分组流时,PRPU将分组放入与第三分组流关联的分组队列集合中包含的分组队列之一中。
[0013]在一些实施例中,调度节点的第一集合包括来自调度树的第一子树的调度节点,以及调度节点的第二集合包括来自调度树的不同的第二子树的调度节点。在这类实施例中,配置模块可配置成检查定义调度树的信息,向第一调度引擎指配调度树的第一子树,以及向第二调度引擎指配调度树的不同的第二子树。
[0014]在一些实施例中,调度节点的第一集合包括也包含在调度节点的第二集合中的调度节点集合。
[0015]在一些实施例中,对应于调度节点的第一集合的信息包括:(a)与调度节点的第一集合中包含的调度节点之一关联的第一最大数据速率信息;(b)识别第一调度算法的信息,并且对应于调度节点的第二集合的信息包括:(a)与调度节点的第二集合中包含的调度节点之一关联的第二最大数据速率信息;以及(b)识别第二调度算法的信息。
[0016]在一些实施例中,第一调度引擎配置成使用第一最大数据速率信息和第一调度算法选择从其中移开分组的分组队列,以及第二调度引擎配置成使用第二最大数据速率信息和第二调度算法选择从其中移开分组的分组队列。
[0017]在一些实施例中,第一调度引擎包括:数据处理系统;以及数据处理系统可访问的计算机可读介质。计算机可读介质可存储计算机可读程序代码,计算机可读程序代码在由数据处理系统运行时使数据处理系统:(a)从分组队列的第一集合中选择分组队列;以及(b)将分组从所选分组队列移动到中间分组队列的第一集合中包含的中间分组队列。
[0018]在另一方面,提供一种分组调度方法。在一些实施例中,分组调度方法包括下列步骤:将分组队列的第一集合指配给第一调度引擎;将分组队列的第二集合指配给第二调度引擎;将第一分组流指配给分组队列的第一集合中包含的分组队列集合;将第二分组流指配给分组队列的第二集合中包含的数据队列集合;在网络元件的网络接口接收分组;确定该分组所属的分组流;如果所接收分组属于第一分组流,则响应确定所接收分组属于第一分组流而将所接收分组放入对其指配第一分组流的分组队列集合中包含的分组队列之一中;以及如果所接收分组属于第二分组流,则响应确定所接收分组属于第二分组流而将所接入分组放入对其指配第二分组流的分组队列集合中包含的分组队列中。
[0019]在一些实施例中,第一调度引擎:(a)从分组队列的第一集合中选择分组队列;以及(b)将分组从所选分组队列移动到中间分组队列的第一集合中包含的中间分组队列,第二调度引擎:(a)从分组队列的第二集合中选择分组队列;以及(b)将分组从所选分组队列移动到中间分组队列的第二集合中包含的中间分组队列;并且第三调度引擎:(a)从包括中间分组队列的第一集合和中间分组队列的第二集合的分组队列集合中选择分组队列;以及(b)将分组从所选分组队列移动到传送队列。网络接口的分组传送器配置成将分组从传送队列传送到通信链路上。
[0020]下面参照附图来描述上述及其它方面和实施例。
【专利附图】

【附图说明】
[0021]结合在本文中并且形成本说明书的组成部分的附图示出本发明的各个实施例,并且还连同描述一起用于说明本发明的原理,以及使相关领域的技术人员能够进行和使用本发明。附图中,相似参考标号表示相同或者功能上相似的元件。
[0022]图1示出包括边缘路由器的通信系统。
[0023]图2是边缘路由器的网络接口的功能图。
[0024]图3示出示例调度树。
[0025]图4示出能够将调度树分为多个子树的一种可能方式。
[0026]图5是按照一个实施例的调度系统的功能图。
[0027]图6示出能够将调度树分为多个子树的另一种可能方式。
[0028]图7是按照另一个实施例的调度系统的功能图。
[0029]图8是示出按照具体实施例的各种过程的流程图。[0030]图9示出通信系统。
[0031]图10示出调度节点的分级设置集合。
[0032]图11示出经修改的调度树。
[0033]图12示出两个经修改的调度树。
[0034]图13是按照一些实施例的调度引擎的框图。
[0035]图14是示出调度引擎的示例软件组件的框图。
【具体实施方式】
[0036]如本文所使用的“一”和“一个”表示“一个或多个”。
[0037]图1示出其中可采用本发明的实施例的示例通信系统100。但是,本发明并不局限于任何特定类型的通信系统。在所示示例中,通信系统100包括向网络110(例如因特网)传送分组以及从网络110接收分组的多个最终用户装置101。如图1所示,用户装置101经由接入网103以及起作用以将接入网103与网络110相连接的网络元件108 (例如边缘路由器108)与网络110(例如网络110中的服务器)进行通信。
[0038]在所示示例中,接入网103是数字订户线(DSL)接入网103,但是可使用任何类型的接入网103。示例DSL接入网103包括连接到DSL接入复用器(DSLAM) 104的DSL调制解调器102,其中DSLAM 104经由物理通信链路122连接到交换机106。例如,DSL调制解调器102经由物理通信链路122与DSLAM 104连接,DSLAM 104经由物理通信链路122与交换机106连接。交换机106经由物理通信链路123 (它可以是有线或无线的)与网络元件108的网络接口 191连接。类似地,网络110经由物理通信链路124与边缘路由器108的网络接口 192连接。网络接口 191和192可通过网络元件108的底板组件(未示出)来连接。还连接到交换机106的可以是另一个网络112。
[0039]图2是网络元件108的网络接口 191的分组出口部分的功能图。如图2所示,网络接口 191包括分组接收和处理单元(PRPU) 202。在图1所示的实施例中,PRPU 202经由例如网络元件108的底板从网络接口 192接收分组。从网络接口 192所接收的分组包括网络接口 192从网络110接收的分组。除了向PRPU 2002提供分组之外,网络接口 192还可对于它提供给PRPU 202的各分组提供该分组的元数据。
[0040]在一个实施例中,由PRPU 202所接收的各分组属于单个分组流。在这个实施例中,对于PRPU 202所接收的各分组,PRPU 202起作用以确定所接收分组所属的分组流。在一些实施例中,PRPU 202通过检查分组所包含的分组报头中包含的数据,或者通过检查分组的元数据(若有的话),来确定所接收分组所属的分组流。例如,分组报头(或者元数据)可包括一个或多个虚拟局域网(VLAN)标签(例如外VLAN标签和内VLAN标签),并且还可包括识别分组携带的有效载荷数据(例如,诸如基于IP的语音数据之类的实时数据或者诸如HTTP消息之类的非实时数据)的类型的信息。作为一个具体示例,与某个外VLAN标签、内VLAN标签和有效载荷类型关联的所有分组被确定属于同一个流,而与不同外VLAN标签、内VLAN标签或者有效载荷类型关联的所有分组被确定属于不同的分组流。
[0041]PRPU 202还起作用以基于分组所属的所确定分组流来将所接收分组添加到分组队列。也就是说,在一些实施例中,各分组流与分组队列关联。例如,网络接口 191可包括分组流到分组队列数据库(DB),该DB可在例如对其写入和读取数据的计算机可读介质中实现,计算机可读介质存储将所定义分组流集合的每一个分组流映射到分组队列的信息。如图2所示,网络接口 191包括分组队列集合206 (例如分组队列ql_q8,如所示)。
[0042]例如,如果假定PRPU 202所接收并且预计送往网络112的所有分组属于同一分组流,则这个分组流可与例如q8关联。因此,在这个示例中,当PRPU 202从网络接口 192接收预计送往网络112的分组(或者分组的元数据-例如分组标识符、识别存储分组的存储器位置的存储器位置标识符、目标地址信息)时,PRPU 202将分组“添加”到q8。在分组队列中的所有分组依次位于同一存储装置中的意义上,分组队列集合206中的分组队列不需要是物理分组队列。相反,本文所述的分组队列可以是逻辑分组队列,例如逻辑先进先出(FIFO)分组队列。分组本身可存储在任何位置。因此,将分组“添加”到分组队列可包括只向实现分组队列的数据结构(例如链接表数据结构)添加与分组唯一关联的标识符(例如识别存储分组的存储器位置的标识符)。
[0043]当PRPU 202处理分组(例如将分组添加到分组队列206之一)时,调度系统212连续选择分组队列206之一,并且将分组从所选分组队列移动到传送队列214。并行地,分组传送器216连续地从传送队列214移开分组,并且将那些分组传送到物理通信链路123上。在一些实施例中,分组传送器216在传送分组之前可将报头添加到分组,由此创建协议数据单元。这样,分组流入和流出网络接口 191的出口部分。
[0044]在一些实施例中,在是时候使调度系统212选择分组队列时,调度系统212遍历调度树,以便从分组队列集合206确定应当选择的分组队列。因此,网络接口 191可包括调度树数据库210,调度树数据库210可在对其写入和读取数据的、用于存储定义调度树的信息的计算机可读介质中实现。
[0045]图3示出可由调度系统300使用的示例调度树300。调度树300包括调度节点集合(例如调度节点301-314),其中的每个可作为计算机可读介质中存储的、在逻辑上以决策树形式所组织的数据结构(例如集中在一起的数据元素集合)来实现。也就是说,除了叶调度节点之外的各调度节点具有一个或多个子调度节点,以及除了根调度节点之外的各调度节点具有父节点。更具体来说,调度树300包括根调度节点301、聚合调度节点(例如调度节点302、304、305、307和308)以及叶调度节点(例如调度节点303、306和309-314)。
[0046]在所示示例中,每个叶调度节点和每个聚合调度节点表示PRPU 202所接收的、可传送到物理通信链路123上的分组流的子集,以及根调度节点301表示PRPU 202所接收的、可传送到物理通信链路123上的全部分组流。另外,每个叶调度节点与唯一分组队列关联。因此,调度树300示出可存储在数据库204中并且由PRPU 202使用的分组流到分组队列映射,如上所述。
[0047]作为一个具体示例,叶调度节点303表示送往网络112的分组流,叶调度节点309表示预计送往VLAN 1.1的的语音分组流(包含语音数据、例如基于IP的语音数据的分组),叶调度节点310表示预计送往VLAN 1.1的非语音分组流,聚合调度节点305表示预计送往VLAN 1.1的全部分组流(即,语音和非语音),以及叶调度节点306表示预计送往VLAN
1.2的全部分组流。在这个示例中,假定VLAN I与DSLAM 104关联,使得预计送往VLAN I的全部业务由交换机106传送到物理通信链路122上,以及VLAN 1.1与DSL装置102关联,使得预计送往VLAN 1.1的全部业务由DSLAM 104传送到物理通信链路121上。
[0048]如图3所示,每个叶调度节点直接连接到根调度节点301或者通过一个或多个聚合调度节点间接连接到根调度节点301。例如,叶调度节点303直接连接到根调度节点301,而叶调度节点311通过聚合调度节点304和307连接到根调度节点301。同样,各聚合调度节点直接连接到根调度节点301或者通过一个或多个其它聚合调度节点间接连接到根调度节点301。
[0049]如所述,各调度节点可作为计算机可读介质中存储的数据结构来实现。因此,在一些实施例中,实现调度节点的各数据结构可包括:(i)父指针数据元素,存储指向实现另一个调度节点(即,调度节点的父)的另一个数据结构的父调度节点指针;以及(ii)子指针数据元素集合,其中每个子指针数据元素存储指向实现另一个调度节点(即,调度节点的子之一)的另一个数据结构的子调度节点指针。因此,相对于另一个调度节点的各调度节点可以是那个另一调度节点的父或子。在实现根节点的数据结构的情况下,那个数据结构的父调度节点指针可指向空(NULL),因为在一些实施例中,根据定义,根节点可以没有父调度节点。同样,在实现叶节点的数据结构的情况下,那个数据结构的每个子调度节点指针可指向空(NULL),因为在一些实施例中,根据定义,叶节点可以没有任何子调度节点。
[0050]如上所述,调度系统212可配置成通过遍历调度树300来选择从其中得到分组供传递给传送队列214的分组队列。在一些实施例中,调度系统212通过在根调度节点301开始,并且然后选择子调度节点(例如从实现根节点301的数据结构中选择子指针数据元素),按照自顶向下方式来遍历调度树300 (但是,在其它实施例中,调度系统可使用自底向上遍历算法来遍历调度树300)。在一些实施例中,根调度节点301可与调度算法(例如循环法)关联。另外,各调度节点可与最大数据速率(以及其它参数,例如最小目标数据速率)关联。例如,如上所述,数据结构可实现调度节点,因此,调度节点可通过将最大数据速率存储在实现调度节点的数据结构的数据元素中,来与最大数据速率关联。
[0051]在这类实施例中,调度引擎212使用与根调度节点301关联的调度算法和最大数据速率来选择根调度节点301的子调度节点。例如,如果假定(a)与调度节点302关联的最大数据速率为7 Gbps以及(b)与根调度节点301关联的调度算法指示调度系统212应当选择聚合调度节点302,则调度系统212将选择聚合调度节点302,除非在最后一秒时间(或者其它时间期)之内,调度系统212已经从与调度节点302关联的分组队列(即,分组队列ql、q2和q3)中选择超过10 Gb数据,否则调度系统212将选择直接连接到根调度节点301的其它调度节点之一(即,这个示例中的调度节点303和304)。
[0052]如果所选子调度节点是叶调度节点,则调度系统212选择与所选叶调度节点关联的分组队列,并且将分组从所选分组队列移动到传送队列214。如果所选子调度节点不是叶调度节点(即,是聚合调度节点),则调度系统212选择所选聚合调度节点的子调度节点。这个过程重复进行,直到调度系统212选择叶调度节点。这样,调度系统212遍历调度树300,其中在树的各级和节点考虑并且执行最大速率或其它调度规则。
[0053]与根调度节点301相似,所选聚合调度节点可与调度算法关联,并且所选聚合调度节点的每个子调度节点可与最大数据速率(和/或其它参数)关联。因此,调度系统212使用调度算法和最大数据速率来确定将选择哪一个子调度节点。如上所述,这个过程重复进行,直到调度系统212选择作为叶调度节点的调度节点(即,没有任何子调度节点的调度节点)。在选择叶调度节点并且将分组从与所选叶调度节点关联的分组队列移动到传送队列214之后,调度系统212将再次遍历调度树300,以根调度节点301开始。因此,调度系统212连续遍历调度树300,并且由此连续选择从其中将分组移动到传送队列214的分组队列。这样,将分组排队以供物理通信链路123上的传输。
[0054]如从以上描述显而易见,调度系统212保持至少一些调度节点的状态信息。例如,如果调度节点具有与其关联的最大数据速率,则调度系统212将跟踪选择了多少数据供从与调度节点(直接或间接)关联的分组队列的传输。作为另一个示例,如果调度节点与调度算法关联,则调度系统212可保持实现调度算法所需的状态信息(例如,在调度节点的调度算法是循环调度算法的情况下,调度系统212则可跟踪调度节点的哪一个子节点具有最后“一轮”)。在一些实施例中,调度系统212可将调度节点的状态信息存储在实现该调度节点的数据结构的一个或多个数据元素中。
[0055]在物理通信链路123的传输容量较高(例如100 Gbps)时,可存在如下情况:调度系统212不能够足够迅速地将分组移入传送队列214,使得因调度系统212所使用的调度树具有太多决策点的事实而利用全部100 Gbps容量。在这类情况下,多个新调度树能够从现有调度树来形成。例如,图4示出如何能够将调度树300分为三个调度树(即,树401、402和403)。在所示实施例中,树401-403的每个是调度树300的子树。又如所示,树401的根调度节点与树300的根调度节点相同,而调度节点302是树402的根调度节点,以及调度节点304是根调度节点树403。
[0056]图5示出能够与图4所示调度树401-403配合使用的调度系统212的一个实施例的功能图。在所示实施例中,调度系统212包括三个调度引擎521-523,各调度树401-403一个调度引擎。调度引擎521可分类为顶级调度引擎,因为它起作用以将分组移动到传送队列214。调度引擎522和523可分类为虚拟端口调度引擎,因为每个调度引擎将分组移动到中间分组队列(例如iql或iq2)而不是传送队列214。
[0057]在所示示例中,树401由调度引擎521用于从由iql、iq2和q8组成的分组队列集合中选择分组队列;树402由虚拟端口调度引擎522用于从由ql_q3组成的分组队列集合中选择分组队列;以及树403由虚拟端口调度引擎523用于从由q4_q7组成的分组队列集合中选择分组队列。各调度引擎521-523按照与以上结合树300所述的调度系统212相同的方式进行操作。也就是说,各调度引擎521-523连续遍历其对应调度树;因此各调度引擎521-523连续地将分组从基于对应树所选的分组队列移动到传送队列214或者移动到中间分组队列。
[0058]更具体来说,调度引擎521配置成使得它将分组从所选分组队列移动到传送队列214,而调度引擎522和523配置成使得各引擎将分组从所选分组队列移动到中间分组队列(例如分别为iql和iq2)。调度引擎521、522和523可配置成并行操作。也就是说,当调度引擎522和523将分组移入中间分组队列(iql和iq2)时,调度引擎521可将分组移出那些分组队列并且移入传送队列214。另外,调度引擎521、522和523可配置成相互无关地进行操作,使得调度引擎的任一个不需要另一个调度引擎所保持的任何状态信息。这样,将分组移入传送队列214的速率能够极大地增加。例如,如果假定中间分组队列的至少一个始终包含至少一个分组,则将分组移入传送队列214的速率只与调度引擎521的“带宽”(即,调度引擎能够将分组传递给传送队列214的速率)相关。此外,在一些实施例中,调度引擎521能够是极简单调度引擎,因为其调度树(例如树401)可以仅要求遍历单个级(例如,连接到根调度节点301的所有调度节点是叶调度节点)。因此,在一些实施例中,调度引擎521基本上完全通过硬件来实现,使得它将具有高带宽。例如,在一些实施例中,调度引擎521包括(或者基本上包括)专用集成电路(ASIC),而调度引擎522和523是基于软件的(例如使用具有与其关联的计算机可读介质的通用处理器来实现,其中计算机可读介质上存储了计算机程序、例如通过汇编语言所编写的程序)。
[0059]图6示出如何能够从组成调度树300的调度节点来形成可以是概念调度树的操作调度树601-603的不同集合。在从先前存在调度树、例如树300来形成多个调度树并且新树之一包括用于直接连接到先前存在调度树的根调度节点的多于一个调度节点时,则将需要为那个树创建新的根调度节点。这在图6中示出。如图6所示,虚拟端口调度节点610被创建为树602的根调度节点。需要虚拟端口调度节点610,因为树602包括形式上直接连接到根调度节点301的多于一个调度节点(例如调度节点302和304)。不需要为树603创建根调度节点,因为这个树仅包括先前直接连接到根调度节点301的单个调度节点。另外,在图6所示的实施例中,调度树602和603均包括调度节点621-623,由此提供负荷平衡时机,如以下所述。调度节点621表示预计送往网络112的业务,调度节点622表示预计送往网络112的语音业务,以及调度节点623表示预计送往网络112的非语音(即,“数据”)业务。
[0060]图7示出能够与图6所示调度树601-603配合使用的调度系统212的一个实施例的功能图。在图7所示的实施例中,调度系统212包括三个调度引擎721-723,各调度树601-603 一个调度引擎。树601由顶级调度引擎721用于从由iql和iq2组成的分组队列集合中选择分组队列;树602由虚拟端口调度引擎722用于从由ql-q7、q8a和q9a组成的分组队列集合中选择分组队列;以及树403由虚拟端口调度引擎723用于从由q8b和q9b组成的分组队列集合中选择分组队列。各调度引擎721-723连续遍历其对应调度树;因此各调度引擎721-723连续地将分组从基于对应树所选的分组队列移动到传送队列214或者移动到中间分组队列(例如iql或iq2)。更具体来说,顶级调度引擎721配置成使得它将分组从所选分组队列移动到传送队列214,而虚拟端口调度引擎722和723配置成使得各引擎将分组从所选分组队列移动到中间分组队列(即,分别为iql和iq2)。与调度引擎521-523相似,调度引擎721-723可配置成并行地并且相互无关地进行操作。
[0061 ] 又如图7所示,接口 191可包括负荷平衡器702。在图6和图7的实施例中,当PRPU202接收预计送往网络112的分组时,PRPU 202不是立即将分组放入分组队列,而是将分组传递给负荷平衡器702,负荷平衡器702可在分组队列q8a、q9a与分组队列q8b、q9b之间均匀地分配业务。更具体来说,如图6所示,预计送往网络112的语音业务在分组队列q8a与q8b之间均匀地分配,以及预计送往网络112的非语音业务在分组队列q9a与q9b之间均匀地分配。
[0062]图8是示出按照一个实施例的过程800的流程图。过程800可开始于步骤802,其中将分组队列(即分组队列ql_q3)的第一集合指配给第一调度引擎(例如调度引擎522)。步骤802可通过将调度树(例如调度树402)指配给第一调度引擎来实现,其中调度树与分组队列集合(参见图4)关联。在步骤804,将分组队列(例如分组队列q4_q7)的第二集合指配给第二调度引擎(例如调度引擎523)。步骤804可通过将不同调度树(例如调度树403)指配给第二调度引擎来实现。在步骤806,将分组队列(例如分组队列q8)的第三集合指配给第三调度引擎(例如调度引擎521)。在步骤808,将第一分组流指配给分组队列的第一集合中包含的分组队列。例如,在步骤808,网络接口 191配置成使得由PRPU 202来接收的预计送往网络112的全部分组将放入例如q8。在步骤810,将第二分组流指配给分组队列的第二集合中包含的分组队列。在步骤812,将第三分组流指配给分组队列的第三集合中包含的分组队列。在一些实施例中(参见例如图6),没有执行步骤812。在步骤812之后,过程800可并行地进入步骤814、820、824和828。
[0063]在步骤814,PRPU 202接收分组。在步骤814,PRPU 202还可接收与分组关联的元数据。在步骤816,PRPU 202确定分组所属的分组流。如上所述,PRPU 202可使用可识别分组预计送往其中的一个或多个VLAN的分组中包含的数据(例如目标地址)和/或元数据来确定分组流。在步骤818,PRPU 202将所接收分组放入与所确定分组流关联的分组队列。例如,在步骤818,PRPU可使用所确定分组流(例如所确定VLAN标识符)在数据库204中查找被指配给所确定分组流的那个分组队列。PRPU 202可连续执行步骤814-818。
[0064]在步骤820,第一调度引擎从分组队列的第一集合中选择分组队列。例如,在步骤820,第一调度引擎可遍历调度树,以便到达树的叶调度节点,并且由此选择与叶调度节点关联的分组队列。在步骤822,第一调度引擎将分组从所选分组队列移动到第一中间分组队列(例如iql)。第一调度引擎可连续执行步骤820-822。
[0065]在一些实施例中,第一调度引擎周期地监测第一中间分组队列的状态(例如周期地确定分组队列的长度),以及根据分组队列的状态可对短时间期停止执行步骤802-822(即,第一调度引擎可暂停)。例如,如果第一调度引擎确定第一中间分组队列的长度大于预定阈值,则第一调度引擎响应那个确定而可暂停某个时间量或者暂时有选择地仅调度送往没有全满的其它中间队列的分组,由此防止第一中间分组队列变大。这个特征提供下列优点:(i)约束中间队列所消耗的系统资源(例如分组缓冲器)量,(ii)约束分组在中间队列中等待时可能引起的附加转发等待时间,以及(iii)确保与虚拟端口调度引擎关联的规则最终确定调度行为。
[0066]在步骤824,第二调度引擎从分组队列的第二集合中选择分组队列。例如,在步骤824,第二调度引擎可遍历调度树,以便到达树的叶调度节点,并且由此选择与叶调度节点关联的分组队列。在步骤826,第二调度引擎将分组从所选分组队列移动到第二中间分组队列(例如iq2)。第二调度引擎可连续地并且与第一调度引擎无关地执行步骤824-826。与第一调度引擎相似,第二调度引擎可周期地监测第二中间分组队列的状态,并且可配置成根据分组队列的状态进行暂停。
[0067]在步骤828,第三调度引擎从包括第一、第二中间分组队列和分组队列的第三集合的分组队列集合中选择分组队列。在步骤830,第二调度引擎将分组从所选分组队列移动到传送队列214。第三调度引擎可连续地并且与第一调度引擎和第二调度引擎无关地执行步骤828-830。与第一和第二调度引擎相似,第三调度引擎可周期地监测传送队列214的状态,并且可配置成根据分组队列的状态进行暂停。
[0068]按照上述方式,多个单独调度引擎可用于将分组移动到传送队列,由此增加网络接口 191的吞吐量。
[0069]又参照图2,如图2所示,网络元件108可包括配置模块208。配置模块208可配置成使用户(例如网络管理员)能够定义调度节点,创建调度树,并且将调度节点和/或调度树指配给调度引擎。例如,配置模块可提供使网络管理员能够配置网络接口 191的命令行界面(CLI)或图形用户界面(GUI)。另外,配置模块208可配置成自动配置网络接口191 (例如从预定义调度树(例如树300)来创建调度树(例如树401-403)集合)。在一些实施例中,配置模块208配置成检查定义调度树(例如树300)的信息,向第一调度引擎指配调度树300的第一子树(例如树401),以及向第二调度引擎指配调度树300的不同的第二子树(例如树402)。
[0070]作为一个具体示例,假定新DSLAM 901 (参见图9)已经添加到通信系统100。在添加这个新DSLAM 901时,网络管理员可使用配置模块208来定义新调度节点,以便表示送往DSLAM 901的分组流(例如预计送往VLAN 3的所有分组)。例如,如图10所示,网络管理员可定义三个新调度节点:(I)聚合调度节点1001,表示预计送往VLAN 3的所有分组流,(2)叶调度节点1002,表示送往VLAN 3的所有高优先级分组(例如语音分组)流,以及(3)叶调度节点1003,表示送往VLAN 3的所有低优先级分组流。因为聚合调度节点1001具有多于一个子调度节点,所以定义调度节点1001的过程可包括将调度节点1001与调度引擎将在已经到达调度节点1001时使用的调度算法(例如循环法)关联,并且必须选择要选择哪一个子调度节点。另外,如果DSLAM 901具有8 Gbps的最大分组转发容量,网络管理员还可使用配置模块将调度节点1001配置成使得它与8 Gbps的最大带宽关联。
[0071]在定义调度节点之后,由叶调度节点所表示的分组流需要与唯一分组队列关联。配置模块208可通过对每个叶调度节点将叶调度节点所定义的分组流与分组队列进行映射的信息添加到分组流到分组队列数据库204以更新数据库204,来执行这个功能。
[0072]另外,在定义调度节点之后,当前由调度系统212使用的调度树的一个或多个需要经过修改以适应叶调度节点1002和1003,和/或需要创建新的调度树。这能够由网络管理员手动进行或者由配置模块208自动进行。
[0073]作为一个示例,图11示出如何可将树402修改成适应叶调度节点1002和1003,如所示,叶调度节点1002和1003分别与分组队列q9和qlO关联。如图11所示,虚拟端口调度节点1101被创建为树402的新根调度节点。要求创建虚拟端口调度节点1101并且使它成为树402的根调度节点,因为作为树402的根调度节点的调度节点302以及调度节点1001表示不同的分组流,并且因此调度节点1001可能不是调度节点302的子,反过来也是一样。如所示,调度节点302这时直接连接到调度节点1101,以及叶调度节点1002和1003经由聚合调度节点1001间接连接到根调度节点1101,其中聚合调度节点1001直接连接到根调度节点1101。图12示出能够将叶调度节点1002和1003添加到调度树的另一种方式。如图12所示,树401和402经修改以分别适应叶调度节点1002和1003。
[0074]在配置模块208自动重新配置调度树的实施例中,配置模块208可编程为考虑调度引擎带宽以及与调度节点关联的最大带宽。例如,如果假定(a)调度引擎522的最大带宽为15 Gbps, (b)与调度节点302关联的最大带宽为10 Gbps,以及(c)与调度节点1001关联的最大带宽也为10 Gbps,则配置模块208不会向树402添加叶调度节点1002和1003,如图11所示,因为(i)与调度节点302关联的最大带宽以及(ii)与调度节点1001关联的最大带宽大于调度引擎522的最大带宽。另外,在可向调度树的现有集合添加新调度树的实施例中,配置模块208可自动例示新虚拟端口调度引擎,以便调度与新调度树关联的分组流。
[0075]现在参照图13,图13示出按照本发明的一些实施例的调度引擎522的框图。如图13所示,调度引擎522可包括:数据处理系统1302,可包括一个或多个微处理器和/或一个或多个电路,例如专用集成电路(ASIC)、现场可编程门阵列(FPGA)等;网络接口 1304 ;以及数据存储系统1306,可包括一个或多个非易失性存储装置和/或一个或多个易失性存储装置(例如随机存取存储器(RAM))。如所示,数据存储系统1306可用于存储调度树状态信息。在数据处理系统1302包括微处理器的实施例中,计算机可读程序代码1343可存储在计算机可读介质1342中,非限制性地例如磁媒体(例如硬盘)、光媒体(例如DVD)、存储器装置(例如随机存取存储器)等。在一些实施例中,计算机可读程序代码1343配置成使得在由处理器运行时,代码1343使调度引擎522执行上述步骤(例如以上参照图8所示的流程图所述的步骤)。在其它实施例中,调度引擎522配置成在无需代码1343的情况下执行上述步骤。也就是说,例如,数据处理系统1302可以只由一个或多个ASIC组成。因此,以上所述的本发明的特征可通过硬件和/或软件来实现。例如,在具体实施例中,上述调度引擎522的功能组件可通过数据处理系统1302运行计算机指令1343、通过数据处理系统1302与任何计算机指令1343无关地进行操作或者通过硬件和/或软件的任何适当组合来实现。
[0076]现在参照图14,图14示出计算机可读程序代码(CRPC) 1343的一个实施例。在所示实施例中,CRPC 1343包括:(I)指令集1402,用于从调度树数据库210来得到定义调度树的信息,(2)指令集1404,用于通过遍历调度树周期地从分组队列集合中选择分组队列,以及(3)指令集1406,用于将分组从所选分组队列移动到中间分组队列。
[0077]虽然以上描述了本发明的各个实施例,但是应当理解,它们仅作为举例而不是限制来提供。因此,本发明的广度和范围不应当受到上述示范实施例的任一个限制。此外,在其所有可能的变化中的上述元件的任何组合均由本发明包含,除非本文另加说明或者与上下文明显矛盾。
[0078]另外,虽然以上所述和附图所示的过程示为步骤的序列,但只是为了便于说明而这样做。相应地,预期可添加某些步骤,可省略某些步骤,可重新排列步骤的顺序,并且可并行执行某些步骤。
【权利要求】
1.一种分组调度设备,包括: 第一调度引擎,可操作以(a)从分组队列的第一集合中选择分组队列以及(b)将分组从所述所选分组队列移动到中间分组队列的第一集合中包含的中间分组队列,其中所述第一调度引擎配置成使用与调度节点的第一集合对应的信息来执行所述分组队列选择;第二调度引擎,可操作以(a)从分组队列的第二集合中选择分组队列以及(b)将分组从所述所选分组队列移动到中间分组队列的第二集合中包含的中间分组队列,其中所述第二调度引擎配置成使用与调度节点的第二集合对应的信息来执行所述分组队列选择; 第三调度引擎可操作以(a)从包括所述中间分组队列的第一集合和所述中间分组队列的第二集合的分组队列集合中选择分组队列以及(b)将分组从所述所选分组队列移动到传送队列; 分组传送器,配置成将分组从所述传送队列传送到通信链路上,其中所述第一调度引擎和所述第二调度引擎配置成相互无关地选择分组队列,使得状态信息无需在所述第一与第二调度引擎之间共享。
2.如权利要求1所述的分组调度设备,其中,所述第一和第二调度引擎是基于软件的调度引擎,以及所述第三调度引擎是作为专用集成电路(ASIC)中的逻辑来实现的基于纯硬件的调度引擎。
3.如权利要求1所述的分组调度设备,其中 所述分组队列的第一集合中包含的分组队列集合与第一分组流关联, 所述分组队列的第二集合中包含的分组队列集合与第二分组流关联,以及所述分组调度设备还包括分组接收和处理单元(PRPU),所述分组接收和处理单元配置成(a)接收分组,(b)确定所述分组所属的分组流,以及(C)将所述分组放入与所述分组流关联的分组队列。
4.如权利要求3所述的分组调度设备,其中 所述第三调度引擎可操作以从包括所述中间分组队列的第一集合、所述中间分组队列的第二集合和分组队列的第三集合的分组队列集合中选择分组队列, 所述分组队列的第三集合中包含的分组队列集合与第三分组流关联,以及所述PRPU配置成使得(a)当所述PRPU接收分组并且确定所述分组属于所述第一分组流时,所述PRPU将所述分组放入与所述第一分组流关联的所述分组队列集合中包含的所述分组队列之一,(b)当所述PRPU接收分组并且确定所述分组属于所述第二分组流时,所述PRPU将所述分组放入与所述第二分组流关联的所述分组队列集合中包含的所述分组队列之一,以及(c)当所述PRPU接收分组并且确定所述分组属于所述第三分组流时,所述PRPU将所述分组放入与所述第三分组流关联的所述分组队列集合中包含的所述分组队列之一中。
5.如权利要求1所述的分组调度设备,其中,所述调度节点的第一集合包括来自调度树的第一子树的调度节点,以及所述调度节点的第二集合包括来自所述调度树的不同的第二子树的调度节点。
6.如权利要求5所述的分组调度设备,还包括: 配置模块,配置成检查定义所述调度树的信息,向所述第一调度引擎指配所述调度树的第一子树,以及向所述第二调度引擎指配所述调度树的不同的第二子树。
7.如权利要求1所述的分组调度设备,其中,所述调度节点的第一集合包括也包含在所述调度节点的第二集合中的调度节点集合。
8.如权利要求1所述的分组调度设备,其中 与所述调度节点的第一集合对应的所述信息包括:(a)与所述调度节点的第一集合中包含的所述调度节点之一关联的第一最大数据速率信息,以及(b)识别第一调度算法的信息,以及 与所述调度节点的第二集合对应的所述信息包括:(a)与所述调度节点的第二集合中包含的所述调度节点之一关联的第二最大数据速率信息;以及(b)识别第二调度算法的信息。
9.如权利要求8所述的分组调度设备,其中 所述第一调度引擎配置成使用所述第一最大数据速率信息和所述第一调度算法来选择从其中移开分组的分组队列,以及 所述第二调度引擎配置成使用所述第二最大数据速率信息和所述第二调度算法来选择从其中移开分组的分组队列。
10.如权利要求1所述的分组调度设备,其中,所述第一调度引擎包括: 数据处理系统;以及 所述数据处理系统可访问的计算机可读介质,所述计算机可读介质存储计算机可读程序代码,所述计算机可读程序代码在由所述数据处理系统运行时使所述数据处理系统(a)从所述分组队列的第一集合中选.择分组队列,以及(b)将分组从所述所选分组队列移动到所述中间分组队列的第一集合中包含的中间分组队列。
11.一种分组调度方法,所述方法包括: 向第一调度引擎指配分组队列的第一集合; 向第二调度引擎指配分组队列的第二集合; 向所述分组队列的第一集合中包含的分组队列集合指配第一分组流; 向所述分组队列的第二集合中包含的分组队列集合指配第二分组流; 在网络元件的网络接口接收分组; 确定所述分组所属的分组流; 如果所述所接收分组属于所述第一分组流,则响应确定所述所接收分组属于所述第一分组流而将所述所接收分组放入向其指配所述第一分组流的所述分组队列集合中包含的所述分组队列之一;以及 如果所述所接收分组属于所述第二分组流,则响应确定所述所接收分组属于所述第二分组流而将所述所接收分组放入向其指配所述第二分组流的所述分组队列集合中包含的所述分组队列之一,其中 所述第一调度引擎(a)从所述分组队列的第一集合中选择分组队列,以及(b)将分组从所述所选分组队列移动到中间分组队列的第一集合中包含的中间分组队列, 所述第二调度引擎(a)从所述分组队列的第二集合中选择分组队列,以及(b)将分组从所述所选分组队列移动到中间分组队列的第二集合中包含的中间分组队列, 第三调度引擎(a)从包括所述中间分组队列的第一集合和所述中间分组队列的第二集合的分组队列集合中选择分组队列以及(b)将分组从所述所选分组队列移动到传送队列,以及 所述网络接口的分组传送器将分组从所述传送队列传送到通信链路上。
12.如权利要求11所述的方法,其中,所述第一调度引擎和所述第二调度引擎配置成相互无关地选择分组队列,使得状态信息无需在所述第一与第二调度引擎之间共享。
13.如权利要求11所述的方法,其中 所述第一调度引擎使用与包括分级设置调度节点的第一集合的第一调度树对应的信息来执行所述分组队列选择,以及 所述第二调度引擎配置成使用与包括分级设置调度节点的第二集合的第二调度树对应的信息来执行所述分组队列选择。
14.如权利要求13所述的方法,其中,所述调度节点的第一集合包括来自调度树的第一子树的调度节点,以及所述调度节点的第二集合包括来自所述调度树的不同的第二子树的调度节点。
15.如权利要求13所述的方法,其中 与所述调度节点的第一集合对应的所述信息包括:(a)与所述调度节点的第一集合中包含的所述调度节点之一关联的第一最大数据速率信息,以及(b)第一调度算法,以及 与所述调度节点的第二集合对应的所述信息包括:(a)与所述调度节点的第二集合中包含的所述调度节点之一关联的第二最大数据速率信息;以及(b)第二调度算法。
16.如权利要求15所述的方法,其中 所述第一调度引擎配置成使用所述第一最大数据速率信息和所述第一调度算法来选择从其中移开分组的分组队列,以及 所述第二调度引擎配置成使用所述第二最大数据速率信息和所述第二调度算法来选择从其中移开分组的分组队列。
17.如权利要求11所述的方法,其中,所述第一和第二调度引擎是基于软件的调度引擎,以及所述第三调度引擎是基于纯硬件的调度引擎。
18.如权利要求17所述的方法,其中,所述第一和第二调度引擎使用汇编代码来实现,以及所述第三调度引擎作为专用集成电路(ASIC)中的逻辑来实现。
19.如权利要求11所述的方法,其中 所述第三调度引擎从包括所述中间分组队列的第一集合、所述中间分组队列的第二集合和分组队列的第三集合的分组队列集合中选择分组队列, 将第三分组流指配给所述分组队列的第三集合中包含的分组队列集合,以及 所述方法还包括响应确定所述所接收分组属于所述第三分组流而将所述所接收分组放入向其指配所述第三分组流的所述分组队列集合中包含的所述分组队列之一。
20.如权利要求11所述的方法,还包括: 将第三分组流指配给(i)所述分组队列的第一集合中包含的分组队列集合以及(ii)所述分组队列的第二集合中包含的分组队列集合;以及 如果所述所接收分组属于所述第三分组流,则使用负荷平衡器来将所述所接收分组放入向其指配所述第三分组流的所述分组队列之一。
【文档编号】H04L12/863GK103444141SQ201280015841
【公开日】2013年12月11日 申请日期:2012年4月3日 优先权日:2011年4月5日
【发明者】T.林奇, P.林 申请人:瑞典爱立信有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1