集团站切换校区

验证码已发送,请查收短信

复制成功
微信号:togogoi
添加微信好友, 详细了解课程
已复制成功,如果自动跳转微信失败,请前往微信添加好友
打开微信
图标

学习文章

当前位置:首页 > >学习文章 > >

GaussDB常见的六种调度算法

发布时间: 2023-04-04 17:54:10

1.FIFO调度

FIFO(First In Forst Out)调度使用的是FCFS策略,是一种不考虑QoS的调度算法。FIFO调度不进行报文分类,所有业务共用一个队列,按照请求进入队列顺序进行调度。如下图所示,三种不同业务的请求全部加入到一个队列中,按照FIFO的规则进行调度。

FIFO调度实现简单、开销小,但是FIFO不区分请求类型、不考虑QoS,对时延、抖动敏感的业务不友好,无法保证关键业务服务质量。

2.SP调度

SP(Strict Priority)严格优先级调度严格按照队列优先级进行调度,只有在高优先级队列中请求全部调度完成的情况下,才会考虑调度低优先级队列中的请求。如下图所示,三种不同业务分别对应三种不同优先级的队列:高优队列、中优队列和低优队列。不同业务的请求分别加入到相应优先级队列中,调度时优先调度高优队列请求,高优队列中请求调度完成后,依次调度中优和低优队列请求。

SP调度算法的实现比较简单,优点是可以保证关键业务可以优先调度到,可以最大限度的降低网络延迟和抖动;缺点是网络拥塞,高优先级队列中一直有请求时,会导致低优先级队列中请求一直调度不到,出现“饿死”的情况。

3.RR调度

RR(Round Robin)轮询调度通常采用分时机制,为每个队列分配一个时间片或调度时刻。RR调度按照固定顺序循环调度每一个队列中的请求,每次调度相同数量(一般是1个)的请求,且在调度过程中不考虑任何优先级。算法较为简单且容易实现,同时不会产生“饿死”问题。如下图所示,RR调度轮询调度队列1/2/3中的请求,每次调度一个队列中的一个请求,直到请求调度完成。

RR调度假设所有队列的优先级和带宽需求都是相同的,调度时不考虑包长、队列时延和带宽需求。队列包长差异比较大时,可能导致不同队列实际占用带宽差异巨大,同时因为不考虑时延和带宽需求,导致无法做到对网络流量的精准隔离和调度。

4.WRR调度

轮询调度保证了各队列在请求调度时的公平性,但是无法满足个性化的调度需求。WRR(Weighted Round Robin)加权轮询调度在轮询的基础上为队列增加权重,每个队列设置一个计数器,根据权重初始化计数器初始值,每调度一个报文,计数器减1。权重越大,每次轮询调度次数越多,能调度的包数量也就越多。如下图所示,三个队列权重分别是3:2:1,每一轮调度的包数量比例就是3:2:1。

当所有队列权重值都是1时,WRR调度退化为RR调度。WRR的优点是可以按比例调度各个队列的请求,适应性更强,但是由于调度时没有考虑包长,还是按照请求个数进行调度,在请求长度变化时无法保证各队列按照设置比例占用带宽,而用户一般关心和感知到的是带宽。此外队列请求长度不一致时,WRR调度对请求长度较小的队列带来不公平性。

5.DWRR调度

为了解决队列请求长度不一致带来的不公平性,DWRR(Deficit Weighted Round Robin)差分加权轮询调度在WRR基础上,基于请求长度而非请求个数设置权值,按照权重和请求长度进行调度。DWRR为每个队列设置一个计数器,计数器初始化为weight * MTU,每次调度计数器减去请求长度。具体算法逻辑如下:

  1. 初始化队列计数器DC = weight * MTU;
  2. 调度器轮询非空队列,如果队列DC <= 0,则跳过轮询下一个队列;
  3. 调度队列请求,计数器DC = DC - request_len;
  4. 所有队列DC < 0或无请求调度时,DC = DC + weight * MTU。

DWRR调度克服了请求长度变化带来的不公平性,提供了更为精准的带宽分配。但是队列数量较大或者MTU设置较大时,调度器完成一轮调度的时间可能比较长,这样可能会引发较大的传输时延抖动,此外DWRR调度无法满足高优队列优先调度的需求。

6.SP+DWRR调度

SP调度可能出现“饿死”问题,同时不能实现带宽按比例调度;而DWRR调度可以实现带宽的按比例调度,同时解决了“饿死”问题,但是无法满足高优业务优先调度的需求。因此结合SP调度和DWRR调度的优点,实现SP+DWRR的调度。调度时优先保证SP调度,在高优队列无请求调度时,才尝试调度低优队列请求。如下图所示,SP调度高优队列、低优队列和普通队列,队列优先级为:高优队列 > 普通队列 > 低优队列。

队列1/2/3按照配置权重值进行DWRR调度,高优队列、低优队列和普通队列间按照SP算法进行调度。高优队列无请求调度时,尝试调用普通队列组内的请求,在普通队列组内所有队列均无请求时,才调度低优队列请求。

上一篇: Linux中的nohup命令介绍

下一篇: TDSQL是国产数据库吗

十八年老品牌
微信咨询:gz_togogo 咨询电话:18922156670 咨询网站客服:在线客服

相关课程推荐

在线咨询 ×

您好,请问有什么可以帮您?我们将竭诚提供最优质服务!