层次化QOSHQOS.docx
《层次化QOSHQOS.docx》由会员分享,可在线阅读,更多相关《层次化QOSHQOS.docx(28页珍藏版)》请在冰豆网上搜索。
层次化QOSHQOS
层次化QOS(HQOS)
———————————————————————————————— 作者:
————————————————————————————————日期:
HQoS
HQoS
HQoS即层次化QoS(Hierarchical Qualityof Service),是一种通过多级队列调度机制,解决Diffserv模型下多用户多业务带宽保证的技术。
传统的QoS采用一级调度,单个端口只能区分业务优先级,无法区分用户。
只要属于同一优先级的流量,使用同一个端口队列,不同用户的流量彼此之间竞争同一个队列资源,无法对端口上单个用户的单个流量进行区分服务。
HQoS采用多级调度的方式,可以精细区分不同用户和不同业务的流量,提供区分的带宽管理。
基本调度模型
调度模型分为两部分:
ﻫ
∙调度器:
对多个队列进行调度。
调度器执行某种调度算法,决定各个队列之间报文发送的先后顺序。
调度算法包括按优先级调度SP(StrictPriority),或按权重调度(DRR、WRR、DWRR、WFQ算法的其中一种)。
调度算法详细介绍请参见“队列及拥塞管理”。
调度器就一个动作:
选择队列。
队列被调度器选中时,队列最前面的报文被发送。
∙被调度对象:
即队列。
报文根据一定的映射关系进入不同的队列。
队列被赋予3种属性:
1)根据调度算法,队列被赋予优先级或权重。
2)队列整形速率PIR。
3)报文丢弃策略,包括尾丢弃(Tail-drop)或WRED。
队列有两个动作:
1)入队:
当系统收到报文时,根据报文丢弃策略决定是否丢弃报文。
如果报文未被丢弃,则报文入队尾。
2)出队:
队列被调度器选中时,队列最前面的报文出队。
出队时,先执行队列整形,之后报文被发送。
HQoS层次化调度模型
为了实现分层调度,HQoS采用树状结构的层次化调度模型,如图1。
树状结构有三种节点:
∙叶子节点:
处于最底层,表示一个队列。
叶子节点是被调度对象,而且只能被调度。
∙中间节点:
处于中间层,既是调度器又是被调度对象。
当作为被调度对象时,一个中间节点可以看成一个虚队列。
所谓虚队列,是指仅作为调度结构中的一个层次,不是实际占用缓存的队列。
∙根节点:
处于最高层,表示最高级别的调度器。
根节点只是调度器,不是调度对象。
根节点通常被赋予PIR属性,用于限制输出总带宽。
图1层次化调度模型ﻫ
调度器可以对多个队列进行调度,也可以对多个调度器进行调度。
其中,调度器可以看成父节点,被调度的队列/调度器看成子节点。
父节点是多个子节点的流量汇聚点。
每个节点可以指定分类规则和控制参数,对流量进行一次分类和控制。
不同层次的节点,其分类规则可以面向不同的分类需求(如用户、业务类型等),并且在不同的节点上可以对流量做不同的控制动作,从而实现了对流量进行多层次、多用户、多业务的管理。
HQoS的层次划分
HQoS层次化调度中,可以只有一层中间节点,实现三层调度结构;也可以有多层中间节点,实现多层调度结构。
甚至可以将两个或多个层次化调度模型叠加,通过制定映射规则,将一个调度模型输出的报文映射到另一个调度模型的叶子节点,如图2,从而实现更加灵活的调度需求。
图2 灵活的调度层次划分 ﻫ
不同厂家、不同芯片,实现的调度层次不同。
华为路由器的调度结构
在华为路由器上,没有配置HQoS的情况下,只有类队列CQ(ClassQueue)和Port调度器,其调度结构如图3。
图3没有配置HQoS时的队列调度结构 ﻫ
CQ队列的属性包括:
∙队列优先级、队列权重
∙队列整形速率PIR
∙报文丢弃策略,尾丢弃(Tail-drop)或WRED
Port调度器可以是按优先级调度SP(StrictPriority),或按权重调度(WRR、DWRR、WFQ算法的其中一种)。
说明:
WRR、DWRR、WFQ都是按权重调度,为方便,本文将按权重的调度统称为WFQ。
在配置HQoS的情况下,路由器另外划分缓存,用于缓存需要层次化调度的业务流队列,并对这些流队列先进行一轮多层次调度,再将HQoS流与非HQoS流统一入CQ队列,进行统一调度,如图4。
图4HQoS流队列调度 ﻫ
∙叶子节点:
FQ(FlowQueue)队列
用于暂存一个用户各个优先级中的一个优先级的数据流。
每个用户的数据流都可以划分为1~8个优先级,即每个用户可以使用1~8个FQ。
不同用户之间不能共享FQ。
每个FQ可以配置shaping值来限制该队列的最大带宽。
FQ队列与CQ队列具有相同属性:
▪队列优先级、队列权重
▪队列整形速率PIR
▪报文丢弃策略,尾丢弃(Tail-drop)或WRED
∙中间节点:
SQ(SubscriberQueue)
一个SQ代表一个用户(例如,一个VLAN,或一个LSP,或一个PVC),每个SQ可定义其CIR和PIR。
每个SQ固定对应8种FQ业务优先级,这1~8个FQ共享该SQ的带宽。
如果哪个FQ空闲,则其他FQ可以占用空闲出来的带宽,但是受限于FQ自己的PIR,最大不能超过FQ自己的PIR。
SQ既是调度器,又是虚队列作为被调度对象。
▪作为调度器:
对多个FQ队列进行调度。
FQ队列可以配置为PQ、WFQ和LPQ。
优先级为EF、CS6和CS7的FQ队列默认采用SP调度算法;优先级为BE、AF1、AF2、AF3、AF4的流队列默认采用WFQ调度算法,调度权重为10:
10:
10:
15:
15。
▪作为被调度对象的虚队列:
被赋予了两个属性,CIR和PIR。
通过流量测速(Metering),将输入流量分流成“<=CIR”与“>CIR”两部分;“<=CIR”的部分是指用户付费的部分,“>CIR”的那部分流量称为EIR,EIR=PIR-CIR。
EIR是指突发量,允许用户流量突发至最大值PIR。
∙根节点:
GQ(Group Queue)
为了简便处理,可以把多个用户定义为一个用户组GQ,类似于在配置BGP对等体时把多个具有共同特点的对等体配置为一个组。
例如,可以把相同总带宽需求的用户归为一个GQ,或把所有金牌级用户归为一个GQ。
一个GQ可以绑定多个SQ,但一个SQ最多只能绑定到一个GQ内。
GQ作为调度器,对多个SQ队列进行调度。
先采用DRR算法在SQ之间调度小于CIR的那部分流量,不同SQ之间采用DRR调度。
如果有剩余带宽,再采用DRR算法调度超过CIR但小于PIR的那部分流量(即EIR)。
CIR和EIR之间采用SP调度算法,优先保证CIR的带宽;超过PIR的流量会被丢弃。
因此,如果GQ能获得PIR带宽,则GQ下每个SQ的CIR带宽都可以得到保证,且SQ最大可以获得PIR带宽。
此外,GQ作为根节点,可以赋予最大带宽PIR属性,用于对多个用户的流量进行整体限速。
该GQ下的所有用户都受限于这个最大带宽。
GQ的PIR值只是用于整体限速,并不用来保证带宽,GQ的PIR值建议不小于GQ中所有SQ的CIR之和,否则单个用户(SQ)的流量无法得到保证。
说明:
对GQ的PIR的补充说明:
当设备支持SQ动态调整带宽特性时,
▪如果所有SQ的CIR之和超过GQ带宽,按CIR:
CIR的比例分配带宽。
如果所有SQ的PIR之和超过GQ带宽时,先满足各SQ的CIR带宽,再按EIR:
EIR的比例分配剩余带宽(EIR=PIR-CIR)。
▪如果所有SQ的CIR之和超过GQ带宽,按CIR:
CIR的比例分配带宽。
例如,SQ1的CIR =100Mbps,SQ2的CIR=50Mbps,而GQ带宽只有100Mbps,则最终SQ1和SQ2按照100M:
50M的比例输出。
▪如果所有SQ的PIR之和超过GQ带宽,先满足各SQ的CIR带宽,再按EIR:
EIR的比例分配剩余带宽。
例如,SQ1的CIR=100Mbps,PIR =150Mbps;SQ2的CIR=0Mbps,PIR=100Mbps;GQ带宽是200Mbps。
首先,SQ1获得100M的CIR,剩余100M带宽按SQ1、SQ2的EIR比例分配。
SQ1的EIR=50M;SQ2的EIR =100M,两者会近似按照1:
2的比例分剩余的100M。
最终,SQ1获得133Mbps,SQ2获得66Mbps。
为了帮助理解,下面举例说明FQ、SQ、GQ及其关系。
假设一栋楼有20个家庭,每个家庭购买的带宽是20M,则只需要为每个家庭创建一个SQ,设置CIR和PIR均为20M即可,满足了保证每个家庭20M带宽的要求,同时这里的PIR也是限定用户最大可使用的带宽为20M。
但随着VoIP、IPTV业务的开通,加上已有的个人上网HSI业务,运营商实时推出了新的带宽套餐,带宽仍然为20M,其中包含了VoIP,IPTV等增值业务。
这样,每个家庭可以使用VoIP电话,机顶盒看电视(IPTV),同时还使用电脑上网冲浪(HSI)。
此需求的HQoS配置方法是:
∙配置3个FQ,对应3种业务(VoIP、IPTV、HSI);
∙配置20个SQ,分别对应20个家庭用户。
每个SQ配置CIR和PIR,CIR保证带宽,PIR限定最大带宽。
∙配置1个GQ对应一栋楼,将20个用户的带宽汇总,将20个用户视为“用户组”,整合20个用户的总带宽作为GQ的PIR,让这20个用户实现带宽共享。
20个用户相对独立,但是总带宽又受到GQ的限制。
分层模型为:
∙FQ用于对用户的各种业务进行细分,控制用户的业务类型和带宽在各个业务之间的分配;
∙SQ用于区分用户,对每个用户的带宽进行限速;
∙GQ用于区分用户组,对5个SQ的流量进行整体限速。
FQ的作用是保证各类业务的带宽分配关系;SQ的作用是将每一个用户单独标识出来;而GQ的作用是使得各个用户之间的CIR能够得到保证,同时又达到带宽共享的目的。
超过CIR部分的带宽是不保证的,这是合理的,因为超过CIR部分的带宽实际上是用户并未付费的部分,是属于额外的。
而重要的是,必须保证CIR,因为CIR的带宽是客户购买的。
按照图4的SQ调度可以看到,用户的CIR总是可以保证的,因为用户的CIR是被单独标识出来优先被调度的,因此不会被其它用户超过CIR部分的流量抢占。
华为路由器上,HQoS可实现上、下行方向的调度,且上、下行的调度结构不同。
HQoS上行队列调度
图5HQoS上行调度结构ﻫ
HQoS的上行队列调度,HQoS流经过FQ->SQ->GQ的调度之后,与非HQoS流会合,统一进行如下两层调度:
∙目的板TB(TargetBlade)调度
TB调度也称为VOQ(VirtualOutput Queue)调度。
TB调度的作用可以借用比喻来理解:
如下图为一个十字路口,A路口来了3辆车(汽车、铲车和卡车),分别去往B、C、D。
如果此时B路口堵车,则汽车不能动,由于它排在前面,后面的铲车和卡车也不能动,尽管C、D路口是畅通的。
如果在A路口针对目的地B、C、D路口分别设立三条车道,则上面的问题就可以解决了。
同理,对于路由器的交换网板,上面的A、B、C、D路口相当于不同的单板。
如果每块单板都为去往的不同目的单板的报文分配队列,这种队列称为VOQ,可以预防因某块目的单板拥塞而影响去往其他目的单板的报文。
VOQ是设备自动划分的,用户无法更改VOQ队列属性和调度器属性。
说明:
组播报文上行还没有复制,还不确定去往哪个目的单板,所以组播报文单独一个VOQ队列。
对于单播,有多少个目的单板,就有多少个单播VOQ队列。
VOQ调度中,先在单播VOQ队列之间进行DRR调度,再在单播和组播两者之间进行DRR调度。
∙类队列CQ(Class Queue)调度
对于上行调度,有4个CQ队列,分别叫做COS0(对应CS7、CS6和EF)、COS1(对应AF4和AF3)、COS2(对应AF2和A