在调度中特别有用的速率计算的制作方法

文档序号:6506091阅读:229来源:国知局
专利名称:在调度中特别有用的速率计算的制作方法
技术领域
本发明的一个实施例涉及通信和计算机系统,尤其是联网的路由器、分组交换系统和其他设备;更具体而言,一个实施例涉及在调度分组时特别有用的用于计量事情发生的速率的速率计算。
背景技术
通信工业正在迅速变化以适应新兴的技术和不断增长的用户需求。对于新应用和现有应用的更强性能的这种用户需求正驱动着通信网络和系统提供商采用具有更高速度和更强能力(例如更大带宽)的网络和系统。在尝试实现这些目标时,许多通信提供商采用的常见方法是使用分组交换技术。公共和专用通信网络正越来越多地被用诸如因特网协议(IP)之类的各种分组技术构建和扩展。注意,除非明确声明,否则不承认本文献中描述或引用的内容是本申请的现有技术。
诸如交换机或路由器之类的网络设备一般接收、处理并转发或丢弃分组。例如,这种设备的入队(enqueuing)组件接收积累在输入缓冲器中的不同大小的分组的流。每个分组被分析,并且适当量的存储器空间被分配来存储分组。分组被存储在存储器中,而某些属性(例如一般从分组头部或其他来源导出的目的地信息和其他信息)被维护在单独的存储器中。一旦整个分组被写进存储器中,分组就变得适合于处理,并且分组的指示物一般被放置在适当的目的地队列中,以便根据某种调度方法来为其服务。
由于流量的性质或服务提供商所保证的速率级别之类的原因,某些分组类型和分组流量的类别必须以一定的速率发送,其中,术语“速率”在这里一般用来指实时速率和/或由任何加权服务策略得到的效果,例如但不限于虚拟时间权重、令牌、信誉、事件等等。从而,调度系统必须以指定的速率将服务递送到包含不同大小的分组的队列。此外,速率递送系统必须既能够支持实时速率递送(例如每秒固定数目的字节),又能支持虚拟时间速率递送(例如总可用带宽的加权分数)。速率必须以硬件和/或软件易于解释的方式被编码和存储以及计算和跟踪。对于基于日历的调度器,此速率通常被编码为在某个间隔(interval)(即,若干个日历时隙(slot))中提供的份额(quantum)(即,若干个字节)。
份额/间隔编码存在若干问题,其中包括可变速率精度和突发属性。在变动范围的较快的一端,精度为一个间隔中n个字节(即份额),这是因为只能通过改变发送的字节数目来改变速率,从而精度与最大传输单位(MTU)相关。从而,10,000字节MTU将会以10,000为单位提供一个部分,而1,500字节MTU(例如以太网中使用的那种)将只会以1,500为单位提供一个部分。份额/间隔方案不能平滑地递送速率。例如,对于10,000字节份额,发送40字节分组的队列在被重新调度之前可能需要突发250个分组。如果其间隔大于1,则在它发送每个分组后在中间步骤中重新调度它比起在所有250个分组都被发送以后才重新调度它要更好一些。
许多的已知的系统使用了份额/间隔方法的某些变体,其中在每次提供某个固定份额的字节时,日历被前进一定的间隔。一般来说,这些系统一般使用比MTU的大小更大的大份额,或者它们必须采用其他技术来对付小于MTU的份额。更大的份额避免了实现的复杂性,但代价是突发多了很多。
某些系统通过使用小于MTU的份额减轻了突发问题。但是,由于分组因而可能远大于一个份额,就需要用除法运算(即大小/份额)来计算要移动的日历时隙的数目。虽然这提高了速率递送的平滑性,但它却是以牺牲精度来做到这一点的,这是因为使用较小的份额来递送速率加剧了可变速率精度的问题。此外,除法一般是非常昂贵的运算。如果硬件除法能力不可用(在许多嵌入式软件平台上就是如此),则或者份额必须被限制到2的幂,这导致速率粒度问题,或者必须反复进行除法,在这种情况下速率计算不会在固定时间中工作。此外,利用硬件实现的除法运算可能还会引入“漂移”/舍入误差问题,这导致所需要的速率中的某些丢失。因此,现有系统能够提供粒度,但是却要在平滑度和精度之间作出折衷。此外,对创建份额/间隔对来编码速率的需求以及关于这些对的创建的限制可能会使得难以配置这种系统。具体而言,使用仅限2的幂的份额的系统可能要求进行反复的工序来限定最符合其个体标准及其彼此之间关系的速率集合。

发明内容
公开了可以用在计量事情发生的流程的几乎任何情形中的用于执行速率计算的方法、设备、数据结构、计算机可读介质、机构和装置等等。这样,这些速率计算在调度活动或项目方面可能尤其有用,所述活动或项目例如但不限于是任何性质的分组(尤其是一系列相关的分组)、进程、线程、通信流等等。
一个实施例识别近似反速率(approximated inverse rate)、修补调整值(fix-up adjustment value)和份额。基于活动的度量维护活动测量值,基于活动的度量和近似反速率维护速率控制值。对于每个份额,将修补调整值应用到速率控制值一次,以维护活动的速率精度。在一个实施例中,控制值是用于确定执行活动的下一部分(例如发送一个或多个分组)的相对排序或定时的调度值。调度速率以逆反形式被高效、紧凑地存储,这在速率粒度、精度和平滑地递送服务的能力方面可能具有优点。在一个实施例中,对于每个份额将修补调整值应用到速率控制值一次包括抖动速率控制值,以基于随机数对速率控制值进行上舍入(round-up)或不对其进行上舍入。
一个实施例使调度流(例如一系列分组)与当前时隙、与分组相对应的调度项目以及近似反速率、修补调整值和份额值相关联。识别与调度项目相对应的最后被调整时隙。基于分组的字节数目调整已发送字节值,以识别新的已发送字节值。响应于识别已发送字节值大于或等于与调度项目相对应的份额值(a)识别调度项目的新的最后被调整时隙,这一般包括对近似反速率和份额值的乘积、修补调整值和最后被调整时隙进行求和;以及(b)确定调度项目的下一时隙,这一般包括将近似反速率和新的已发送字节值的乘积添加到新的最后被调整时隙。
在一个实施例中,识别调度项目的最后被调整时隙包括从当前时隙中减去近似反速率和已发送字节值的乘积。在一个实施例中,基于在与调度项目相对应的份额期间由近似反速率引入的误差来确定修补调整值。在一个实施例中,响应于识别已发送字节值小于与调度项目相对应的份额值,确定下一时隙,这一般包括将近似反速率和新的已发送字节值的乘积添加到最后被调整时隙。在一个实施例中,识别调度项目的新的最后被调整时隙包括抖动新的最后被调整时隙,以基于随机数对新的最后被调整时隙进行上舍入或不对其进行上舍入。


所附权利要求书详细阐述了本发明的特征。当结合附图考虑以下详细描述时,可以最佳地理解本发明及其优点,附图中图1A是示出一个实施例中使用的用于执行速率计算的进程的流程图;图1B是示出一个实施例中用于执行速率计算的存储值的框图;图1C示出一个实施例中执行的被调整的时隙的计算;图1D示出一个实施例中使用的用于执行速率计算的进程的伪代码;图2是示出一个实施例中用于执行速率计算的存储值的框图;图3A是示出一个实施例中使用的用于确定近似反速率、修补调整值和份额值的进程的流程图;图3B示出结合一个实施例使用的各种目标速率的近似反速率、修补调整值和份额值的示例性结果集合;图4A是一个实施例中使用的用于执行速率计算和/或近似反速率、修补调整值和份额值的确定的系统的框图;以及图4B是一个实施例中使用的用于执行速率计算的系统的框图。
具体实施例方式
公开了可以用在计量事情发生的流程的几乎任何情形中的用于执行速率计算的方法、设备、数据结构、计算机可读介质、机构和装置等等。这样,这些速率计算在调度活动或项目方面可能尤其有用,所述活动或项目例如但不限于是任何性质的分组(尤其是一系列相关的分组)、进程、线程、通信流等等。
这里所描述的实施例包括各种元素和限制,其中没有一个元素或限制被视为关键的元素或限制。每项权利要求单独全面陈述本发明的一个方面。此外,所描述的某些实施例可以包括但不限于系统、网络、集成电路芯片、嵌入式处理器、ASIC、方法和包含指令的计算机可读介质等等。一个或多个系统、设备、组件等可包括一个或多个实施例,这些实施例可包括由相同或不同系统、设备、组件等执行的权利要求的某些元素或限制。下文中所描述的实施例实现了本发明的范围和精神内的各种方面和配置,其中附图示出了典型非限制性配置。
这里所使用的术语“分组”是指任何类型的分组或任何其他信息或数据单元,包括但不限于固定长度信元和可变长度分组,其中每一个可以或不可以划分成更小的分组或信元。这里所使用的术语“分组”还指分组本身和分组指示,例如但不限于分组的全部或部分或者分组头部、数据结构值、指针或索引或者分组或与之相关联的信息的任何其他部分或者直接或间接标识。例如,路由器常常对分组的一个或多个字段(尤其是头部)进行操作,因此在分组头部被操纵的同时,分组的主体常被存储在单独的存储器中,并且基于对分组(即本示例中的分组头部)的处理的结果,整个分组被转发或丢弃。此外,这些分组可包含一种或多种类型的信息,包括但不限于语音、数据、视频和音频信息。术语“项目”在这里一般用来指分组或任何其他信息或数据单元或片段、设备、组件、元件或任何其他实体。短语“处理分组”和“分组处理”一般是指基于分组内容(例如分组头部或其他字段)执行某些步骤或动作,这种步骤或动作可能包括或不包括修改、存储、丢弃和/或转发分组和/或相关联的数据。
术语“系统”在这里一般用来描述任何数目的组件、元件、子系统、设备、分组交换元件、分组交换机、路由器、网络、计算机和/或通信设备或机构,或者其组件的组合。术语“计算机”在这里一般用来描述任何数目的计算机,包括但不限于个人计算机、嵌入式处理元件和系统、控制逻辑、ASIC、芯片、工作站、大型机等。术语“处理元件”在这里一般用来描述任何类型的处理机构或设备,例如处理器、ASIC、现场可编程门阵列、计算机等。术语“设备”在这里一般用来描述任何类型的机构,包括计算机或系统或其组件。术语“任务”和“进程”在这里一般用来描述任何类型的运行程序,包括但不限于计算机进程、任务、线程、执行应用、操作系统、用户进程、设备驱动器、原码、机器或其他语言等等,并且可以是交互式的和/或非交互式的、在本地和/或远程执行的、在前台和/或后台执行的、在用户和/或操作系统地址空间中执行的、程序库例程和/或独立应用,并且不限于任何特定的存储器分区技术。在附图,包括但不限于任何框图和流程图以及消息序列图中示出的步骤、连接、信号和信息处理可以按相同或不同的串行或并行顺序来执行,和/或由不同的组件和/或进程、线程等来执行,和/或在不同连接上执行,并且可与其他实施例中的功能相组合,除非这会使实施例失效,或者明确或隐含地要求某个序列(例如,对于读取值和处理值的序列,在处理值之前必须获得值,虽然在读操作之前、同时和/或之后可以执行某些相关处理)。此外,术语“识别”在这里一般用来描述任何直接或间接断定某件事的方式或机制,其中可包括但不限于接收、从存储器取回、确定、限定、计算、生成等等。
此外,术语“网络”和“通信机构”在这里一般用来描述一个或多个网络、通信介质或通信系统,包括但不限于因特网,专用或公共电话、蜂窝、无线、卫星、线缆、局域、城域和/或广域网络,线缆,电连接,总线等等,以及诸如消息传递、进程间通信、共享存储器等内部通信机构。术语“消息”在这里一般用来描述一段信息,它可能是也可能不是但一般是经由一个或多个任何类型的通信机构传输的。
术语“存储机构”包括任何类型的存储器、存储设备或其他以任何格式保存指令或数据的机构。“计算机可读介质”是一个可扩展术语,它包括任何存储器、存储设备、存储机构,以及其他的其中包括了诸如网络接口卡和缓冲器之类的接口和设备的存储和信令机构,以及任何通信设备和接收和发送的信号,和计算机化的系统可解释、接收和/或发送的其他当前和正在发展中的技术。术语“存储器”包括任何随机访问存储器(RAM)、只读存储器(ROM)、闪存、集成电路和/或其他存储器组件或元件。术语“存储设备”包括任何固态存储介质、盘驱动器、软磁盘、联网服务、磁带驱动器和其他存储设备。存储器和存储设备可存储要由处理元件和/或控制逻辑执行的计算机可执行指令,以及由处理元件和/或控制逻辑所操纵的数据。术语“数据结构”是一个可扩展术语,它是指任何数据元素、变量、数据结构、数据库和/或可应用到数据以帮助解释数据或对其执行操作的一个或多个可组织的方案,例如但不限于存储位置或设备、集合、队列、树、堆、列表、链表、阵列、表、指针等等。数据结构一般被保存在存储机构中。术语“指针”和“链接”在这里一般用来指某些用于引用或标识其他元素、组件或其他实体的机制,这些机制可包括但不限于对存储器或其他存储机构或其中的位置的引用、数据结构中的索引、值等等。术语“关联存储器”是一个可扩展术语,它是指任何类型的已知的或未来开发的关联存储器,包括但不限于二元和三元内容可寻址存储器、散列表、TRIE和其他数据结构等。此外,术语“关联存储器单元”可包括但不限于一个或多个关联存储器设备或其部件,包括但不限于区域、片段、库、页、块、条目集合等等。
术语“一个实施例”在这里用来指特定实施例,其中每次提到“一个实施例”可能是指不同的实施例,这里在描述相关联的特征、元素和/或限制时重复使用该术语并不确立每个和所有实施例必须包括的相关联的特征、元素和/或限制的累积集合,虽然一个实施例一般可包括所有这些特征、元素和/或限制。此外,短语“用于xxx的装置”一般包括包含用于执行xxx的计算机可执行指令的计算机可读介质。
此外,术语“第一”、“第二”等在这里一般用来表示不同单元(例如第一元件、第二元件)。这里使用这些术语不一定意味着诸如一个单元或事件发生或出现在另一个之前这样的顺序,但是提供一种区分特定单元的机制。此外,使用名词的单数时态是非限制性的,对其的使用一般包括一个或多个特定事物而不是只有一个(例如使用单词“存储器(memory)”一般是指一个或多个存储器而不是必须指定“一个存储器或多个存储器(memory or memories)”或者“一个或多个存储器(one ormore memories”或“至少一个存储器(at least one memory)”等等)。此外,短语“基于x”和“响应于x”被用于指示从中导出或导致某件事的项目x的最小集合,其中“x”是可扩展的,并且不一定描述了被执行操作的项目的完整列表等等。此外,短语“被耦合到”用于指示两个元件或设备之间的某种级别的直接或间接连接,其中一个或多个耦合设备修改或不修改被耦合的信号或被传输的信息。术语“子集”用于指示集合的所有元素或部分元素的群组。术语“子树”用于指示树的全部或部分。此外,术语“或者”在这里是指对相联系的项目中的一个或多个包括全部的选择。此外,与“包括”、“包含”或“具有”同义的过渡性术语“含有”是包括性的或开放性的,并不排除附加的、未列出的元素或方法步骤。
公开了可以用在计量事情发生的流程的几乎任何情形中的用于执行速率计算的方法、设备、数据结构、计算机可读介质、机构和装置等等。这样,这些速率计算在调度活动或项目方面可能尤其有用,所述活动或项目例如但不限于是任何性质的分组(尤其是一系列相关的分组)、进程、线程、通信流等等。
一个实施例识别近似反速率、修补调整值和份额。基于活动的度量维护活动测量值,基于活动的度量和近似反速率维护速率控制值。对于每个份额,将修补调整值应用到速率控制值一次,以维护活动的速率精度。在一个实施例中,控制值是用于确定执行活动的下一部分(例如发送一个或多个分组)的相对排序或定时的调度值。调度速率以逆反形式被高效、紧凑地存储,这在速率粒度、精度和平滑地递送服务的能力方面可能具有优点。在一个实施例中,对于每个份额将修补调整值应用到速率控制值一次包括抖动速率控制值,以基于随机数对速率控制值进行上舍入(round-up)或不对其进行上舍入。
一个实施例使调度流(例如一系列分组)与当前时隙、与分组相对应的调度项目以及近似反速率、修补调整值和份额值相关联。识别与调度项目相对应的最后被调整时隙。基于分组的字节数目调整已发送字节值,以识别新的已发送字节值。响应于识别已发送字节值大于或等于与调度项目相对应的份额值(a)识别调度项目的新的最后被调整时隙,这一般包括对近似反速率和份额值的乘积、修补调整值和最后被调整时隙进行求和;以及(b)确定调度项目的下一时隙,这一般包括将近似反速率和新的已发送字节值的乘积添加到新的最后被调整时隙。
在一个实施例中,识别调度项目的最后被调整时隙包括从当前时隙中减去近似反速率和已发送字节值的乘积。在一个实施例中,基于在与调度项目相对应的份额期间由近似反速率引入的误差来确定修补调整值。在一个实施例中,响应于识别已发送字节值小于与调度项目相对应的份额值,确定下一时隙,这一般包括将近似反速率和新的已发送字节值的乘积添加到最后被调整时隙。在一个实施例中,识别调度项目的新的最后被调整时隙包括抖动新的最后被调整时隙,以基于随机数对新的最后被调整时隙进行上舍入或不对其进行上舍入。
一个实施例使用近似反速率,从而比起更精确的反速率值来要求的比特较少,该实施例并且基于预定的修补调整值周期性地调整下一时隙,从而使得下一时隙就像不存在由使用近似反速率而引入的误差那样变化。从而,不是依赖于大量比特来代表反速率以及许多分数比特来代表当前时隙,一个实施例使用字节计数来周期性地调整时隙值(例如每份额一次或多次),以减小或消除引入的误差。
在一个实施例中,连续份额的被调整的开始时隙之间的间隔被定义为间隔=份额*近似反速率+修补调整值。精度是通过以下方式实现的对于每个份额的已发送字节,确保恰好相同数目的所需时隙被遍历至少一次(但一般是一次)。由于近似反速率的浮点值可能不具有到达正确的点的精密性,因此对于每个份额,修补调整值被添加一次。
图1A是示出一个实施例中使用的用于执行速率计算的进程的流程图。处理开始于进程块100,并且进行到进程块102,在这里,从当前调度时隙取得动态调度信息,并且一般从另一个数据结构取得相应的静态速率信息。
图1B示出一个实施例中使用的存储的数据项目。在一个实施例中,在每个调度周期中,从存储装置中取得相对静态项目的集合120,其中集合120包括近似反速率121、修补调整值122和相应的份额123。这些项目121-123被标记为“相对静态值”(在其他地方也被称为“静态”值或信息等),这是因为在相关联的分组流、项目系列等的计量期间,它们一般被定义一次。从而,在调度期间,需要从存储器读取的操作,而不需要写操作,这是因为在每个调度周期中数据项目121-123不变化。但是,在一个实施例中,这些项目被周期性地、偶尔地或以其他方式调整(例如,一般不是在每个调度周期中)。
相反,在一个实施例中使用的动态调度器专有项目的集合125包括已发送字节126和当前调度时隙127的值,它们是在每个调度周期中被更新的。一个实施例利用不同的调度机制执行这里公开的速率计算,在这种情况下,集合125可能不包括值,或者包括不同的动态存储值集合。
参考图1A的处理,在进程块104中,识别与当前被设置的信息份额相对应的最后被调整的开始时隙。在一个实施例中,从存储器取得最后被调整开始时隙的指示。在一个实施例中,通过从当前时隙位置减去近似反速率与先前发送的字节数的乘积来计算该最后被调整开始时隙。接下来,在进程块106中,一个或多个相应的分组被发送,并且已发送字节变量的值被相应增大。
如果在进程块108中确定对于当前份额已发送字节的数目等于或超过份额值,则在进程块110中,基于份额、近似反速率和修补调整值确定新的最后被调整时隙。在一个实施例中,通过对近似反速率和份额的乘积、修补调整值和最后被调整开始时隙进行求和来确定新的最后被调整时隙。当然,新的被调整开始时隙的这个值根据需要被截尾或调整(例如卷绕),以匹配时隙数据结构。在进程块112中,使已发送字节数目的值减小,减小幅度为份额值,从而使得已发送字节数目小于份额值。当然,这可以通过对该值进行截尾或通过其他方式(例如与份额被等于或超过相对应的溢出指示,其中已发送字节数目的当前值是未溢出值,等等)来实现。
在进程块114中,基于近似反速率、从开始时隙的最后调整起发送的字节的数目以及最后的或被调整的开始时隙的值来确定新的时隙。在进程块116中,动态数据(例如已发送字节和当前时隙)被存储回调度数据结构中新的时隙位置处。如进程块118所示,处理完成。
图1C示出一个实施例中执行的被调整的时隙的计算。查看最后被调整时隙的一种方式是它是与当前份额中发送的零字节数据相对应的时隙位置。示出了最后被调整时隙150。在处理151期间,发送第一分组,并且基于近似反速率、已发送字节的数目和最后被调整时隙150确定所得到的新时隙152。在处理153期间,发送第二分组,并且确定所得到的新时隙154。注意,最后被调整时隙150或者是从存储器取得的,或者一般是计算出来的以节省存储空间。然后,相对于计算出来的最后被调整时隙150的位置确定新时隙154。
处理155对应于当前份额中的第n个分组的发送,其中已发送字节的数目超过份额的值。最后被调整时隙一般是计算出来的,其中通过对近似反速率和份额的乘积、修补调整值和最后被调整时隙150的位置进行求和来相对于最后被调整时隙150确定新的最后被调整时隙156。然后基于近似反速率和超过最后的份额的字节数目的乘积来相对于新的最后被调整时隙156确定时隙157。
图1D示出一个实施例中使用的用于执行速率计算的进程的伪代码180。伪代码180描述与图1A中所示的进程类似的进程。但是,伪代码180还示出了当确定下一个被调整时隙值时可使用抖动来添加额外的精度,等等。
在一个实施例中,选择份额以便使得连续份额的被调整开始时隙之间的间隔(即,间隔=份额*近似反速率+修补调整值)“舍入”到所需的整数值。在一个实施例中,在间隔的分数比特(如果有的话)上使用抖动,以利用额外的精密性来递送更大的精度。不论间隔是大(接近时隙的总数)还是小(接近一),抖动方法一般都提供相同的精度。抖动还提高了靠近变动范围的较快一端处的粒度,这是因为能够递送的速率的范围不仅由份额确定,还由份额和间隔中的比特数目的组合确定。
抖动可被用于进一步提高速率递送精度。间隔可以被看作非整数(具有更大的精密性),并且间隔的分数部分可被用于在进行重新调度时调整时隙,调整幅度为0或加1,其中调整被选择为加1的时间的百分比是基于间隔的分数部分确定的。抖动仅影响间隔计算,它不会例如增大时隙的数目。在一个实施例中,间隔的分数值不会随时间而变化。由于对恒定分数值执行的舍入操作始终会得出相同的值,因此分数值的舍入不会产生任何增大的精度。但是,利用抖动来基于相应的概率进行上舍入或截尾将会产生提高的精度,而不必维护额外的分数比特。
例如,考虑具有4.3的重调度间隔的调度条目。可以生成0到1之间的随机数(即真实或近似随机数)。可将该随机数与间隔的分数值(例如0.3)相比较,其中如果随机数小于或等于(或只是小于)0.3,则重调度间隔被上舍入到值5,否则被截尾到值4。
或者,在间隔中有八比特的分数的情况下,0.3可以表示为77/256或.30078125。在每次重调度时,可以将一个自由流动的8比特随机生成器与77相比较。随机数小于77的概率将约为0.3;当发生随机数小于77时,按经上舍入的间隔5来对条目进行重调度;其余时间按经下舍入的间隔4来对条目进行重调度。这也递送了约为4.3的平均间隔。
图2是一个实施例中被执行速率计算的所取得的项目220的框图。如图所示,项目220包括近似反速率221、修补调整值222、相应的份额223和缩放比例指数224。当然,对于不同实施例,用于每个字段的比特数目以及用于对每个字段中存储的值进行编码的方案是不同的。
例如,在一个实施例中,存储在8比特字段中的近似反速率字段221的值的范围是从0-255,而用于计算的值是存储值除以2的字段宽度次方(例如8比特给出256)并基于缩放比例指数224缩放,该缩放比例指数224例如是代表2^0到2^-15之间的值,如图3B中示出的编码后速率的示例中所示。在一个实施例中,存储在8比特字段中的近似反速率字段221的值的范围是从128-255,而用于计算的值是存储值除以2的字段宽度次方(例如8比特给出256),并按某个值缩放,该值例如是图3B示出的编码后速率的示例中所示的2^0到2^-15之间的值。在一个实施例中,存储在7比特(从而节省了1个比特)字段中的近似反速率字段221的值的范围为128到255,因此如果要存储小于128的值,则该值被加倍并且缩放比例指数224被增加1(即额外的右移或除以2,以得出所需的值)。由于该缩放,近似反速率的MSB始终为“1”,并且不必被存储。
类似地,修补调整值被确定,但它的缩放比例不同于近似反速率所需的缩放比例(例如在图3B中在2^6到2^-7之间变化),其中该相对差异是易于基于份额和近似反速率确定的。从而,在一个实施例中,缩放比例指数224也用于对修补调整值222进行缩放,以使存储要求最小化。
在计算间隔时,近似反速率被乘以份额,从而向该乘积提供了相对于份额的MSB的比特位置的偏移。如果用于近似反速率的指数被视为用于使近似反速率移动的比特数目,则用于间隔修补值的指数(右移)可通过以下方式计算近似反速率的尾数的以比特为单位的大小减去用于该速率编码的份额(上舍入到2的幂)的MSB的比特位置,再加上缩放比例指数224。注意,如果此结果超过阈值,则它被限制以允许某个非零修补调整值作为修补调整值的界限,以便在间隔接近1时提供所需的精密性。
在一个实施例中,使用了第二缩放比例指数,从而使得近似反速率221和修补调整值222被独立地缩放。在一个实施例中,近似反速率221、修补调整值222和/或份额223是浮点数。在一个实施例中,用于修补调整值222的指数值相对于用于近似反速率221的缩放比例指数224偏移一个固定的常数(或反之),但是具有下限值(例如,它不能小于修补调整值222中的比特数目减1)。
图3A是示出一个实施例中使用的用于确定近似反速率、修补调整值和份额值的进程的流程图。处理开始于进程块300,并进行到进程块302,在这里基于提供的份额字段的宽度确定要使用的份额。在进程块304中,确定所需的每字节时隙数。在进程块306中,确定存储的近似反速率的十进制值,以便它在为近似反速率提供的存储比特数目中近似所需的每字节时隙。在进程块308中,近似反速率的十进制值被除以2的存储比特数次方,并且被缩放,以得到近似反速率。在进程块310中,通过将所使用的份额除以每时隙字节数,然后除以所需的速率来确定间隔。在进程块312中,通过从间隔中减去所使用的份额与由近似反速率代表的实际值的乘积来确定理想修补调整值。在进程块314中,确定要存储在分配的存储字段中的存储的修补调整值的十进制值;在进程块316中,确定要使用的缩放比例指数。如进程块318所示,处理完成。
注意,有无限多种确定特定实施例中使用的近似反速率的方法,并且对于相同调度器内的不同项目,所使用的方法可能不同。在一个实施例中,例如,在反速率和/或份额值中故意包括了额外的误差,其中对于每个份额,修补调整值补偿这种引入误差一次。此外,在一个实施例中,对于每个份额,修补调整值被应用两次或更多次,而在一个实施例中,对于一个份额应用的多个修补值可能是不同的值。在一个实施例中,对于每个份额,修补调整值被应用一次,并且对于每n个份额,第二修补调整值被应用,以提供额外的精度。在一个实施例中,可能有多于两个级别的修补调整被应用。这些示例只说明了一个实施例中使用的无限多种这样的可能的变化中的少数几种,它们都保持在本发明的精神和范围之内。
图3B示出结合一个实施例使用的各种目标速率的近似反速率、修补调整值和份额值的示例性结果集合。如图所示,使用了10KB MTU和8192个时隙。
图4A是一个实施例中使用的用于执行速率计算和/或近似反速率、修补调整值和份额值的确定的系统的框图。在一个实施例中,系统或组件400执行与在这里示出或以其他方式描述的流程图之一相对应的一个或多个进程。
在一个实施例中,组件400包括处理元件401、存储器402、存储设备403和用于发送和接收分组、项目和/或其他信息的接口404,它们一般经由一个或多个通信机构409(为了说明目的示为总线)被耦合。组件400的各种实施例可以包括更多或更少的元件。组件400的操作一般被处理元件401利用存储器402和存储设备403控制,以执行一个或多个任务或进程。存储器402是一类计算机可读介质,一般包括随机访问存储器(RAM)、只读存储器(ROM)、闪存、集成电路和/或其他存储组件。存储器402一般存储为实现根据实施例的功能而要被处理元件401执行的计算机可执行指令和/或被处理元件401操纵的数据。存储设备403是另一类计算机可读介质,一般包括固态存储介质、盘驱动器、磁盘、联网服务、磁带驱动器和其他存储设备。存储设备403一般存储为实现根据实施例的功能而要被处理元件401执行的计算机可执行指令和/或被处理元件401操纵的数据。
图4B是一个实施例中使用的用于执行速率计算的系统的框图。如图所示,分组447被分组处理器448接收和处理,以得出分组449。对这些分组447的处理是响应于调度器443而执行的,该调度器一般包括它自己的控制逻辑和存储器。在一个实施例中,速率计算电路(和/或处理元件)442在速率计算存储器441中存储值(例如图1B或2中示出的那些)。本领域的技术人员将会容易知道如何在硬件中实现这里描述的速率计算,尤其是图1A和1D中示出的那些,不论是使用处理器还是像一般情况那样使用组合逻辑。
考虑到可以应用本发明的原理的许多可能的实施例,将会意识到这里针对附图描述的实施例及其多个方面只是说明性的,而不应当被视为限制了本发明的范围。例如,本领域的技术人员将会很清楚,许多进程块操作可以被重新排序,以在其他操作之前、之后被执行或与其他操作基本上同时被执行。此外,在各种实施例中可以使用许多不同形式的数据结构。这里所描述的发明预期到了可能处于以下权利要求书或其等同物的范围之内的所有实施例。
权利要求
1.一种用于对活动进行速率控制的方法,该方法包括识别近似反速率、修补调整值和份额;基于活动的度量维护活动测量值;基于所述活动的度量和所述近似反速率维护速率控制值;对于每个所述份额,将所述修补调整值应用到所述速率控制值一次,以维护所述活动的速率精度。
2.如权利要求1所述的方法,其中所述活动包括发送分组流的分组。
3.如权利要求2所述的方法,其中所述活动的度量是已发送的字节或分组的数目。
4.如权利要求2所述的方法,其中所述速率控制值是用于确定所述分组流的接下来的一个或多个分组的相对排序或定时的调度值。
5.如权利要求1所述的方法,其中所述对于每个份额将所述修补调整值应用到所述速率控制值一次的步骤包括抖动所述速率控制值,以基于随机数对所述速率控制值进行上舍入或不对其进行上舍入。
6.一种计算机可读介质,包含用于执行用于对活动进行速率控制的步骤的计算机可执行指令,所述步骤包括识别近似反速率、修补调整值和份额;基于活动的度量维护活动测量值;基于所述活动的度量和所述近似反速率维护速率控制值;对于每个所述份额,将所述修补调整值应用到所述速率控制值一次,以维护所述活动的速率精度。
7.如权利要求6所述的计算机可读介质,其中所述活动包括发送分组流的分组。
8.如权利要求7所述的计算机可读介质,其中所述活动的度量是已发送的字节或分组的数目。
9.如权利要求7所述的计算机可读介质,其中所述速率控制值是用于确定所述分组流的接下来的一个或多个分组的相对排序或定时的调度值。
10.如权利要求6所述的计算机可读介质,其中所述对于每个份额将所述修补调整值应用到所述速率控制值一次的步骤包括抖动所述速率控制值,以基于随机数对所述速率控制值进行上舍入或不对其进行上舍入。
11.一种用于对活动进行速率控制的设备,该设备包括用于识别近似反速率、修补调整值和份额的装置;用于基于活动的度量维护活动测量值的装置;用于基于所述活动的度量和所述近似反速率维护速率控制值的装置;用于对于每个所述份额,将所述修补调整值应用到所述速率控制值一次,以维护所述活动的速率精度的装置。
12.如权利要求11所述的设备,其中所述活动包括发送分组流的分组。
13.如权利要求12所述的设备,其中所述活动的度量是已发送的字节或分组的数目。
14.如权利要求12所述的设备,其中所述速率控制值是用于确定所述分组流的接下来的一个或多个分组的相对排序或定时的调度值。
15.如权利要求11所述的设备,其中所述用于对于每个份额将所述修补调整值应用到所述速率控制值一次的装置包括用于抖动所述速率控制值,以基于随机数对所述速率控制值进行上舍入或不对其进行上舍入的装置。
16.一种用于调度分组的方法,该方法包括在当前时隙中识别与分组相对应的调度项目;识别与所述调度项目相对应的近似反速率、修补调整值和份额值;识别所述调度项目的最后被调整时隙;基于所述分组的字节数目调整已发送字节值,以识别新的已发送字节值;以及响应于识别所述已发送字节值大于或等于与所述调度项目相对应的份额值(a)识别所述调度项目的新的最后被调整时隙,所述识别新的最后被调整时隙的步骤包括对所述近似反速率和所述份额值的乘积、所述修补调整值和所述最后被调整时隙进行求和;以及(b)确定所述调度项目的下一时隙,所述确定下一时隙的步骤包括将所述近似反速率和所述新的已发送字节值的乘积添加到所述新的最后被调整时隙。
17.如权利要求16所述的方法,其中所述识别所述调度项目的最后被调整时隙的步骤包括从所述当前时隙中减去所述近似反速率和所述已发送字节值的乘积。
18.如权利要求16所述的方法,其中,基于在与所述调度项目相对应的份额期间由所述近似反速率引入的误差来确定所述修补调整值。
19.如权利要求16所述的方法,包括响应于识别所述已发送字节值小于与所述调度项目相对应的份额值,确定下一时隙,这包括将所述近似反速率和所述新的已发送字节值的乘积添加到所述最后被调整时隙。
20.如权利要求16所述的方法,其中所述识别所述调度项目的新的最后被调整时隙的步骤包括抖动所述新的最后被调整时隙,以基于随机数对所述新的最后被调整时隙进行上舍入或不对其进行上舍入。
21.一种用于调度分组的设备,该设备包括用于在当前时隙中识别与分组相对应的调度项目的装置;用于识别与所述调度项目相对应的近似反速率、修补调整值和份额值的装置;用于识别所述调度项目的最后被调整时隙的装置;用于基于所述分组的字节数目调整已发送字节值,以识别新的已发送字节值的装置;以及用于响应于识别所述已发送字节值大于或等于与所述调度项目相对应的份额值执行以下步骤的装置(a)识别所述调度项目的新的最后被调整时隙,所述识别新的最后被调整时隙的步骤包括对所述近似反速率和所述份额值的乘积、所述修补调整值和所述最后被调整时隙进行求和;以及(b)确定所述调度项目的下一时隙,所述确定下一时隙的步骤包括将所述近似反速率和所述新的已发送字节值的乘积添加到所述新的最后被调整时隙。
22.如权利要求21所述的设备,其中所述用于识别所述调度项目的最后被调整时隙的装置包括用于从所述当前时隙中减去所述近似反速率和所述已发送字节值的乘积的装置。
23.如权利要求21所述的设备,其中,基于在与所述调度项目相对应的份额期间由所述近似反速率引入的误差来确定所述修补调整值。
24.如权利要求21所述的设备,包括用于响应于识别所述已发送字节值小于与所述调度项目相对应的份额值,确定下一时隙的装置,这包括将所述近似反速率和所述新的已发送字节值的乘积添加到所述最后被调整时隙。
25.如权利要求21所述的设备,包括用于计算所述近似反速率和所述修补调整值的装置。
26.如权利要求21所述的设备,其中所述识别所述调度项目的新的最后被调整时隙的步骤包括抖动所述新的最后被调整时隙,以基于随机数对所述新的最后被调整时隙进行上舍入或不对其进行上舍入。
27.一种计算机可读介质,包含用于执行用于调度分组的步骤的计算机可执行指令,所述步骤包括在当前时隙中识别与分组相对应的调度项目;识别与所述调度项目相对应的近似反速率、修补调整值和份额值;识别所述调度项目的最后被调整时隙;基于所述分组的字节数目调整已发送字节值,以识别新的已发送字节值;以及响应于识别所述已发送字节值大于或等于与所述调度项目相对应的份额值(a)识别所述调度项目的新的最后被调整时隙,所述识别新的最后被调整时隙的步骤包括对所述近似反速率和所述份额值的乘积、所述修补调整值和所述最后被调整时隙进行求和;以及(b)确定所述调度项目的下一时隙,所述确定下一时隙的步骤包括将所述近似反速率和所述新的已发送字节值的乘积添加到所述新的最后被调整时隙。
28.如权利要求27所述的计算机可读介质,其中所述识别所述调度项目的最后被调整时隙的步骤包括从所述当前时隙中减去所述近似反速率和所述已发送字节值的乘积。
29.如权利要求27所述的计算机可读介质,其中,基于在与所述调度项目相对应的份额期间由所述近似反速率引入的误差来确定所述修补调整值。
30.如权利要求27所述的计算机可读介质,包括响应于识别所述已发送字节值小于与所述调度项目相对应的份额值,确定下一时隙,这包括将所述近似反速率和所述新的已发送字节值的乘积添加到所述最后被调整时隙。
31.如权利要求27所述的计算机可读介质,其中所述识别所述调度项目的新的最后被调整时隙的步骤包括抖动所述新的最后被调整时隙,以基于随机数对所述新的最后被调整时隙进行上舍入或不对其进行上舍入。
全文摘要
执行了例如用于调度活动的速率计算,所述活动例如但不限于分组、进程、通信流(104)等。一种实现方式识别近似反速率、修补调整值和份额(110)。基于活动的度量维护活动测量值,基于活动的度量和近似反速率维护速率控制值。对于每个份额,将修补调整值应用到速率控制值一次,以维护活动的速率精度(114)。在一种实现方式中,控制值是用于确定何时执行活动的下一部分(例如发送一个或多个分组)的调度值(104)。调度速率以逆反形式被高效、紧凑地存储,这在速率粒度、精度和平滑地递送服务的能力方面可能具有优点(104)。
文档编号G06F15/16GK1914605SQ200480041563
公开日2007年2月14日 申请日期2004年12月23日 优先权日2004年2月11日
发明者厄尔·T·科亨, 克里斯多佛·J·卡普勒 申请人:思科技术公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1