QOS-基本拥塞管理机制(PQ CQ WFQ RTPQ)
QOS-基本拥塞管理机制(PQ CQ WFQ RTPQ)
2018年7月7日 20:29
拥塞:是指当前供给资源相对于正常转发处理需要资源的不足,从而导致服务质量下降的一种现象
拥塞管理概述:

- 需要发送的数据流量大于设备发送接口的发送能力时,会产生拥塞。
 - 拥塞管理是指在网络发生拥塞时,进行管理和控制,合理分配资源。通常采用队列技术实现
 - 报文按一定的策略缓存到队列中,然后按一定的调度策略把报文从队列中取出,在接口上发送出去
 
路由器拥塞管理:

- 接口不拥塞,报文直接入发送队列
 - 接口拥塞,报文按规则入软件队列
 - 路由器软件队列包括:系统队列和 用户队列
 - 系统队列包括:紧急队列(PPP协议等)和协议队列(OSPF hello报文等),不会修改
 - 系统队列优先于用户队列调度
 
交换机拥塞管理:

- 报文在入端口,根据映射表入本地队列
 - 报文在出端口,进行队列调度后发送
 - 常用的队列:SPQ、WRR
 
FIFO队列 原理:(IP网络中默认的队列)

- 所有报文按转发到达出接口的先后顺序入队
 - 队列满后,进行尾丢弃
 - 按进入 队列的先后顺序出队列,先入先出
 
FIFO队列配置命令:

增加FIFO队列的长度可以减少丢包,但同时也可以增加延迟
PQ队列原理:(优先队列)是针对关键业务设计的,Top(高优先队列)、Middle(中优先队列)、Normal(正常优先队列)和boottom(低优先队列)
- 按类别入队,队列满后尾丢弃
 - 优先级高的队列先调度
 - 加入top队列一直是满的,会导致优先级低的队列,一直得不到调度(Normal为默认队列)
 

PQ队列调度:

- 高优先级业务的带宽和时延得到最大限度的保证
 - 如果高优先级业务持续占据带宽,会导致低优先级业务一直得不到调度
 
PQ队列配置任务:
- 配置PQL(优先队列列表)
- 配置默认情况下,流量进入的队列
 - 配置PQ队列的分类规则(acl)
 - 配置PQL各队列的长度
 - 默认队列配置
 
 - 将PQL应用到接口
 
- 配置PQL(优先队列列表)
 
配置无对应规则的报文所入的缺省队列:(默认队列为PQ的4个队列之一,是普通队列)

配置PQ队列长度:

配置基于接口的分类规则:

配置基于协议的分类规则:


同一个PQL内可以配置多个分类规则,各规则可以使用不同的分类方式。报文入队的时候,按规则的配置顺序进行匹配,如果发现报文与某个规则匹配,则入该规则对应的队列。
在接口上应用PQL:

dis qos pql 5 //显示PQL配置信息
dis qos pq int e9/0 //显示PQ统计信息
CQ队列原理:(定制队列)提供了16个 队列
CQ允许根据 报文的特征建立匹配规则,将报文分为16类,没类报文对应CQ中的一个队列。接口拥塞时,报文按匹配规则被送入对应队列;如果报文不匹配任何规则,则被送入默认队列。默认队列默认为CQ的队列1,可以修改。
- 按类别入队,队列满后尾丢弃
 - 各队列轮询调度
 - 其实有17个队列,0是给系统队列使用的,用户不能修改。
 - 默认每个队列传1500个队列(阈值)
 

CQ队列调度:

由于CQ不能对数据包进行分片,之前有个数据包1499Byte,不到1500,当有个1500个字节的数据包过来,它还会传这1500Byte,所以有可能一次最多转发1500+1499个字节,所以每个队列传数据包可能为1500---2999Byte。大于1500Byte才会发。
CQ队列配置任务:
- 配置CQL(定制队列 列表)。系统预定义了16个CQL,用户可以选择其中的一个来配置自己需要的定制队列。
- CQ中各队列的匹配规则
 - CQ中各队列的长度与发送额度
 - 默认队列
 
 - CQ队列应用到接口。应用配置好的CQL,在接口应用CQ队列。
 
- 配置CQL(定制队列 列表)。系统预定义了16个CQL,用户可以选择其中的一个来配置自己需要的定制队列。
 
- 配置无对应分类报文所入的缺省队列
 

- 配置CQ队列长度:
 

- 配置CQ队列份额(修改队列缓存的大小)连续发送字节数(默认1500)
 

- 配置基于接口的分类
 

- 配置基于协议的分类规则
 

- 接口上应用CQL
 

dis qos cql 1 //显示CQL配置信息
dis qos cq int e9/0 //显示CQ统计信息
WFQ队列原理:(加权公平队列)对报文按流特征进行分类。
在IP报文中,根据源IP地址、目的IP地址、源端口号,目的端口号、协议号、优先级等特征,采用Hash算法,尽量将不同特征的流分入不同的队列类别中,这个过程称为散列。
- 流量五元组散列入队,加权公平出队,丢弃策略为尾丢弃或WRED丢弃
 - 出队时,WFQ按队列优先级的比例来分配各个队列应占有的出口带宽
 
WFQ入队机制:
- 先按五元组哈希成组,组内优先级(IP或DSCP)相同的报文被分配到相同的队列
 - 受资源限制,五元组不同的报文可以哈希到相同的组
 

WFQ队列调度:

- WFQ队列调度时,系统队列优先调度;当系统队列空时,才调度WFQ队列
 - WFA队列间的调度方式也是轮询调度,同一个队列内部出队方式时FIFO队列
 
WFQ队列特点:
- 优点:
- 配置简单,各个流都可以获得公平的服务
 - 有利于小包转发,降低交互式操作的响应时间
 - 可以与WRED丢弃策略组合应用
 
 - 缺陷
- 不能对流的分类进行手工干预
 - 不适合时延敏感的应用
 
 
- 优点:
 
WFQ配置:
WFQ队列长度的配置范围为1~1024,默认为64,最大队列数为16~4096,默认为256.
- 配置WFQ的权重类型、队列长度、队列总数
 

权重类型:对于使用IP precedence的IP报文,当配置WFQ队列数为16时,WFQ对报文根据五元组特征Hash时最大能分成2个组,每个组里包含8个队列。如果使用DSCP优先级作为权重,则WFQ队列数最小要配置成64,此时所有报文都属于一个组。
dis qos wfq int e0/0 //wfq队列显示
RTPQ队列原理:即RTP(实时传输协议)优先对列,是一种保证实时业务(包括语音与视频业务)服务质量的队列急速。(应用层)UDP
- 原理:将承载语音或视频的RTP报文送入高优先级队列,使其得到优先发送,保证延迟和抖动降为最低限度
 - 匹配的实时业务入RTPQ队列,其他业务入其他数据队列处理
 - 实时业务入队前按配置的带宽进行限速处理
 - RTPQ队列满后进行丢弃
 - RTPQ将RTP报文定义为端口在一定范围内并且为偶数的UDP报文,并以此归类依据。
 - RTP队列可以通FIFO、PQ、CQ和WFQ结合使用,而它的优先级最高
 

- 为了防止RTPQ队列报文占据全部带宽,导致其他队列“饿死”,RTPQ在报文入队前先进行流量监管处理,超过RTPQ预留带宽的流量直接丢弃,在预留带宽以内的流量才能入队。
 
RTPQ队列调度:

RTPQ队列的优先级仅次于紧急队列,等同于协议队列,高于其他的数据队列。队列调度时,先检查紧急队列是否为空,如果不空,调度紧急队列报文发送,否则轮询调度RTPQ和协议队列。RTPQ队列内部采用FIFO的出队方式。RTPQ队列每一个报文出队转发后,将调度全交给紧急队列,如果紧急队列不空,发送紧急队列报文,否则发送协议队列的调度。协议队列调度完成后,开始下一轮的调度。如果RTPQ和协议队列都为空,开始调度其他数据队列,其他数据队列为空,或者一次调度完成后,开始下一轮的队列调度。
RTPQ的配置与显示:
- 配置RTPQ队列:
 

- RTPQ队列显示:
 

可以与CQ、PQ、WFQ共用,但是不能与CBQ共用,因为CBQ里面有EF队列
QOS-基本拥塞管理机制(PQ CQ WFQ RTPQ)的更多相关文章
- QOS-交换机拥塞管理
		
QOS-交换机拥塞管理 2018年7月7日 20:29 优先级映射: 根据信任的优先级,查找映射表,标记丢弃优先级和本地优先级 如果信任端口优先级,不同产品优先级标记方式可能不同,S3610处理过程如 ...
 - 浅谈Linux内存管理机制
		
经常遇到一些刚接触Linux的新手会问内存占用怎么那么多?在Linux中经常发现空闲内存很少,似乎所有的内存都被系统占用了,表面感觉是内存不够用了,其实不然.这是Linux内存管理的一个优秀特性,在这 ...
 - ARC内存管理机制详解
		
ARC在OC里面个人感觉又是一个高大上的牛词,在前面Objective-C中的内存管理部分提到了ARC内存管理机制,ARC是Automatic Reference Counting---自动引用计数. ...
 - 深入了解C#系列:谈谈C#中垃圾回收与内存管理机制
		
今天抽空来讨论一下.Net的垃圾回收与内存管理机制,也算是完成上个<WCF分布式开发必备知识>系列后的一次休息吧.以前被别人面试的时候问过我GC工作原理的问题,我现在面试新人的时候偶尔也会 ...
 - 【Cocos2d-x 3.x】内存管理机制与源码分析
		
侯捷先生说过这么一句话 : 源码之前,了无秘密. 要了解Cocos2d-x的内存管理机制,就得阅读源码. 接触Cocos2d-x时, Cocos2d-x的最新版本已经到了3.2的时代,在学习Coco ...
 - Spark 1.6以后的内存管理机制
		
Spark 内部管理机制 Spark的内存管理自从1.6开始改变.老的内存管理实现自自staticMemoryManager类,然而现在它被称之为"legacy". " ...
 - Senparc.Weixin.MP SDK 微信公众平台开发教程(十六):AccessToken自动管理机制
		
在<Senparc.Weixin.MP SDK 微信公众平台开发教程(八):通用接口说明>中,我介绍了获取AccessToken(通用接口)的方法. 在实际的开发过程中,所有的高级接口都需 ...
 - IOS- 内存管理机制
		
iOS平台内存常见问题 作为iOS平台的开发者,是否曾经为内存问题而苦恼过?内存莫名的持续增长,程序莫名的crash,难以发现 的内存泄漏,这些都是iOS平台内存相关的常见问题:本文将会详细介绍iOS ...
 - Tomcat的Session管理机制
		
>>Session和Cookie请求的过程 Http连接本身是无状态的,即前一次发起的连接跟后一次没有任何关系,是属于两次独立的连接请求,但是互联网访问基本上都是需要有状态的,即服务器需要 ...
 
随机推荐
- java面试题之----数据库事务的四大特性及隔离级别
			
本篇讲诉数据库中事务的四大特性(ACID),并且将会详细地说明事务的隔离级别. 如果一个数据库声称支持事务的操作,那么该数据库必须要具备以下四个特性: ⑴ 原子性(Atomicity) 原子性是指事务 ...
 - win10下安装pytorch,torchvision
			
电脑里以前安装了 tensorflow,现在因为学习需要,需要安装pytorch.还是在原来安装tensorflow的位置安装pytorch. 由于采用在线安装太慢了,而且中途还会因为网速不稳定终端! ...
 - Master HA彻底解密
			
本课主题 Master HA 解析 Master HA 解析源码分享 Master HA 解析 生产环境下一般采用 ZooKeeper 做 HA,且建义为 3台 Master, ZooKeeper 会 ...
 - UnitySendMessage
			
SendMessage查找的方法是在自身当中去查找 SendMessageUpwards查找的方法是在自身和父类中去查找,如果父类还有父类,继续查找,知道找到根节点为止. BroadcastMessa ...
 - P1171 售货员的难题 暴力dp
			
题面 著名的TSP问题,NPC问题 对于数据大的情况,我们可以使用一系列近似算法进行寻找解. 对于数据规模小的情况,我们可以直接暴力dp 一开始写了一个dfs,然后就被n=20的数据卡爆了 #incl ...
 - scala性能测试
			
主要对比scala 的for, while循环,以及和java for while循环作对比 scala代码 object TestScalaClass { var maxindex = 100000 ...
 - 在VS2010 中使用subversion 进行代码的分支与合并
			
在实际开发总,遇到了这种情况: 开发版本1,开发版本2 ,更新产品时要求1在前,2在后. 但是因为时间要求,必须2个版本同时开发.这时就想到了在svn的版本分支合并. 创建分支之前,首先把当前版本代码 ...
 - 大专生自学web前端前前后后
			
先做个自我介绍,我13年考上一所很烂专科民办的学校,学的是生物专业,具体的学校名称我就不说出来献丑了.13年我就辍学了,我在那样的学校,一年学费要1万多,但是根本没有人学习,我实在看不到希望,我就退学 ...
 - 大白话解释IP多播
			
多播引入 比方说我是一个班主任,管着三个班,每个班30个人,每个班有自己的班长.领导让我宣传19大视 频报告,我这里有源文件.对于普通的单播我需要复制90个副本,给各个班长每人30份,然后班 长在自己 ...
 - [HAOI2010]软件安装(树形背包,tarjan缩点)
			
题目描述 现在我们的手头有N个软件,对于一个软件i,它要占用Wi的磁盘空间,它的价值为Vi.我们希望从中选择一些软件安装到一台磁盘容量为M计算机上,使得这些软件的价值尽可能大(即Vi的和最大). 但是 ...