分享

Token Bucket (令牌桶算法)

 昵称3936069 2012-12-11

Token Bucket (令牌桶算法)

Cisco IOS 管制器和整形器使用Token Bucket算法建模。本质上,令牌桶算法是测量引擎,跟踪能够发送多少流量来证实指定的流量速率。关于令牌桶的算法有三种技术,单速率双色,单速率三色,双速率三色机制。其中单速率双色是对单速率三色的逻辑描述。
1. 单速率三色标记(a single rate three color marker)
IETF RFC 2697定义了单速率三色标记算法,评估依据以下3个参数:承诺访问速率(CIR),即向令牌桶中填充令牌的速率;承诺突发尺寸(CBS),即令牌桶的容量,每次突发所允许的最大流量尺寸(注:设置的突发尺寸必须大于最大报文长度);超额突发尺寸(EBS)。单速率三色标记关注的是数据包的尺寸突发。

单速率三色机制有两个令牌桶。任何CBS中未使用的令牌都放入第二个桶,用作以后临时突发可能超过CIR的信用证。因此第二个桶的大小为第一个桶中未使用的令牌数加第二个桶的大小。可以做如下的理解:
一个数据包A大小为B,我们记为A(B)
if A(B)<TC
then (the packet conform,and the CBS size=TC‐B+TE)
else if B>TC and B<TE
then (the packet exceed,and the CBS size=TE)
else (The packet violate)
正常情况下,不会使用第二个桶测量,之所以把未使用的CBS的令牌放入第二个桶就是为后面数据的突发提供信用令牌数。

IEEE RFC定义了三种颜色,分别是红色,黄色,绿色。因此三色由此而来。我们可以理解为交通灯。绿灯行,黄灯要注意了,应该减慢速度准备停车,而红灯为等车。但将数据包标记为这三种颜色的一种时,可以定义相应的策略,比如:转发,丢弃,设置优先级等等。
对于颜色的判断,RFC也定义了两个模式,一种是色盲模式(Color‐Blind),一种是非色盲模式(Color‐Aware)。这两种模式处理的方式稍有不同。下面分别讨论(使用程序设计的思想来描述):
A:色盲模式(Color‐Blind)
Packets size(PS)
if PS<TC
then (The packets bepaint GREEN,Conform)
else if PS>TC and PS<TE
then (The packets bepaint YELLOW,Exceed)
else then (The packets bepaint RED,Violate)
B: 非色盲模式(Color‐Aware)
Packets size(PS)
if PS<TC or (The packets has bepainted GREEN)
then (The packets bepaint GREEN,Conform)
else if (PS>TC and PS<TE) or (The packets has bepainted YELLOW)
then (The packets bepaint YELLOW,Exceed)
else PS>TE or (The packets has bepainted RED)
then (The packets bepaint RED,Violate)

从上图可以看出来,仅仅在第一个桶有未使用完的令牌放入到第二个桶的情况下,才允许临时的数据突发。
2. 双速率三色标记(a two rate three color marker)
IETF RFC 2687定义了双速率三色标记,主要是根据4种流量参数来评估:CIR、CBS、峰值信息速率(PIR),峰值突发尺寸(PBS)。前两种参数与单速率三色算法中的含义相同。该值必须不小于CIR的设置值,如果大于CIR,则速率限制在CIR于PRI之间的一个值。与单速率三色标记算法不同,双速率三色标记算法的两个令牌桶C桶和P桶填充令牌的速率不同,C桶填充速率为CIR,P桶为PIR;两桶的容量分别为CBS和PBS。用Tc和Tp表示两桶中的令牌数目,初始状态时两桶是满的,即Tc和Tp初始值分别等于CBS和PBS。双速率三色标记关注的是速率的突发。它不在像单速率三色标记那样把第一个未使用的令牌放到第二个桶中。双速率三色标记使用两个独立的令牌桶。第一个桶为PIR大小为PBS,第二个桶为CIR大小为CBS。数据的测量是先比较PIR,然后再比较CIR(换句话说,双速率三色标记首先判断的是违约情况,最后是正常情况),双速率三色标记的突发速率可以根据以下的公式计算出来
PIR=CIR(1+BE/BC)
我们不可能改变接口的物理时钟,但是可以利用TDMA(时分多路复用)来讲接口划分为亚秒级的时间片,每一个时间间隔我们都可以定义相应的数据传递大小,如下图:

正常情况下我们在一个TC中能传递BC大小数据,而剩下的TC‐(BC/link BW)的时间保持静默,如果有突发流量,仅仅能利用剩下的TC‐(BC/link BW)时间来传递(默认Cisco IOS TC=125ms)。如下图所示:

下图是双速率三色标记的处理流程:

同样RFC定义了两个模式,色盲模式(Color‐Blind),非色盲模式(Color‐Aware),下面分别讨论(使用程序设计思想描述):
A: 色盲模式(Color‐Blind)
Packets Size(PS)
if PS>TP
then (The packets bepaint RED,Violate)
else if PS<TP and PS>TC
then (The packets bepaint YELLOW,Exceed)
else PS<TC
then (The packets bepaint GREEN,Conform)
B: 非色盲模式(Color‐Blind)
if PS>TP or (The packets has bepainted RED)
then (The packets bepaint RED,Violate)
else if (PS<TP and PS>TC) or (The packets has bepainted YELLOW)
then (The packets bepaint YELLOW,Exceed)
else PS<TC or (The packets has bepainted GREEN)
then (The packets bepaint GREEN,Conform)

3. 令牌桶的实现方式①
A.单速率三色标记算法的实现
a.桶的构成
在令牌桶的构成上,目前业界有两种方式,可以由一个桶实现,即C桶是E桶中的一部分,最终桶的容量是由EBS决定的。不管有没有突发流量,EBS不能为0,必须大于或等于CBS。这种实现方式完全按照令牌桶的定义来实现,因为CBS和EBS都是令牌桶的参数,所以放入一个相同的桶实现,通过突发计数器来进行区分。也可以由两个桶实现,即C桶和E桶分开实现。如果不允许有突发流量,EBS则设置成0。
b.令牌添加
令牌桶的添加完全依照RFC规定实现,按照恒定的速率CIR添加。即每隔1/CIR时间添加一个令牌,添加顺序为先添加C桶再添加E桶,当令牌桶添加满的时候,再产生的令牌就会被丢弃。实际中比较常见的有两种实现方式:(1)周期性的添加,添加的时间间隔就是令牌桶的容量与添加速率的比值:Tc=CBS/CIR,每次添加的令牌数为CBS 个;(2)一次性添加,只有当令牌桶中没有令牌时才添加令牌,添加令牌的数量是△t×CIR(△t是当前时间与上次添加令牌的时间之差),且是一次添加完毕,并不是按照一定速率添加。
c.报文处理流程
当报文到来后,直接与桶中的令牌数相比较,如果有足够的令牌就转发,如果没有足够的令牌则丢弃或缓存。这种令牌桶处理方式在突发流量的处理上没有优势,也就是说当存在较大的突发流量时,令牌桶可能会由于没有足够令牌无法处理报文,而且在没有突发流量且报文到达速率较大时,报文处理流程也不连续,有时会因为令牌数量不足而造成丢包。为解决这种无谓的丢包问题,目前业界采用了一种借贷机制的报文处理方法。当报文到来后,只要令牌桶中有令牌,无论数量是否足够,都可以转发报文。当令牌数量小于报文长度时,就可以欠债转发,即转发后令牌桶中令牌数目为负;当下次添加令牌的时候,先还清所欠债务,再继续转发报文。这种处理方法较前者在处理突发报文时有优势,能够保证报文发送的连续性。
c.实现方式比较
假设令牌桶的总容量为1 000 kb,CIR为125 kb/s,报文到达的速率为200 kb/s,报文长度为125 kB (1 000 kb)。
方式一:周期性添加令牌,只有当令牌数足够时才转发报文。添加令牌的周期为8 s,而转发一条报文的时间为5 s。
方式二:一次性添加令牌,当令牌数不足时采用借债机制。转发一条报文的时间是5 s,但是添加令牌的时间是不一定的,每次添加令牌的数目为CIR×△t。
分析数据的处理流程得出以下结论:
(1) 数据包丢弃率:方式二的丢包率远小于方式一。
方式一中,由于令牌添加周期与报文发送周期的不一致,导致第6 s到第8 s由于没有令牌不能转发报文。而第8 s到第16 s虽然在不断添加令牌,但令牌数不足以转发一个报文,所以仍旧无法转发报文,那在这一段时间内到达的报文将被丢弃掉。在前16s的时间内丢包率达到了10/16≈62.5%,由于添加令牌和发送报文的时间都是固定的,所以整个发送过程中的丢包率也为62.5%。
方式二中,第5 s第一条报文发送结束令牌被消耗光,但第6 s又立即加入了550 kb令牌,虽不够转发一条报文,但可以采用借债机制,直到第10 s第二条报文发送结束,累计欠债250 kb。这时若有报文到达,就不能继续欠债,而要注入新的令牌才能继续转发。直到第15 s第三条报文发送完毕由于一次添加令牌不够还清所欠令牌,所以造成了短暂的丢包现象,而在前17s内丢包率仅为1/17≈5.9%。
(2) 突发流量处理:方式二在突发流量处理方面优于方式一。
由图10可知,对方式一来说,由于令牌桶总的容量只有1 000 kb,发送完每条报文后桶中剩余令牌数都为0。此时若有突发流量,则报文必然被丢弃。而方式二令牌数可为负,当突发报文到达时即使令牌数不足仍可通过欠债方式现将报文转发出去,后续再偿还债务。
(3) 大小包混合时:方式一可能会造成大包始终得不到转发,而方式二则不会。
如果发送一长度大于1 000 kb的报文,方式一中则始终会由于令牌不足而丢弃报文,方式二则可以通过借债方式现转发报文后偿还债务。

(4) 数据流发送过程平缓程度:方式二数据处理的时间较长,所以趋势明显比方式一平缓。

B. 双速率三色算法的实现
a. 桶的构成
双速率三色算法的实现,目前业界的实现基本上完全依照RFC的规定,用两个令牌桶来实现,两个令牌桶的容量不同,第一个是CBS,第二个是PBS。
b. 令牌添加
双速率三色标记算法中两桶添加令牌的速率不同,CBS桶添加令牌的速率是CIR,PBS桶添加令牌的速率则是PIR。添加令牌时先添加CBS桶,CBS桶填满后再添加PBS桶。
c. 报文处理流程
当发送连续流量时,先看报文速率是否超过PIR:当报文速率大于PIR时,超过PBS部分流量无法得到令牌,被标记为红色报文;未超过PBS而从PBS桶中获取令牌的报文标记为黄色报文;从CBS桶中获取令牌的报文被标记为绿色报文。当报文速率小于PIR,大于CIR时,报文不会得不到令牌,但会超过CBS部分报文将从PBS桶中获取令牌,被标记为黄色报文;其他报文将从CBS桶中取令牌,被标记为绿色报文;当报文速率小于CIR时,报文所需令牌数不会超过CBS,所以只会被标记为绿色报文。
当发送突发报文时,若突发流量大于PBS,则超出部分统计为红色报文;当突发流量大于CBS,但小于PBS时,则超过CBS部分标记为黄色报文;当突发流量小于CBS时,全部标记为绿色报文。
在流量控制中,用户可针对不同颜色的报文设定不同行为,如;允许通过、丢弃、或重新标记优先级等。

4. 单速率三色算法与双速率三色算法的比较
单速率三色标记算法采用单桶或双桶结构,令牌添加方式和报文处理流程比较简单;双速率三色记算法采用双桶结构,令牌添加方式和报文处理流程相对复杂。前者关注报文尺上的突发,后者关注速率上的突发,两者各有优点。
相对双速率三色标记算法而言,单速率三色标记算法由于实现简单等原因,成为目前业界比较常用流量标记方式。但不同的实现方式决定了其具有一定的性能差异,合理的采用借债方式可以弥补其在丢包率、突发流量处理性能、大小包混合转发性能、数据转发平缓程度等性能方面的不足,但当存在较大速率的突发流量时,单速率三色标记算法的借债机制将不能较好的改善性能问题,所以单速率三色标记算法不能完全取代双速率三色表算法。在实际应用中,应针对不同的流量特征选择恰当的标记方式

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多