HQoS
HQoS即层次化QoS(Hierarchical Quality of Service),是一种通过多级队列调度机制,解决Diffserv模型下多用户多业务带宽保证的技术。
传统的QoS采用一级调度,单个端口只能区分业务优先级,无法区分用户。只要属于同一优先级的流量,使用同一个端口队列,不同用户的流量彼此之间竞争同一个队列资源,无法对端口上单个用户的单个流量进行区分服务。
HQoS采用多级调度的方式,可以精细区分不同用户和不同业务的流量,提供区分的带宽管理。
基本调度模型
调度模型分为两部分:
调度器:对多个队列进行调度。调度器执行某种调度算法,决定各个队列之间报文发送的先后顺序。调度算法包括按优先级调度SP(Strict Priority),或按权重调度(DRR、WRR、WDRR、WFQ算法的其中一种)。调度算法详细介绍请参见“队列及拥塞管理”。
调度器就一个动作:选择队列。队列被调度器选中时,队列最前面的报文被发送。
被调度对象:即队列。报文根据一定的映射关系进入不同的队列。
队列被赋予3种属性:
1)根据调度算法,队列被赋予优先级或权重。
2)队列整形速率PIR。
3)报文丢弃策略,包括尾丢弃(Tail-drop)或WRED。
队列有两个动作:
1)入队:当系统收到报文时,根据报文丢弃策略决定是否丢弃报文。如果报文未被丢弃,则报文入队尾。
2)出队:队列被调度器选中时,队列最前面的报文出队。出队时,先执行队列整形,之后报文被发送。
HQoS层次化调度模型
为了实现分层调度,HQoS采用树状结构的层次化调度模型,如图7-18。树状结构有三种节点:
- 叶子节点:处于最底层,表示一个队列。叶子节点是被调度对象,而且只能被调度。
- 中间节点:处于中间层,既是调度器又是被调度对象。当作为被调度对象时,一个中间节点可以看成一个虚队列。所谓虚队列,是指仅作为调度结构中的一个层次,不是实际占用缓存的队列。
- 根节点:处于最高层,表示最高级别的调度器。根节点只是调度器,不是调度对象。根节点通常被赋予PIR属性,用于限制输出总带宽。
调度器可以对多个队列进行调度,也可以对多个调度器进行调度。其中,调度器可以看成父节点,被调度的队列/调度器看成子节点。父节点是多个子节点的流量汇聚点。
每个节点可以指定分类规则和控制参数,对流量进行一次分类和控制。不同层次的节点,其分类规则可以面向不同的分类需求(如用户、业务类型等),并且在不同的节点上可以对流量做不同的控制动作,从而实现了对流量进行多层次、多用户、多业务的管理。
HQoS的层次划分
HQoS层次化调度中,可以只有一层中间节点,实现三层调度结构;也可以有多层中间节点,实现多层调度结构。甚至可以将两个或多个层次化调度模型叠加,通过制定映射规则,将一个调度模型输出的报文映射到另一个调度模型的叶子节点,如图7-19,从而实现更加灵活的调度需求。
不同厂家实现的调度层次不同。
NE20E的调度结构
在NE20E上,没有配置HQoS的情况下,只有类队列CQ(Class Queue)和Port调度器,其调度结构如图7-20。
CQ队列的属性包括:
- 队列优先级、队列权重
- 队列整形速率PIR
- 报文丢弃策略,尾丢弃(Tail-drop)或WRED
Port调度器可以是按优先级调度SP(Strict Priority),或按权重调度(WRR、WDRR、WFQ算法的其中一种)。
WRR、WDRR、WFQ都是按权重调度,为方便,本文将按权重的调度统称为WFQ。
在配置HQoS的情况下,路由器另外划分缓存,用于缓存需要层次化调度的业务流队列,并对这些流队列先进行一轮多层次调度,再将HQoS流与非HQoS流统一入CQ队列,进行统一调度,如图7-21。
叶子节点: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的带宽是客户购买的。按照图7-21的SQ调度可以看到,用户的CIR总是可以保证的,因为用户的CIR是被单独标识出来优先被调度的,因此不会被其它用户超过CIR部分的流量抢占。
NE20E上,HQoS可实现上、下行方向的调度,且上、下行的调度结构不同。
HQoS上行队列调度
HQoS的上行队列调度,HQoS流经过FQ->SQ->GQ的调度之后,与非HQoS流会合,统一进行如下两层调度:
目的板TB(Target Blade)调度
TB调度也称为VOQ(Virtual Output 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和AF1)和COS3(对应BE)。
COS0为PQ队列,优先调度COS0队列,再在COS1~COS3队列之间进行WFQ调度,WFQ权值为1:2:4。
用户无法更改上行CQ队列属性和调度器属性。
对于非HQoS的流量,则直接进入4个上行CQ队列,不经过FQ队列。对于HQoS的流量,则经过FQ队列和CQ队列。
上行调度过程如下:
- 报文入队:报文首先入FQ队列。报文入FQ队列时,系统检查队列状态,确定是否进行尾丢弃或WRED丢弃,如果报文未被丢弃,则入FQ队尾。
- 请求调度:报文入FQ队列后,向SQ调度器报告队列状态变化并请求调度。SQ调度器再向其上一级GQ调度器报告队列状态变化并请求调度;请求调度的过程是FQ-->SQ-->GQ。
- 逐级调度:GQ调度器收到请求后开始向下选择SQ,被选中的SQ则选择FQ,调度过程是GQ-->SQ-->FQ。
- 报文出队:FQ被选中后,FQ队列最前面的报文出队,进入VOQ队尾。VOQ向CQ调度器报告队列状态变化并请求调度。CQ收到请求向下选择VOQ,被选中的VOQ队列最前面的报文出对,送入交换网络。
因此整体调度过程是(GQ-->SQ-->FQ)+(VOQ-->CQ)。
队列/调度器 |
队列属性 |
调度器属性 |
---|---|---|
FQ队列 |
|
- |
SQ |
|
|
GQ |
|
|
VOQ |
|
|
CQ |
|
|
HQoS下行队列调度
在NE20E上,有些单板的物理接口卡(PIC, Physical Interface Card)可能嵌了一个TM(Traffic Manager),称为eTM(egress Traffic Manager)子卡。有些单板的物理接口卡没有eTM子卡。
如果PIC卡嵌了eTM,下行调度在eTM上进行;如果PIC卡未嵌eTM,则下行调度在下行TM上进行,这两种方式的调度过程有差异。
下行TM调度
图7-23 HQoS下行TM调度结构下行TM调度,除了FQ->SQ->GQ调度,还包括CQ->Port的调度。下行有8个CQ队列,分别为CS7、CS6、EF、AF4、AF3、AF2、AF1和BE,其队列参数及调度参数允许用户修改。
下行TM调度过程:
- 报文入队:报文首先入FQ队列。
- 请求调度:下行整体请求调度的过程是(FQ-->SQ-->GQ)+(CQ-->目的端口)。
- 逐级调度:下行整体调度过程是(目的端口-->CQ)+(GQ-->SQ-->FQ)。
- 报文出队:FQ被选中后,FQ队列最前面的报文出队,进入CQ队列。CQ队列报文出队后送入目的端口。
对于非HQoS的报文,则直接进入8个下行CQ队列,不经过FQ队列。
表7-2 HQoS下行TM各级调度汇总队列/调度器
队列属性
调度器属性
FQ队列
- 队列优先级、队列权重,可配置
- 队列整形速率PIR,可配置,缺省情况,不设置PIR
- 报文丢弃策略,缺省为尾丢弃,可配置为WRED
-
SQ
- CIR,可配置
- PIR,可配置
- 可配置
- 可采用PQ或WFQ对FQ进行调度。缺省情况下,EF、CS6和CS7采用PQ,BE、AF1、AF2、AF3和AF4采用WFQ
GQ
- PIR,可配置。只是用于整体限速,并不用来保证带宽
- 不可配置
- 先在SQ之间调度CIR流量,不同SQ之间采用DRR调度。如果有剩余带宽,再调度EIR流量,SQ之间也是采用DRR。CIR和EIR之间采用SP调度算法,优先保证CIR的带宽;超过PIR的流量会被丢弃
CQ队列
- 队列优先级、队列权重,可配置
- 队列整形速率PIR,可配置,缺省情况,不设置PIR
- 报文丢弃策略,缺省为尾丢弃,可配置为WRED
-
Port
- PIR,可配置(端口限速)。
- 可配置
- 可采用PQ或WFQ对FQ进行调度。缺省情况下,EF、CS6和CS7采用PQ,BE、AF1、AF2、AF3和AF4采用WFQ
下行eTM调度
图7-24 HQoS下行eTM调度结构与下行TM调度相比,下行eTM调度是一个五级调度结构,不是两个多级调度结构的叠加。下行eTM调度只有FQ一种实体队列,没有CQ队列。对FQ队列,除了FQ->SQ->GQ调度外,还进行父GQ调度,也称为虚端口VI(Virtual Interface)调度。
此处的虚端口只是调度器的名称,并不是通常说的“虚拟端口”。具体应用时,虚端口可以对应子接口,也可以对应物理接口或其他。不同应用,虚端口所指的对象不同。
下行TM调度和下行eTM调度的区别在于:
- 下行TM是两个调度结构的叠加,其五级调度可划分为(FQ->SQ->GQ)+(CQ->Port)两部分。HQoS流量先经过(FQ->SQ->GQ),再与非HQoS流量在CQ队列会合,进行(CQ->Port)的调度。
- 下行eTM是一级实体队列的调度,其五级调度为FQ->SQ->GQ->VI->Port。对于非HQoS流量的8个CQ队列,系统设置了一个默认的SQ队列。该SQ队列直接参与最高级的Port调度。
表7-3 HQoS下行eTM各级调度汇总队列/调度器
队列属性
调度器属性
FQ队列
- 队列优先级、队列权重,可配置
- 队列整形速率PIR,可配置,缺省情况,不设置PIR
- 报文丢弃策略,缺省为尾丢弃,可配置为WRED
-
SQ
- CIR,可配置
- PIR,可配置
- 可配置
- 可采用PQ或WFQ对FQ进行调度。缺省情况下,EF、CS6和CS7采用PQ,BE、AF1、AF2、AF3和AF4采用WFQ
GQ
- PIR,可配置。只是用于整体限速,并不用来保证带宽
- 不可配置
- 先在SQ之间调度CIR流量,不同SQ之间采用DRR调度。如果有剩余带宽,再调度EIR流量,SQ之间也是采用DRR。CIR和EIR之间采用SP调度算法,优先保证CIR的带宽;超过PIR的流量会被丢弃
父GQ/VI
- PIR,可配置。只是用于整体限速,并不用来保证带宽
- 不同单板采用的调度算法不同。有的采用DRR,有的采用WFQ。
Port
- PIR,可配置(端口限速)。
- 不可配置
- 在不同父GQ/VI之间进行DRR调度
下行TM调度和eTM调度的差异
表7-4 下行TM调度和eTM调度的差异差异项
下行TM调度
下行eTM调度
port-queue命令行
针对整个端口某个优先级的流量。
针对非流队列的某个优先级的流量。
GQ带宽共享
GQ带宽可以基于TM共享,只要GQ模板名字相同。
GQ带宽只能基于接口共享,即使GQ模板名字相同。
SQ带宽共享
同一GQ下的多个SQ跨物理口共享。
只能同一GQ下的多个SQ跨子接口共享,不能实现跨物理口共享。
Trunk和成员口
Trunk接口及其成员接口都可以配置port-queue,成员口的配置优先生效。成员口的配置对该成员口的所有流量进行调度。
Trunk接口及其成员接口都可以配置port-queue,但port-queue只对所有成员口的非流队列生效,不对流队列生效。
下文以端口整形为例详细说明下行TM调度和eTM调度的差异。假设某接口的主接口配置对port-queue的整形,子接口配置对flow-queue/user-queue整形:
flow-queue FQ queue ef shaping 10M interface gigabitethernet0/1/0 port-queue ef shaping 100M interface gigabitethernet0/1/0.1 user-queue cir 50m pir 50m flow-queue FQ interface gigabitethernet0/1/0.2 //注:gigabitethernet0/1/0.2不配置user-queue和qos-profile
- 对于下行TM调度,port-queue配置的shaping值即为物理接口的总带宽,包括HQoS和非HQoS流量。以上配置表示:
- 从子接口GE0/1/0.1输出的EF流不超过10Mbps;
- 从物理接口GE0/1/0输出的EF不超过100Mbps,包括从主接口GE0/1/0、子接口GE0/1/0.1、GE0/1/0.2的EF流。
- 对于下行eTM调度,port-queue配置的shaping值仅为非HQoS流量的总带宽,即默认SQ的带宽。上述配置表示:
- 从主端口GE0/1/0和子接口GE0/1/0.2输出的EF流为非HQoS流,一共不超过100Mbps;
- 从子接口GE0/1/0.1输出的EF流不超过10Mbps;
- 从物理端口GE0/1/0输出的EF最大可到110Mbps。
- 对于下行TM调度,port-queue配置的shaping值即为物理接口的总带宽,包括HQoS和非HQoS流量。以上配置表示:
Trunk接口的HQoS调度树拆分功能
如果Trunk接口的流量是基于TM进行HQoS调度,当一个trunk成员口产生端口拥塞时,其他成员口流量会受到影响。Trunk接口的HQoS调度树拆分后,基于每个Trunk成员口创建一颗调度树,可以将Trunk接口的流量基于Trunk成员口进行HQoS调度。
同一个TM的三个接口加入到Trunk时,Trunk接口的HQoS调度树如下:
HQoS相关的业务在使用HQoS功能时需要基于Trunk成员口申请带宽,每成员口申请一份资源,独立做HQoS调度。
HQoS优先级映射
HQoS上、下行调度体系都有2种实体队列,上行有8个FQ队列和4个CQ队列,下行有8个FQ队列和8个CQ队列。报文是根据服务等级进入FQ队列的,而FQ调度后,FQ队列最前面的报文出队,入CQ队列,此时需要有优先级映射关系,以便确定报文入到哪个CQ队列。
FQ->CQ队列的映射关系有两种模型:
- Uniform模型:系统固定的映射关系。上行采用Uniform模型。
- Pipe模型:可以由用户自行配置指定映射关系。Pipe模型不会改变报文中自身携带的优先级。
缺省情况下,下行HQoS中,FQ的8个优先级队列与8个CQ队列是一一对应关系;上行HQoS中,COS0对应CS7、CS6和EF、COS1对应AF4和AF3、COS2对应AF2和AF1,COS3对应BE。
联合流量整形
联合流量整形(share-shaping),也称为FGQ(Flow Group Queue) shaping,是指把同一SQ下的两个或多个FQ作为一个组,对这个组进行整形,限制这个组的总带宽。避免SQ的其它业务得不到调度机会。
例如,假设某用户有HSI、IPTV和VoIP三种业务,其中IPTV业务包含IPTV单播和IPTV组播两种。如果要保证IPTV业务的CIR带宽,同时保证HSI和VoIP业务不因IPTV流量过大而得不到带宽,可以配置4个FQ分别对应HSI、IPTV单播、IPTV组播和VoIP,先对IPTV单播和组播业务进行联合流量整形,再对所有业务进行HQoS调度,如图7-26。
目前,每个SQ下的8个FQ最多有2组联合流量整形,如图7-27所示的前两种方式。图7-27所示的第3种联合整形方式在NE20E上目前暂未实现。
在NE20E上,联合流量整形有如下两种实现方式:
方式A:在NE20E大多数单板上,联合流量整形只进行整形不进行调度,且不要求参与联合整形的队列具有相同调度算法。
方式B:有的单板,参与联合流量整形的队列必须具有相同调度算法,且先在联合流量整形的队列之间调度,再将其作为一个整体与SQ的其他队列一起调度。
与SQ的其他队列一起调度时,联合流量整形的流量作为一个整体,其调度优先级等于联合整形的队列中的最高优先级,调度权重等于联合整形所有队列的调度权重之和。
示例1假设某SQ有5个队列,如图7-28,EF和AF1~AF3队列整形速率都是90Mbps,SQ总带宽为100Mbps,所有队列采用SP调度。配置联合流量整形,将AF3和AF1的总带宽限制为80Mbps。
假设某时刻,SQ得到PIR带宽,到达流量速率EF为10Mbps,其他队列都为70Mbps时,联合流量整形两种实现方式的带宽分配过程分别为:
方式A:所有队列一起按优先级调度。
- EF获得10Mbps,剩余带宽为90Mbps。
- AF3可获得带宽=Min{AF3 PIR, share-shaping PIR, SQ PIR, 剩余带宽}=Min {90Mbps, 80Mbps, 100Mbps, 90Mbps} = 80Mbps,但AF3只有70Mbps,因此AF3实际获得带宽70Mbps,剩余带宽变为20Mbps。
- AF2可获得带宽= Min{AF2 PIR, SQ PIR, 剩余带宽}= Min {90Mbps, 100Mbps, 20Mbps} = 20Mbps。剩余带宽为0。
- AF1和BE未获得带宽。
方式B:先调度EF队列,再对AF3和AF1进行调度,最后调度BE。
- EF获得10Mbps,剩余带宽为90Mbps。
- AF3可获得带宽=Min{AF3 PIR, share-shaping PIR, SQ PIR, 剩余带宽}=Min {90Mbps, 80Mbps, 100Mbps, 90Mbps} = 80Mbps但AF3只有70Mbps,因此AF3实际获得带宽70Mbps,剩余带宽变为20Mbps。
- AF1可获得带宽= Min{AF1 PIR, share-shaping PIR-AF3带宽, SQ PIR, 剩余带宽}= Min {90Mbps, 10Mbps, 20Mbps} = 10Mbps。剩余带宽变为10Mbps。
- AF2可获得带宽= Min{AF2 PIR, SQ PIR, 剩余带宽}= Min {90Mbps, 100Mbps, 10Mbps} = 10Mbps。剩余带宽为0。
- BE未获得带宽。
带宽分配结果汇总如下:
队列 |
调度方式 |
输入带宽(Mbps) |
PIR(Mbps) |
调度输出带宽(Mbps) |
|
---|---|---|---|---|---|
方式A |
方式B |
||||
EF |
SP |
10 |
90 |
10 |
10 |
AF3 |
SP |
70 |
90 |
70 |
70 |
AF2 |
SP |
70 |
90 |
20 |
10 |
AF1 |
SP |
70 |
90 |
0 |
10 |
BE |
SP |
70 |
未配置 |
0 |
0 |
示例2:假设示例1中,EF和AF1~AF3队列采用WFQ调度,其调度权重为:EF:AF3:AF2:AF1=1:1:1:2。BE配置为LPQ队列。假设某时刻,SQ能得到PIR带宽100Mbps,到达流量速率EF和AF3为10Mbps,其他队列都为70Mbps时,联合流量整形两种实现方式的带宽分配过程分别为:
方式A:所有队列一起进行WFQ调度。
第1轮WFQ调度:
- EF可获得带宽=1/(1+1+1+2)* 100Mbps=20Mbps,但EF只有10Mbps,因此EF实际获得10Mbps,剩余带宽为90Mbps。
- AF3可获得带宽=1/(1+1+1+2)* 100Mbps = 20Mbps,但AF3只有10Mbps,因此AF3实际获得10Mbps,剩余带宽为80Mbps。
- AF2可获得带宽=1/(1+1+1+2)* 100Mbps = 20Mbps,剩余带宽变为60Mbps。
- AF1可获得带宽=2/(1+1+1+2)* 100Mbps = 40Mbps,剩余带宽变为20Mbps。
第2轮WFQ调度:
- AF2可获得带宽=1/(1+2)* 20Mbps = 6.7Mbps。
- AF1可获得带宽=2/(1+2)* 20Mbps = 13.3Mbps。
剩余带宽变为0Mbps,BE未获得带宽。
方式B:AF3和AF1作为一个整体,与EF、AF2一起做WFQ调度,权重为:EF:(AF3+AF1):AF2=1:(1+2):1=1:3:1。
第1轮WFQ调度:
- EF可获得带宽=1/(1+3+1)* 100Mbps=20Mbps,但EF只有10Mbps,因此EF实际获得10Mbps,剩余带宽为90Mbps。
- (AF3+AF1)可获得带宽=3/(1+3+1)* 100Mbps=60Mbps,未超过联合整形带宽,因此(AF3+AF1)实际可获得60Mbps,剩余带宽变为30Mbps。这60Mbps带宽在AF3和AF1之间按1:2分配AF3获得20Mbps,但AF3实际只有10Mbps,剩余的50Mbps全部分给AF1。
- AF2可获得带宽=1/(1+3+1)* 100Mbps=20Mbps,剩余带宽变10Mbps。
第2轮WFQ调度:
- (AF3+AF1)可获得带宽=3/(3+1) * 10Mbps=7.5Mbps,(AF3+AF1)此时一共可获得67.5M带宽,仍未超过联合整形带宽,因此7.5Mbps可全部分给(AF3+AF1),而且AF3的PIR已满足,因此7.5Mbps全部分给AF1。
- AF2可获得带宽=1/(3+1) * 10Mbps=2.5Mbps。
剩余带宽变为0Mbps,BE未获得带宽。
带宽分配结果汇总如下:
队列
调度方式
输入带宽(Mbps)
PIR(Mbps)
调度输出带宽(Mbps)
方式A
方式B
EF
SP
10
90
10
10
AF3
SP
70
90
10
70
AF2
SP
70
90
26.7
22.5
AF1
SP
70
90
53.3
57.5
BE
SP
70
未配置
0
0
HQoS的应用及分类
为方便理解,列举几个简单的HQoS应用:
- 无任何QoS配置时:如果一个出接口的流量不做任何QoS配置,则调度过程是:1个Port队列,Port下只有1个VI队列,VI下只有1个GQ队列,GQ下只有1个SQ队列,SQ下只有1个FQ队列有流量,由于各层都只有1个队列,最终可以看成一个FIFO队列。
- 只区分业务优先级:如果一个出接口的流量只区分优先级,则对应HQoS队列为:1个Port队列,Port下只有1个VI队列,VI下只有1个GQ队列,GQ下只有1个SQ队列,SQ下只有8个FQ队列,由于各层都只有1个队列,最终可以看成一个FQ-->Port的调度。
区分业务优先级+区分用户:如下图,L3 Gateway连接一个RTN,RTN汇聚了3个基站,如果在GE0/2/0出口区分这三个基站,同时区分3个基站内部的不同优先级业务,则层次化结构为:基站业务->基站->Port;对应HQoS队列为FQ->SQ->Port,即1个Port队列,Port下只有1个VI队列,VI下只有1个GQ队列,GQ下有3个SQ队列,SQ下有8个FQ队列。
本例中interface1代表GE0/2/0。
区分优先级+区分用户+区分汇接设备:如下图,L3 Gateway连接2个RTN汇聚设备,每个RTN汇聚了3个基站,如果在GE0/2/0出口区分这2个RTN汇聚设备,每个汇聚设备下区分三个基站,并且区分3个基站内部的不同优先级业务。则层次化结构为:基站业务->基站->RTN->Port;对应HQoS队列为FQ->SQ->GQ->Port,即1个Port队列,Port下只有1个VI队列,VI下只有2个GQ队列,GQ下有3个SQ队列,SQ下有8个FQ队列。
本例中interface1代表GE0/2/0。
从配置角度上来看,HQoS主要是基于QoS模板进行配置。
基于类的HQoS
采用复杂流分类对需要进行HQoS调度的报文流进行分类,然后把所有匹配上分类规则的报文作为一个用户。
用户队列SQ配置在流行为下,然后在接口上应用引用该流行为的流量策略。
目前基于类的HQoS只支持在上行生效。
如图7-29,路由器有两个接口接入RTN,每个RTN都汇聚了3个基站,每个基站都有不同优先级业务。路由器作为基站的三层网关,要求区分这三个基站,同时区分3个基站内部的优先级业务。
此需求可用基于类的HQoS实现。一个端口有两个用户组(两个RTN),一个用户组有3个用户(3个基站),一个基站有多种业务,其层次化结构为:基站业务-->基站-->RTN-->端口,对应HQoS队列为:FQ-->SQ-->GQ-->目的端口。
基于模板的HQoS
实现多个接口接入的流量作为一个用户进行统一调度,即多个接口的流量进入同一个SQ队列进行调度,满足了不同接口接入的同一用户的流量控制要求。
基于模板的HQoS通过定义不同的QoS模板(qos-profile)并应用到接口来实现对接入用户的QoS调度管理。QoS模板是QoS调度参数的集合,用于指定用户队列的调度参数(用户队列的带宽、用户的流队列等)。
基于模板的HQoS支持上行和下行调度。
例如图7-30,路由器作为ISP边缘设备,使用E-Trunk1接口接入某局域网,该局域网有1000个用户都开通了VoIP、IPTV和普通上网业务。使用QinQ终结子接口Eth-Trunk 1.1000接入VoIP业务,QinQ终结子接口Eth-Trunk1.2000接入IPTV业务,QinQ终结子接口Eth-Trunk1.3000接入其他业务。使用外层Q的802.1p标记业务类型(VoIP的802.1p=5,IPTV的802.1p=4),内层Q的VID标记用户,其中,内层Q的VID为1~1000,Eth-Trunk 1.1000的外层Q的VID=1000,Eth-Trunk 1.2000的外层Q的VID=2000;要求对每个用户的总带宽限制在120Mbps以内,保证带宽为100Mbps,每个用户的VoIP和IPTV的带宽保证分别为60Mbps和40Mbps,其他业务不做带宽保证。
此需求可用基于模板的HQoS实现。内层Q不同的流量进不同的SQ,内层Q相同的流量进同一个SQ,因此创建1000个SQ,内层Q相同但外层Q不同的流量进入同一个SQ的不同FQ队列。
基于低速链路接口的HQoS
将一个接口作为一个用户,即一个接口的所有报文都属于一个SQ队列。
基于接口的HQoS支持上行和下行调度。
普通用户的HQoS调度
HQoS调度可以对普通用户内多个业务通过优先级进行区分,进行QoS调度。普通用户的QoS信息会从认证域下的QoS模板中获取。
家庭用户的HQoS调度
当一个家庭同时存在多种终端,并且同时开展多种业务如VOIP、IPTV和HSI时,不同业务具有不同的时延、时延抖动、带宽等要求,且要求在网络资源不足的情况下保证其高优先级业务的需求。配置家庭用户的HQoS调度将一个家庭作为一个整体进行统一调度,不再以终端为单位进行调度。