QOS配置参数对HFSC算法的影响

来源:互联网 发布:新蛋现在怎么样 知乎 编辑:程序博客网 时间:2024/05/16 11:19

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参数,因而DE行无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_downpacketsize1000,上行时为400d单位为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_availds_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在计算过程中的最大值。

   即此时只在计算PriorityExpressd的过程中获取这个值。如果packetdelay都设置了,则使用初始化时的100

   故此时

   dmax = 2 * 1000 * 1000 / (20480 * 1024) = 0.0953674 ms

 

##########ls参数】###########################################################

  -------------m1----------------------------------------------------------------------

   ls中的m1重用了rtm1的值,故

   m1 = 4642 Kbit,另rtm1值为0的情况下,lsm1会继续设置,因此普通,低优先级中缺失rt参数,同时lsm1 = 0 Kbit

 

  --------------d----------------------------------------------------------------------

   ls中重用了rtd的值,故

   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

可以看出满足结论。


0 0
原创粉丝点击