今天继续给大家介绍QoS的相关内容,本文主要是对QoS的队列调度机制进行了详解,主要是PQ调度、WRR调度、WFQ调度以及组合调度等方式的实现原理和细节。本文主要对标华为系列路由交换设备,所介绍的所有调度方式,均应该使用qos-profile进行调度

一、PQ调度

所谓PQ(Priority Queuing)调度,即按照报文的优先级进行调度。当网络设备的报文流进入PQ队列后,高优先级的队列会率先被调度,而低优先级的队列则会等到高优先级的队列调度完毕后才能开始调度。在低优先级队列调度开始后,如果又有高优先级的报文进入队列,则PQ会立即停止对低优先级报文的调度,转而去调度高优先级的队列。
PQ队列的优点是,由于对高优先级数据包采取立即调度的方式,因此可以保证高优先级队列内的时延,使得该数据流量时延较低。
PQ队列的缺点是,如果高优先级队列中存在大量的报文,则低优先级队列的数据流量则往往因为得不到调度而发生饿死的情况。

二、RR调度

所谓RR(Round Robin)调度,即轮询调度,报文分别进入不同的队列,每个队列按照轮询的方式,从0到7依次进行报文调度。如果在调度时某个队列中没有报文,则越过该队列进行调度其他的队列。纯粹的RR调度在每次调度中,每个队列仅调度一个报文,不能满足高优先队列QoS的特点,因此,在RR调度的基础上,还存在着WRR调度和DRR调度。
(一)WRR
所谓WRR(Weighted Round Robin)调度,即加权轮询调度。WRR是在RR调度的基础上,为每个队列分配一个优先级,队列与队列之间按照优先级分配接口的带宽。WRR在调度时如果出现某个队列没有报文需要调度的情景时,就会把属于该接口的带宽按照比例分配给其他队列。
在WRR调度中,每个队列会被分配一个权值,当该队列被调度后,每次调度一个报文,队列的权值就减一,权值减到0的队列不参与调度。当所有的队列减到0后,开始新一轮的调度。
WRR可以实现按照队列的优先级享有不同的带宽服务。
但是WRR以报文为单位,因此,如果某个队列中的报文都是大报文,则在WRR调度中可能占用的实际带宽会大于队列优先级对应的带宽。此外,WRR不能保证低延时业务的延时特性得到保障。
(二)DRR
所谓DRR(Deficit Round Robin),即赤字轮询调度。DRR与WRR类似,但是DRR是以报文的大小问单位进行的调度,因此相对于WRR而言,在统计学意义上可以实现真正的带宽分配。
在DRR调度中,与WRR类似,也会为每个队列分配一个Deficit,每次队列的Deficit值为正才能够进行调度,为负则不予调度,每次队列调度一个报文,就会将Deficit值减掉该报文的长度。
DRR的调度方式有些像购物一样,Deficit类似于一个队列的“存款”,每当存款为正时,就可以“购物”(即发送报文),当“存款”(Deficit值)为负后,就不可以“购物”(即发送报文)。队列在每轮调度完成后,会将Deficit值加上指定的数值,以此来维持DRR的不断调度。
DRR相对于WRR能够在统计学意义上保证带宽的合理分配,但是DRR仍然不能实现对低延时语音业务的延时保障。

三、WFQ调度

WFQ(Weighted Fair Queue)调度,即加权公平调度。在华为的设备中,WFQ有两种含义,一种是基于流进行分类,还有一种是基于优先级进行分类。在使用qos-profile进行队列调度的时候,WFQ是基于优先级的调度方式;而在使用MCQ进行调度的时候,WFQ是基于优先流的调度方式。
若WFQ采用基于优先级的调度方式,则与WRR和DRR类似,将DSCP、802.1p等字段映射为本地优先级,每个本地优先级对应一个队列。在默认情况下,队列中间的权重相同,但是用户可以通过配置修改权重,高优先级和低优先级按照权重比例分配带宽。
若WFQ采用基于流的调度方式,则对于进入该接口的每一个数据包,接口会根据该数据包的源目IP、源目端口号、协议类型和IP优先级(这6项又被称为6元组)分配到不同的流队列。接口会以对6项参数进行一个组合后的hash运算,只有这六项值全部相同,计算出的hash值才会相同,而计算结果就决定了数据流会放入哪个队列。也因此,WFQ当采用流的调度方式后,接口的队列数量可能有很多,这一点与上面所有的队列调度方式都不同,上面的所有队列调度方式都是一共有8个队列。
对于WFQ中的队列,系统会根据队列的IP优先级自动的为每个队列分配权重。计算方式是将每个队列的IP优先级加1作为每个队列的权重。(如果不加1,则有些权重为0的业务根本没有办法得到调度)此外,WFQ队列还会使得短报文相对于长报文更快的获得调度。
WFQ具备一定的公平性,但是他既不能保证带宽,也不能保证低延时业务,因此在qos-profile的配置中,通常将其作为BF(Best Efford)的策略进行配置。

四、组合调度

除了上述介绍的调度方式外,华为还支持采用组合调度的方式实现软件队列的调度。从上述介绍中,我们可以看出,每种单一的调度方式都有其优先和缺点。但是对于一个企业来说,其内部的业务和网络流量可能过于复杂,以至于上述的所有调度方式都不能满足企业网络流量的特点。在这种情况下,就可以考虑使用组合调度的方式。
华为的组合调度方式有PQ+WRR、PQ+DRR、PQ+WFQ等,这些调度方式,都是将一个或者几个队列设置为PQ队列,并且将语音等低延时业务放入其中,保证其延时性。然后将其余的队列按照不同的特性分配不同的带宽,采取不同的调度方式。
这样的调度方式,可以使得接口软件调度更加灵活,更加符合实际情况。但是,在规划时一定要注意,不要把带宽太大的业务放入PQ队列。
原创不易,转载请说明出处:https://blog.csdn.net/weixin_40228200/article/details/118827671

QoS队列调度技术详解相关推荐

  1. 《Windows驱动开发技术详解》学习笔记

    Abstract   如果推荐 Windows 驱动开发的入门书,我强烈推荐<Windows驱动开发技术详解>.但是由于成书的时间较早,该书中提到的很多工具和环境都已不可用或找不到,而本文 ...

  2. iOS 7: iPhone/iPad应用开发技术详解

    iOS 7: iPhone/iPad应用开发技术详解 作者:刘一道 出版社:机械工业出版社 出版年:2013-11 页数:507 定价:79.00元 ISBN:9787111440512 样章下载:h ...

  3. 【RDMA】RDMA技术详解(二):Send Receive操作

    原文:https://blog.csdn.net/qq_21125183/article/details/86525012 英文:https://zcopy.wordpress.com/2010/10 ...

  4. 【RDMA】技术详解(一):RDMA概述

    目录 0.前言 一.技术背景 1 传统的 TCP/IP 网络通信的弊端 2 新的网络通信技术(TOE and RDMA) 2.1 TOE (TCP/IP协议处理工作从CPU转移到网卡) 2.2 RDM ...

  5. 【RDMA】技术详解(二):Send Receive操作

    原文:RDMA技术详解(二):RDMA Send Receive操作_Master-TJ的个人博客-CSDN博客 英文:Quick Concepts Part 1 – Introduction to ...

  6. IBM p5服务器上的虚拟 分享,IBMp5服务器系统虚拟技术详解

    <IBMp5服务器系统虚拟技术详解>由会员分享,可在线阅读,更多相关<IBMp5服务器系统虚拟技术详解(10页珍藏版)>请在人人文库网上搜索. 1.IBM p5 服务器系统虚拟 ...

  7. 阿里开源实时计算平台Blink,能让计算延迟降至毫秒级 | 附技术详解

    雷刚 发自 凹非寺  量子位 报道 | 公众号 QbitAI 阿里巴巴这份开源礼物,业内期待已久. 近期,中国科技互联网巨头正式宣布将实时计算平台Blink开源,该技术由开源的Flink改造而来,被广 ...

  8. IPv6技术详解:基本概念、应用现状、技术实践(上篇)

    本文来自微信技术架构部的原创技术分享. 1.前言 普及IPV6喊了多少年了,连苹果的APP上架App Store也早已强制IPV6的支持,然并卵,因为历史遗留问题,即使在IPV4地址如果饥荒的情况下, ...

  9. DMA RDMA 技术详解

    DMA 技术是一个 直接内存访问技术. 在传统的linux 内存读写操作都必须经过cpu,读写寻址都是有cpu 完成的, 现在有一中技术 让数据读写完全由网卡自己完成. 这样就必须有硬件支持,及系统必 ...

  10. P2P技术详解(一):NAT详解——详细原理、P2P简介(转)

    这是一篇介绍NAT技术要点的精华文章,来自华3通信官方资料库,文中对NAT技术原理的介绍很全面也很权威,对网络应用的应用层开发人员而言有很高的参考价值. <P2P技术详解>系列文章 ➊ 本 ...

最新文章

  1. PXE自动化安装系统
  2. oracle统计信息收集的作用,oracle 11g 收集统计信息的新特点介绍
  3. boost::qvm::deduce_quat相关的测试程序
  4. leetcode90. 子集 II
  5. C#中在主窗体中用ShowDialog方法显示子窗体的使用技巧
  6. 转载:ADO.NET Entity Framework 试水系列索引(2008/9/9更新,本系列结束)
  7. CentOS下mysql安装
  8. Android-Gradle(四)
  9. 获取指定进程所对应的可执行(EXE)文件全路径(代码)
  10. python编程入门指南-Python入门学习指南
  11. 关键路径c语言,有向图的关键路径的C程序实现代码
  12. 管理感悟:不能放任下属,必须定时检查工作
  13. podman—网络设置、开机自启及加速器配置
  14. MySQL图书管理系统设计
  15. visio的一些用法
  16. 理解目标检测里的Anchor-based和Anchor-free
  17. 五.爬虫--京东登录破解(一)
  18. 微信新BUG曝光:好友偷偷删了你,用这样一串代码就能查出来!
  19. uniapp调用手机摄像头_uniapp原生插件开发之调用原生方法(android)
  20. python伪装浏览器https_Selenium中通过修改User-Agent标识将PhantomJS伪装成Chrome浏览器...

热门文章

  1. bug-Both weights and assigned values must be a sequence of numbers when assigning to values of <clas
  2. bug-Skipping optimization due to error while loading function libraries: Invalid argument: Functions
  3. Python压平嵌套列表的一种方法
  4. Spark:超越Hadoop MapReduce
  5. 5.1 RNN 情感识别、tensorflow实现——python实战
  6. 新型消防机器人作文_说一说消防机器人
  7. cmake相关:sudo make install后的卸载
  8. c语言网吧添加卡,c语言网吧计费系统源代码.docx
  9. Ubuntu-vim 命令
  10. 蓝桥杯2016年第七届C/C++省赛B组第三题-凑算式