首页> 中国专利> 一种用于调度队列的方法及装置

一种用于调度队列的方法及装置

摘要

本申请实施例公开了一种用于调度队列的方法及装置,降低了报文传输过程中的网络时延。其中,所述方法包括:第一设备对第一队列进行调度时,获取第一报文余额,所述第一报文余额用于表示所述第一队列能够出队的报文量;所述第一设备根据所述第一报文余额,对第二队列进行调度。

著录项

  • 公开/公告号CN113824652A

    专利类型发明专利

  • 公开/公告日2021-12-21

    原文格式PDF

  • 申请/专利权人 华为技术有限公司;

    申请/专利号CN202010566274.2

  • 申请日2020-06-19

  • 分类号H04L12/865(20130101);H04L12/875(20130101);H04L12/801(20130101);

  • 代理机构44285 深圳市深佳知识产权代理事务所(普通合伙);

  • 代理人常忠良

  • 地址 518129 广东省深圳市龙岗区坂田华为总部办公楼

  • 入库时间 2023-06-19 13:46:35

说明书

技术领域

本申请涉及通信领域,尤其涉及一种用于调度队列的方法及装置。

背景技术

服务质量(quality of service,QoS)是反映网络状态的指标,网络状态包括网络延迟、网络阻塞等状态。队列调度是保障目前对高QoS网络的需求的关键技术,具体是指按照一定的策略将多个队列中缓存的报文出队的技术。

亏空轮询(Deficit Round Robin,DRR)调度方法是一种被广泛应用的队列调度方法。该队列调度方法是将设备的网络带宽资源最大化的用到对多个队列中每个队列缓存报文的出队中。该队列调度方法并没有考虑到网络时延的问题,所以不适用对报文转发时延要求较高的应用场景,例如第五代移动通信技术(5th generation mobile networks,5G)中高可靠和低延迟通信(Ultra-reliable and Low Latency Communications,URLLC)的应用场景等。

发明内容

本申请实施例提供了一种用于调度队列的方法及装置,降低了报文传输过程中的网络时延。

第一方面,提供了一种用于调度队列的方法,该方法可以应用于第一设备,第一设备可以是路由器、交换机等网络设备,也可以是其他用于进行队列调度的设备。该方法具体可以包括如下步骤:在第一设备对第一队列进行调度时,第一设备可以获取第一报文余额,并根据第一报文余额对第二队列进行调度。其中,第一报文余额用于表示第一队列能够出队的报文量,其中第一队列和第二队列可以是对时延要求较高的队列。即,第二队列调度的时机是根据第一队列的第一报文余额来确定的,以保证第一队列所占用的带宽资源和第二队列所占用的带宽资源基本处于基本固定的状态。相对于传统的DRR的调度方式,即每个队列所占用的带宽资源不固定,本申请可以降低流量突发产生的网络拥塞所导致的时延问题。

在一种可能的实现方式中,第一设备对第二队列进行的调度可以包括以下两种方式。

在第一种方式中,第一设备可以在第一报文余额被消耗后,在对第二队列进行调度。第一报文余额标识第一队列能够出队的报文量,第一设备可以通过将第一队列中报文出队消耗第一报文余额,也可以通过调度其他队列消耗第一报文余额,还可以通过调度第一队列处于等待状态消耗第一报文余额。在第一设备无法消耗第一报文余额或第一报文余额耗尽后,第一设备可以对第二队列进行调度。如此,能够实现每次调度第一队列报文的总时间相同的目的,即保证第一设备每次对第一队列调度的耗时基本相等。

在第二种方式中,第一设备还可以在第一报文余额小于第一队列缓存的头报文的报文量时,对第二队列进行调度。其中,第一队列缓存的头报文可以是第一队列中处于收个待出队位置的报文,头报文的报文量可以是头报文的字节数,即头报文的长度。第一报文余额表示第一队列能够出队的报文量,那么第一报文余额小于第一队列缓存的头报文的报文量则表示第一队列剩余的能够出队的报文量无法满足头报文出队的要求。因此,第一设备无法利用第一报文余额调度第一队列缓存的报文出队,即本次对第一队列的调度结束,那么第一设备可以对第二队列进行调度。如此,能够实现第一队列长期获得的报文调度的机会不小于为其配置的份额(子配额)的目的,即在多次对第一队列进行调度后,保证第一设备每次对第一队列调度的平均耗时基本相等。

在一种可能的实现方式中,第一设备可以采用以下四种方式消耗第一报文余额。

在第一种方式中,第一队列缓存的报文量不为0且小于第一报文配额,第一报文配额为预先设置的每次队列调度时第一队列能够出队的总报文量与前一次调度第一队列时获取的第一报文余额之和,第一报文余额为第一报文配额与第一队列中已出队的报文量的差值。由于第一队列缓存的报文量小于第一报文配额,那么随着第一队列缓存的报文的出队,第一队列缓存的报文量会降低至0。如果第一队列中缓存的报文量为零,即第一队列中不存在待出队的报文,第一设备无法通过调度第一队列缓存的报文出队消耗第一报文余额。那么第一设备可以消耗剩余的第一报文余额。在消耗第一报文余额的过程中,第一设备可以对第三队列进行调度或调度第一队列处于等待状态。其中,第三队列可以是对时延要求不高的队列,即优先级较低的队列。这样一来,由于每次调度第一队列时第一设备都可以根据预先设置的每次队列调度时第一队列能够出队的总报文量增加第一报文配额,那么每次调度第一队列时第一队列新增的能够出队的总报文量基本固定。又因为第一设备在消耗第一报文余额后才会对第二队列进行调度,那么每次调度第一队列消耗的时间同样基本固定,即第一设备每次对第一队列调度的耗时基本相等。如此,可以保证第一队列占用的网络带宽资源不会被第二队列占用,从而防止流量突发产生的网络拥塞和时延。进一步地,在第一队列缓存的报文量为0时对第三队列进行调度,相当于利用第一队列无法利用的第一报文余额对第三队列进行调度,可以在保证第一队列的时延的前提下提高网络带宽资源的利用率。

在第二种方式中,第一队列缓存的报文量不为0且大于第一报文配额,第一报文配额为预先设置的每次队列调度时第一队列能够出队的总报文量与前一次调度第一队列时获取的第一报文余额之和,第一报文余额为第一报文配额与第一队列中已出队的报文量的差值。由于第一队列缓存的报文量大于第一报文配额,那么在调度第一队列的过程中,随着第一队列缓存的报文的出队,第一队列缓存的报文量从M1减少至M2。当第一队列缓存的报文量M2大于第一报文余额时,说明第一队列剩余的能够出队的总报文量无法满足第一队列剩余的缓存的报文量出队的需求。那么第一设备可以停止对第一队列的调度并开始消耗第一报文余额。在消耗第一报文余额的过程中,第一设备可以对第三队列进行调度。其中,第三队列可以是对时延要求不高的队列,即优先级较低的队列。这样一来,由于每次调度第一队列时第一设备都可以根据预先设置的每次队列调度时第一队列能够出队的总报文量增加第一报文配额,那么每次调度第一队列时第一队列新增的能够出队的总报文量是固定的。又因为第一设备在消耗第一报文余额后才会对第二队列进行调度,那么每次调度第一队列消耗的时间同样是固定的,即第一设备每次对第一队列调度的耗时基本相等。如此,可以保证第一队列占用的网络带宽资源不会被第二队列占用,从而防止流量突发产生的网络拥塞和时延。另外,在第一队列缓存的报文量为0时对第三队列进行调度,相当于利用第一队列无法利用的第一报文余额对第三队列进行调度,可以在保证第一队列的时延的前提下提高网络带宽资源的利用率。

在第三种方式中,第一队列缓存的报文量不为0且大于第一报文配额,第一报文配额为预先设置的每次队列调度时第一队列能够出队的总报文量,第一报文余额为第一报文配额与第一队列中已出队的报文量的差值。由于第一队列缓存的报文量小于第一报文配额,那么在调度第一队列的过程中,随着第一队列缓存的报文的出队,第一队列缓存的报文量从M1减少至M2。当第一队列缓存的报文量M2大于第一报文余额时,说明第一队列剩余的能够出队的总报文量无法满足第一队列剩余的缓存的报文量出队的需求。那么第一设备可以停止对第一队列的调度并开始消耗第一报文余额。在消耗第一报文余额的过程中,第一设备可以对第三队列进行调度。其中,第三队列可以是对时延要求不高的队列,即优先级较低的队列。这样一来,由于每次调度第一队列时第一设备都可以根据预先设置的每次队列调度时第一队列能够出队的总报文量增加第一报文配额,那么每次调度第一队列时第一队列新增的能够出队的总报文量是固定的。又因为第一设备在消耗第一报文余额后才会对第二队列进行调度,那么每次调度第一队列消耗的时间同样是固定的,即第一设备每次对第一队列调度的耗时基本相等。如此,可以保证第一队列占用的网络带宽资源不会被第二队列占用,从而防止流量突发产生的网络拥塞和时延。另外,在第一队列缓存的报文量为0时对第三队列进行调度,相当于利用第一队列无法利用的第一报文余额对第三队列进行调度,可以在保证第一队列的时延的前提下提高网络带宽资源的利用率。

在第四种方式中,第一队列缓存的报文量为0,第一报文配额为预先设置的每次队列调度时第一队列能够出队的总报文量,第一报文余额为第一报文配额。那么本次对第一队列进行调度时第一队列出队的报文量为0,第一报文余额为第一报文配额,第一报文配额为预先设置的每次队列调度时第一队列能够出队的总报文量。第一设备在对第二队列进行调度之前,可以消耗第一报文余额。在消耗第一报文余额的过程中,第一设备可以对第三队列进行调度或调度第一队列处于等待状态。如此,即使第一队列中不存在缓存的报文,第一设备仍可以在消耗完第一报文余额后再对第二队列进行调度,从而防止第二队列占用第一队列的网络带宽资源。

在一种可能的实现方式中,第一设备可以根据第二报文配额对第三队列进行调度。其中,第二报文配额可以是预先设置的每次队列调度时第三队列能够出队的总报文量。在对第三队列进行调度时,第一设备可以先获取第二报文配额,并在第一报文余额大于第二报文配额时调度第三队列缓存的报文出队以消耗第二报文配额。那么每次第一设备对第一队列进行调度时,第三队列能够出队的总报文量受到第二报文配额的限制。如此,第三队列无法过度占用第一队列的网络带宽资源,且第三队列的网络带宽资源不会被优先级低于第三队列的队列占用,可以降低第三队列的时延。

在一种可能的实现方式中,如果第二报文配额大于第一报文余额,说明第一队列剩余的能够出队的总报文量无法满足预先设置的每次队列调度时第三队列能够出队的总报文量的需求,那么第一设备在调度第三队列缓存的报文出队时消耗第一报文余额。

在一种可能的实现方式中,当第一报文余额大于第二报文配额时,在第一设备消耗完第二报文配额后,第一报文余额仍有剩余。那么第一设备可以获取第二报文余额,并通过调度第四队列缓存的报文出队来消耗第一报文余额。其中,第二报文余额可以为第一报文余额与所述第二报文配额的差值,第四队列可以是对时延或网络带宽的要求低于第三队列的其他低优先级队列,即第四队列的优先级低于第三队列。如此,在保障第三队列的网络带宽资源不会被第四队列占用的前提下,可以提高第一报文余额的利用率。

在一种可能的实现方式中,第一设备还可以获取第二报文配额和第三报文配额,其中,第二报文配额为预先设置的每次队列调度时第三队列能够出队的总报文量,第三报文配额为第一报文余额与预设权重的乘积,预设权重大于0小于1。第一设备可以比较第二报文配额和第三报文配额的大小。当第三报文配额大于第二报文配额时,第一设备可以消耗第二报文配额以调度第三队列缓存的报文出队。

在一种可能的实现方式中,第一设备还可以获取第二报文配额和第三报文配额,其中,第二报文配额为预先设置的每次队列调度时第三队列能够出队的总报文量,第三报文配额为第一报文余额与预设权重的乘积,预设权重大于0小于1。第一设备可以比较第二报文配额和第三报文配额的大小。当第三报文配额小于或等于第二报文配额时,第一设备可以消耗第三报文配额以调度第三队列缓存的报文出队。如此,第一设备可以根据第二报文配额和第三报文配额中较小的值调度第三队列缓存的报文出队,从而防止第三队列占用过多的网络带宽资源,从而防止第三队列流量突发造成第一队列的时延和网络拥塞。

第二方面,提供了一种用于调度队列的方法,该方法针对队列集合进行调度,可以应用于第一设备,第一设备可以是路由器、交换机等网络设备,也可以是其他用于进行队列调度的设备。该方法具体可以包括如下步骤:在对队列集合进行第N次调度时,第一设备可以获取第一报文余额。第一设备可以在第一报文余额被消耗后,对队列集合进行第N+1次调度。其中,队列集合至少包括第一队列和第二队列两个队列,所述第一报文余额用于表示所述第一队列和所述第二队列能够出队的报文量,其中第一队列和第二队列可以是对时延要求较高的队列,所述N为大于或等于1的整数。即,在将第一队列和第二队列能够出队的报文量消耗殆尽后,第一设备进入下一次对队列集合的调度。即,第N+1次调度的时机是根据队列集合的第一报文余额来确定的,以保证队列集合中的第一队列和第二队列所占用的带宽资源和第二队列所占用的带宽资源基本处于基本固定的状态。相对于传统的DRR的调度方式,即每个队列所占用的带宽资源不固定,本申请可以降低流量突发产生的网络拥塞所导致的时延问题。

在一种可能的实现方式中,第一设备可以采用以下五种方式消耗第一报文余额。

在第一种方式中,第二队列的调度晚于第一队列的调度,第二队列缓存的报文量不为0且小于第二报文配额,第一报文余额包括第二报文余额和第三报文余额,第二报文余额为第二报文配额和第一队列已出队的报文量的差值,第二报文配额为预先设置的每次队列集合调度时第一队列能够出队的总报文量与前一次队列集合调度时获取的第二报文余额之和,第三报文余额为第三报文配额和第二队列已出队的报文量的差值,第三报文配额为预先设置的每次队列集合调度时第二队列能够出队的总报文量与前一次队列集合调度时获取的第三报文余额之和。由于第二队列缓存的报文量小于第二报文配额,随着第二队列缓存的报文的出队,第二队列缓存的报文量会降低至0。又因为第一队列的调度已经结束,第一设备调度第一队列或第二队列缓存的报文出队。那么第一设备可以消耗第一报文余额。在消耗第一报文余额的过程中,第一设备可以对第三队列进行调度或调度队列集合处于等待状态。其中,第三队列可以是对时延要求不高的队列,即优先级较低的队列。这样一来,由于在第N次调度队列集合时第一设备都可以根据预先设置的每次队列调度时第一队列能够出队的总报文量增加第一报文配额,那么每次调度第一队列时第一队列新增的能够出队的总报文量基本固定。又因为第一设备在消耗第一报文余额后才会对进行第N+1次调度,那么每次调度队列集合消耗的时间同样基本固定,即第一设备每次对队列集合调度的耗时基本相等。如此,可以保证队列集合中的第一队列和第二队列所占用的带宽资源和第二队列所占用的带宽资源基本处于基本固定的状态。进一步地,在第一队列缓存的报文量为0时对第三队列进行调度,相当于利用第一队列和第二队列无法利用的第一报文余额对第三队列进行调度,可以在保证第一队列和第二队列的时延的前提下提高网络带宽资源的利用率。

在第二种方式中,第二队列的调度晚于第一队列的调度,第二队列缓存的报文量不为0且大于第二报文配额,第一报文余额包括第二报文余额和第三报文余额,第一报文余额包括第二报文余额和第三报文余额,第二报文余额为第二报文配额和第一队列已出队的报文量的差值,第二报文配额为预先设置的每次队列集合调度时第一队列能够出队的总报文量与前一次队列集合调度时获取的第二报文余额之和,第三报文余额为第三报文配额和第二队列已出队的报文量的差值,第三报文配额为预先设置的每次队列集合调度时第二队列能够出队的总报文量与前一次队列集合调度时获取的第三报文余额之和。由于第二队列缓存的报文量大于第二报文配额,那么在第N次对队列集合的调度中,随着第二队列缓存的报文的出队,第二队列缓存的报文量从M1减少至M2。当第二队列缓存的报文量M2大于第二报文余额时,说明第二队列剩余的能够出队的总报文量无法满足第二队列剩余的缓存的报文量出队的需求。那么第一设备可以停止对第二队列的调度并开始消耗第一报文余额。在消耗第一报文余额的过程中,第一设备可以对第三队列进行调度或调度队列集合处于等待状态。其中,第三队列可以是对时延要求不高的队列,即优先级较低的队列。这样一来,由于在第N次调度队列集合时第一设备都可以根据预先设置的每次队列调度时第一队列能够出队的总报文量增加第一报文配额,那么每次调度第一队列时第一队列新增的能够出队的总报文量基本固定。又因为第一设备在消耗第一报文余额后才会对进行第N+1次调度,那么每次调度队列集合消耗的时间同样基本固定,即第一设备每次对队列集合调度的耗时基本相等。如此,可以保证队列集合中的第一队列和第二队列所占用的带宽资源和第二队列所占用的带宽资源基本处于基本固定的状态。进一步地,在第一队列缓存的报文量为0时对第三队列进行调度,相当于利用第一队列和第二队列无法利用的第一报文余额对第三队列进行调度,可以在保证第一队列和第二队列的时延的前提下提高网络带宽资源的利用率。

在第三种实现方式中,第二队列的调度晚于第一队列的调度,第二队列缓存的报文量不为0且小于第二报文配额,第一报文余额包括第二报文余额和第三报文余额,第二报文余额为第二报文配额和第一队列已出队的报文量的差值,第二报文配额为预先设置的每次队列集合调度时第一队列能够出队的总报文量,第三报文余额为第三报文配额和第二队列已出队的报文量的差值,第三报文配额为预先设置的每次队列集合调度时第二队列能够出队的总报文量。由于第二队列缓存的报文量小于第二报文配额,随着第二队列缓存的报文的出队,第二队列缓存的报文量会降低至0。又因为第一队列的调度已经结束,第一设备调度第一队列或第二队列缓存的报文出队。那么第一设备可以消耗第一报文余额。在消耗第一报文余额的过程中,第一设备可以对第三队列进行调度或调度队列集合处于等待状态。其中,第三队列可以是对时延要求不高的队列,即优先级较低的队列。这样一来,由于在第N次调度队列集合时第一设备都可以根据预先设置的每次队列调度时第一队列能够出队的总报文量增加第一报文配额,那么每次调度第一队列时第一队列新增的能够出队的总报文量基本固定。又因为第一设备在消耗第一报文余额后才会对进行第N+1次调度,那么每次调度队列集合消耗的时间同样基本固定,即第一设备每次对队列集合调度的耗时基本相等。如此,可以保证队列集合中的第一队列和第二队列所占用的带宽资源和第二队列所占用的带宽资源基本处于基本固定的状态。进一步地,在第一队列缓存的报文量为0时对第三队列进行调度,相当于利用第一队列和第二队列无法利用的第一报文余额对第三队列进行调度,可以在保证第一队列和第二队列的时延的前提下提高网络带宽资源的利用率。

在第四种实现方式中,第二队列的调度晚于第一队列的调度,第二队列缓存的报文量不为0且大于第二报文配额,第一报文余额包括第二报文余额和第三报文余额,第一报文余额包括第二报文余额和第三报文余额,第二报文余额为第二报文配额和第一队列已出队的报文量的差值,第二报文配额为预先设置的每次队列集合调度时第一队列能够出队的总报文量,第三报文余额为第三报文配额和第二队列已出队的报文量的差值,第三报文配额为预先设置的每次队列集合调度时第二队列能够出队的总报文量。由于第二队列缓存的报文量大于第二报文配额,那么在第N次对队列集合的调度中,随着第二队列缓存的报文的出队,第二队列缓存的报文量从M1减少至M2。当第二队列缓存的报文量M2大于第二报文余额时,说明第二队列剩余的能够出队的总报文量无法满足第二队列剩余的缓存的报文量出队的需求。那么第一设备可以停止对第二队列的调度并开始消耗第一报文余额。在消耗第一报文余额的过程中,第一设备可以对第三队列进行调度或调度队列集合处于等待状态。其中,第三队列可以是对时延要求不高的队列,即优先级较低的队列。这样一来,由于在第N次调度队列集合时第一设备都可以根据预先设置的每次队列调度时第一队列能够出队的总报文量增加第一报文配额,那么每次调度第一队列时第一队列新增的能够出队的总报文量基本固定。又因为第一设备在消耗第一报文余额后才会对进行第N+1次调度,那么每次调度队列集合消耗的时间同样基本固定,即第一设备每次对队列集合调度的耗时基本相等。如此,可以保证队列集合中的第一队列和第二队列所占用的带宽资源和第二队列所占用的带宽资源基本处于基本固定的状态。进一步地,在第一队列缓存的报文量为0时对第三队列进行调度,相当于利用第一队列和第二队列无法利用的第一报文余额对第三队列进行调度,可以在保证第一队列和第二队列的时延的前提下提高网络带宽资源的利用率。

在第五种方式中,第一队列和第二队列缓存的报文量均为0,第一报文余额包括第二报文余额和第三报文余额,第二报文余额为第二报文配额和第一队列已出队的报文量的差值,第二报文配额为预先设置的每次队列集合调度时第一队列能够出队的总报文量,第三报文余额为第三报文配额和第二队列已出队的报文量的差值,第三报文配额为预先设置的每次队列集合调度时第二队列能够出队的总报文量。由于第一队列和第二队列中不存在报文,第二报文余额与第二报文配额相等,第三报文余额与第三报文配额相等,第一报文余额等于第二报文配额与第三报文配额之和。那么,第一设备在对队列集合进行第N+1次调度之前,可以消耗第一报文余额。在消耗第一报文余额的过程中,第一设备可以对第三队列进行调度或调度第一队列处于等待状态。如此,即使队列集合中不存在缓存的报文,第一设备仍可以在消耗完第一报文余额后再进入下一次调度,从而保证队列集合中的第一队列和第二队列所占用的带宽资源和第二队列所占用的带宽资源基本处于基本固定的状态。

在一种可能的实现方式中,第一设备可以根据第四报文配额对第三队列进行调度。其中,第四报文配额可以是预先设置的每次队列调度时第三队列能够出队的总报文量。在对第三队列进行调度时,第一设备可以先获取第四报文配额,并在第一报文余额大于第四报文配额时调度第三队列缓存的报文出队以消耗第四报文配额。那么每次第一设备对第一队列进行调度时,第三队列能够出队的总报文量受到第四报文配额的限制。如此,第三队列无法过度占用第一队列的网络带宽资源,且第三队列的网络带宽资源不会被优先级低于第三队列的队列占用,可以降低第三队列的时延。

在一种可能的实现方式中,当第一报文余额大于第四报文配额时,在第一设备消耗完第四报文配额后,第一报文余额仍有剩余。那么第一设备可以获取第四报文余额,并通过调度第四队列缓存的报文出队来消耗第一报文余额。其中,第二报文余额可以为第一报文余额与第四报文配额的差值,第四队列可以是对时延或网络带宽的要求低于第三队列的其他低优先级队列,即第四队列的优先级低于第三队列。如此,在保障第三队列的网络带宽资源不会被第四队列占用的前提下,可以提高第一报文余额的利用率。

在一种可能的实现方式中,如果第四报文配额大于第一报文余额,说明第一队列剩余的能够出队的总报文量无法满足预先设置的每次队列调度时第三队列能够出队的总报文量的需求,那么第一设备在调度第三队列缓存的报文出队时消耗第一报文余额。

第三方面,提供了一种用于调度队列的装置,所述装置具有实现上述第一方面或上述第一方面的任意一种可能的实现方式中用于调度队列的方法对应的功能。所述装置包括至少一个单元,所述至少一个单元用于实现上述第一方面或第一方面的任意一种可能的实现方式所提供的用于调度队列的方法。在一种实现方式中,所述装置包括:第一获取单元,用于对第一队列进行调度时,获取第一报文余额,所述第一报文余额用于表示所述第一队列能够出队的报文量;第一调度单元,用于根据所述第一报文余额,对第二队列进行调度。

第四方面,提供了一种用于调度队列的装置,所述装置具有实现上述第二方面或上述第二方面的任意一种可能的实现方式中用于调度队列的方法对应的功能。所述装置包括至少一个单元,所述至少一个单元用于实现上述第二方面或第二方面的任意一种可能的实现方式所提供的用于调度队列的方法。在一种实现方式中,所述装置包括:第一获取单元,用于在对队列集合进行第N次调度时,获取第一报文余额,所述队列集合包括第一队列和第二队列,所述第一报文余额用于表示所述第一队列和所述第二队列能够出队的报文量,所述N为大于或等于1的整数;第一调度单元,用于在所述第一报文余额被消耗后,对所述队列集合进行第N+1次调度。

第五方面,提供了一种用于调度队列的装置,所述装置包括处理器和存储器,所述存储器用于存储支持所述装置执行上述第一方面或第二方面所提供的用于调度队列的方法的程序,以及存储用于实现上述第一方面或第二方面所提供的用于调度队列的方法所涉及的数据。所述处理器被配置为用于执行所述存储器中存储的程序。所述装置还可以包括通信总线,该通信总线用于该处理器与存储器之间建立连接。

第六方面,提供了一种计算机可读存储介质,所述计算机可读存储介质中存储有指令,当其在计算机上运行时,使得计算机执行上述第一方面或第二方面所述的用于调度队列的方法。

第七方面,提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行上述第一方面或第二方面所述的用于调度队列的方法。

附图说明

图1为本申请实施例提供的系统10的架构示意图;

图2为本申请实施例提供的一种用于调度队列的方法的流程图;

图3为本申请实施例提供的另一种用于调度队列的方法的流程图;

图4为本申请实施例提供的再一种用于调度队列的方法的流程图;

图5为本申请实施例提供的再一种用于调度队列的方法的流程图;

图6为本申请实施例提供的再一种用于调度队列的方法的流程图;

图7为本申请实施例提供的再一种用于调度队列的方法的流程图;

图8为本申请实施例提供的一种用于队列调度的装置700的结构示意图;

图9为本申请实施例提供的另一种用于队列调度的装置800的结构示意图;

图10为本申请实施例提供的设备1000的结构示意图。

具体实施方式

下面结合附图对传统技术和本申请实施例提供的用于调度队列方法及装置进行介绍。

通常的DRR调度方法是将设备的网络带宽资源最大化的用到对多个队列中每个队列缓存报文的出队中。具体的,设备对其自身的DRR队列集合包括的多个DRR队列进行依次调度,其中,依次调度是指按照一定的调度顺序逐一对多个DRR队列进行调度,调度顺序可根据优先级或者系统设置来确定。以DRR队列集合包括第一DRR队列和第二DRR队列为例,设备A在每次队列调度的过程中按照第一DRR队列和第二DRR队列的顺序进行调度。设备A确定该第一DRR队列中缓存有报文(有报文等待出队),设备A获取第一DRR队列对应的报文配额,并利用第一DRR队列对应的报文配额调度该第一DRR队列缓存的报文出队。其中,第一DRR队列对应的报文配额为预先设置的每次队列调度时第一DRR队列能够出队的总报文量。设备A确定该第一DRR队列中未缓存报文,则设备A对第二DRR队列进行调度。设备A确定第二DRR队列缓存有报文(有报文等待出队),设备A获取第二DRR队列对应的报文配额,并利用第二DRR队列对应的报文配额调度该第二DRR队列缓存的报文出队。第二DRR队列对应的报文配额为预先设置的每次队列调度时第二DRR队列能够出队的总报文量。第一DRR队列对应的报文配额和第二DRR队列对应的报文配额之间的比例可以是固定的,例如1:2、3:1等。该比例与第一DRR队列和第二DRR队列占用的端口带宽的比例相同。例如,DRR队列集合对应的端口速率为300Mbps,第一DRR队列对应的报文配额为1000bytes,第二DRR队列对应的报文配额为2000Bytes,第一DRR队列中缓存的报文可以最大以(1000/(2000+1000))*300=100Mbps的速率出队,第二DRR队列中缓存的报文可以最大以(2000/(2000+1000))*300=200Mbps的速率出队。如果第一DRR队列对应的报文配额在被消耗完之前第一DRR队列缓存的报文均出队,则设备A直接对第二DRR队列进行调度。DRR队列集合包括两个以上的DRR队列同理,此处不再赘述。在设备A对DRR队列集合中的多个DRR队列进行队列调度的过程中,若至少一个DRR队列经常处于未缓存报文的状态,则DRR队列集合包括的其它DRR队列可以获得超过其端口带宽的比例的调度机会,即DRR队列集合包括的其它DRR队列有机会占用过多的带宽。例如,当第一DRR队列始终为空(未缓存报文)时,第二DRR队列中缓存的报文就可以以300Mbps的速率出队。当占用过多带宽的DRR队列出现流量突发时,可能会出现网络拥塞,从而造成报文传输的时延较长。例如,设备A将第一DRR队列缓存的报文发往设备B,将第二DRR队列缓存的报文发往设备C。当设备B和设备C接收报文的最大速率均为200Mbps时,设备A以300Mbps的速率向设备C发送第二DRR队列缓存的报文时,就会在设备C处出现报文拥塞,从而导致时延较长。

为了解决上述提及的时延问题,本申请实施例提供了一种用于调度队列的方法及装置,能够减小报文传输过程中的时延,从而满足时延要求较高的场景中报文的传输需求。

图1为本申请实施例提供的系统10的架构示意图。如图1所示,系统10包括第一设备11、第二设备12和第三设备13。其中,第一设备11能够与第二设备12和第三设备13通信。第一设备11、第二设备12和第三设备13可以是具有转发功能的设备,比如:路由器(router)、交换机(switch)等转发设备,还可以是服务器或者终端设备等具有转发功能的设备。

其中,终端设备一种向用户提供语音和/或数据连通性的设备,或,设置于该设备内的芯片。目前,一些终端设备的举例为:工业控制(industrial control)中的无线终端、无人驾驶(self driving)中的无线终端、远程手术(remote medical surgery)中的无线终端、智能电网(smart grid)中的无线终端、运输安全(transportation safety)中的无线终端、智慧城市(smart city)中的无线终端、智慧家庭(smart home)中的无线终端、支持5G接入的家庭网关设备(5G-residential gateway,5G-RG)等。

图2为本申请实施例提供的一种用于调度队列的方法流程图。该实施例是以队列为单位进行调度,即每次调度的是队列。下面结合图2,对本申请实施例提供的用于调度队列的方法进行说明。

S201:第一设备对第一队列进行调度时,获取第一报文余额,第一报文余额用于表示第一队列能够出队的报文量。

举例说明,第一报文配额为预先设置的每次队列调度时第一队列能够出队的总报文量,或者第一报文配额为预先设置的每次队列调度时第一队列能够出队的总报文量与前一次调度第一队列时获取的第一报文余额之和。第一设备可以利用第一报文配额来调度第一队列缓存的报文出队,比如第一队列缓存的第一报文出队后,第一报文配额减少与第一报文对应的数值。第一报文余额小于或等于第一报文配额,即第一队列缓存有报文的情况下,当第一队列缓存的报文出队后,第一报文配额的数值减小后即为第一报文余额。报文量可以是报文的长度或报文的数量。如果报文量是报文的数量,则每个报文的长度可以相等。报文量的具体形式可根据需要进行设置。

在本申请实施例中,第一报文余额、第一报文配额及后文的第二报文余额、第二报文配额等用于表示队列能够出队的报文量可以是通过与队列对应的计数器或令牌桶中的令牌来计量。

S202:第一设备根据第一报文余额,对第二队列进行调度。

本申请实施例中第一设备对第二队列进行的调度包括以下两种方式:方式一,第一设备在第一报文余额被消耗之后,对第二队列进行调度。方式二,第一设备在第一报文余额小于第一队列缓存的头报文的报文量时,对第二队列进行调度。其中,对于方式一,第一设备可在消耗第一报文余额的过程中,调度第三队列或者调度第一队列处于等待状态。相对于第一队列来说,第三队列可以是对时延要求不高的队列或者是优先级较低的队列。利用第一报文余额来调度第三队列,可以在保证时延的基础上,提高第三队列对应的端口带宽的利用率。对于方式二,第一设备在第一报文余额大于或等于第一队列缓存的头报文的报文量时,可采用S201中提及的调度第一队列缓存的报文出队的方式进行处理。采用方式一对第二队列进行调度,能够实现每次调度第一队列报文的总时间相同的目的;采用方式二对第二队列进行调度,能够实现第一队列长期获得的报文调度的机会不小于为其配置的份额(子配额)的目的。

下面以方式一为例,对第一设备调度第二队列之前的对第一队列和第三队列的六种调度方式进行相关说明。下述调度方式中,第三队列可以是尽力而为(best effort,BE)队列或盈余轮询(Surplus Round-Robin,SRR)队列。

调度方式一:第一设备调度第一队列缓存的报文出队;第一设备在第一队列缓存的报文量为0时,消耗第一报文余额;第一设备在消耗第一报文余额的过程中,对第三队列进行调度。

调度方式二:第一设备调度第一队列缓存的报文出队;第一设备在第一队列缓存的报文量为0时,消耗第一报文余额;第一设备在消耗第一报文余额的过程中,调度第一队列处于等待状态。其中,调度第一队列处于等待状态指代不调度第一队列缓存的报文出队。

上述调度方式一和调度方式二中,第一队列缓存的报文不为0,第一报文配额能够满足第一队列缓存的报文的出队需求,即第一队列缓存的报文都出队后,第一报文余额不为0,则第一设备在调度第二队列之前消耗第一报文余额。

调度方式三:第一设备调度第一队列缓存的报文出队,第一队列缓存的报文量为M1,M1为大于或等于1的整数;第一设备在第一队列缓存的报文量M2大于第一报文余额时,消耗第一报文余额,M2小于或等于M1,第一队列中已出队的报文量为M1与M2的差值;第一设备在消耗第一报文余额的过程中,对第三队列进行调度。

调度方式四:第一设备调度第一队列缓存的报文出队,第一队列缓存的报文量为M1,M1为大于或等于1的整数;第一设备在第一队列缓存的报文量M2大于第一报文余额时,消耗第一报文余额,M2小于或等于M1,第一队列中已出队的报文量为M1与M2的差值;第一设备在消耗第一报文余额的过程中,调度第一队列处于等待状态。其中,调度第一队列处于等待状态指代不调度第一队列缓存的报文出队。

上述调度方式三和调度方式四中,第一队列缓存的报文不为0,第一报文配额不能满足第一队列缓存的报文的出队需求,即第一报文余额不满足第一队列缓存的报文出队,换句话说第一报文余额小于第一队列缓存的报文量,则第一设备在调度第二队列之前消耗第一报文余额。

上述调度方式一至调度方式四中任一种调度方式中,第一报文配额可以是S101中的任一种,第一报文余额为第一报文配额与第一队列中已出队的报文量的差值。对于下述调度方式五和调度方式六,第一报文余额为第一报文配额,第一报文配额为预先设置的每次队列调度时第一队列能够出队的总报文量,且第一队列初始的缓存的报文量为0,即第一队列初始为空队列。

调度方式五:第一设备在第一队列缓存的报文量为0时,消耗第一报文余额;第一设备在消耗第一报文余额的过程中,对第三队列进行调度。

调度方式六:第一设备在第一队列缓存的报文量为0时,消耗第一报文余额;第一设备在消耗第一报文余额的过程中,调度第一队列处于等待状态。其中,调度第一队列处于等待状态指代不调度第一队列缓存的报文出队。

上述六种调度方式中,第一设备在消耗第一报文余额的过程中,对第三队列的调度可采用以下四种方式。

调度方式一:第一设备获取第二报文配额,第二报文配额为预先设置的每次队列调度时第三队列能够出队的总报文量;第一设备在第一报文余额大于第二报文配额时,消耗第二报文配额,以调度第三队列缓存的报文出队。可选地,基于该调度方式,调度第三队列缓存的报文出队之后,该方法还包括:第一设备获取第二报文余额,第二报文余额为第一报文余额与第二报文配额的差值;第一设备消耗第二报文余额,以调度第四队列缓存的报文出队。相比于第三队列,第四队列可以是优先级较低的队列或者对时延要求较低的队列。

调度方式二:第一设备获取第二报文配额,第二报文配额为预先设置的每次队列调度时第三队列能够出队的总报文量;第一设备在第一报文余额小于或等于第二报文配额时,消耗第一报文余额,以调度第三队列缓存的报文出队。

调度方式三:第一设备获取第二报文配额和第三报文配额,第二报文配额为预先设置的每次队列调度时第三队列能够出队的总报文量,第三报文配额为第一报文余额与预设权重的乘积,预设权重大于0且小于1;第一设备在第三报文配额大于第二报文配额时,消耗第二报文配额,以调度第三队列缓存的报文出队。可选地,基于该调度方式,调度第三队列缓存的报文出队之后,该方法还包括:述第一设备获取第三报文余额,第三报文余额为第三报文配额与第二报文配额的差值;第一设备消耗第三报文余额,以调度第四队列缓存的报文出队。

调度方式四:第一设备获取第二报文配额和第三报文配额,第二报文配额为预先设置的每次队列调度时第三队列能够出队的总报文量,第三报文配额为第一报文余额与预设权重的乘积,预设权重大于0且小于1;第一设备在第三报文配额小于或等于第二报文配额时,消耗第三报文配额,以调度第三队列缓存的报文出队。

上述四种调度方式中,第一设备可以采用先入先出(First-in First-out,FIFO)调度方法或对层次化的服务质量(Hierarchical Quality of Service HQoS)调度方法等传统的调度方法对第三队列进行调度,本申请实施例对此不进行限定。

本申请提供的另一种实施例中,第一设备可基于图2对应的实施例提供的方法,根据队列所分配的端口带宽、所获取的任一报文配额或者任一报文余额来获取相应的时长,通过时长来进行队列调度。第一设备利用时长来进行队列调度的构思与上述根据报文配额和报文余额来进行队列调度的构思相同,只是将消耗报文余额或消耗报文配额的步骤替换成根据时长进行超时判断的步骤。该报文配额可以是本申请实施例提及的任一种报文配额。该报文余额可以是本申请实施例提及的任一种报文余额。

本申请提供的有一种实施例中,第一设备可基于图2对应的实施例提供的方法,在消耗第一报文余额之后,不对第二队列进行调度,而继续对第一队列进行调度。第一设备对第一队列进行调度的方式可参见图2对应的实施例提供的方法。

图3为本申请实施例提供的一种用于调度队列的方法的流程图。该实施例中以队列集合为单位进行队列调度,即每次调度的是队列集合。该实施例中的队列集合包括第一队列和第二队列。本申请实施例对队列集合包括多于两个队列的场景不再赘述,可参见下述实施例所提供的方法。下面结合图3,对本申请实施例提供的用于调度队列的方法进行说明。

S301:第一设备在对队列集合进行第N次调度时,获取第一报文余额,第一报文余额用于表示第一队列能够出队的报文量和第二队列能够出队的报文量之和,N为大于或等于1的整数。

举例说明,第一报文余额用于表示队列集合所包括的所有队列能够出队的报文量之和。本申请实施例中报文量的含义可参见图2对应的实施例中的相应内容。其中,第一报文余额包括第二报文余额和第三报文余额。第二报文余额为第二报文配额和第一队列已出队的报文量的差值。第二报文配额为预先设置的每次队列集合调度时第一队列能够出队的总报文量与前一次队列集合调度时获取的第二报文余额之和,或者第二报文配额为预先设置的每次队列集合调度时第一队列能够出队的总报文量。第三报文余额为第三报文配额和第二队列已出队的报文量的差值。第三报文配额为预先设置的每次队列集合调度时第二队列能够出队的总报文量与前一次队列集合调度时获取的第三报文余额之和,或者第三报文配额为预先设置的每次队列集合调度时第二队列能够出队的总报文量。

S302,第一设备在第一报文余额被消耗后,对队列集合进行第N+1次调度。

其中,第一设备对队列集合进行第N+1次调度的方法可参见该实施例中第一设备对队列集合进行第N次调度的方法,在此不再赘述。

该实施例中,第一设备在对队列集合进行第N+1次调度之前,可采用下述四种方式对获取的第一报文余额进行消耗。其中,第一设备先调度第一队列,在完成第一队列的调度之后,进行第二队列的调度。第一设备可在对第一队列进行调度的过程中,获取第二报文配额和第二报文余额。第一设备可在对第二队列进行调度的过程中,获取第三报文配额和第三报文余额。下述第三队列可以是BE队列或者SRR队列,本申请实施例对此不进行限定。

调度方式一:第一设备调度第二队列缓存的报文出队,第二队列在每次队列集合调度时的调度晚于第一队列的调度;第一设备在第二队列缓存的报文量为0时,消耗第一报文余额;第一设备在消耗第一报文余额的过程中,对第三队列进行调度。

调度方式二:第一设备调度第二队列缓存的报文出队,第二队列在每次队列集合调度时的调度晚于第一队列的调度;第一设备在第二队列缓存的报文量为0时,消耗第一报文余额;第一设备在消耗第一报文余额的过程中,调度队列集合处于等待状态。其中,调度队列集合处于等待状态指代的是不调度队列集合中的任一队列缓存的报文出队。

调度方式三:第一设备调度第二队列缓存的报文出队,第二队列缓存的报文量为M1,M1为大于或等于1的整数,第二队列在每次队列集合调度时的调度晚于第一队列的调度;第一设备在第二队列缓存的报文量M2大于第三报文余额时,消耗第一报文余额,M2小于或等于M1,第一队列中已出队的报文量为M1与M2的差值;第一设备在消耗第一报余额的过程中,对第三队列进行调度。

调度方式四:第一设备调度第二队列缓存的报文出队,第二队列缓存的报文量为M1,M1为大于或等于1的整数,第二队列在每次队列集合调度时的调度晚于第一队列的调度;第一设备在第二队列缓存的报文量M2大于第三报文余额时,消耗第一报文余额,M2小于或等于M1,第一队列中已出队的报文量为M1与M2的差值;第一设备在消耗第一报余额的过程中,调度队列集合处于等待状态。其中,调度队列集合处于等待状态指代的是不调度队列集合中的任一队列缓存的报文出队。

上述四种调度方式中,第二报文配额可以是S301中提及的任一种第二报文配额,第三报文配额可以是S301中提及的任一种第三报文配额。

下述调度方式五和调度方式六中,第一队列和第二队列均为空队列,第一设备对第一队列和第二队列的调度顺序与上述四种调度方式中队列的调度顺序相同。第二报文配额为预先设置的每次队列集合调度时第一队列能够出队的总报文量。第三报文配额为预先设置的每次队列集合调度时第二队列能够出队的总报文量。

调度方式五:第一设备在第二队列缓存的报文量为0时,消耗第一报文余额,第二队列在每次队列集合调度时的调度晚于第一队列的调度;第一设备在消耗第一报文余额的过程中,对第三队列进行调度。

调度方式六:第一设备在第二队列缓存的报文量为0时,消耗第一报文余额,第二队列在每次队列集合调度时的调度晚于第一队列的调度;第一设备在消耗第一报文余额的过程中,调度队列集合处于等待状态。

上述六种调度方式中,第一设备可采用下述四种方式对第三队列进行调度。

调度方式一:第一设备获取第四报文配额,第四报文配额为预先设置的每次调度时第三队列能够出队的总报文量;第一设备在第一报文余额大于第四报文配额时,消耗第四报文配额,以调度第三队列缓存的报文出队。可选地,在调度第三队列缓存的报文出队之后,该方法还包括:第一设备获取第四报文余额,第四报文余额为第一报文余额与第四报文配额的差值;第一设备消耗第四报文余额,以调度第四队列缓存的报文出队。

调度方式二:第一设备获取第四报文配额,第四报文配额为预先设置的每次调度时第三队列能够出队的总报文量;第一设备在第一报文余额小于或等于第四报文配额时,消耗第一报文余额,以调度第三队列缓存的报文出队。

调度方式三:第一设备获取第四报文配额和第五报文配额,第四报文配额为预先设置的每次调度时第三队列能够出队的总报文量,第五报文配额为第一报文配额与权重的乘积,权重大于0且小于1;第一设备在第五报文配额大于第四报文配额时,消耗第四报文配额,以调度第三队列缓存的报文出队。可选地,在调度第三队列缓存的报文出队之后,该方法还包括:第一设备获取第四报文余额,第四报文余额为第五报文配额与第四报文配额的差值;第一设备消耗第四报文余额,以调度第四队列缓存的报文出队。

调度方式四:第一设备获取第四报文配额和第五报文配额,第四报文配额为预先设置的每次调度时第三队列能够出队的总报文量,第五报文配额为第一报文配额与权重的乘积,权重大于0且小于1;第一设备在第五报文配额小于或等于第四报文配额时,消耗第五报文配额,以调度第三队列缓存的报文出队。

本申请提供的另一种实施例中,第一设备可基于图3对应的实施例提供的方法,根据队列所分配的端口带宽、所获取的任一报文配额或者任一报文余额来获取相应的时长,通过时长来进行队列调度。第一设备利用时长来进行队列调度的构思与上述根据报文配额和报文余额来进行队列调度的构思相同,只是将消耗报文余额或消耗报文配额的步骤替换成根据时长进行超时判断的步骤。该报文配额可以是本申请实施例提及的任一种报文配额。该报文余额可以是本申请实施例提及的任一种报文余额。

图4为本申请实施例提供的用于调度队列的方法的流程图。下面结合图4,对本申请实施例提供的用于调度队列的方法进行说明。

S401:第一设备获取DSRR队列集合以及DSRR队列集合包括的每个DSRR队列对应的参数。

举例说明,该亏空盈余轮询(deficit surplus round robin,DSRR)队列集合可以是图3对应的实施例中提及的队列集合。DSRR队列可以是图2或图3对应的实施例中的第一队列或第二队列。DSRR队列集合可以包括至少两个DSRR队列,该至少两个DSRR队列用于传输报文。该DSRR队列集合中每个DSRR队列对应的参数包括该DSRR队列对应的报文子配额、报文配额和报文余额。

下面以DSRR队列集合包括第一DSRR队列为例对DSRR队列对应的参数进行说明。第一DSRR队列对应的报文配额可以为预先设置的每次队列调度时第一DSRR队列能够出队的报文量,或者第一DSRR队列对应的报文配额可以是预先设置的每次队列调度时该第一DSRR队列能够出队的报文量与对该第一DSRR队列对应的前一次调度时该第一DSRR队列对应的报文余额之和。其中,预先设置的每次队列调度时第一DSRR队列能够出队的报文量可被称为第一DSRR队列对应的报文子配额。出队指代的是从队列中发送出去。第一DSRR队列对应的报文配额可以是图2对应的实施例中的第一报文配额。第一DSRR队列对应的报文余额表示该第一DSRR队列剩余的能够出队的报文量。第一DSRR对应的报文余额可以是图2对应的实施例中的第一报文余额。在本申请实施例中,第一DSRR队列对应的报文余额可以是第一DSRR队列对应的报文配额和第一DSRR队列中已出队的报文量的差值。

如前文所提,报文量可以代表报文的长度,也可以代表报文的数量,为便于说明,后续统一以报文长度为例进行介绍。当报文量表示报文的长度时,报文子配额、报文配额和报文余额这三个参数的单位可以为比特(bit,b)、字节(Byte,B)、千字节(kilobyte,KB)等数据的单位。例如,第一DSRR队列对应的报文子配额为1000bit,那么在每次调度中,该第一DSRR队列可出队的报文的总长度可以额外增加1000bit。该第一DSRR队列对应的报文配额为1100bit,说明该第一DSRR队列在本次队列调度中共有总长度为1100bit的报文可以出队。该第一DSRR队列对应的报文余额为1100bit,说明该第一DSRR队列还剩余总长度为1100bit的报文可以出队。为便于后续说明,本实施例中DSRR队列集合包括M个DSRR队列,其中M为大于或等于2的整数。M个DSRR队列中第i个DSRR队列对应的报文子配额用Q1[i]表示,第i个DSRR队列对应的报文配额用Q2[i]表示,第i个DSRR队列对应的报文余额用DC[i]表示,其中,i的取值范围可表示为1≤i≤M。

下面以第一设备对第i个DSRR队列进行处理为例进行说明,其中,第一设备可以是图1中的第一设备11或者图2对应实施例中的第一设备,第i个DSRR队列可以是DSRR队列集合中任意一个DSRR队列。第一设备对DSRR队列集合中的所有DSRR队列进行处理的方法可参见第一设备对第i个DSRR队列的处理方法,不再逐一举例说明。

S402:第一设备根据第i个DSRR队列对应的报文子配额修改该第i个DSRR队列对应的报文配额。

举例说明,在第一设备对第i个DSRR队列进行处理时,第一设备可以先确定该第i个DSRR队列对应的报文配额。例如,第一设备可以对Q1[i]和上一次队列调度的DC[i]求和,并将求和得到的结果赋值给Q2[i],因而第i个DSRR队列本次队列调度可出队的报文的总长度为Q2[i]。例如,第i个DSRR队列对应的报文子配额Q1[i]=1000bit,且该第i个DSRR队列在上一次队列调度中对应的报文余额DC[i]=10bit。在本次队列调度该第i个DSRR队列对应的报文配额Q2[i]为1000+10=1010bit,即本次队列调度中该第i个DSRR队列的可出队的报文的总长度为1010bit。

S403:第一设备判断第i个DSRR队列中是否存在待出队的报文,若该第i个DSRR队列中不存在待出队的报文,则执行S406,若该第i个DSRR队列中存在待出队的报文,则执行S404。

举例说明,第一设备为DSRR队列集合中的第i个DSRR队列设置初始值为0的计数器,每当有一个报文进入第i个DSRR队列时,就将该第i个DSRR队列对应的计数器的值加1。每当有一个报文从第i个DSRR队列出队时,将该第i个DSRR队列对应的计数器的值减1。如此,通过判断第i个DSRR队列对应的计数器的值是否为零,第一设备可以判断该第i个DSRR队列中是否存在待出队的报文。当然,第一设备还可以通过判断第i个DSRR队列对应的存储空间中是否缓存有报文,来判断该第i个DSRR队列中是否存在待出队的报文。

S404:第一设备判断该第i个DSRR队列的头报文的长度是否大于该第i个DSRR队列对应的报文余额,若该第i个DSRR队列的队列对应的头报文的长度小于或等于该第i个DSRR队列对应的报文余额,则执行S405,若该第i个DSRR队列的头报文的长度大于该第i个DSRR队列对应的报文余额,则执行S407。

举例说明,第i个DSRR队列中缓存的报文按顺序出队。当第i个DSRR队列中存在至少一个待出队的报文时,可以将待出队的报文中处于首个待出队位置的报文称为头报文。第i个DSRR队列中的头报文是第i个DSRR队列中最先出队的报文。第i个DSRR队列的头报文的长度用L[i]表示。第i个DSRR队列的头报文的长度L[i]可以不是固定值,其数值根据作为第i个DSRR队列的头报文的变化而改变。

举例说明,在第i个DSRR队列的某一头报文出队之前,第一设备可以判断该待出队的头报文的长度L[i]是否大于DC[i],并根据判断结果执行S405或S407。即,如果L[i]小于或等于DC[i],则执行S405;如果L[i]大于DC[i],则执行S407。

S405:第一设备将第i个DSRR队列缓存的头报文出队,并将该第i个DSRR队列对应的报文余额减去该第i个DSRR队列对应的头报文的长度,返回执行S403。

举例说明,第i个DSRR队列对应的报文余额DC[i]表示该第i个DSRR队列剩余的可出队的报文的总长度。当L[i]小于或等于DC[i]时,则表示该第i个DSRR队列对应的报文余额满足头报文出队的要求,即头报文可以出队。第一设备可以将该第i个DSRR队列的头报文移出该第i个DSRR队列并向其他设备发送。例如,当第一设备为图1所示的设备11时,第一设备可以将该第i个DSRR队列的头报文发送给设备12。

举例说明,在S402之后,首次执行S403时,DC[i]的值可以等于第i个DSRR队列的报文配额Q2[i]。而执行S405时,在第i个DSRR队列的头报文出队后,第一设备可以将DC[i]减去L[i],并将二者的差值重新赋值给DC[i],即对DC[i]进行更新。第一设备对DC[i]进行更新,表示头报文出队的动作导致该第i个DSRR队列剩余的可出队的报文的总长度中消耗了L[i]的长度。例如,第i个DSRR队列在未出队报文之前对应的报文余额DC[i]为1010bit,该第i个DSRR队列的头报文的长度L[i]为100bit,那么第一设备可以在长度为100bit的报文出队后,将DC[i]更新为910bit。

举例说明,第一设备在第i个DSRR队列的头报文出队后,执行S403,重新判断该第i个DSRR队列是否为空,并根据判断结果执行相应的处理,直到该第i个DSRR队列中不存在待出队的报文或该第i个DSRR队列对应的报文余额小于头报文的长度。只要第i个DSRR队列存在头报文且头报文的长度小于或等于该第i个DSRR队列对应的报文余额,则该第i个DSRR队列中的报文就可以出队。如果位于该第i个DSRR队列头部的k个(k≥0)报文的总长度小于DC[i]且k+1个报文的总长度大于DC[i],那么在单次队列调度中,第一设备可以将这k个报文出队,并将第k+1个报文留至下次队列调度时进行处理。如此,可以保障第一设备在队列调度中将总长度小于且最接近DC[i]的多个报文出队,提高网络带宽资源的利用效率。例如,该第i个DSRR队列中共有5个报文,5个报文中各个报文的长度分别为100bit、500bit、200bit、210bit和800bit。该5个报文中前4个报文按序分别为100bit、500bit、200bit和210bit。第一设备在执行S402时,得到该第i个DSRR队列对应的报文配额为1100bit,那么在本次队列调度中,该队列仅有前4个报文可以出列,且处理结束后的报文余额为90bit。最后一个长度为800bit的报文就无法出队,需要在下次队列调度中进行处理。第一设备可以比较剩余的报文余额和该第i个DSRR队列当前头报文的长度,由于报文余额仅剩90bit,无法满足长度为800bit的头报文出队的要求,第一设备可以将剩余的长度为90bit报文余额留至下一次队列调度使用,并将长度为800bit的头报文留至下次队列调度时进行处理。

S406:第一设备根据第i个DSRR队列对应的报文余额确定本次队列调度中第i个DSRR队列对应的等待时长,并在等待时长超时后执行S407。

举例说明,第一设备可以在第i个DSRR队列中不存在待出队的报文后,根据该第i个DSRR队列剩余的报文余额确定本次队列调度中第i个DSRR队列对应的等待时长,并在等待时长超时后执行S407。其中,第i个DSRR队列对应的等待时长表示消耗该第i个DSRR队列剩余的报文余额所需的时长。

在传统的DRR技术中,由于第一设备发送报文的速度是相对不变的,第一设备处理的报文越多,消耗的时间越长。显然,如果第一次对DSRR队列集合的队列调度中第一设备对该第i个DSRR队列进行处理消耗的时间t1小于第二次对DSRR队列集合的队列调度中第一设备对该第i个DSRR队列进行处理消耗的时间t2,那么第一次队列调度消耗的时间T1可能小于第二次队列调度消耗的时间T2。进一步地,如果DSRR队列集合中第k个DSRR队列中始终存在报文,且在两次对DSRR队列集合的队列调度中均出队了总长度为Q1[k]的报文,那么在第一次队列调度中该第k个DSRR队列得到的网络带宽资源为Q1[k]/T1,在第二次队列调度中该第k个DSRR队列得到的网络带宽资源为Q1[k]/T2。由于T1

由此可见,第一设备可以通过控制每次对DSRR队列集合进行队列调度消耗的时间相近,确保DSRR队列集合中任意一个DSRR队列均无法占用其他DSRR队列的网络带宽资源。因此第一设备可以根据剩余的DC[i]确定本次队列调度中第i个DSRR队列对应的等待时长,并根据等待时长进行等待。其中,等待时长用于在该第i个DSRR队列为空时对第一设备处理该第i个DSRR队列消耗的时间进行补偿。具体地,假设第一设备的端口的端口速率为c,本次队列调度的等待时长可以为DC[i]与端口速率c的比值。其中,第一设备的端口可以是出端口。例如,某次队列调度中DC[i]为2000bit,端口速率c为500bit/s,那么计算得到的等待时长t就为4s,第一设备可以在等待4s后执行S407。

S407:第一设备判断DSRR队列集合中是否存在未被处理的DSRR队列,若DSRR队列集合中仍存在未被处理的DSRR队列,对未被处理的DSRR队列执行S402-S406。

举例说明,在完成对该第i个DSRR队列的处理后,第一设备可以判断DSRR队列集合中是否仍然存在未被处理的DSRR队列。例如第一设备可以在对DSRR队列集合进行队列调度时先将i值设为1,从第一个DSRR队列开始处理。在处理完第i个DSRR队列后,第一设备可以将i值加1,处理下一个DSRR队列。当i值小于或等于DSRR队列集合中DSRR队列的总数M时,说明该DSRR队列集合中仍然存在未被处理的DSRR队列,第一设备可以继续对第i个DSRR队列执行S402-S406所示的方法。当DSRR队列集合中全部DSRR队列都得到了处理后,说明第一设备完成了一次对DSRR队列集合的队列调度,第一设备可以进入下一次队列调度。

由于第i个DSRR队列集合对应的等待时长是根据该第i个DSRR队列剩余的报文余额确定的,那么该于第i个DSRR队列集合对应的等待时长相当于一个不属于DSRR队列集合的虚拟队列将本次队列调度中该第i个DSRR队列未充分利用的报文余额耗尽所需的时长。那么对该第i个DSRR队列进行处理消耗的时长相当于消耗该第i个DSRR队列已出队的报文长度所需的时长和消耗该第i个DSRR队列未出队的报文长度所需的时长。由于该第i个DSRR队列每次调度时可出队的报文的总长度受到Q1[i]的限制,且第一设备调度报文出队或对报文进行处理的速度是相对固定的,那么在多次队列调度后,每次队列调度消耗的时间趋近于固定值T。T的值接近DSRR队列集合中全部DSRR队列对应的报文子配额之和与第一设备调度报文的速度之比。这样一来,第i个DSRR队列报文出队的最大速度无法超过Q1[i]/T。由于DSRR队列集合中每个DSRR队列报文出队的最大速度都得到了限制,每个DSRR队列能够占用的网络带宽资源同样得到了限制。如此,DSRR队列集合中的任何一个DSRR队列都不会因为其他DSRR队列为空而占用过多的网络带宽资源,从而防止流量突发产生的网络拥塞和时延。

为了更好地利用第一时长,即利用DSRR队列剩余的报文余额的利用率,在一些其他的实现方式中,第一设备可以对DSRR队列集合和一个BE队列集进行调度。其中,DSRR队列集合可以包括至少两个DSRR队列。BE队列集可以包括至少一个BE队列。图5为本申请实施例提供的用于调度队列的方法的流程图。在该实施例中,第一设备可以对DSRR队列集合及BE队列集合进行队列调度。该实施例以BE队列集合包括一个BE队列为例进行说明。当BE队列集合包括多个BE队列时,第一设备可在调度BE队列集合时根据预先的调度策略进行调度。在单次队列调度的过程中,第一设备可以先处理DSRR队列集合中任意一个DSRR队列,并在处理完该DSRR队列后根据该DSRR队列剩余的报文余额对BE队列进行处理。下面结合图5,对该实施例提供的用于调度队列的方法进行说明。

S501:第一设备获取DSRR队列集合包括的每个DSRR队列对应的参数和BE队列对应的参数。

举例说明,第一设备可以按照图4对应实施例中的S401的方式获取DSRR队列集合包括的每个DSRR队列对应的参数,还可以获取BE队列对应的参数。DSRR队列和BE队列均可用于传输报文。

举例说明,在单次队列调度中,第一设备可以在处理完DSRR队列集合中一个DSRR队列后就对BE队列进行处理,并在处理完BE队列后再对DSRR队列集合中下一个DSRR队列进行处理。下一个DSRR队列在DSRR队列集合中的调度晚于已经被调度的一个DSRR队列。下面以第一设备对第i个DSRR队列及BE队列进行处理为例进行说明。其中,第i个DSRR队列可以是DSRR队列集合中任意一个DSRR队列。第一设备对DSRR队列集合中的所有DSRR队列进行处理的方法可参见第一设备对第i个DSRR队列的处理方法,不再逐一举例说明。BE队列对应的参数可以包括BE队列对应的报文配额和报文余额。BE队列对应的报文配额表示本次队列调度中该BE队列可出队的报文的总长度,BE队列对应的报文配额等于第i个DSRR队列的报文余额DC[i]与上一次队列调度后该BE队列的报文余额之和。BE队列对应的报文余额表示该BE队列剩余的能够出队的报文长度。BE队列对应的报文余额为BE队列对应的报文配额和BE队列中已出队的报文长度的差值。本实施例中DSRR队列集合包括M个DSRR队列,其中M为大于或等于2的整数。BE队列对应的报文配额用Q[BE]表示,BE队列对应的报文余额用DC[BE]表示。另外,第i个DSRR队列对应的报文余额可以用DC[i]表示,其中,i的取值范围可以表示为1≤i≤M。

当BE队列集合包括多个BE队列时,该步骤获取的为BE队列集合中每个BE队列对应的参数以及多个BE队列之间的调度方法。可选地,当BE队列集合包括多个BE队列时,该步骤还可获取多个BE队列中各BE队列对应的优先级。

S502:第一设备对第i个DSRR队列进行处理,并根据该第i个DSRR队列的报文余额获得BE队列对应的报文配额。

举例说明,第i个DSRR队列可以为上述图2对应的实施例中的第一队列。第一设备可以先对第i个DSRR队列进行处理,具体处理方法可以参见图4对应的实施例中S402-步骤18,此处不再赘述。在处理完第i个DSRR队列后,第一设备可以根据该第i个DSRR对应的报文余额DC[i]获得BE队列对应的报文配额Q[BE]。例如第一设备可以将DC[i]和BE队列在上一次队列调度中对应的报文余额DC[BE]求和,并将求和得到的结果作为本次队列调度的Q[BE]。其中,第i个DSRR队列剩余的报文余额DC[i]可以表示在本次队列调度中该第i个DSRR队列无法充分利用的报文余额,例如可以是该第i个DSRR队列缓存的报文为零时的DC[i],或者是该第i个DSRR队列缓存的报文为零时的报文配额Q2[i]。如果上一次队列调度中BE队列对应的报文余额DC[BE]为0,或者首次对BE队列进行调度,那么BE队列对应的报文配额Q[BE]等于第i个DSRR对应的报文余额DC[i]。

S503:第一设备判断BE队列中是否存在待出队的报文,若BE队列中不存在待出队的报文,则执行S506;若BE队列中存在待出队的报文,则执行S504。

S504:判断BE队列的头报文的长度是否大于BE队列对应的报文余额,若BE队列的头报文的长度大于BE队列对应的报文余额,则执行S507,若BE队列的头报文的长度小于或等于BE队列对应的报文余额,则执行S505。

举例说明,本实施例中可以将BE队列的头报文的长度用L[BE]表示。随着BE队列的头报文的变化,L[BE]也会相应地改变。如果第一设备对BE队列集合进行队列调度,而BE队列集合包括多个BE队列,则上述BE队列的头报文可以是BE队列集合包括的BE队列中出队顺序最前的报文。第一设备对BE队列集合包括的多个BE队列的调度方法可采用其对DSRR队列集合包括的多个DSRR队列的调度方法,或者根据多个BE队列的优先级或多个BE队列的排序,对多个BE队列进行队列调度,在此不再赘述。

举例说明,第一设备可以采用图4对应的实施例包括的S403所示的方法判断BE队列中是否存在待出队的报文。当BE队列中不存在待出队的报文时,第一设备可以执行S506。当BE队列中存在待出队的报文时,第一设备可以继续判断BE队列的头报文的长度是否大于BE队列对应的报文余额DC[BE]。在第一设备首次执行S504时,DC[BE]的值可以等于BE队列对应的报文配额Q[BE]。

举例说明,如果第一设备检测到BE队列的头报文的长度L[BE]小于或等于DC[BE],则说明当前的BE队列对应的报文余额DC[BE]可以满足BE队列的头报文出队的要求,第一设备可以执行S505。如果第一设备检测到L[BE]大于DC[BE],则说明当前的BE队列对应的报文余额DC[BE]无法满足BE队列的头报文出队的要求,即BE队列的头报文无法出队。此时第一设备可以执行S507,即直接处理DSRR队列集合中的下一个DSRR队列,而用于输出BE队列头报文的剩余的报文余额可以累积到下一次调度该BE队列使用。当BE队列中存在长度较长的报文时,BE队列对应的报文余额DC[BE]可以在队列调度中不断累积,从而满足上述长度较长的报文出队的要求,防止BE队列因长度较长的报文不能及时出队而导致拥塞。

在一些可能的实现方式中,为了保证每次对DSRR队列进行调度所耗费的时长相同,第一设备可以在L[BE]大于DC[BE]的情况下执行S507,通过消耗DC[BE](等待根据DC[BE]与端口带宽的比值所获得的时长超时),从而进一步降低DSRR队列对应的时延。

S505:第一设备将BE队列的头报文出队,并将BE队列的报文余额减去BE队列的头报文的长度,执行S503。

在本实施例中,第一设备可以在DC[BE]大于或等于L[BE]时,将BE队列的头报文出队。BE队列的头报文出队后,第一设备可以将DC[BE]和L[BE]做差,并将二者的差值重新赋值给DC[BE]。这样,BE队列的头报文出队后DC[BE]会相应地减少,防止BE队列中缓存的报文无限制出队。例如,BE队列对应的报文余额DC[BE]为500bit,且BE队列的头报文的长度L[BE]为100bit,那么第一设备可以将这个长度为100bit的报文出队,并将DC[BE]更新为400bit。

在完成DC[BE]的更新后,第一设备可以返回执行S504,重新判断BE队列是否为空及BE队列的头报文的长度是否大于更新后的BE队列对应的报文余额。如此,在单次队列调度中,只要BE队列中存在头报文且头报文的长度不大于BE队列对应的报文余额,BE队列中的报文就可以持续出队,从而确保将BE队列中总长度符合要求的多个报文出队,充分利用网络带宽资源。

S506:第一设备消耗BE队列对应的报文余额,且在消耗后执行S507。

举例说明,在一种实现方式中,第一设备可以将BE队列对应的报文余额应用到低优先级队列的调度,在BE队列对应的报文余额被消耗后,执行S507。在另一种实现方式中,在BE队列中不存在待出队的报文时,第一设备可以根据DC[BE]确定本次队列调度需要的等待时长并进行等待。等待时长的确定方式和图4对应的实施例中的S407类似。第一设备在等待时长超时之后,执行S507。

S507:第一设备判断DSRR队列集合中是否存在未被处理的DSRR队列,若DSRR队列集合中仍存在未被处理的DSRR队列,对未被处理的DSRR队列执行S502-S506。

举例说明,在完成对BE队列的调度后,第一设备可以采用图4对应的实施例中的步骤18的方法判断DSRR队列集合中仍存在未被处理的DSRR队列。当DSRR队列集合中存在未被处理的第i+1个DSRR队列时,第一设备可以针对第i+1个DSRR队列执行S502-S506中的方法;当DSRR队列集合包块的所有DSRR队列都完成了队列调度,说明第一设备完成了一次对DSRR队列集合的队列调度,第一设备可以进入下一次队列调度。

在本实施例中,第一设备处理完第i个DSRR队列后,将该第i个DSRR队列对应的报文余额用于调度BE队列缓存的报文。这样,DSRR队列未充分利用的报文余额可用于调度BE队列缓存的报文,从而在设置了DSRR队列集合中多个DSRR队列报文出队的最大速度的前提下,提高网络带宽资源的利用率。

在一些可能的实现方式中,第一设备还可以先调度DSRR队列集合中多个DSRR队列缓存的报文,并在对DSRR队列集合包括的所有DSRR队列被调度后再根据多个DSRR队列剩余的报文余额之和调度BE队列中缓存的报文,即在完成S502后直接执行S507,并在对DSRR队列集合中多个DSRR队列的处理结束后再执行S504。

进一步地,考虑到原本为空的DSRR队列可能在BE队列的报文出队的过程中获取到了新的报文,在一些可能的实现方式中,第一设备在确定DSRR队列为空并根据DC[i]更新DC[BE]后,可以不直接将DC[i]清零。而是在BE队列或DSRR队列的头报文消耗了DC[BE]后,再将DC[i]和DC[BE]同步减去L[BE]。如此,假设BE队列在报文出队的过程中,原本为空的第i个DSRR队列新增了一个报文,只要该报文的长度小于DC[BE]就可以直接出队,不必等待至下次队列调度。

在上述实施例中,对于DSRR队列集合中的多个DSRR队列,第一设备可以设置其报文出队的最快速度,防止某个DSRR队列在其他DSRR队列为空时占用过多的网络带宽资源,从而降低DSRR队列中报文的最大时延,即为DSRR队列中报文提供时延上界的保障。对于BE队列,第一设备可以在保障DSRR队列中报文的时延上界的基础上,为其提供尽可能多的网络带宽资源。

在一些可能的实现方式中,第一设备还可以对一个或多个对网络带宽资源有一定要求但是对时延上界要求不高的队列进行调度。在本申请实施例中,可以将这些队列称为SRR队列。当第一设备对多个SRR队列进行调度时,可以将多个SRR队列统称为SRR队列集合。

在本实施例中,DSRR队列可以是图2或图3对应实施例中的第一队列,SRR队列可以是图2或图3对应实施例中的第三队列,BE队列可以是图2或图3对应实施例中的第四队列,DSRR队列集合可以是图3对应实施例中的第一队列集合。

图6为本申请实施例提供的用于调度队列的方法的流程图。在该实施例中,第一设备可以对DSRR队列集合中的多个DSRR队列进行队列调度。在单次队列调度的过程中,第一设备可以先处理DSRR队列集合中的多个DSRR队列,然后处理SRR队列,最后再处理BE队列。下面结合6,对该实施例提供的用于调度队列的方法进行说明。

S601:第一设备获取DSRR队列集合包括的每个DSRR队列对应的参数、SRR队列集合包括的每个SRR队列对应的参数和BE队列对应的参数。

举例说明,第一设备除了按照图5对应的实施例中的S501所示的方式获取DSRR队列集合包括的每个DSRR队列对应的参数和BE队列对应的参数,还可以获取SRR队列集合包括的每个SRR队列对应的参数。SRR队列对应的参数可以包括该SRR队列对应的报文子配额、理论报文子配额、报文配额和报文余额。下面以SRR队列集合包括第一SRR队列为例,对SRR队列对应的参数进行说明。第一SRR队列对应的报文子配额表示一次对队列调度中该第一SRR队列额外增加的可出队的报文的总长度,第一SRR队列对应的报文子配额为该第一SRR队列的理论报文子配额和第i个DSRR队列的报文余额中较小的数值。例如,第一SRR队列的理论报文子配额为1000bit,但是在某次队列调度中,第i个DSRR队列对应的报文余额为500bit,那么在本次队列调度中,该第一SRR队列的报文子配额为500bit。第一SRR队列对应的理论报文子配额可以为预先设置的每次队列调度时第一SRR队列能够出队的最大报文长度。第一SRR队列对应的报文配额可以是第一SRR队列对应的报文子配额和上一次队列调度中该第一SRR队列的报文余额之和。第一SRR队列对应的报文余额可以表示该第一DSRR队列剩余的能够出队的报文长度。与DSRR队列类似,在本申请实施例中,第一SRR队列对应的报文余额可以为第一SRR队列对应的报文配额和第一SRR队列中已出队的报文长度的差值。

举例说明,DSRR队列集合包括N个DSRR队列,SRR队列集合包括M个SRR队列,其中N为大于或等于2的整数,M为大于或等于1的整数。M个SRR队列中第j个SRR队列对应的报文子配额用Q1[j]表示,该第j个SRR队列对应的理论报文子配额用Q1*[j]表示,该第j个SRR队列对应的报文配额用Q2[j]表示,该第j个SRR队列对应的报文余额用DC[j]表示。另外,第i个DSRR队列对应的报文余额可以用DC[i]表示,BE队列对应的报文配额和报文余额可以分别用Q[BE]和DC[BE]表示。其中,i的取值范围可以表示为1≤i≤N,j的取值范围可以表示为1≤j≤M。

S602:第一设备对DSRR队列集合中第i个DSRR队列进行处理。

举例说明,第一设备可以先对第i个DSRR队列进行处理,具体处理方法可以参见图4对应的实施例中S402-步骤18,此处不再赘述。

S603:第一设备判断第i个DSRR队列的报文余额是否大于0,若第i个DSRR队列的报文余额等于0,则执行S611;若DSRR队列第i个DSRR队列的报文余额大于0,则执行S604。

S604:判断SRR队列集合中是否包括缓存有待出队报文的SRR队列,若SRR队列集合中包括缓存有待出队报文的SRR队列,则执行S605,若SRR队列集合中所有SRR队列均为空队列(未缓存有待出队的报文),则执行S606。

举例说明,在完成对第i个DSRR队列的队列调度后,第一设备可以先判断第i个DSRR队列的报文余额DC[i]是否等于零。如果DC[i]等于零,则说明该第i个DSRR队列不存在未被消耗的报文余额,第一设备无法再利用DC[i]调度SRR队列集合中任意一个SRR队列和BE队列缓存的报文出队。之后,第一设备执行S610,对下一个DSRR队列进行处理或进入下次对DSRR队列集合的队列调度。如果DC[i]大于零,则说明该第i个DSRR队列存在未被消耗掉的报文余额,第一设备可以利用DC[i]调度SRR队列集合中的SRR队列和BE队列缓存的报文出队。第一设备可以继续判断SRR队列集合中是否包括缓存有待出队报文的SRR队列。如果SRR队列集合包括的所有SRR队列均为空队列,则说明第一设备无法利用DC[i]调度SRR队列集合中任意一个SRR队列缓存的报文出队,第一设备可以执行S606。如果SRR队列集合包括的至少一个SRR队列缓存有待出队的报文,则第一设备可以利用DC[i]调度SRR队列集合中缓存有待出队的报文的SRR队列,第一设备可以执行S605。

S605:第一设备根据该第i个DSRR队列对应的报文余额对SRR队列集合中多个SRR队列进行处理。

举例说明,第一设备可以根据DC[i]对SRR队列集合中的一个或多个多个SRR队列进行队列调度。当DC[i]大于或等于SRR队列集合包括的所有SRR队列对应的报文配额时,第一设备可以根据DC[i]对SRR队列集合进行一次或多次队列调度;当DC[i]小于SRR队列集合包括的所有SRR队列对应的报文配额时,第一设备无法利用DC[i]对SRR队列集合中的所有SRR队列进行一次队列调度,只能对SRR队列集合中部分SRR队列进行队列调度。下面结合图7提供的方法,对第一设备调度SRR队列集合中的SRR队列为例进行说明。图7为本申请实施例提供的用于调度队列的方法的流程示意图。下面以第一设备对SRR队列集合中的第j个SRR队列进行处理为例进行说明。其中,第j个SRR队列可以是SRR队列集合中任意一个SRR队列。第一设备对SRR队列集合中的所有SRR队列进行处理的方法可参见第一设备对第j个SRR队列的处理方法,不再逐一举例说明。

S6051:第一设备判断第j个SRR队列中是否存在待出队的报文,若该第j个SRR队列中不存在待出队的报文,则执行S6057,若该第j个SRR队列中存在待出队的报文,则执行S6052。

举例说明,第一设备可以采用图4对应的实施例中S403的方法判断该第j个SRR队列中是否存在待出队的报文。当第j个SRR队列中存在待出队的报文时,第一设备可以执行S6052;当第j个SRR队列中不存在待出队的报文时,第一设备可以执行S6057。

S6052:第一设备根据第j个SRR队列对应的理论报文子配额确定该第j个SRR队列对应的报文子配额,并根据该第j个SRR队列对应的报文子配额更新该第j个SRR队列对应的报文配额和该第i个DSRR队列对应的报文余额。

举例说明,在第j个SRR队列中存在待出队的报文时,第一设备可以选择该第j个SRR对应的理论报文子配额Q1*[j]和该第i个DSRR队列对应的报文余额DC[i]中较小的数值作为该第j个SRR队列对应的报文子配额Q1[j]。第一设备可以根据Q1[j]更新该第j个SRR队列对应的报文配额Q2[j]和该第i个DSRR队列对应的报文余额DC[i]。具体地,第一设备可以先对Q1[j]和上一次队列调度第j个SRR队列对应报文余额DC[j]求和,并将求和得到的结果赋值给Q2[j]。第一设备还可以将第i个DSRR队列对应的报文余额DC[i]和第j个SRR队列对应的报文子配额Q1[j]做差,并将做差得到的结果重新赋值给第i个DSRR队列对应的报文余额DC[i]。这样,在Q2[j]增加的同时,DC[i]会同步减少,相当于第一设备从第i个DSRR队列未充分利用的报文余额中取出了值为Q1[j]的报文余额,并将这部分值为Q1[j]且未充分利用的报文余额转移至Q2[j],用于后续对第j个SRR队列进行队列调度。例如,在某次队列调度中DC[i]为2000bit,Q1*[j]为1000bit,该第j个SRR队列在上一次队列调度中获取的报文余额DC[j]为10bit。在本次队列调度中,该第j个SRR队列对应的报文子配额Q1[j]为1000bit,该第j个SRR队列对应的报文配额Q2[j]为1000+10=1010bit,该第i个DSRR队列对应的报文余额DC[i]为2000-1000=1000bit。

S6053:第一设备判断第j个SRR队列的头报文的长度是否大于该第j个SRR队列对应的报文余额,若该第j个SRR队列的头报文的长度大于该第j个SRR队列对应的报文余额,则执行S6057,若该第j个SRR队列的头报文的长度小于或等于该第j个SRR队列对应的报文余额,则执行S6054。

举例说明,与DSRR队列和BE队列类似,SRR队列中缓存的报文按顺序出队。当SRR队列中存在至少一个待出队的报文时,可以将待出队的报文中处于队首位置的报文称为头报文。第j个SRR队列的头报文的长度用L[j]表示。随着第j个SRR队列的头报文的变化,L[j]也会相应地改变。如果第j个SRR队列的头报文的长度L[j]小于或等于DC[j],则说明该第j个SRR队列对应的报文余额可以满足该第j个SRR队列的头报文出队的要求,第一设备可以执行S6054。如果L[j]大于DC[j],则说明第j个SRR队列对应的报文余额无法满足该第j个SRR队列的头报文出队的要求,即该第j个SRR队列的头报文无法出队,第一设备可以执行S6057。当该第j个SRR队列中存在长度较长的报文时,DC[j]可以在第一设备对SRR队列集合的多次队列调度中不断累加,从而满足长度较长的报文的出队需求,防止该第j个SRR队列因为该长度较长的报文无法及时发送导致拥塞。其中,在第一设备首次执行S6053时,DC[j]的值可以等于该第j个SRR队列对应的报文配额Q2[j]。

S6054:第一设备调度该第j个SRR队列的头报文出队,并将该第j个SRR队列对应的报文余额DC[j]减去该第j个SRR队列的头报文的长度L[j]。

举例说明,在确定L[j]小于或等于DC[j]后,第一设备可以将该第j个SRR队列的头报文出队,并将DC[j]和L[j]做差,并将二者的差值重新赋值给DC[j],以对DC[j]进行更新。

S6055:第一设备判断该第j个SRR队列中是否存在待出队的报文,若该第j个SRR队列中不存在待出队的报文,则执行S6056;若该第j个SRR队列中存在待出队的报文,则执行S6053。

举例说明,在完成DC[j]的更新后,第一设备可以重新采用图4对应的实施例提供的S403的方法判断该第j个SRR队列中是否存在待出队的报文,并在该第j个SRR队列中存在待出队的报文时返回执行S6053,判断该第j个SRR队列新的头报文是否可以出队。若该第j个SRR队列中不存在待出队的报文,第一设备可以执行S6056。

举例说明,在对SRR队列集合的单次队列调度中,该第j个SRR队列中存在头报文且头报文的长度不大于该第j个SRR队列对应的报文余额,该第j个SRR队列中的报文就可以持续出队,那么第一设备可以将该第j个SRR队列中总长度符合要求的多个报文出队,充分利用网络带宽资源。

S6056:第一设备根据该第j个SRR队列对应的报文余额更新第i个DSRR队列对应的报文余额。

举例说明,在确定第j个SRR队列中不存在待出队的报文后,第一设备可以根据DC[j]对DC[i]进行更新。例如,第一设备可以对DC[j]和DC[i]求和,并将求和得到的结果重新赋值给DC[i],以对DC[i]进行更新。在完成对DC[i]的更新后,第一设备可以结束对该第j个SRR队列的调度,执行S6057。

举例说明,当第j个SRR队列中不存在待出队的报文时,第一设备无法通过调度该第j个SRR队列缓存的报文出队消耗该第j个SRR队列对应的报文余额。DC[j]相对该第j个SRR队列而言属于多余的报文余额。因此,第一设备可以将DC[j]的值转移至DC[i],以便SRR队列集合中其他SRR队列利用该第j个SRR队列无法消耗的报文余额。

S6057:第一设备判断SRR队列集合中是否存在未被处理的SRR队列,若SRR队列集合中仍存在未被处理的SRR队列,则未被处理的SRR队列执行S6051,若SRR队列集合中不存在未被处理的SRR队列,则执行S604。

举例说明,在确定L[j]大于DC[j]或第j个SRR队列中不存在待出队的报文后,第一设备可以结束对该第j个SRR队列的队列调度,并判断SRR队列集合中是否仍存在未被处理的SRR队列。例如第一设备可以采用图4对应的实施例中的S407的方法判断SRR队列集合中仍存在未被调度的SRR队列。当SRR队列集合中仍然存在未被调度的SRR队列时,第一设备对未被调度的SRR队列执行S6051-S6056示的方法,直至完成SRR队列集合中全部SRR队列的队列调度。

举例说明,通过循环执行S6051-S6056,第一设备可以对SRR队列集合中的多个SRR队列进行队列调度。当SRR队列集合中不存在未被调度的SRR队列时,说明第一设备已经完成对SRR队列集合中全部的SRR队列的队列调度,本次队列调度结束,那么第一设备可以返回执行S604,判断是否需要对SRR队列集合进行下一次队列调度。

S606:第一设备根据该第i个DSRR队列对应的报文余额确定BE队列对应的报文配额。

举例说明,当SRR队列集合中不存在具有待出队报文的SRR队列且DC[i]不为零时,第一设备无法通过调度SRR队列集合中任意一个SRR队列缓存的报文出队消耗DSRR队列未充分利用的报文余额DC[i]。第一设备可以通过调度BE队列缓存的报文出队消耗DC[i]。

在调度BE队列缓存的报文出队前,第一设备可以先确定BE队列对应的报文配额Q[BE]。第一设备可以将DC[i]和BE队列在上一次处理中剩余的报文余额DC[BE]求和,并将求和得到的结果作为Q[BE],以便进行后续处理。

S607:第一设备判断BE队列中是否存在待出队的报文,若BE队列中不存在待出队的报文,则执行S610;若BE队列中存在待出队的报文,则执行S608。

S608:判断BE队列的头报文的长度是否大于BE队列对应的报文余额,若BE队列的头报文的长度大于BE队列对应的报文余额,则执行S611,若BE队列的头报文的长度小于或等于BE队列对应的报文余额,则执行S609。

与上一实施例类似,第一设备可以采用图5对应的实施例中S503的方式判断BE队列中是否存在待出队的报文。如果BE队列中不存在待出队的报文,则说明第一设备无法通过调度BE队列缓存的报文消耗BE队列对应的报文余额,第一设备可以执行S610。如果BE队列中存在待出队的报文,第一设备可以继续判断BE队列的头报文的长度是否大于BE队列对应的报文余额DC[BE]。如果BE队列的头报文的长度L[BE]小于或等于DC[BE],则说明当前的BE队列对应的报文余额DC[BE]可以满足BE队列的头报文出队的要求,第一设备可以执行S609。如果L[BE]大于DC[BE],则说明当前的BE队列对应的报文余额DC[BE]无法满足BE队列的头报文出队的要求,即BE队列的头报文无法出队。此时第一设备可以执行S611,即直接处理DSRR队列集合中的下一个DSRR队列,而用于输出BE队列头报文的剩余的报文余额可以累积到下一次调度该BE队列中报文出队。如此,当BE队列中存在长度较长的长报文时,BE队列对应的报文余额DC[BE]可以在队列调度中不断累积,从而满足长报文出队的要求,防止BE队列被长度较长的头报文卡住。.

S609:第一设备将BE队列的头报文出队,并将BE队列对应的报文余额减去BE队列的头报文的长度,执行S607。

在BE队列中存在待出队的报文且L[BE]小于或等于DC[BE]时,第一设备可以采用S504所示的方法将BE队列的头报文出队,并更新DC[BE],此处不再赘述。

S610:第一设备消耗BE队列对应的报文余额,且在消耗后执行S611。

举例说明,第一设备可以采用图5对应实施例中S506的方式确定本次队列调度中第i个DSRR队列对应的报文余额,并在该报文余额被消耗后执行S611,此处不再赘述。

S611:第一设备判断DSRR队列集合中是否存在未被处理的DSRR队列,若DSRR队列集合中仍存在未被处理的DSRR队列,对未被处理的DSRR队列执行S604-S610。

在结束对BE队列的调度后,第一设备可以采用图4对应实施例中的步骤18的方法判断DSRR队列集合中仍存在未被处理的DSRR队列。当DSRR队列集合中存在未被处理的DSRR队列时,第一设备可以继续对未被处理的DSRR队列执行S604-38的方法;当DSRR队列集合中全部DSRR队列都得到了处理后,说明第一设备完成了本次对DSRR队列集合的队列调度,第一设备可以进入下一次队列调度。

在本实施例中,第一设备可以对DSRR队列集合、SRR队列集合和BE队列进行调度。通过执行本实施例提供的方法,第一设备可以优先对DSRR队列进行报文调度,并对DSRR队列集合中全部DSRR队列报文出队的最大速度进行设置,从而为对时延上限要求较为严格的报文提供符合要求的转发服务;第一设备还在对DSRR队列进行调度后对SRR队列进行调度,而且对SRR队列调度的步骤和DSRR队列类似,可以在保障DSRR队列正常工作的前提下,为SRR队列分配尽可能多的网络带宽资源;第一设备最后对BE队列进行调度,可以在不影响DSRR队列及SRR队列的前提下,提高网络带宽资源的利用率。

在一些可能的实现方式中,第一设备还可以先调度DSRR队列集合中多个DSRR队列缓存的报文进行处理,并在处理完全部DSRR队列后再根据多个DSRR队列剩余的报文余额对SRR队列集合或BE队列进行处理,即在完成S602后直接执行S611,并在对DSRR队列集合中多个DSRR队列的处理结束后再执行S604。

为了平衡SRR队列集合中多个SRR队列获得的网络带宽资源,在跳出步骤34后,第一设备可以记录本次对SRR队列的调度进度,以便在下次执行步骤34时,继续前次对SRR队列的调度进度进行调度。

具体地,第一设备可以利用第j个SRR队列对应的剩余报文子配额代替理论报文子配额Q1*[j]确定Q1[j]。其中,第j个SRR队列对应的剩余报文子配额表示在本次对SRR队列集合的队列调度中,第一设备能够为该第j个SRR队列分配的剩余的报文子配额。本申请实施例将第j个SRR队列对应的剩余报文子配额用LQ1[j]表示。

在每次对SRR队列集合进行队列调度前,第一设备可以将SRR队列集合中每个SRR队列对应的剩余报文子配额调整为该第j个SRR队列对应的理论报文子配额,即将LQ1[j]的初始值设为Q1*[j]。在对SRR队列集合中第j个SRR队列进行调度时,第一设备可以先根据LQ1[j]和DC[i]确定Q1[j],并根据Q1[j]确定Q2[j]。第一设备还可以将LQ1[j]和Q1[j]做差,并将做差得到的结果重新赋值给LQ1[j]。那么,当该第j个SRR队列被分配到新的报文子配额后,LQ1[j]可以相应地减少。由于第一设备可以选择DC[i]和LQ1[j]中较小的作为Q1[j]。因此,随着LQ1[j]的不断减少,当LQ1[j]的值为零时,得到的Q1[j]为零,该第j个SRR队列无法被分配到新的报文子配额。那么,在单次对SRR队列集合的队列调度中,该第j个SRR队列中最多有总长度为Q1*[j]的报文可以出队。第一设备可以采用上述对第j个SRR队列进行处理的方法对SRR队列集合中多个SRR队列进行处理。在处理完SRR队列集合中全部SRR队列后,本次对SRR队列集合的队列调度结束,第一设备可以进入下一次对SRR队列集合的队列调度。

LQ1[j]表示该第j个SRR队列剩余的额外增加的可出队的报文的总长度的最大值,说明第一设备在本次对SRR队列集合的队列调度中还需要为第j个SRR队列分配长度为LQ1[j]的报文子配额才能完成对该第j个SRR队列的处理。这样一来,第一设备在为SRR队列分配新的报文子配额时相应地更新剩余报文子配额,相当于在SRR队列集合中多个SRR队列对应的剩余报文子配额中记录了本次第一设备对SRR队列集合的队列调度的进度。如此,虽然每次第一设备对SRR队列集合的队列调度仍然可能因DC[i]不足而中断,但是每次对SRR队列集合的队列调度中断时的进度会被保存在SRR队列集合中多个SRR队列对应的剩余报文子配额中。当第一设备再次执行步骤34时,第一设备可以继续上次处理的进度对SRR队列集合进行队列调度。如此,虽然第一设备对SRR队列集合的队列调度仍然依赖DSRR队列未充分利用的报文余额,但是第一设备对SRR队列集合的队列调度的具体过程并不会受到第一设备对DSRR队列集合的队列调度的进度的影响,即第一设备对SRR队列集合的队列调度和对DSRR队列集合的队列调度相互独立,从而保证SRR队列集合中多个SRR队列分配的网络带宽资源的比例与多个SRR的理论报文子配额的比例一致。

例如,假设SRR队列包括SRR队列A和SRR队列B,SRR队列A对应的理论报文子配额Q1*[A]为800bit,SRR队列B对应的理论报文子配额Q1*[B]为700bit。在开始对SRR队列集合的队列调度前,第一设备可以先确定SRR队列A的剩余报文子配额LQ1[A]为800bit,SRR队列B的剩余报文子配额LQ1[B]为700bit。

在第一设备对DSRR队列集合中第i个DSRR队列进行处理后,该第i个DSRR队列对应的报文余额Q[i]为500bit。由于LQ1[A]大于DC[i],第一设备可以确定SRR队列A的报文子配额Q1[A]为500bit,并将LQ1[A]和Q1[A]做差,将做差得到的结果重新赋值给LQ1[A]。在完成本次对SRR队列集合的处理后,LQ1[A]变更为300bit,由于第一设备未分配给SRR队列B报文子配额(第一设备在本次队列调度时并未对队列B进行调度),LQ1[B]仍为700bit。

在第一设备对第k个DSRR队列进行处理后,该第k个DSRR队列对应的报文余额Q[k]为800bit。此时LQ1[A]小于DC[k],第一设备可以确定Q1[A]为300bit,并将DC[k]更新为500bit。在完成对SRR队列A的处理后,第一设备可以对SRR队列B进行处理。由于LQ1[B]大于DC[k],第一设备可以确定SRR队列B对应的报文子配额Q1[B]为500bit,并将LQ1[B]更新为200bit。在完成本次对SRR队列集合的调度后,LQ1[A]变更为0bit,LQ1[B]变更为200bit。

在第一设备对第n队列进行处理后,该第n个DSRR队列对应的报文余额Q[n]300bit。此时LQ1[A]为零,第一设备不对SRR队列A进行处理,直接对SRR队列B进行处理。由于LQ1[B]小于DC[n],第一设备可以确定Q1[B]为200bit,并将LQ1[B]更新为0bit、将DC[n]更新为100bit。在完成对SRR队列B的处理后,第一设备可以根据LQ1[A]和LQ1[B]的值均为0确定本次对SRR队列集合的队列调度结束。那么,第一设备可以重新将LQ1[A]更新为800bit,将LQ1[B]更新为700bit,并根据DC[n]对SRR队列A和SRR队列B进行处理,从而进入下一次对SRR队列集合的队列调度。

在一些可能的实现方式中,考虑到多个SRR队列之间平均分配的原则,第一设备还可以根据SRR队列集合中每个SRR队列对应的预设权重和DSRR队列对应的报文余额确定SRR队列集合中每个SRR队列对应的报文子配额。具体地,第一设备可以将第j个SRR队列对应的预设权重和第i个DSRR队列对应的报文余额DC[i]相乘,得到该第j个SRR队列对应的报文子配额Q1[j]。其中,预设权重可以由技术人员主动配置,也可以由第一设备根据SRR队列集合中每个SRR队列对应的理论报文子配额确定。例如,第一设备先对SRR队列集合中多个SRR队列分别对应的多个理论报文子配额进行求和,并计算各个SRR队列的理论报文子配额在理论报文子配额之和中所占的比例,将这一比例作为SRR队列的预设权重。例如,假设某SRR队列集合包括SRR队列A和SRR队列B,SRR队列A对应的理论报文子配额Q1*[A]为1000bit,SRR队列B对应的理论报文子配额Q1*[B]为1500bit。在某次队列调度中,DSRR队列集合中第i个DSRR队列对应的报文余额DC[i]为500bit。由于Q1*[A]与Q1*[B]的比例为2:3,那么第一设备在确定SRR队列A和SRR队列B各自对应的报文子配额时,可以将DC[i]的五分之二分作为SRR队列A对应的报文子配额,将DC[i]的五分之三作为SRR队列B对应的报文子配额。那么SRR队列A对应的报文子配额为200bit,SRR队列B对应的报文子配额为300bit。

参见图8,本申请实施例还提供了一种用于队列调度的装置800,所述装置800可设于第一设备,以执行图2所示实施例中的步骤S201和步骤S202。该第一设备还可以是该装置800可以包括第一获取单元801和第一调度单元802。其中,第一获取单元801可以用于执行图2所示实施例中的步骤S201,第一调度单元802可以用于执行图2所示实施例中的步骤S202。具体地,第一获取单元801,用于对第一队列进行调度时,获取第一报文余额,所述第一报文余额用于表示所述第一队列能够出队的报文量。第一调度单元802,根据所述第一报文余额,对第二队列进行调度。其中,第一调度单元801具体用于在第一报文余额被消耗之后,对第二队列进行调度。或者第一调度单元801具体用于在第一报文余额小于第一队列缓存的头报文的报文量时,对第二队列进行调度。本申请实施例的设于第一设备的装置800还可用于实现图4至图7对应的实施例中以单个队列为单位进行队列调度的相应方法。

举例说明,第一报文余额为第一报文配额与第一队列中已出队的报文量的差值,第一报文配额为预先设置的每次队列调度时第一队列能够出队的总报文量与前一次调度第一队列时获取的第一报文余额之和,装置800还包括:第二调度单元803,用于在第一调度单元801对第二队列进行调度之前,调度第一队列缓存的报文出队;第一消耗单元804,用于在第一队列缓存的报文量为0时,消耗第一报文余额;第三调度单元805,用于在消耗第一报文余额的过程中,对第三队列进行调度或者调度第一队列处于等待状态。

举例说明,第一报文余额为第一报文配额与第一队列中已出队的报文量的差值,第一报文配额为预先设置的每次队列调度时第一队列能够出队的总报文量与前一次调度第一队列时获取的第一报文余额之和,装置800还包括:第二调度单元803,用于在第一调度单元801对第二队列进行调度之前,调度第一队列缓存的报文出队,第一队列缓存的报文量为M1,M1为大于或等于1的整数;第一消耗单元804,用于在第一队列缓存的报文量M2大于第一报文余额时,消耗第一报文余额,M2小于或等于M1,第一队列中已出队的报文量为M1与M2的差值;第三调度单元805,用于在消耗第一报文余额的过程中,对第三队列进行调度或者调度第一队列处于等待状态。

举例说明,第一报文余额为第一报文配额与第一队列中已出队的报文量的差值,第一报文配额为预先设置的每次队列调度时第一队列能够出队的总报文量,装置800还包括:第二调度单元803,用于在第一调度单元801对第二队列进行调度之前,调度第一队列缓存的报文出队,第一队列缓存的报文量为M1,M1为大于或等于1的整数;第一消耗单元804,用于在第一队列缓存的报文量为0时,消耗第一报文余额;第三调度单元805,用于在消耗第一报文余额的过程中,对第三队列进行调度或者调度第一队列处于等待状态。

举例说明,第一队列中缓存的报文量为0,第一报文余额为第一报文配额,第一报文配额为预先设置的每次队列调度时第一队列能够出队的总报文量,装置800还包括:第二消耗单元806,用于对第二队列进行调度之前,在第一队列缓存的报文量为0时,消耗第一报文余额;第三调度单元805,用于在消耗第一报文余额的过程中,对第三队列进行调度或者调度第一队列处于等待状态。

具体地,第三调度单元805可采用下述几种方式对第三队列进行调度。

方式一,第三调度单元805具体用于获取第二报文配额,第二报文配额为预先设置的每次队列调度时第三队列能够出队的总报文量;第三调度单元805具体用于在第一报文余额大于第二报文配额时,消耗第二报文配额,以调度第三队列缓存的报文出队。在一种实现方式中,在第三队列被调度之后,装置800还包括:第二获取单元807,用于获取第二报文余额,第二报文余额为第一报文余额与第二报文配额的差值;第三消耗单元806,用于消耗第二报文余额,以调度第四队列缓存的报文出队。其中,第四队列可以是优先级低于第三队列的队列,或者是调度顺序位于第三队列之后的队列。

方式二,第三调度单元805具体用于获取第二报文配额,第二报文配额为预先设置的每次队列调度时第三队列能够出队的总报文量;第三调度单元805具体用于在第一报文余额小于或等于第二报文配额时,消耗第一报文余额,以调度第三队列缓存的报文出队。

方式三,第三调度单元805具体用于获取第二报文配额和第三报文配额,第二报文配额为预先设置的每次队列调度时第三队列能够出队的总报文量,第三报文配额为第一报文余额与预设权重的乘积,预设权重大于0且小于1;第三调度单元805具体用于在第三报文配额大于第二报文配额时,消耗第二报文配额,以调度第三队列缓存的报文出队。在一种实现方式中,在第三队列被调度之后,装置800还包括:第三获取单元808,用于获取第三报文余额,第三报文余额为第三报文配额与第二报文配额的差值;第四消耗单元809,用于消耗第三报文余额,以调度第四队列缓存的报文出队。其中,第四队列可以是优先级低于第三队列的队列,或者是调度顺序位于第三队列之后的队列。

方式四,第三调度单元805具体用于获取第二报文配额和第三报文配额,第二报文配额为预先设置的每次队列调度时第三队列能够出队的总报文量,第三报文配额为第一报文余额与预设权重的乘积,预设权重大于0且小于1;第三调度单元805具体用于在第三报文配额小于或等于第二报文配额时,消耗第三报文配额,以调度第三队列缓存的报文出队。

参见图9,本申请实施例还提供了一种针对队列集合的用于调度队列的装置900,装置900用于第一设备,该第一设备可以执行图3所示实施例中的步骤S301和步骤S302。该装置900可以包括第一获取单元901和第一调度单元902。其中,第一获取单元901可以用于执行图3所示实施例中的步骤S301,第一调度单元902可以用于执行图3所示实施例中的步骤S302。具体地,第一获取单元901,用于在对队列集合进行第N次调度时,获取第一报文余额,队列集合包括第一队列和第二队列,第一报文余额用于表示第一队列和第二队列能够出队的报文量,N为大于或等于1的整数;第一调度单元902,用于在第一报文余额被消耗后,对队列集合进行第N+1次调度。本申请实施例的设于第一设备的装置900还可用于实现图4至图7对应的实施例中以包括多个队列的队列集合为单位进行队列调度的相应方法。

在一种可能的实现方式中,第一报文余额包括第二报文余额和第三报文余额,第二报文余额为第二报文配额和第一队列已出队的报文量的差值,第二报文配额为预先设置的每次队列集合调度时第一队列能够出队的总报文量与前一次队列集合调度时获取的第二报文余额之和,第三报文余额为第三报文配额和第二队列已出队的报文量的差值,第三报文配额为预先设置的每次队列集合调度时第二队列能够出队的总报文量与前一次队列集合调度时获取的第三报文余额之和,装置900还包括:第二调度单元903,用于在第一调度单元902对队列集合进行第N+1次调度之前,调度第二队列缓存的报文出队,第二队列在每次队列集合调度时的调度晚于第一队列的调度;第一消耗单元904,用于在第二队列缓存的报文量为0时,消耗第一报文余额;第三调度单元905,用于在消耗第一报文余额的过程中,对第三队列进行调度或者调度队列集合处于等待状态。

在一种可能的实现方式中,第一报文余额包括第二报文余额和第三报文余额,第二报文余额为第二报文配额和第一队列已出队的报文量的差值,第二报文配额为预先设置的每次队列集合调度时第一队列能够出队的总报文量与前一次队列集合调度时获取的第二报文余额之和,第三报文余额为第三报文配额和第二队列已出队的报文量的差值,第三报文配额为预先设置的每次队列集合调度时第二队列能够出队的总报文量与前一次队列集合调度时获取的第三报文余额之和,装置900还包括:第二调度单元903,用于在第一调度单元902对队列集合进行第N+1次调度之前,调度第二队列缓存的报文出队,第二队列缓存的报文量为M1,M1为大于或等于1的整数,第二队列在每次队列集合调度时的调度晚于第一队列的调度;第一消耗单元904,用于在第二队列缓存的报文量M2大于第三报文余额时,消耗第一报文余额,M2小于或等于M1,第一队列中已出队的报文量为M1与M2的差值;第三调度单元905,用于在消耗第一报文余额的过程中,对第三队列进行调度或者调度队列集合处于等待状态。

在一种可能的实现方式中,第一报文余额包括第二报文余额和第三报文余额,第二报文余额为第二报文配额和第一队列已出队的报文量的差值,第二报文配额为预先设置的每次队列集合调度时第一队列能够出队的总报文量,第三报文余额为第三报文配额和第二队列已出队的报文量的差值,第三报文配额为预先设置的每次队列集合调度时第二队列能够出队的总报文量,装置900还包括:第二调度单元903,用于在第一调度单元902对队列集合进行第N+1次调度之前,调度第二队列缓存的报文出队,第二队列在每次队列集合调度时的调度晚于第一队列的调度;第一消耗单元904,用于在第二队列缓存的报文量为0时,消耗第一报文余额;第三调度单元905,用于在消耗第一报文余额的过程中,对第三队列进行调度或者调度队列集合处于等待状态。

在一种可能的实现方式中,第一报文余额包括第二报文余额和第三报文余额,第二报文余额为第二报文配额和第一队列已出队的报文量的差值,第二报文配额为预先设置的每次队列集合调度时第一队列能够出队的总报文量,第三报文余额为第三报文配额和第二队列已出队的报文量的差值,第三报文配额为预先设置的每次队列集合调度时第二队列能够出队的总报文量,装置900还包括:第二调度单元903,用于在第一调度单元902对队列集合进行第N+1次调度之前,调度第二队列缓存的报文出队,第二队列缓存的报文量为M1,M1为大于或等于1的整数,第二队列在每次队列集合调度时的调度晚于第一队列的调度;第一消耗单元904,用于在第二队列缓存的报文量M2大于第三报文余额时,消耗第一报文余额,M2小于或等于M1,第一队列中已出队的报文量为M1与M2的差值;第三调度单元905,用于在消耗第一报文余额的过程中,对第三队列进行调度或者调度队列集合处于等待状态。

在一种可能的实现方式中,第一队列和第二队列中缓存的报文量为0,第一报文余额包括第二报文余额和第三报文余额,第二报文余额为第二报文配额和第一队列已出队的报文量的差值,第二报文配额为预先设置的每次队列集合调度时第一队列能够出队的总报文量,第三报文余额为第三报文配额和第二队列已出队的报文量的差值,第三报文配额为预先设置的每次队列集合调度时第二队列能够出队的总报文量,装置900还包括:第一消耗单元904,用于对队列集合进行第N+1次调度之前,在第二队列缓存的报文量为0时,消耗第一报文余额,第二队列在每次队列集合调度时的调度晚于第一队列的调度;第三调度单元905,用于在消耗第一报文余额的过程中,对第三队列进行调度或者调度队列集合处于等待状态。

具体地,本申请实施例中的第三调度单元905可采用以下几种方式对第三队列进行调度。方式一,第三调度单元905具体用于获取第四报文配额,第四报文配额为预先设置的每次调度时第三队列能够出队的总报文量;第三调度单元905具体用于在第一报文余额大于第四报文配额时,消耗第四报文配额,以调度第三队列缓存的报文出队。在一种可能的实现方式中,装置900还包括:第二获取单元906,用于获取第四报文余额,第四报文余额为第一报文余额与第四报文配额的差值;第二消耗单元907,用于消耗第四报文余额,以调度第四队列缓存的报文出队。其中,第四队列可以是优先级低于第三队列的队列,或者是调度顺序位于第三队列之后的队列。方式二,第三调度单元905,用于获取第四报文配额,第四报文配额为预先设置的每次调度时第三队列能够出队的总报文量;在第一报文余额小于或等于第四报文配额时,消耗第一报文余额,以调度第三队列缓存的报文出队。

本申请实施例还提供了一种与用于调度队列的装置800对应的用于调度队列的设备,包括处理器和存储器;所述存储器,用于存储指令;所述处理器,用于执行所述存储器中的所述指令,执行图2所示实施例中提供的、由第一设备执行的用于调度队列的方法。

本申请实施例还提供了一种与用于调度队列的装置900对应的用于调度队列的设备,包括处理器和存储器;所述存储器,用于存储指令;所述处理器,用于执行所述存储器中的所述指令,执行图3所示实施例中提供的、由第一设备执行的用于调度队列的方法。

与装置800对应的用于调度队列的设备,以及与装置900对应的用于调度队列的设备,其硬件结构均可以采用如图10所示的结构。图10为本申请实施例提供的一种设备的结构示意图。请参阅图10所示,设备1000包括:处理器1010、通信接口1020和存储器1030。其中设备1000中的处理器1010的数量可以一个或多个,图10中以一个处理器1010为例。本申请实施例中,处理器1010、通信接口1020和存储器1030可通过总线系统或其它方式连接,其中,图10中以通过总线系统1040连接为例。处理器1010可以是中央处理器(centralprocessing unit,CPU),网络处理器(network processor,NP)或者CPU和NP的组合。在一种实现方式中,处理器101还可为流量管理(traffic management,TM)芯片或者是集成了NP和TM芯片的硬件,TM芯片或者集成了NP和TM芯片的硬件可对TM芯片中的队列执行本申请实施例提供的调度队列的方法。处理器1010还可以进一步包括硬件芯片。上述硬件芯片可以是专用集成电路(application-specific integrated circuit,ASIC),可编程逻辑器件(programmable logic device,PLD)或其组合。上述PLD可以是复杂可编程逻辑器件(complex programmable logic device,CPLD),现场可编程逻辑门阵列(field-programmable gate array,FPGA),通用阵列逻辑(generic array logic,GAL)或其任意组合。存储器1030可以包括易失性存储器(英文:volatile memory),例如随机存取存储器(random-access memory,RAM);存储器1030也可以包括非易失性存储器(英文:non-volatile memory),例如快闪存储器(英文:flash memory),硬盘(hard disk drive,HDD)或固态硬盘(solid-state drive,SSD);存储器1030还可以包括上述种类的存储器的组合。存储器1030存储有操作系统和程序、可执行模块或者数据结构,或者它们的子集,或者它们的扩展集,其中,程序可包括各种操作指令,用于实现各种操作。操作系统可包括各种系统程序,用于实现各种基础业务以及处理基于硬件的任务。总线系统1040可以是外设部件互连标准(peripheral component interconnect,PCI)总线或扩展工业标准结构(extendedindustry standard architecture,EISA)总线等。总线系统1040可以分为地址总线、数据总线、控制总线等,图10中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。

本申请实施例还提供了一种计算机可读存储介质,包括指令,当其在计算机上运行时,使得计算机执行以上方法实施例提供的、由第一设备执行的用于调度队列的方法。

本申请实施例还提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行以上方法实施例提供的、由第一设备执行的用于调度队列的方法。

在本申请所提供的几个实施例中的装置和方法可以通过其它的方式实现。例如,所述单元的划分,仅仅为一种逻辑模块划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成为一个模块。上述单元既可以采用硬件的形式实现,也可以采用软件模块单元的形式实现。所述单元如果以软件模块单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。本申请实施例提供的装置可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。

以上实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照前述实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的范围。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号