Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1471822
  • 博文数量: 150
  • 博客积分: 65
  • 博客等级: 民兵
  • 技术积分: 3415
  • 用 户 组: 普通用户
  • 注册时间: 2011-02-25 10:30
个人简介

游戏后台开发

文章分类

全部博文(150)

文章存档

2020年(1)

2019年(4)

2017年(3)

2016年(6)

2015年(4)

2014年(45)

2013年(86)

2012年(1)

分类:

2014-02-19 23:18:25

原文地址:网络QoS原理与实现 [4] 作者:conghonglei


通过上面简单的token bucket进行流量管理,我们可以判断一个新输入的packet是符合流量要求的,什么时候流量超标。在符合流量要求的时候,必须正确的将这个packet转发出去,而流量超标时如何处理这个packet就是可以配置的不同做出不同的选择,可以选择丢包,而当系统整体的负载不重时,也许我们也可以允许对这些超出的数据也进行一定的转发。因此我们有了TCM(three color markers)算法,他将所有输入的packet根据token bucket情况将其标记上三种颜色(green,yellow,red)。当然green就是这个pkt符合流量要求,进行转发,red就是不符合要求,丢掉,yellow是不符合要求,但是也可进行转发。通常green对应的是r,而yellow和red的计算根据系统不同配置而不同。下面介绍几种TCM变种算法。

srTCM (Single Rate Three Color Marker)

srTCM基于token bucket,方法有三个参数如下:
  • CIR (committed information rate),token的生成速率
  • CBS (committed burst size),burst小于此值将为green
  • EBS (excess burst size),burst小于此值,但大于CBS将为yellow,否则为red
具体算法可以如下描述:

// init : Tc = CBS, Te = EBS
If (Tc < CBS) { Tc += CIR * time_elapsed; }
else if (Te < EBS) { Te += CIR * time_elapsed; }
 
If (Tc >= pkt_size) { Tc -= pkt_size; make pkt as GREEN; }
else if (Te >= pkt_size) {Te -= pkt_size; mark pkt as YELLOW; }
else { Mark the pkt as RED; }



trTCM (Two Rate Three Color Marker)

trTCM基于前面的两个token bucket的方法,有四个参数如下:
  • CIR (committed information rate),committed bucket的token的生成速率
  • PIR (peak information rate),peak bucket的token的生成速率
  • CBS (committed burst size),burst小于此值将为green
  • PBS (peak burst size),burst小于此值,但大于CBS将为yellow,否则为red
具体算法可描述如下:

// init: Tc = CBS, Tp = PBS
If (Tc < CBS) { Tc += CIR * time_elapsed; }
If (Tp < PBS) { Tp += PIR * time_elapsed; }
 
If ( Tc >= pkt_size) { Tc -= pkt_size; Tp -= pkt_size; make pkt as GREEN; return }
If (Tp >= pkt_size) { Tp -= pkt_size; make the pkt as YELLOW; return; }
Make the pkt as RED; return;



tswTCM (Time Slicing Window Three Color Marker)

与前面两种基于token bucket的方法不同,tswTCM利用划窗进行速率估计的基于概率的标记方法。有三个参数:
  • CTR (committed target rate),估计速率低于此值为GREEN
  • PTR (peak target rate),估计速率低于此值,但高于CTR为YELLOW,否则为RED
  • AVG WIN SIZE,划窗窗口大小
算法描述如下:

// init: avg_rate = CTR
byte_count = pkt_len + avg_rate * AVG_WIN_SIZE
avg_rate = byte_count / (time_elapsed + AVG_WIN_SIZE)
 
if (avg_rate < CTR) { make the pkt GREEN; return; }
if (avg_rate < PTR) {
                p0 = (avg_rate – CTR) / avg_rate;
                mark the packet as YELLOW with probability p0, GREEN with (1 – p0)
} else {
                P1 = (avg_rate – PTR) / avg_rate
                P2 = (PTR – CTR) / avg_rate
                Make the packet : RED(p1), YELLOW(p2), GREEN (1-p1-p2)
}



Policing and Shaping

利用前面提到的各种算法可以完成policing和shaping的功能,即对于GREEN和YELLOW的packet还是转发的策略,对于RED的packet可以丢弃,也可以将其进行排队直到满足条件再转发。


待续

阅读(1252) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~