HQoS概述
与传统的QoS基于端口进行流量调度不同,HQoS在单个端口下能区分用户和不同用户的业务。
HQoS即层次化QoS(Hierarchical Quality of Service),是一种通过多级队列调度机制,解决Diffserv模型下多用户多业务带宽保证的技术。
传统的QoS采用一级调度,单个端口只能区分业务优先级,无法区分用户。只要属于同一优先级的流量,使用同一个端口队列,不同用户的流量彼此之间竞争同一个队列资源,无法对端口上单个用户的单个流量进行区分服务。
HQoS采用多级调度的方式,可以精细区分不同用户和不同业务的流量,提供区分的带宽管理。
以NE40E的调度结构为说明
在NE40E上,没有配置HQoS的情况下,只有类队列CQ(Class Queue)和Port调度器,其调度结构如图1:没有配置HQoS时的队列调度结构。
CQ队列的属性包括:
- 队列优先级、队列权重
- 队列整形速率PIR
- 报文丢弃策略,尾丢弃(Tail-drop)或WRED
Port调度器可以是按优先级调度SP(Strict Priority),或按权重调度(WRR、WDRR、WFQ算法的其中一种)。其中WRR、WDRR、WFQ都是按权重调度,为方便,本文将按权重的调度统称为WFQ。
在配置HQoS的情况下,路由器另外划分缓存,用于缓存需要层次化调度的业务流队列,并对这些流队列先进行一轮多层次调度,再将HQoS流与非HQoS流统一入CQ队列,进行统一调度,如图2:HQoS流队列调度
-
叶子节点:FQ(Flow Queue)队列
用于暂存一个用户各个优先级中的一个优先级的数据流。每个用户的数据流都可以划分为1~8个优先级,即每个用户可以使用1~8个FQ。不同用户之间不能共享FQ。每个FQ可以配置shaping值来限制该队列的最大带宽。
FQ队列与CQ队列具有相同属性:
- 队列优先级、队列权重
- 队列整形速率PIR
- 报文丢弃策略,尾丢弃(Tail-drop)或WRED
-
中间节点:SQ(Subscriber Queue)
一个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)的流量无法得到保证。
为了帮助理解,下面举例说明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用于区分用户组,对20个SQ的流量进行整体限速。
FQ的作用是保证各类业务的带宽分配关系;SQ的作用是将每一个用户单独标识出来;而GQ的作用是使得各个用户之间的CIR能够得到保证,同时又达到带宽共享的目的。
超过CIR部分的带宽是不保证的,这是合理的,因为超过CIR部分的带宽实际上是用户并未付费的部分,是属于额外的。而重要的是,必须保证CIR,因为CIR的带宽是客户购买的。按照图8-2的SQ调度可以看到,用户的CIR总是可以保证的,因为用户的CIR是被单独标识出来优先被调度的,因此不会被其它用户超过CIR部分的流量抢占。
NE40E上,HQoS可实现上、下行方向的调度,且上、下行的调度结构不同。
HQoS基本概念
HQoS需要用到的基本概念包括:流队列、用户队列、用户组队列、类队列、低优先级队列。
流队列FQ(Flow Queue)
HQoS可以针对每个用户的业务流进行队列调度。通过配置峰值带宽(PIR),HQoS可以对每个用户进行带宽限制。每个用户都可以细分为8个流队列,8个流队列可以配置PQ、WFQ和LPQ队列调度;每个流队列可以配置WRED丢弃机制;可以配置流量整形的速率。
用户队列SQ(Subscriber Queue)
SQ为虚拟队列。所谓虚拟队列,是指队列不存在实际的缓存单元,不暂存数据,数据进入和离开队列没有延迟,仅作为层次化调度中的其中一级队列参与输出调度。
每个SQ固定对应8种FQ业务优先级,可配置1~8个FQ。空闲FQ不能被其它SQ利用,即这1~8个FQ共享该SQ的带宽。实际应用中,一个SQ对应一个用户(VLAN、VPN等),一个用户可使用1~8个FQ。每个SQ可定义其CIR和PIR。
用户组队列GQ(Group Queue)
HQoS可以将多个SQ绑定到一个GQ实现第三级队列调度。
GQ用来对多个用户的流量进行整体限速。设置的shaping值建议不要小于GQ中所有SQ的CIR之和,否则单个用户(SQ)的流量就无法得到保证。
GQ也是虚拟队列。每个SQ最多只能绑定到一个GQ内,也可以不绑定GQ,跨过第三级队列调度。
GQ可以实现流量整形,配置整形速率。
类队列CQ(Class Queue)
HQoS调度时,流队列报文经过用户队列调度后,要同普通报文同时进入端口中的CQ。流队列报文入CQ时,可以有两种优先级映射方式Uniform和Pipe。
-
Uniform模型:SQ中8个等级的FQ,同端口的CQ,有系统固定的映射关系。
-
Pipe模型:SQ中8个等级的FQ,同端口的CQ的映射关系,可以由用户自行配置指定。但Pipe模型不会改变报文中自身携带的优先级。
低优先级队列LPQ(Low Priority Queue)
LPQ是在以太网接口上实现的队列调度机制。
在以太网接口的HQoS中共有三种队列调度方式:PQ,WFQ,LPQ。
调度的时候,优先调度PQ队列的报文,其次是WFQ,最后是LPQ。在PQ和WFQ队列调度结束后,如果还有剩余带宽,这些剩余带宽就可以分配给LPQ。
LPQ内部的队列调度方式与PQ一样。不同在于拥塞时PQ可以抢占WFQ得带宽,而LPQ不可以抢占WFQ的带宽。
实际应用中,可以将BE流用LPQ进行调度。这样,在网络负载较重时,BE流可以完全被限制,优先满足其它业务。
配置基于模板的HQoS示例
根据不同的子接口接入不同业务的流量,以基于模板的场景为例,介绍如何配置HQoS示例。
组网需求
用户通过DSLAM接入路由器,路由器为骨干网的接入设备。如图8-9所示。
用户的三个业务映射到DSLAM的3个PVC中,在路由器上同一用户的流量分别通过GE1/0/0.1、GE1/0/0.2和GE1/0/0.3三个子接口上接入,不同的子接口接入不同业务的流量。流量进入路由器时带有两层tag,内层tag表示用户,外层tag表示业务。要对用户的流量进行统一调度,保证带宽为100M,其中EF流量带宽为30M、AF1流量带宽为10M。用户所属用户组的总带宽为500M。在接入路由器下行接口EF类型的报文流量不能超过120M。同时,业务类型PC、VOIP和IPTV分别标记外层VLAN tag为1、2、3;内层VLAN tag均为1~100。
本例中Subinterface1.1,Subinterface2.1,Subinterface3.1,interface2分别代表GE1/0/0.1,GE1/0/0.2,GE1/0/0.3,GE2/0/0。
