QOS配置参数对HFSC算法的影响
2016-03-10 16:50
344 查看
1. 分析
由于HFSC算法的资料很少,无法对算法做很深入的了解,无法获知HFSC参数rt ls ul具体的作用。由以下的分析过程,可以大概看出配置值对rt ls ul 各个参数值的影响,最终分析了解限速带宽及延时的作用机理。进而为修改成绝对优先级提供参考。因资料少,可能会有偏差,如发现问题,请指正。如下QOS中,默认对4种优先级设置的参数值
#最高优先级
config class 'Priority'
option packetsize '400'
option maxsize '400'
option avgrate '10'
option priority '20'
#最高优先级下行
config class 'Priority_down'
option packetsize '1000'
option avgrate '10'
#高优先级
config class 'Express'
option packetsize '1000'
option maxsize '800'
option avgrate '50'
option priority '10'
#普通优先级
config class 'Normal'
option packetsize '1500'
option packetdelay '100'
option avgrate '10'
option priority '5'
#普通优先级下行
config class 'Normal_down'
option avgrate '20'
#低优先级
config class 'Bulk'
option avgrate '1'
option packetdelay '200'
#由于低优先级无权值,默认设置为option priority '1'
以下解析带宽分类方案中各个值生成过程:
HSFC算法参数解析
rt : 为实时服务曲线
ls : 为链接分享服务曲线
sc : rt+ls服务曲线(由rt与ls共同服务)
ul : 为上限服务曲线
至少一个rt,ls或sc必须被指定,ul只能在ls或sc下使用
XX := [ [ m1 BPS ] d SEC ] m2 BPS
m1 : 第一段的斜率
d :x轴为时间,单位us
m2 : 第二段的斜率
初始如下(其中rate为限速值)
rate <= 0 ,rate = 128
avgrate = avgrate * rate / 100
maxrate = maxrate * rate / 100
pktsize <= 0 ,pktsize = 1500
prio <=0 , prio = 1
dmax = 100
例子:
设置下行限速带宽为20Mb/s,即20480 Kbit/s时,生成的分类方案如下。
class hfsc 1: root
A: class hfsc 1:1 parent 1: sc m1 0bit d 0us m2 20480Kbit ul m10bit d 0us m2 20480Kbit
B:class hfsc 1:10 parent1:1 leaf 100: rt m1 4642Kbit d 95us m2 2048Kbit ls m1 4642Kbit d 95us m211377Kbit ul m1 0bit d 0us m2 20480Kbit
C:class hfsc 1:20parent 1:1 leaf 200: rt m1 10672Kbit d 95us m2 10240Kbit ls m1 10672Kbit d 95usm2 5688Kbit ul m1 0bit d 0us m2 20480Kbit
D: class hfsc 1:30 parent 1:1 leaf 300: lsm1 0bit d 100.0ms m2 2844Kbit ul m1 0bit d 0us m2 20480Kbit
E: class hfsc 1:40 parent 1:1 leaf 400: lsm1 0bit d 200.0ms m2 568000bit ul m1 0bit d 0us m2 20480Kbit
A行 中只设置最大的服务带宽等为20480kbit/s,对分类的带宽值无影响。
1.1 B行(最高优先级)
############## 【rt参数】######################################################注:在m1值大于0的情况下才会设置rt参数,因而D,E行无rt参数,且ls
m1都为0 bit
--------------m2---------------------------------------------------------------------
由初始化时avgrate = avgrate * rate / 100知
m2 = avgrate = 10 * 20480 / 100 = 2048 Kbit
--------------d----------------------------------------------------------------------
设置packetdelay的情况下,d = packetdelay
没有的情况下,d = 2 * pktsize * 1000 / (rate * 1024)
另外最高优先级在下行时使用Priority_down的packetsize值1000,上行时为400,d单位为ms
此时
d = 2* 1000 * 1000 / (20480 * 1024) = 0.0953674 ms,在使用时由于d为整数,故d = d * 1000 = 95 us
-------------m1----------------------------------------------------------------------
m1值的解析比较复杂,请反方向往上看推算过程,在packetdelay没有设置时才进行m1计算,否则m1
= 0
m1 = m2 + ds / packetdelay
= 2048 + 247.396 / 0.0953674 = (int)4642.135 Kbit = 4642 Kbit
ds = ds_avail * prio / sum_rtprio = 371.094* 20 / 30 = 247.396
prio = 20
packetdelay = 0.0953674 ms
sum_rtprio是所有满足avgrate > 0并且 delay <= 0的类别prio的和
sum_rtprio = 10(最高) + 20(高) = 30
ds_avail = dmax * (rate - allocated)
ds_avail = 0.0953674 * (20480 - 16588.8) =371.094
下一个类别的ds_avail为ds_avail = ds_avail - ds
allocated为所有avgrate的和,此时avgrate = avgrate *rate / 100
allocated = 10 * 20480 / 100(最高) + 50 * 20480 / 100(高) + 20 * 20480 / 100(普通下行)
+ 1 * 20480 / 100(低)
= 2048 + 10240 + 4096 + 204.8
= 16588.8
dmax为最大延迟值,是没有设置packetdelay的这些类中,d在计算过程中的最大值。
即此时只在计算Priority,Express中d的过程中获取这个值。如果packetdelay都设置了,则使用初始化时的100
故此时
dmax = 2 * 1000 * 1000 / (20480 * 1024) = 0.0953674 ms
##########【ls参数】###########################################################
-------------m1----------------------------------------------------------------------
ls中的m1重用了rt中m1的值,故
m1 = 4642 Kbit,另rt中m1值为0的情况下,ls中m1会继续设置,因此普通,低优先级中缺失rt参数,同时ls中m1
= 0 Kbit。
--------------d----------------------------------------------------------------------
ls中重用了rt中d的值,故
d = 0.0953674 ms,在使用时由于d为整数,故d = d * 1000 = 95 us
--------------m2---------------------------------------------------------------------
m2 = rate * prio / sum_prio
sum_prio为所有设置的priority的和,此时sum_prio = 10(最高)+
20(高)+ 5(普通)+ 1(低优先级没有设置时,初始化为1)
= 36
故,m2 = 20480 * 20 / 36 = (int)11377.777 = 11377 Kbit
###########【ul参数】########################################################
ul参数中各个分类中结果一样为,ul m1 0bit d 0us m2 20480 Kbit,不做分析
以下用B行的分析过程验证C行,D行,E行的结果。
1.2 C行(高优先级)
###########【rt参数】########################################################-------------m1----------------------------------------------------------------------
dmax = 2 * 1000 * 1000 / (20480 *1024) = 0.0953674 ms
allocated = 10 * 20480 / 100(最高) + 50 * 20480 /100(高) + 20 * 20480 / 100(普通下行) + 1 * 20480 / 100(低)
= 2048 + 10240 + 4096 + 204.8
= 16588.8
经过B行后的,没有设置packetdelay的情况下ds_avail= ds_avail - ds = 371.094(B行结果) - 247.396(B行结果) = 123.698
sum_rtprio = 10(最高) + 20(高) = 30
prio = 10
packetdelay = 0.0953674 ms
ds = ds_avail * prio / sum_rtprio = 123.698 * 10 / 30 = 41.2327
m1 = m2 + ds / packetdelay = 10240 + 41.2327 / 0.0953674 = (int)10672.3564 Kbit = 10672 Kbit
--------------m2---------------------------------------------------------------------
avgrate = avgrate * rate / 100 = 50 * 20480 / 100 = 10240 Kbit/s
--------------d----------------------------------------------------------------------
d= 2 * pktsize * 1000 / (rate * 1024) = 2 * 1000 * 1000 (20480 * 1024) = 0.0953674ms
在使用时由于d为整数,故d = d *1000 = 95 us
###########【ls参数】#########################################################
--------------m2---------------------------------------------------------------------
m2 = rate * prio / sum_prio =20480 * 10 / 36 = (int)5688.8889 Kbit = 5688 Kbit
--------------d----------------------------------------------------------------------
d= 0.0953674 ms = 95 us,ls中重用了rt中d的值
-------------m1----------------------------------------------------------------------
m1重用rt m1值 10672 Kbit
###########【ul参数】#########################################################
ul参数中各个分类中结果一样为,ul m1 0bit d 0us m2 20480 Kbit,不做分析
验证后结果符合。
1.3 D行(普通优先级)
###########【rt参数】########################################################-------------m1----------------------------------------------------------------------
此处packetdelay有设置,故m1 = 0Kbit
因此rt参数都不设置
###########【ls参数】#########################################################
--------------m2---------------------------------------------------------------------
m2 = rate * prio / sum_prio =20480 * 5 / 36 = (int) 2844.4444 Kbit = 2844 Kbit
--------------d----------------------------------------------------------------------
d= 100 ms (packetdelay已设置)
-------------m1----------------------------------------------------------------------
m1重用rt m1值 0 Kbit
###########【ul参数】########################################################
ul参数中各个分类中结果一样为,ul m1 0bit d 0us m2 20480Kbit,不做分析
验证后结果符合。
1.4 E行(低优先级)
###########【rt参数】#########################################################-------------m1----------------------------------------------------------------------
此处packetdelay有设置,故m1 = 0Kbit
因此rt参数都不设置
###########【ls参数】#########################################################
--------------m2---------------------------------------------------------------------
m2 = rate * prio / sum_prio =20480 * 1 / 36 = (int) 568.8889 Kbit = 568 Kbit
--------------d----------------------------------------------------------------------
d= 200 ms (packetdelay已设置)
-------------m1----------------------------------------------------------------------
m1重用rt m1值 0 Kbit
###########【ul参数】#########################################################
ul参数中各个分类中结果一样为,ul m1 0bit d 0us m2 20480Kbit,不做分析
验证后结果符合。
2. 结论
参数中packetsize,maxsize是两个很少变动的值或者不应该变动的值,因此对于avgrate,packetdelay,priority的分析是核心。从以上分析过程可以看出:
【avgrate】
---------------rt参数中------------------------------------------------------------------
avgrate对于本类别rt参数中的m1,m2的值是正线性关系,对于其他类别m1是负向关系,对于其他类别m2没有影响。
---------------ls参数中------------------------------------------------------------------
由于重用,对于ls参数中的m1是正线性关系,对m2值没有影响。
【packetdelay】
由于B,C行配置没有设置packetdelay,故按packetsize生成的packetdelay是固定不变的。
对于D,E行配置设置了packetdelay,直接作用于HFSC算法,并且只作用于ls参数,具体在算法中的作用不是很明晰。
即packetdelay对设置了packetdelay的类别有影响,由于加大延时减缓带宽,故是消极影响。
【priority】
---------------在rt参数中----------------------------------------------------------------
ds = ds_avail * prio / sum_rtprio,
m1 = m2 + ds / packetdelay,
m2 = avgrate * rate / 100
知,对于增大prio值的类别rt参数中的m1值增大,是正向关系,对m2值没有影响。对于其他类别中的m1是负向关系。
---------------在ls参数中----------------------------------------------------------------
ls参数中m1重用rt参数m1,故priority对于m1值是正向关系。
m2 = rate * prio / sum_prio,故对于增大prio值的类别m2是正向关系,对其他类别中的m2是负向关系。
3. 验证结论
以下通过测试验证以上的结论:默认配置生成的结果:
class hfsc 1: root
A: class hfsc 1:1 parent 1: sc m1 0bit d 0us m2 20480Kbit ul m10bit d 0us m2 20480Kbit
B:class hfsc 1:10parent 1:1 leaf 100: rt m1 4642Kbit d 95us m2 2048Kbit ls m1 4642Kbit d 95us m211377Kbit ul m1 0bit d 0us m2 20480Kbit
C:class hfsc 1:20parent 1:1 leaf 200: rt m1 10672Kbit d 95us m2 10240Kbit ls m1 10672Kbit d 95usm2 5688Kbit ul m1 0bit d 0us m2 20480Kbit
D: class hfsc 1:30 parent 1:1 leaf 300: lsm1 0bit d 100.0ms m2 2844Kbit ul m1 0bit d 0us m2 20480Kbit
E: class hfsc 1:40 parent 1:1 leaf 400: lsm1 0bit d 200.0ms m2 568000bit ul m1 0bit d 0us m2 20480Kbit
3.1 验证avgrate结论
修改Priority_down中avgrate = 20(原来为10),结果为:class hfsc 1: root
class hfsc 1:1 parent 1: sc m1 0bit d 0usm2 20480Kbit ul m1 0bit d 0us m2 20480Kbit
class hfsc 1:10 parent 1:1 leaf 100: rt m15324Kbit d 95us m2 4096Kbit ls m1 5324Kbit d 95us m2 11377Kbit ul m1 0bit d 0usm2 20480Kbit
class hfsc 1:20 parent 1:1 leaf 200: rt m110444Kbit d 95us m2 10240Kbit ls m1 10444Kbit d 95us m2 5688Kbit ul m1 0bit d0us m2 20480Kbit
class hfsc 1:30 parent 1:1 leaf 300: ls m10bit d 100.0ms m2 2844Kbit ul m1 0bit d 0us m2 20480Kbit
class hfsc 1:40 parent 1:1 leaf 400: ls m10bit d 200.0ms m2 568000bit ul m1 0bit d 0us m2 20480Kbit
可以看出满足结论。
3.2 验证packetdelay结论
修改Normal的packetdelay = 300 (原来为100),结果为:class hfsc 1: root
class hfsc 1:1 parent 1: sc m1 0bit d 0usm2 20480Kbit ul m1 0bit d 0us m2 20480Kbit
class hfsc 1:10 parent 1:1 leaf 100: rt m14642Kbit d 95us m2 2048Kbit ls m1 4642Kbit d 95us m2 11377Kbit ul m1 0bit d 0usm2 20480Kbit
class hfsc 1:20 parent 1:1 leaf 200: rt m110672Kbit d 95us m2 10240Kbit ls m1 10672Kbit d 95us m2 5688Kbit ul m1 0bit d0us m2 20480Kbit
class hfsc 1:30 parent 1:1 leaf 300: ls m10bit d 300.0ms m2 2844Kbit ul m1 0bit d 0us m2 20480Kbit
class hfsc 1:40 parent 1:1 leaf 400: ls m10bit d 200.0ms m2 568000bit ul m1 0bit d 0us m2 20480Kbit
可以看出设置的300直接作用于1:30 ls参数中d值。满足结论。
3.3 验证priority结论
修改Express的priority = 30(原来为10),结果为:class hfsc 1: root
class hfsc 1:1 parent 1: sc m1 0bit d 0usm2 20480Kbit ul m1 0bit d 0us m2 20480Kbit
class hfsc 1:10 parent 1:1 leaf 100: rt m13604Kbit d 95us m2 2048Kbit ls m1 3604Kbit d 95us m2 7314Kbit ul m1 0bit d 0usm2 20480Kbit
class hfsc 1:20 parent 1:1 leaf 200: rt m111640Kbit d 95us m2 10240Kbit ls m1 11640Kbit d 95us m2 10971Kbit ul m1 0bit d0us m2 20480Kbit
class hfsc 1:30 parent 1:1 leaf 300: ls m10bit d 100.0ms m2 1828Kbit ul m1 0bit d 0us m2 20480Kbit
class hfsc 1:40 parent 1:1 leaf 400: ls m10bit d 200.0ms m2 365000bit ul m1 0bit d 0us m2 20480Kbit
可以看出满足结论。
相关文章推荐
- Json转换中文到前台出现乱码问题
- if 和 switch的区别和应用
- GDT,LDT,GDTR,LDTR 详解,包你理解透彻
- 抽样,mcmc, Metropolis-Hastings,Gibbs Sampling
- 关于VS编译的程序内存分配只能用1.5~2G上限的优化方案
- 数据结构与算法Javascript描述(五)循环链表
- IE浏览器版本判断
- HDU 4565 So Easy!
- 如何安装 CocoaPods
- git学习笔记
- Linux网络编程 IO多路复用
- 模拟器运行不了地图,真机可以
- Javascript定义类三种方法
- Android Studio常用快捷键
- linux学习笔记:网络命令
- 那些年spring声明式事务@Transaction的坑
- hive的安装(元数据库: MySQL)
- iOS9使用提示框的正确实现方式
- Unity(64bit)5.1 打开无故出现框框,纹理不见了
- 存储过程--自动生成有日期的序列号(头可自己定义)