最近接触到几个小工程用了不少QOS知识,主要是限速之类的,用到了CIR_CBS_EBS    理解CIR_CBS_EBS三者之间的关系,更好的应用QOS。



平均速率:向桶中放置令牌的速率,即允许的流的平均速度。通常设置为 CIR(Committed Information Rate,承诺信息速率)。
突发尺寸:令牌桶的容量,即每次突发所允许的最大的流量尺寸。通常设置为CBS(Committed Burst Size,承诺突发尺寸),设置
的突发尺寸必须大于最大报文长度。
个人见解举例:CIR=100kbyte/s,CBS=2000kbyte,此时下载速度200kbyte/s.可以假想令牌桶为一水桶,他的容量是 2000L,底部出水
口流速200L/S,上部进水口注水速度100L/S,显然入不支出。2000/(200-100)=20S.20秒后桶内水流完。这时出水口的流速变为
100L/S。而20秒前,水的流速一直保持200L/S,这就是为什么叫突发了。应用到实际,打开网页时,刚开始需要下载图片,网页文
件等,下载速度要求很高,但持续时间不常,这就是突发能解决的实际问题。通过CBS我们即可以控制用户下载小文件高速下载,而
大文件,限速下载。纯属个人学习见解,供大家参考,交流。
1、在令牌桶原理中,CBS(承诺突发尺寸)+EBS(超额突发尺寸Excess Burst Size)=令牌桶大小,默认情况下EBS为0,CBS采用默
认值,CBS和EBS单位是Byte,即字节
2、CIR(承诺信息速率)为每秒往令牌桶添加令牌的速度,单位是kbps,注意是bit每秒,不是Byte每秒,如配置qos car outbound
carl 1 cir 64,其含义就是对carl队列1在接口出方向配置CIR为64kbps,此时默认CBS为4000(Byte),即令牌桶大小为4000字节
,每秒往桶内注入令牌的速率是64kbps,令牌桶就和水桶一样,CIR最多把桶注满,并不会多出。
3、假设一个包,大小是1500字节,如果此时桶内令牌数量是2000字节,那么该数据包通过,令牌数量变成2000-1500=500(字节)
,如果此时再来一个1000字节的数据包,那么令牌就不够,这个数据包就有可能被丢弃或remark
4、上面只是原理介绍,实际情况是动态变化(一边有令牌注入,一边有数据包转发取令牌)的,需要计算机仿真才能看到令牌桶的
动态变化
5、CAR(承诺访问数率)用来限速,比如限制FTP、HTTP、每IP限速,并不用来做流量保证,如VoIP、Video业务优先转发。
带宽是被共享的,因此当做QOS的CAR的时候如果某用户的,没有被限制带宽,则可能会由于,不限速度的用户流量过大而抢占,你
所用CAR保证的用户。此时需要用队列技术。<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
QOS的一些基本概念。
CIR=放置令牌到桶内的速度这个是一个平均值单位是bps,即1秒内放的令牌个数。  
CBS=令牌桶的尺寸大小
业务流的速度=取令牌的速度
TC=周期性添加令牌的时间间隔cbs/cir=tc
实际中比较常见的有两种实现方式:(1)周期性的添加,添加的时间间隔就是令牌桶的容量与添加速率的比值:T c=CBS/CIR,每次
添加的令牌数为CBS 个;
还有种(本次加入令牌的时间-上次加入令牌的时间)XCIR 超额的被丢弃,这种是一次加满没有TC间隔的。TC会增加时延
突发=瞬间消耗桶内所有令牌
EBS=CBS+EBS请不要把EBS和CBS的值设置成一样,否则,超额突发=0最好是大于CBS的2倍,这样允许超额突发
CIR=CBS,EBS=0 则速度就是CIR所约定的,因为CIR是放令牌的速度最终要看CBS是桶大小,这个时候CBS限制了CIR能放的令牌量。
此时业务流量如果持续小于CIR,则会得到CBS的突发量。因为小于CIR是放令牌的速度,业务持续小于CIR,会使得令牌在桶内累计
。此时业务如果大于CIR,会因为得不到令牌而被丢弃
CIR>CBS,EBS=0 则速度是桶子的突发尺寸CBS所定义的,此时因为CIR是放置令牌的,但是桶没有CIR所需求的大。那么业务流这个时
候只能得到CBS大小的令牌,突发的频率很高,只要业务达到CIR的速度,则每次都会把桶内的令牌消耗完,当然业务流不一定每次
都能达到CIR的速度。
CIR<CBS ,EBS=0 则发送的速度是CIR所定义的,但这个时候网络允许突发,即有可能网络会发送到CBS所定义的尺寸,当然一旦突发
,桶内的令牌就没有了,这个时候需要等待TC周期,(TC=(CBS+EBS)/CIR),因此可能会增大网络时延,当然这只是突发流量才会。
这个时候业务速度如果比CIR小,则可能累计出大于CIR的突发流量。因为会持续向桶内添加令牌,直到超过EBS,最后令牌将被丢弃
,所以业务如果不去取令牌,会导致令牌积压,之后业务将得到突发。但是如果业务很平均,则不会导致突发,因为CIR每次放入的
令牌,都被用户取掉了,当然业务一般不会很平均,因此CIR注入的令牌也不一定能消耗完每次,这样就看你的令牌桶是否允许业务
突发了。
因此得出,推荐配置CBS=CIR    EBS大于CBS的2倍          最小值=8000/8=1000B,CBS最小=15000/8/1024=1.8KB,CBS最小刚好大
于了MTU的1500字节,因此无论如何都可以发出一个数据包的,如果它小于了1500.EBS此时等于0则可能连一个包都发不出,因此不
允许小于1.8KB。CIR的速率如果这个时候大于了CBS,则在1秒内超过CBS桶子的尺寸,将被认为是EBS的,EBS=0,因此直接丢弃了。
CIR=8000 CBS=15000 EBS=0 这样的配置,会得到的结果是速度是1000B/s 允许突发到1800B/S 1秒内超过1800B的包就被丢弃。
推荐CBS=CIR的设置,这样不允许突发虽然,但是业务流速度得到保证。
TC可以用来调节业务的时延,(它是不可以配置的,由CBS/CIR=TC得到)因为它是向CBS桶内加令牌的时间间隔。一个业务最多可以
得到的就是CBS的令牌数,不过这个还需要累计,在TC时间内,只能加入CIR所设定的令牌数目,因此想达到CBS的量,可能需要积蓄
几轮CIR.
降低TC时间可以增加业务突发次数,这样可以获得小时延。
而业务一般,突发,需要累计否则可能是CBS<CIR时那TC时间很小。
其实业务的速度是靠CIR来限制的,业务的时延是靠TC来调节的,但TC是不允许配置的,因此只有CBS和CIR来控制TC。CBS越大TC越
大,业务的突发时延间隔越大。
结论,最好将CBS=cir