更新时间:2022-08-25 11:43
介绍队列调度的产生背景和队列调度算法。
在网络上传送业务时,队列调度实现网络中的中继节点和路由器如何从一个或多个数据包队列中选择一个待转发的队列。
常用的队列调度算法有以下3种:SP(Strict Priority,严格优先级)、RR(Round Robin,循环调度)和WRR(Weighted Round Robin,加权循环调度算法)。
原理:对不同的队列设置不同的优先级,优先级高的队列绝对优先于优先级低的队列,只要优先级高的队列中有数据包存在,优先调度优先级高的队列。
如下图所示,假设队列优先级从高到底的排序为:队列0>队列1>队列2>队列3。
各队列的数据包存储情况如上图所示,现在开始进行队列的调度。
1).因为队列0有数据包存在,优先调度队列0,直至队列0的数据包调空为止。然后调度队列1。
2). 队列0和队列1的数据包均空的情况下,调度队列2 。
3). 队列0、队列1、队列2的数据包均空的情况下,调度队列3 。
采用SP调度算法时,只要高优先级队列中有数据包,低优先级队列便得不到调度。但实际情况经常是高优先级的业务可能会一直存在,那么队列永远不会为空,结果低优先级的队列永远得不到调度,例子中队列3的得不到调度的情况尤其恶劣。
优点:配置简单,绝对保证高优先级应用的带宽。
缺点:不能保证高优先级外的服务得到合理带宽,甚至会饿死,从而不能公平地保证各种应用的服务质量。
原理:依次调度各队列的数据包,重复一个又一个周期。这是一个绝对公平的调度算法。
在所有队列的数据包都可以调度的情况下,RR算法的调度过程如下图所示。
优点:绝对公平。
缺点:分不清轻重缓急,高优先级的数据包得不到优先调度。
原理:设置一个权重表,通过对权重表的分配可以较多的调度优先级高的队列。
假设我们配置的权重表如下表所示,从表中我们可以看出配置队列0:队列1:队列2:队列3的权重为6:4:3:2 。
根据权重表的配置,我们先查看最左边第一个配置的队列,此时队列为2,那么如果队列2非空,我们就优先调度队列2,队列2空的情况下,指针下移至权重表下一个配置。队列2调度完成后,指针指向队列0,那么优先调度队列0,然后指针继续下移。指针下移至权重表最后一个配置后,指针移至权重表第一个配置,新一个调度周期开始。
假设队列0-队列3所有队列非空,那么一个WRR调度周期的输出队列情况如下图所示。