具有多条调度巷道的调度器层级的制作方法

文档序号:7947857阅读:109来源:国知局
专利名称:具有多条调度巷道的调度器层级的制作方法
技术领域
本发明一个实施例涉及通信和计算机系统,尤其是路由器、分组交换系统和其他设备;更具体地说,一个实施例涉及包括独立调度器层级(ahierarchy of individual scheduler)的流水线调度器,其中独立调度器具有用于调度项目的多条调度巷道(1ane)(所述项目例如但不限于分组或者分组指示),使得不同优先级类别的项目可以相应地被传播过调度器层级。
背景技术
通信工业正快速改变以适应新兴技术和不断增加的客户需求。对新应用和现有应用的提高的性能的这种客户需求正驱动通信网络和系统提供商采用具有更高速度和更大容量(例如,更宽带宽)的网络和系统。在试图实现这些目标时,许多通信提供商采用的共同方法是利用分组交换技术。日益增长的公共和专用通信网络利用各种分组技术例如因特网协议(IP)而被构建和扩充。注意,除非明确陈述,否则不认为在本文档中描述或引用的内容是本申请的现有技术。
网络设备例如交换机或路由器一般接收、处理和转发或丢弃分组。另外,这种设备的入队组件接收各种大小分组的流,这些分组在输入缓冲器中被累积。每个分组被分析,并且适当数量的存储器空间被分配来存储分组。分组被存储在存储器中,同时某些属性(例如,一般从分组头部或其他源导出的目的地信息和其他信息)在分离的存储器中被维护。一旦整个分组被写到存储器中,该分组就变为适于处理,并且该分组的指示符一般被置于适当的目的地队列中用于根据某些调度方法而被服务。
在存在诸如分组交换系统的输出链路或接口或计算设备中的计算周期之类的资源争用时,重要的是根据某些优先级和/或公平策略分配和调度资源。此外,对分组和其他被调度项目进行调度和入队与出队所需的工作量也是重要的,尤其是随着系统的工作速率增加。许多不同的机制被单个调度器用来调度分组,下文将描述这些机制中的许多。
普通时分复用(TDM)是一种常用来在若干个客户端之间共享公共资源的方法。在预定时刻一次服务所有被调度的客户端中的一个,并且持续预分配的时间段,对于多应用来说这是一种非常有用的属性。这种方法常用来在高速通信链路上复用多个同步项目,例如在单个设施或者交织分组上复用多个电话呼叫。然而,在项目可能不需要它们的整个已分配时隙的动态环境中,例如在项目可能不需要或者仅需要特定已分配时隙的一部分时,则资源的带宽一般来说被浪费了。
普通轮询(RR)是另一种用于在若干个客户端之间共享公共资源的方法。所有客户端按照循环顺序被服务。在每个循环中,如果一个客户端合格则该客户端将被服务。在被服务时,每个客户端被许可发送一个分组。服务队列实现简单,并且可以以恒定时间执行,但是由于分组大小不同,所以带宽分配不公平。例如,某些高优先级或者较宽带宽的端口或者分组流可能不能获得它们期望的带宽量,尤其在服务一个大流量流和众多个较小的流量流或者在调度不同优先级的流量时可能就是这种情形。
在某些场景中,高优先级(例如,低等待时间)、有保证带宽、尽力而为流量(例如,剩余带宽)和其他类型的流量竞争公用资源。各种已知的调度方法被设计来向竞争公用资源的流量提供隔离、区分优选次序和公平带宽分配。这些被称作公平排队方法。例如加权公平排队(WFQ)、子时钟公平排队(SCFQ)和差额轮询/富余轮询(称作DRR)。
WFQ和SCFQ根据到达时间和先前链路利用率,以便计算要发送的下一个最佳分组。所接受的“理想”行为是逐位或者加权逐位轮询,这表明要发送的下一个分组应当是如果系统中当前所有分组每次轮询发送一位则应当已完成的分组(在基于分组的系统中这一般是不实际的)。在调度方法中包括到达时间以便计算理论上的理想离开时间一般要求在已分类列表中插入,这是最坏情形为O(logN)问题,其中N是已入队的分组的数目。
DRR是一种用于在客户端之间具有不同比率(即,某些客户端被允许消耗比其他的多的资源)的若干个客户端之间共享公用资源的方法。客户端之间的比率一般由被称作定额的参数定义。存在许多DRR的变体和不同的实现方式,包括下面所描述的。
DRR根据分配给每个队列的配额利用轮询服务来对队列进行服务。不同于传统的轮询,达到指定定额的多个分组可以被发送,从而导致每个队列发送至少一个定额的字节。如果每个队列的定额相等,则每个队列将消耗等量带宽。
这种DRR按照循环工作,其中一个循环是在具有要发送项目的队列间的一个轮询反复。一般而言,在队列被调度时,该队列被允许传输直到其差额变为负(或者非正),然后下一个队列被服务。在不同流上进入的分组被存储在不同队列中。每个循环、每个队列被分配以等于定额的字节,这些字节被添加到每个队列的差额。在一个DRR循环中,允许每个队列发送出一个或多个分组,在一个循环中被发送的确切分组数目取决于其差额和被发送的分组的大小。一般而言,在一个DRR循环中只要队列的差额为正(或者非负)值(即,其被授权发送分组),并且该队列具有一个或多个分组要发送,则发送分组并且基于发送的分组的大小减小其差额。如果在队列已得到服务后该队列中不再有分组,则一种实现方式将预该队列相对应的差额设置为0,而一种实现方式仅在队列差额为负时才执行该动作。否则,剩余量(即,差额减已发送的分组数目)被维持用于下一DRR循环。
DRR是一种不依赖于实际到达时间并且具有复杂度O(1),即所需工作量恒定,并且独立于已入队的分组数目。为了省力,每次队列被调度时不管分组的大小分组都应被发送。因此,在DRR中使用的额度应当至少为一个最大分组大小(MTU),以保证在额度被添加到任何差额时,结果值至少为零。DRR提供了公平的带宽分配,并且易于实现。由于DRR的O(1)属性所以也省力,在更高链路速度和更多队列的情况下DRR也扩展良好。然而,其调度行为偏离逐位轮询“理想”相当多。具体而言,具有N个队列的系统的等待时间为Q*N,其中Q是平均额度,其必须为至少一个最大传输单元(MTU)。
对于调度单层服务,这些调度技术可以工作很好。但是,带宽基于字节和流量集合被出售给最终客户。例如,客户可能订购了具有不同延迟和带宽需求的某些流量类型,例如,语音、视频、游戏、电子邮件、即时消息和因特网浏览。这些流量类型中的一些可能对时间和延迟非常敏感,而其他流量类型可能利用尽力而为来服务不会对服务带来太多影响。另外,这种流量可以被汇集到数字订户线路(DSL)或者虚拟LAN(VLAN)中,这些一般具有它们自己的服务需求,具体而言包括最大订购速率。如果管制函数被用来限制流量速率,则分组一般被丢弃或者服务被被压。然而,不区分地丢弃分组或者加速所有类型的流量尤其可能影响对延迟和带宽敏感的服务(例如,语音和视频服务)。所以,需要新方法来容纳不同的流量类型和集合。

发明内容
除了其他以外,这里公开了方法、装置、数据结构、计算机可读介质和机制,可以包括或者与独立调度器的层级一起使用,其中独立调度器具有用于调度项目的多条调度巷道(所述项目例如但不限于分组或者分组指示),使得不同优先级类别的项目可以相应地被传播过调度器层级。一个实施例包括具有根调度器和一层或者多层调度器的流水线调度器,这些层中的每层包括至少一个调度器。流水线调度器中的每个调度器被配置为维护不同调度类别的项目,并且对将当前维护的不同调度类别的项目发送到其父调度器或者外部调度器客户端进行调度,其中所述项目是如果在流水线调度器内存在特定调度器的直接子调度器的话从每个直接子调度器接收到的,和/或如果有耦合到特定调度器的直接外部源的话从每个直接外部源接收到的。


所附权利要求书具体阐述了本发明的特征。结合附图从下面的详细描述可以最好地理解本发明及其优点,其中图1A是在一个实施例中使用的示例性层级流水线调度器的框图;图1B是在一个实施例中使用的示例性层级流水线调度器的框图;
图2是示出了在一个实施例中使用的父调度器和其子调度器之一的框图;图3A-C是在一个实施例用于将项目传播过层级流水线调度器的过程的流程图;以及图4是在一个实施例中使用的调度器的框图。
具体实施例方式
除了其他以外,这里公开了方法、装置、数据结构、计算机可读介质和机制,可以包括或者与独立调度器的层级一起使用,其中独立调度器具有用于调度项目的多条调度巷道(所述项目例如但不限于分组或者分组指示),使得不同优先级类别的项目可以相应地被传播过调度器层级。
这里所述实施例包括各种元素和限制,但是没有一个元素和限制被设想为是关键的元素或限制。每个权利要求整体独立地引用本发明的一个方面。此外,这里所述的一些实施例可能包括但不限于系统、网络、集成电路芯片、嵌入式处理器、ASIC、方法,以及包含指令的计算机可读介质等。一个或多个系统、设备、组件等可以包括一个或多个实施例,实施例可以包括由相同或不同系统、设备和组件等要求的一些元素和限制。下文所述实施例体现了本发明范围和精神内的各个方面和配置,附图示出了示例性的非限定配置。
这里所使用的术语“分组”指所有类型的分组或者任何其他信息或数据单元,包括但不限于固定长度信元和可变长度分组,每个都可以或者不可以被划分成更小的分组或信元。这里所使用的术语“分组”还指分组自身或者分组头部或者这二者,例如但不限于分组或分组头部的全部或一部分、数据结构值、指针或索引、或者这里所关联的分组或信息的任何其他部分或者直接或间接指示。例如,通常路由器对分组尤其是分组头部的一个或多个字段进行操作,而在操纵分组头部的同时分组体通常被存储在分离的存储器中,并且基于对分组(即,本示例中的分组头部)进行处理的结果,整个分组被转发或丢弃,等等。另外,这些分组可以包含一种或多种信息,包括但不限于语音、数据、视频和音频信息。这里一般使用的术语“项目”指分组或者任何其他信息或数据单元或片断、设备、组件、元件或任何其他实体。术语“处理分组”和“分组处理”一般指基于分组的内容执行一些步骤或动作(例如,分组头部或其他字段),并且这种步骤或动作可能或者可能不包括修改、存储、丢弃和/或转发分组和/或关联数据。
术语“系统”在这里被总地用来描述任何数量的组件、元件、子系统、设备、分组交换元件、分组交换机、路由器、网络、计算机和/或通信设备和机构,或者它们的组件的组合。术语“计算机”在这里总地用来描述任何数量的计算机,包括但不限于个人计算机、嵌入式处理元件和系统、控制逻辑、ASIC、芯片、工作站、主机等。术语“处理元件”在这里总地用来描述任何类型的处理机构或设备,例如处理器、ASIC、现场可编程门阵列、计算机等。术语“设备”在这里总地用来描述任何类型的机构,包括计算机或系统或它们的组件。术语“任务”和“进程”在这里总地用来描述任何类型的运行程序,包括但不限于计算机进程、任务、线程、正执行的应用程序、操作系统、用户进程、设备驱动器、原代码、机器或其他语言等,并且可以是交互式的和/或非交互式的,本地执行和/或远程执行的,前台执行和/或后台执行的,在用户地址空间和/或操作系统地址空间中执行的,库中的例程和/或单独的应用程序,并且不限于任何具体存储器分区技术。图(包括但不限于任何框图和流程图、以及消息序列图)中所示步骤、连接、对信号和信息的处理一般可按照相同或者不同的串行或并行排序执行,并且/或者可由不同的组件和/或进程、线程等执行,并且/或者通过不同的连接,并且被与其他实施例中的其他功能组合,除非这使该实施例不能实现或者明确地或隐含地要求了序列之外(例如,对与对值进行读和对该值进行处理的序列,该值必须在对其进行处理之前被获得,尽管关联处理中的一些可以在读操作之前、与读操作并发地和/或在读操作之后被执行)。此外,术语“标识”总地用来描述用于直接或间接地确认某些内容的方式和机制,其可以包括但不限于接收、从存储器提取、确定、定义、计算和产生等。
此外,术语“网络”和“通信机制”在这里总地用来描述一个或多个网络、通信介质或通信系统,包括但不限于因特网,专用或公共电话、蜂窝、无线、卫星、线缆、局域、城域和/或广域网,线缆、电连接、总线等,以及内部消息通信机制,例如,消息传递、进程间通信、共享存储器等。术语“消息”在这里总地用来描述一片信息,该片信息可能或者可能不但是一般经由任何类型的一个或多个通信机构传输。
术语“存储机构”包括任何类型的存储器、存储设备或者用于保存任何格式的指令或数据的其他机制。“计算机可读介质”是一个可扩展的术语,包括任何存储器、存储设备、存储机构,以及包括诸如网络接口卡和其中的缓冲器之类的接口和设备在内的其他存储和信令机制,任何通信设备和接收到和传输的信号,以及计算机化的系统可以中断、接收和/或传输的任何当前和将来的技术。术语“存储器”包括任何随机存取存储器(RAM)、只读存储器(ROM)、闪存、集成电路和/或其他存储组件或元件。术语“存储设备”包括任何固态存储介质、盘驱动、盘、联网服务、带驱动和其他存储设备。存储器和存储设备可以存储将由处理元件和/或控制逻辑执行的计算机可执行指令,以及由处理元件和/或控制逻辑操纵的数据。术语“数据结构”是一个可扩展的术语,指任何数据元素、变量、数据结构、数据库和/或一种或多种有组织的方案,这些有组织的方案可以被应用到数据来辅助解释数据或者对数据执行操作,例如但不限于存储器位置或设备、集合、队列、树、堆、列表、链接表、数组、表、指针等。数据结构一般存储在存储机构中。术语“指针”和“链接”在这里总地用来标识一些机制,这些机制用来引用或标识另一个元素、组件或者其他实体,并且可能包括但不限于对存储器或其他存储机构或其中的位置的引用、数据结构中的索引、值等。
术语“一个实施例”在这里被用来指特定的实施例,其中每次引用“一个实施例”可能指不同的实施例,并且这里在描述关联的特征、元素和/或限制时重复使用该术语不是要建立每个和所有实施例必须包括的关联特征、元素和/或限制的累积集合,尽管实施例一般可能包括所有这些特征、元素和/或限制。另外,短语“用于xxx的装置”一般包括包含用于执行xxx的计算机可执行指令的计算机可读介质。
另外,术语“第一”、“第二”等一般在这里用来表示不同的单元(例如,第一元素、第二元素)。这里使用这些术语不一定意味着例如一个单元或事件在另一个之前发生或到来这样的顺序,而是提供了一种机制来区分具体单元。另外,使用单数名词不是限制,其使用一般包括一个或多个具体的事物而不是仅一个(例如,使用词“存储器”一般指一个或多个存储器,而不是必然指“一个或多个存储器”或者“至少一个存储器”等。)此外,短语“基于x”和“响应于x”用来指示从其可导出或者导致某些事物的项目x的最小集合,其中“x”是可扩展的并且不一定描述对其执行操作的项目的完整列表,等等。另外,短语“耦合到”被用来指示两个元件或设备之间的某种级别的直接或间接连接,同时一个或多个耦合设备修改或者不修改耦合的信号或传输的信息。术语“子集”被用来指示一个集合中的全部或者少于全部元素的群组。术语“子树”被用来指示树中的全部或者少于全部。此外,术语“或”这里被用来标识一个或多个包括全部连接项目的选集。
除了其他以外,这里公开了方法、装置、数据结构、计算机可读介质和机制,可以包括或者与独立调度器的层级一起使用,其中独立调度器具有用于调度项目的多条调度巷道(所述项目例如但不限于分组或者分组指示),使得不同优先级类别的项目可以相应地被传播过调度器层级。一个实施例包括流水线调度器,该流水线调度器具有根调度器和一层或者多层调度器,这些层中的每层包括至少一个调度器。流水线调度器的每个调度器被配置为维护不同调度类别的项目,以对将当前维护的不同调度类别的项目发送到其父调度器或者外部调度器客户端进行调度,其中所述项目是如果在所述流水线调度器内存在该特定调度器的直接子调度器的话从每个直接子调度器接收到的和/或如果有耦合到该特定调度器的直接外部源的话从每个直接外部源接收到的。
在一个实施例中,不同调度类别包括高优先级流量类别和基于速率的流量类别。在一个实施例中,流水线调度器中的每个调度器独立于流水线调度器中的其他调度器调度流量。在一个实施例中,对流量进行调度包括对与基于速率的流量类别相对应的项目进行基于速率的调度。在一个实施例中,不同调度类别还包括的优先级流量类别。在一个实施例中,低优先级流量类别是直接低于高优先级的流量和高于另一种调度类别的流量(例如,基于速率的流量、较低严格优先级类别、基于速率服务的类别,等等。)在一个实施例中,对于不同类别的流量中的每种,调度器利用相同的调度机制。在一个实施例中,调度器利用多种不同的调度机制,以便适当地调度不同调度类别(例如,对基于速率的流量进行调度一般不同于对基于严格优先级流量的调度)。在一个实施例中,项目是分组或与分组相对应的指示。
在一个实施例中,流水线调度器的每个特定父调度器在一层或多层调度器中有一个或多个子调度器,响应于选择不同调度类别中的特定调度类别的项目转发到其父调度器,其中所述项目是从特定父调度器的一个或多个子调度器中的相应子调度器接收到的,所述特定父调度器被配置为从相应子调度器请求特定调度类别的下一个项目。在一个实施例中,相应子调度器被配置为响应于对下一个项目的请求,将不同调度类别中具有至少特定调度类别的优先级的调度类别的最佳被调度项目从该相应子调度器转发到其父调度器。在一个实施例中,相应子调度器被配置为响应于对特定调度类别的下一个项目的请求,将特定父调度器中的特定调度类别的最佳被调度项目转发到其父调度器。在一个实施例中,相应子调度器被配置为在其当前不具有特定调度类别的项目时,响应于对特定调度类别的下一个项目的请求,维护来自特定调度器的其父调度器对特定调度类别的最佳被调度项目的需求的指示。在一个实施例中,相应子调度器被配置为响应于所维护的其父调度器对特定调度类别的最佳被调度项目的需求的指示和接收到特定调度类别的新项目,将特定调度类别的新项目转发到特定父调度器。
在一个实施例中,流水线调度器的每个调度器包括存储装置,用于为其直接子调度器或外部源中的每个存储不同调度类别中的每种的一个项目。在一个实施例中,流水线调度器的每个调度器包括第一调度机构和第二调度机构,所述第一调度机构用于对不同调度类别中的第一类别进行调度,所述第二调度机构用于对不同调度类别中的第二类别进行调度,其中所述第一和第二调度机构利用不同调度技术调度项目。在一个实施例中,一层或多层调度器中的每个调度器被配置为标识出其父调度器是否需要不同调度类别中的特定类别的项目,并且至少响应于接收到该特定类别的特定项目和标识出父需要该特定类别的项目,将特定项目转发到父调度器。
一个实施例在包括调度器层级的流水线调度器中对与多种不同优先级调度类别相对应的项目进行调度,所述调度器层级包括具有多个特定子调度器和一个特定父调度器的特定调度器。一个实施例接收来自特定父调度器的请求,所述请求包括多种不同优先级调度类别中的特定调度类别的标识。响应于接收到该请求,当前存储的从多个特定子调度器接收到并且与该特定调度类别相对应的项目中的最佳项目被转发到特定父调度器,其中所述最佳项目是从多个特定子调度器中的一个特定子调度器接收到的。另外,从所述一个特定子调度器请求特定调度类别的替换项目。
一个实施例在包括调度器层级的流水线调度器中对与多种不同调度类别相对应的项目进行调度,所述调度器层级包括具有多个特定子调度器和一个特定父调度器的特定调度器。一个实施例接收来自特定父调度器的请求,所述请求包括多种不同调度类别中的特定调度类别的标识。响应于接收到该请求,标识出特定父调度器当前不具有优先级比特定调度类别高的调度类别的项目,然后当前存储的从多个特定子调度器接收到并且与优先级比特定调度类别高的调度类别相对应的项目中的最佳项目被转发到特定父调度器,其中所述最佳项目是从多个特定子调度器中的一个特定子调度器接收到的,然后从所述一个特定子调度器请求所述较高优先级调度类别的替换项目。
一个实施例在包括调度器层级的流水线调度器中对与多种不同调度类别相对应的项目进行调度,所述调度器层级包括具有多个特定子调度器和一个特定父调度器的特定调度器。一个实施例接收来自多个特定子调度器中的一个特定子调度器的特定项目,所述特定项目与多种不同调度类别中的特定调度类别相对应。识别出父调度器不具有来自特定调度器的与特定调度类别相对应的项目,并且响应于此将该特定项目发送到特定父调度器。
在一个实施例中,特定调度器维护父状态数据结构,所述父状态数据结构指示特定父调度器是否期望多种不同调度类别中的每种特定调度类别的项目。在一个实施例中,识别特定父调度器是否具有来自特定调度器的与特定调度类别相对应的项目包括检查父状态数据结构。在一个实施例中,父调度器将多种不同调度类别中的不同类别的项目转发到其父中的多种不同调度类别中的单个类别。在一个实施例中,父调度器的父将从该父调度器中的至少两种不同调度类别接收到的项目作为从多种不同调度类别中的同一种调度类别接收到的对待。
一个实施例在包括调度器层级的流水线调度器中对与多种不同优先级调度类别相对应的项目进行调度,所述调度器层级包括具有多个特定子调度器和一个特定父调度器的特定调度器。一个实施例维护特定父调度器需要的项目的多种不同优先级调度类别中的每个的指示。特定父调度器的请求被接收到,所述请求包括多种不同优先级调度类别中的特定调度类别的标识。特定父调度器需要的项目的多种不同优先级调度类别中的每种的指示被更新来反映所接收到的请求。基于特定父调度器需要的项目的多种不同优先级调度类别中的每种的指示,多种不同优先级调度类别中的被标识调度类别被标识出,并且响应于此将当前存储的从多个特定子调度器接收到并且与被标识调度类别相对应的项目中的最佳项目转发到特定父调度器,其中所述最佳项目是从多个特定子调度器中的一个特定子调度器接收到的,然后从所述一个特定子调度器请求被标识调度类别的替换项目。
在一个实施例中,所标识出的调度类别与特定调度类别相同。在一个实施例中,所标识出的调度类别是优先级比特定调度类别高的调度类别。在一个实施例中,所标识出的调度类别是多种不同优先级调度类别中最高优先级的调度类别,其中所标识出的调度类别的项目可用来转发到特定父调度器,并且所标识出的调度类别的项目在指出特定父调度器需要项目的指示中被标识为需要的。
在一个实施例中,项目是分组或者与分组相对应的指示。在一个实施例中,最佳项目是速率调度的,并且特定调度器包括速率调度数据结构,并且所述方法还包括基于最佳项目更新速率调度数据结构。
图1A是在一个实施例中使用的示例性层级流水线调度器110的框图。如图所示,项目151-156被层级流水线调度器110接收到,并且被传播过一个或多个调度器121-144到达调度器111,然后被转发到调度器客户端100。调度器111有时被称作根调度器,因为其对应于由调度器121-144形成的树的根。调度器111-144中的每个独立地对流量进行调度,所述流量一般包括两种或更多种不同的调度类别(例如,高优先级流量、低优先级流量、基于速率的流量等)。通过提供与不同流量类别相对应的多条调度巷道,较高优先级的项目可以在不被较低优先级流量阻塞或者在较低优先级流量之后等待的情况下传播过层级流水线调度器110。注意,每个调度器一般具有单个父调度器或者外部客户端,以及一个或多个子调度器和/或外部项目源。在利用层级流水线调度器的实施例中调度器的数目和它们的布置一般基于该实施例的应用的需求确定。
图1B示出了在项目为分组或者与分组相对应的指示的上下文中对层级流水线调度器170的示例应用。注意,层级流水线调度器的一个实施例被用于对进入分组流量进行调度,并且层级流水线调度器的一个实施例用于对外出分组流量进行调度。在所示示例中,层级流水线调度器170负责对发送从分组队列195-198接收到的分组进行调度。层级流水线调度器170利用多个调度层来实现该功能服务类调度层利用调度器191-194,调度器191-194的父调度器181-182对应于VLAN调度层,调度器181-182的父调度器171对应于端口调度器,调度器171将分组或分组指示提供给调度器客户端160,调度器客户端160对应于接口。
调度器171-194中的每个独立调度流量,流量一般包括两种或者更多种不同调度类别(例如,高优先级流量、低优先级流量、基于速率的流量等)。通过提供与不同流量类别相对应的多条调度巷道,较高优先级的分组或者分组指示可以在不被较低优先级流量阻塞或者在较低优先级流量之后等待的情况下传播过层级流水线调度器110。注意,每个调度器一般具有单个父调度器或者外部客户端,以及一个或多个子调度器和/或外部项目源。在利用层级流水线调度器的实施例中调度器的数目和它们的布置一般基于该实施例的应用的需求确定。
图2用来描述在一个实施例中使用的父调度器200和其子调度器之一240。如图所示,父调度器200包括存储设备201-203,用于针对每种调度类别(例如,高优先级流量、低优先级流量、基于速率的流量或者与该实施例的应用的需求相匹配的任何流量)存储从其子调度器(240和其他未示出的)中的每个接收到的项目。通过按照调度类别隔开从不同子调度器接收到的项目,父调度器200能够在其他流量之前传播不同类型或者优先级的流量,即使其他流量先被接收到也如此。类似地,子调度器240包括存储设备241-243,用于针对每种调度类别存储从其子调度器中的每个接收到的项目。
任何类型的调度机制都可以用来从接收自其自调度器或外部源的项目中标识出最佳项目。例如,一个实施例利用两类流量类别高优先级流量和基于速率的流量。高优先级流量的项目被调度为严格在任何基于速率的项目之前被转发,而基于速率的流量在剩余带宽中被调度(例如,利用日历调度器、DRR或者其他调度机制)。
一个实施例还维护一个或多个数据结构,这些数据结构指示其当前已存储的流量类别和其父调度器已存储或者需要从其获得的那些类别。例如,父调度器200维护父状态信息211和其调度状态信息212,并且自调度器240维护父状态信息251(即,对应于父调度器200)和其调度状态信息252。这样,子调度器可以轻易地确定(例如,基于对其维护父状态信息和自己的状态信息进行比较)其可用来转发到其父调度器并且与其父调度器的需求相匹配的的流量类型。在一个实施例中,每个调度器存储一直到来自其子调度器或者外部项目源中的每个的每种类别的单个项目,并且利用一个或多个位图来维护这种状态信息。在一个实施例中,每个调度器存储一直到来自其子调度器或外部项目源中的每个的每种类别多于一个项目,并且利用一组或多组计数器来维护这种状态信息。注意,在一个实施例中,一种或多种调度类别被发送调度器和/或接收调度器合并到较少的和/或单种调度类别中。
图3A示出了在一个实施例中用于在启动后或者响应于针对特定调度类别的项目对该子调度器的先前未完成的请求将项目传播到父调度器的过程。处理开始于过程块300。在过程块302中确定先前是否已接收到项目,然后在过程块304中,项目被存储到针对调度类别的与发送子调度器或者外部源相对应的项目存储设备中。在过程块306中确定该调度类别的项目是否为父调度器所需。在一个实施例中,这是通过将其父状态数据结构中的所需项目的指示与其调度状态数据结构中的其已从其子接收到的项目的指示进行比较标识出的。注意,在一个实施例中,如果由于流控制或其他机制已暂停传播项目的对应调度类别,则不考虑转发这些项目(这里考虑了其他转发判决)。
如在过程块306中所确定的,如果该调度类别的项目为父调度器所需的,则在过程块308中,对应的项目被发送到父,并且父状态和调度状态数据结构被更新。然而,在一个实施例中,过程块306中的确定是某种或者更高优先级调度类别的项目是否为父所需,并且所需的与最高优先级调度类别相对应的项目(一般处于或者高于所接收到的项目的调度类别)在过程块308中被转发到父。处理然后返回到过程块302。
图3B示出了在一个实施例中用于对已从其子调度器或外部源接收到的项目进行调度的过程。处理开始于过程块340。如过程块341所示,处理被延迟或者阻止直到父调度器或者客户端需要项目为止。然后,在过程块342中确定调度器是否具有项目要发送(并且在一个实施例中是发送下一个项目的时刻),然后在过程块344中,确定出(或者已确定出)要被转发到父调度器或者客户端的最佳项目(一般是父所需的最高优先级调度类别的),并且发送该最佳项目。该调度器的父状态和调度状态数据结构相应地被更新。另外,如果该项目是基于速率的项目,则速率调度数据结构被更新。
注意,层级调度器允许不同实施例使用不同调度机制,同时提供机制来调度从若干个子调度器或者外部源接收到的流量,并且还允许较高优先级的流量在不必在较低优先级流量之后等待的情况下被传播过调度器流水线。注意,在一个实施例中,一种或多种调度类别被发送调度器和/或接收调度器合并到更少和/或单种调度类别中。
在过程块346中,对替换项目的请求被发送到从其接收到已发送项目的子调度器或者外部源,这一般是随同对已发送项目所属的流量类别的指示一起发送的。处理然后返回到过程块342。
图3C示出了在一个实施例中用于响应于来自父的对特定调度类别的项目的请求向该父调度器传播项目的过程。处理开始于过程块360。在过程块362中确定请求是否已被接收到,然后在过程块364中,父数据结构(其一般标识出其父所需的调度类别和每种调度类别的项目的可能数目)基于所接收到的请求被更新。在过程块366中,确定调度器当前是否具有项目要发送到父调度器或者外部客户端。在一个实施例中,这种确定是仅检查看其是否具有于所接收到的请求相对应的调度类别的项目(例如,通过检查项目存储装置或调度状态数据结构)。在一个实施例中,如果一个调度器的父调度器当前正存储从该调度器接收到的较高优先级的项目,则即使该项目被存储在该调度器中,该确定也被强制为否。换言之,在该调度器的状态确定父调度器没有更高优先级的项目之前,项目将不被转发到其父调度器。这将不会延迟对项目的调度,因为父调度器在确定其下一个被调度项目时将一般仅考虑从其子接收到的最高优先级类别的项目。因此,通过延迟其传播,这种较低优先级项目决不会被父调度器转发,同时更好的项目可能被该调度器接收到或者确定,这种方法可以消除由一种实现方式引入的赛跑状况。
如过程块366所确定,如果调度器具有项目要发送到父,则在过程块368中,最佳替换项目从接收自其子调度器或者外部源中的每个的那些项目中被选出,然后所选项目被发送到父,并且调度状态和父状态数据结构相应地被更新。在一个实施例中,该项目总是与在接收到的请求中指示出的调度类别相同调度类别的。在一个实施例中,该项目是父所需的最高优先级调度类别的项目。在过程块370中,对与被转发到父的项目相同调度类别的替换项目的请求被发送到从其接收到已发送到父的项目的子调度器或外部源。处理然后返回到过程块362。
图4是在实现层级流水线调度器(不管整个层级流水线调度器还是仅其调度器中的一个或多个)时使用的示例性系统或组件400的框图。在一个实施例中,系统或组件400执行与已示出的或者这里另行描述的流程图之一相对应的一个或多个过程。
在一个实施例中,组件400包括处理元件401(例如,处理器、专用逻辑等)、存储器402、存储设备403和用于接收和发送分组、项目和/或其他信息的接口404,它们一般经由一个或多个通信机构409(为了说明示作总线)耦合。组件400的各种实施例可以包括更多或更少的元件。组件400的操作一般由处理元件401利用存储器402和存储设备403控制来执行一个或多个调度任务或过程。存储器402是一种计算机可读介质,并且一般包括随机存取存储器(RAM)、只读存储器(ROM)、闪存、集成电路和/或其他存储器组件。存储器402一般存储要由处理元件401执行的计算机可执行指令和/或由处理元件401操纵的数据,用于实现根据本发明的功能。存储设备403是另一种计算机可读介质,并且一般包括固态存储介质、盘驱动、盘、联网服务、带驱动和其他存储设备。存储设备403一般存储要由处理元件401执行的计算机可执行指令和/或由处理元件401操纵的数据,用于根据本发明实现功能。
考虑本发明可以被应用到的许多可能实施例,将意识到这里结合附图所述的本发明的实施例和各个方面仅是说明性的,并且不应认为是对本发明范围的限制。例如,本领域技术人员将清楚,过程块操作中的许多可以被重新排序来在其他操作之前、之后或者基本并发执行。另外,在各个实施例中也可以使用许多不同形式的数据结构。这里所述的发明设想所有这些实施例都在所附权利要求书及其等同物的范围内。
权利要求
1.一种流水线调度器,包括根调度器和一层或者多层调度器,所述一层或多层中的每层包括至少一个调度器,所述一层或多层调度器中的每个调度器被配置为将所选被调度项目传输到所述流水线调度器中其父调度器;其中所述流水线调度器的每个调度器被配置为维护不同调度类别的项目,并且基于与当前维护的不同调度类别的所述项目相对应的优先级对将当前维护的所述不同调度类别的所述项目发送到其父调度器或者外部调度器客户端进行调度,其中所述项目是如果在所述流水线调度器内存在所述特定调度器的直接子调度器的话从每个所述直接子调度器接收到的,或者如果有耦合到所述特定调度器的直接外部源的话从每个所述直接外部源接收到的。
2.如权利要求1所述的流水线调度器,其中,所述不同调度类别包括高优先级流量和基于速率的流量类别;并且其中所述对流量进行调度包括基于速率对与所述基于速率的流量类别相对应的项目进行调度。
3.如权利要求2所述的流水线调度器,其中,所述不同调度类别还包括低优先级流量类别。
4.如权利要求1所述的流水线调度器,其中,所述流水线调度器的每个特定父调度器在所述一层或多层调度器中有一个或多个子调度器,响应于选择所述不同调度类别中的特定调度类别的项目转发到其父调度器,其中所述项目是从所述特定父调度器的所述一个或多个子调度器中的相应子调度器接收到的,所述特定父调度器被配置为从所述相应子调度器请求所述特定调度类别的下一个项目。
5.如权利要求4所述的流水线调度器,其中,所述相应子调度器被配置为响应于所述对下一个项目的请求,将所述不同调度类别中具有至少所述特定调度类别的优先级的调度类别的最佳被调度项目从所述相应子调度器转发到其父调度器。
6.如权利要求4所述的流水线调度器,其中,所述相应子调度器被配置为响应于所述对所述特定调度类别的下一个项目的请求,将所述特定父调度器中的所述特定调度类别的最佳被调度项目转发到其父调度器。
7.如权利要求4所述的流水线调度器,其中,所述相应子调度器被配置为在其当前不具有所述特定调度类别的项目时,响应于所述对所述特定调度类别的下一个项目的请求,维护来自所述特定调度器的其父调度器对所述特定调度类别的最佳被调度项目的需求的指示。
8.如权利要求7所述的流水线调度器,其中,所述相应子调度器被配置为响应于所维护的其父调度器对所述特定调度类别的最佳被调度项目的需求的指示和接收到所述特定调度类别的新项目,将所述特定调度类别的新项目转发到所述特定父调度器。
9.如权利要求1所述的流水线调度器,其中,所述项目是分组或者与分组相对应的指示。
10.如权利要求1所述的流水线调度器,其中,所述流水线调度器的每个调度器包括存储装置,用于为其直接子调度器或外部源中的每个存储所述不同调度类别中的每种的一个项目。
11.如权利要求1所述的流水线调度器,其中,所述流水线调度器的每个调度器包括第一调度机构和第二调度机构,所述第一调度机构用于对所述不同调度类别中的第一类别进行调度,所述第二调度机构用于对所述不同调度类别中的第二类别进行调度,其中所述第一和第二调度机构利用不同调度技术调度项目。
12.如权利要求1所述的流水线调度器,其中,所述一层或多层调度器中的每个调度器被配置为标识出其父调度器是否需要不同调度类别中的特定类别的项目,并且至少响应于接收到所述特定类别的特定项目和所述标识出所述父需要所述特定类别的项目,将所述特定项目转发到所述父调度器。
13.一种用于在包括调度器层级的流水线调度器中对与多种不同优先级调度类别相对应的项目进行调度的方法,所述调度器层级包括具有多个特定子调度器和一个特定父调度器的特定调度器,所述特定调度器执行包括以下步骤的操作接收来自所述特定父调度器的请求,所述请求包括所述多种不同优先级调度类别中的特定调度类别的标识;以及响应于接收到所述请求,将当前存储的从所述多个特定子调度器接收到并且与所述特定调度类别相对应的项目中的最佳项目转发到所述特定父调度器,其中所述最佳项目是从所述多个特定子调度器中的一个特定子调度器接收到的,然后从所述一个特定子调度器请求所述特定调度类别的替换项目。
14.如权利要求13所述的方法,其中,所述项目是分组或者与分组相对应的指示。
15.如权利要求13所述的方法,其中,所述最佳项目是速率调度的,并且所述特定调度器包括速率调度数据结构,并且所述方法还包括基于所述最佳项目更新所述速率调度数据结构。
16.一种用于在包括调度器层级的流水线调度器中对与多种不同调度类别相对应的项目进行调度的方法,所述调度器层级包括具有多个特定子调度器和一个特定父调度器的特定调度器,所述特定调度器执行包括以下步骤的操作接收来自所述特定父调度器的请求,所述请求包括所述多种不同调度类别中的特定调度类别的标识;响应于接收到所述请求,标识出所述特定父调度器当前不具有优先级比所述特定调度类别高的调度类别的项目;以及将当前存储的从所述多个特定子调度器接收到并且与优先级比所述特定调度类别高的调度类别相对应的项目中的最佳项目转发到所述特定父调度器,其中所述最佳项目是从所述多个特定子调度器中的一个特定子调度器接收到的,然后从所述一个特定子调度器请求所述较高优先级调度类别的替换项目。
17.如权利要求16所述的方法,其中,所述项目是分组或者与分组相对应的指示。
18.如权利要求16所述的方法,其中,所述最佳项目是速率调度的,并且所述特定调度器包括速率调度数据结构,并且所述方法还包括基于所述最佳项目更新所述速率调度数据结构。
19.一种用于在包括调度器层级的流水线调度器中对与多种不同调度类别相对应的项目进行调度的方法,所述调度器层级包括具有多个特定子调度器和一个特定父调度器的特定调度器,所述特定调度器执行包括以下步骤的操作接收来自所述多个特定子调度器中的一个特定子调度器的特定项目,所述特定项目与所述多种不同调度类别中的特定调度类别相对应;以及识别出所述父调度器不具有来自所述特定调度器的与所述特定调度类别相对应的项目,并且响应于此将所述特定项目发送到所述特定父调度器。
20.如权利要求19所述的方法,其中,所述特定调度器维护父状态数据结构,所述父状态数据结构指示所述特定父调度器是否期望所述多种不同调度类别中的每种特定调度类别的项目。
21.如权利要求20所述的方法,其中,所述识别所述特定父调度器是否具有来自所述特定调度器的与所述特定调度类别相对应的项目包括检查所述父状态数据结构。
22.如权利要求19所述的方法,其中,所述项目是分组或者与分组相对应的指示。
23.如权利要求19所述的方法,其中,所述最佳项目是速率调度的,并且所述特定调度器包括速率调度数据结构,并且所述方法还包括基于所述最佳项目更新所述速率调度数据结构。
24.如权利要求19所述的方法,其中,所述父调度器将所述多种不同调度类别中的不同类别的项目转发到其父中的所述多种不同调度类别中的单种类别。
25.如权利要求19所述的方法,其中,所述父调度器的父将从所述父调度器中的至少两种不同调度类别接收到的项目作为从所述多种不同调度类别中的同一种调度类别接收到的对待。
26.一种用于在包括调度器层级的流水线调度器中对与多种不同优先级调度类别相对应的项目进行调度的方法,所述调度器层级包括具有多个特定子调度器和一个特定父调度器的特定调度器,所述特定调度器执行包括以下步骤的操作维护所述特定父调度器需要的项目的所述多种不同优先级调度类别中的每种的指示;接收来自所述特定父调度器的请求,所述请求包括所述多种不同优先级调度类别中的特定调度类别的标识;对所述特定父调度器需要的项目的所述多种不同优先级调度类别中的每种的指示进行更新来反映所接收到的请求;以及基于所述特定父调度器需要的项目的所述多种不同优先级调度类别中的每种的指示标识出所述多种不同优先级调度类别中的被标识调度类别,并且响应于此将当前存储的从所述多个特定子调度器接收到并且与所述被标识调度类别相对应的项目中的最佳项目转发到所述特定父调度器,其中所述最佳项目是从所述多个特定子调度器中的一个特定子调度器接收到的,然后从所述一个特定子调度器请求所述被标识调度类别的替换项目。
27.如权利要求26所述的方法,其中,所述项目是分组或者与分组相对应的指示。
28.如权利要求26所述的方法,其中,所述最佳项目是速率调度的,并且所述特定调度器包括速率调度数据结构,并且所述方法还包括基于所述最佳项目更新所述速率调度数据结构。
29.如权利要求26所述的方法,其中,所标识出的调度类别与所述特定调度类别相同。
30.如权利要求26所述的方法,其中,所标识出的调度类别是优先级比所述特定调度类别高的调度类别。
31.如权利要求26所述的方法,其中,所标识出的调度类别是所述多种不同优先级调度类别中最高优先级的调度类别,其中所标识出的调度类别的项目可用来转发到所述特定父调度器,并且所标识出的调度类别的项目在指出所述特定父调度器需要项目的所述指示中被标识为需要的。
32.一种用于在包括调度器层级的流水线调度器中对与多种不同优先级调度类别相对应的项目进行调度的装置,所述调度器层级包括具有多个特定子调度器和一个特定父调度器的特定调度器,所述装置包括用于接收来自所述特定父调度器的请求的装置,所述请求包括所述多种不同调度类别中的特定调度类别的标识;以及用于下述操作的装置响应于接收到所述请求,将当前存储的从所述多个特定子调度器接收到并且与所述特定调度类别相对应的项目中的最佳项目转发到所述特定父调度器,其中所述最佳项目是从所述多个特定子调度器中的一个特定子调度器接收到的,然后从所述一个特定子调度器请求所述特定调度类别的替换项目。
33.如权利要求32所述的装置,其中,所述项目是分组或者与分组相对应的指示。
全文摘要
本发明公开了一种独立调度器的层级,独立调度器具有用于调度项目的多条调度巷道(所述项目例如但不限于分组或者分组指示),使得不同优先级类别的项目可以相应地被传播过调度器层级。流水线调度器一般包括根调度器和一层或者多层调度器,这些层中的每层包括至少一个调度器。每个调度器被配置为维护不同调度类别的项目,并且对将当前维护的不同调度类别的项目发送到其父调度器或者外部调度器客户端进行调度,其中所述项目是如果在流水线调度器内存在特定调度器的直接子调度器的话从每个直接子调度器接收到的,和如果有耦合到特定调度器的直接外部源的话从每个直接外部源接收到的。项目可以对应于分组、分组指示或者任何其他实体。
文档编号H04L12/56GK1981484SQ200580022663
公开日2007年6月13日 申请日期2005年7月7日 优先权日2004年8月5日
发明者厄尔·T·科亨, 罗伯特·奥尔森, 尤金·M·范伯格, 格瑞高瑞·L·瑞伊斯 申请人:思科技术公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1