专利名称:令牌桶算法的实现方法
技术领域:
本发明涉及一种以太网的QoS(quality of service,服务质量)实现方法。
背景技术:
以太网QoS技术的目的是有效地利用有限的带宽,流量整形(Traffidhaper)是一种常见的QoS实现方法,而令牌桶(Token Bucket)算法是流量整形技术的一种常见算法。令牌桶算法的基本策略如下令牌桶中的每一个令牌都代表一定大小的数据(例如一个字节)。假如用户配置的平均发送速率为r,则每隔Ι/r的时间一个新令牌被加入到令牌桶中。假设令牌桶最多可以存发b个令牌。如果新令牌到达时令牌桶已经满了,那么这个新令牌会被丢弃。当一个m 个字节的数据包到达时,就从令牌桶中删除m个令牌,并且数据包被发送到网络。如果令牌桶中少于m个令牌,那么不会删除令牌,并且认为这个数据包在流量限制之外。对于在流量限制外的数据包可以被丢弃、或者排放在队列中以便当令牌桶中累积了足够多的令牌时再传输、或者继续发送但做特殊标记,一旦网络过载的时候将这些特殊标记的数据包丢弃。令牌桶算法允许最长b个字节的突发,但从长期运行结果看,数据包的速率被限制成常量r。实际使用中,以太网中存在着多个队列,每个队列均有一个独立的令牌桶。为了节省硬件资源,这多个令牌桶共享一个加法器,该加法器用于计算各个令牌桶的新令牌加入。 显然,当队列数量较多(例如为η)时,每个队列的平均传输速率r2、……、rn也可能不相同,这一个加法器不可能按照IAvlAv……、l/rn的时间间隔对每个令牌桶计算新令牌的加入,取而代之的是以一个扫描周期T对各个令牌桶的令牌数量进行更新。在该扫描周期T中,该加法器依次为每个队列的令牌桶进行数量更新。队列数量η越多,该扫描周期 T就取得越大。由于每个队列应该得到相同的扫描几率,这要求T = kXn,其中k表示该加法器完成一个队列的一次令牌更新所需要的时间。令牌桶算法在更新令牌数量时采用较大的扫描周期会导致其中具有较快平均传输速率的队列更新令牌数量的时间间隔较长,令牌数量经常处于不准确的状态;同时每次更新令牌数量时会增加较大数量的新令牌,呈现大突发(burst)特性。例如,一个系统中具有8192个队列,即η = 8192。该系统中具有一个加法器负责为这些队列进行令牌更新的累加计算,该加法器为一个队列的一次令牌更新计算耗费20ns, 即k = 20ns。那么该系统中该加法器的扫描周期T = kXn = 163. 84 μ s。其中有一个队列的平均传输速率为300Mbps,即rx = 300Mbps。该队列每隔T时间才更新一次令牌数量, 假设每个令牌代表1个字节,则每次更新的令牌数量为300X IO6X 163. 84X 10_6 + 8 = 6144 个。理想情况下该队列应该是每隔沈.67ns增加一个新令牌,可是实际应用时却是每隔 163. 84 μ s增加6144个新令牌。为了解决上述问题,一种可能的解决方案是采用多个加法器,每个加法器仅计算部分令牌桶的令牌数量更新,从而使每个加法器的扫描周期有所缩小,但这样便增加了硬件资源。
发明内容
本发明所要解决的技术问题是提供一种令牌桶算法的实现方法,该方法在现有硬件资源不变(即仍采用一个加法器对所有令牌桶的令牌数量更新进行计算)的前提下,可以及时对令牌数量进行更新。为解决上述技术问题,本发明令牌桶算法的实现方法为只在一个队列中有数据包发送出去前,才对该队列的令牌桶进行令牌数量更新;
权利要求
1.一种令牌桶算法的实现方法,其特征是,只在一个队列中有数据包发送出去前,才对该队列的令牌桶进行令牌数量更新;
2.根据权利要求1所述的令牌桶算法,其特征是,
3.根据权利要求1所述的令牌桶算法,其特征是,
4.根据权利要求1所述的令牌桶算法,其特征是,当所述长度为m的数据包未发送时, 等待该队列的令牌桶的令牌数量> m后,再发送所述长度为m的数据包。
全文摘要
本发明公开了一种令牌桶算法的实现方法,只在一个队列中有数据包发送出去前,才对该队列的令牌桶进行令牌数量更新;其中Token_Num(Now)为新的令牌数量,Token_Num(LastUpdate)为上一次令牌数量更新时的令牌数量,n为发送的数据包长度,Time(Now)为当前时间,Time(LastUpdate)为上一次令牌数量更新的时间,r为该队列的平均发送速率。本发明可以克服传统令牌桶算法更新令牌的扫描周期过长,每次增加的令牌数量过大的问题。
文档编号H04L12/56GK102377641SQ20101025119
公开日2012年3月14日 申请日期2010年8月11日 优先权日2010年8月11日
发明者王冬 申请人:高通创锐讯通讯科技(上海)有限公司