一种令牌处理方法和装置与流程

文档序号:12278483阅读:324来源:国知局
一种令牌处理方法和装置与流程

本申请涉及通信技术领域,特别是涉及一种令牌处理方法和装置。



背景技术:

在数据通信网络中,为了防止网络拥塞,需要限制流出网络的流量,使流量以比较均匀的速度向外发送。通过令牌桶算法可以实现网络流量的限制,控制发送到网络上数据的数目,并允许突发数据的发送。

例如,当一个大小为m个字节的数据报文到达时,若令牌桶中当前的令牌数大于或等于m个令牌,则可以消耗令牌桶中m个令牌发送该数据报文,若令牌桶中当前的令牌数少于m个令牌,则将数据报文丢弃,令牌桶中的令牌数保持不变。

然而,在多核系统中,为了实现负载均衡以及提高转发效率,流量会被分发到多个内核上进行转发处理,这样,就会出现多个内核同时访问同一个令牌桶的情况。为了避免因数据竞争而导致数据错误,当某个内核使用令牌桶时,该内核将令牌桶锁定,此时其它内核的转发流程将会暂停,直到该内核对令牌桶访问结束并解除对令牌桶的锁定,其它内核才能继续访问令牌桶。由此,使得原本并行转发的数据报文被串行处理,大大降低了系统性能和转发效率。



技术实现要素:

鉴于上述问题,提出了本申请实施例以便提供一种克服上述问题或者至少部分地解决上述问题的令牌处理方法和装置,能够提高系统性能和转发效率。

一方面,本申请实施例公开了一种令牌处理方法,包括:

控制核周期性地生成令牌,并对令牌桶中的可用令牌数执行增加操作;

转发核接收数据报文,确定所述令牌桶中的可用令牌数大于或者等于所述数据报文的长度值时,转发所述数据报文,并对所述令牌桶中的可用令牌数执行减少操作。

另一方面,本申请实施例公开了一种令牌处理装置,包括:

控制核,用于周期性地生成令牌,并对令牌桶中的可用令牌数执行增加操作;

转发核,用于接收数据报文,确定所述令牌桶中的可用令牌数大于或者等于所述数据报文的长度值时,转发所述数据报文,并对所述令牌桶中的可用令牌数执行减少操作。

本申请实施例至少包括以下优点:

本申请实施例通过将令牌的生成操作与消耗操作分离,分配给不同的内核处理,具体地,将令牌的生成操作分配给控制核处理,令牌的消耗操作分配给转发核处理,转发核不用参与令牌的生成操作,仅需对令牌桶中的令牌执行读取操作和减少操作,由于读取操作和减少操作都是原子操作,整个转发过程不需要对令牌桶进行加锁,从而可以减小系统延迟,提高系统性能和报文转发效率。

附图说明

图1是本申请其中一个实施例的一种令牌处理方法的步骤流程图;

图2是本申请的一种转发核转发数据报文的流程示意图;

图3是本申请的一种控制核周期性生成令牌的流程示意图;

图4是本申请其中一个实施例的一种令牌处理装置的结构框图。

具体实施方式

为使本申请的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本申请作进一步详细的说明。

参照图1,示出了本申请其中一个实施例的一种令牌处理方法的步骤流程图,所述方法具体可以包括如下步骤:

步骤101、控制核周期性地生成令牌,并对令牌桶中的可用令牌数执行增加操作;

步骤102、转发核接收数据报文,确定所述令牌桶中的可用令牌数大于或者等于所述数据报文的长度值时,转发所述数据报文,并对所述令牌桶中的可用令牌数执行减少操作。

在具体应用中,令牌的生成和消耗可以是两个独立的操作,本申请实施例将令牌的生成操作与消耗操作分离,并且分配给不同的内核处理,具体地,将令牌的生成操作分配给控制核处理,令牌的消耗操作分配给转发核处理。转发核不用参与令牌的生成操作,仅需对令牌桶中的令牌执行读取操作和减少操作,由于读取操作和减少操作都是原子操作,整个转发过程不需要对令牌桶进行加锁,从而可以减小系统延迟,提高系统性能和报文转发效率。

在多核系统中,逻辑上可以将CPU的多个内核按照角色进行划分:例如可以划分为控制核、分发核和转发核等。其中,控制核一般为1个,可用于调度任务、响应中断,不参与报文流量转发。分发核一般为1个,可用于完成数据分流和负载均衡的操作。转发核一般为N个,可用于完成报文转发、路径查找、QoS(Quality of Service,服务质量)控制、报文加密、报文封装等操作。可以理解,CPU的多个内核在物理上并没有差异,这种角色上的划分是为了软件设计的需要所做的逻辑划分和命名。本申请实施例对于控制核和转发核的划分和命名方式不加以限制。

在本申请实施例中,所述对所述令牌桶中的可用令牌数执行减少操作的步骤,具体可以包括:

所述转发核将所述令牌桶中的可用令牌数减去所述数据报文的长度值。

在本申请实施例中,通过转发核对数据报文进行转发处理,参照图2,示出了本申请的一种转发核转发数据报文的流程示意图。转发核首先获取数据报文的长度值以及获取令牌桶中的可用令牌数,其中,数据报文的长度值和可用令牌数均可用字节表示,如果可用令牌数对应的字节数大于或者等于数据报文长度值对应的字节数,则转发核可以转发数据报文并且更新令牌桶中的可用令牌数。反之,如果可用令牌数对应的字节数小于数据报文长度值对应的字节数,则丢弃报文,并且保持令牌桶中的可用令牌数不变。

需要说明的是,在本申请实施例中,可以包括多个转发核,在多个转发核需同时消耗令牌时,由于对令牌桶中的可用令牌数执行的读取和减少操作都是原子操作,因此,只有在一个转发核对令牌桶中的可用令牌数执行读取以及减少操作结束后,另一个转发核才可以读取令牌桶中剩余的可用令牌数以及再执行减少操作。例如,如果当前令牌桶中的可用令牌数为1000个字节,而同时有两个转发核需要转发数据报文(这两个数据报文分别为1000个字节),则高优先级的转发核先读取令牌桶中的可用令牌数,可用令牌数为1000,高优先级的转发核转发数据报文,并且更新令牌桶中的令牌数为0;低优先级的转发核再读取令牌桶中的可用令牌数,可用令牌数为0,则低优先级的转发核不能转发数据报文。

可见,转发核不用参与令牌的生成操作,仅需对令牌桶中的令牌执行读取操作和减少操作,由于读取操作和减少操作都是原子操作,整个转发过程不需要对令牌桶进行加锁,从而可以减小系统延迟,提高系统性能和报文转发效率。

在本申请实施例中,所述对令牌桶中的可用令牌数执行增加操作的步骤,具体可以包括:

步骤S11、在循环定时器中断时,所述控制核获取所述令牌桶中的可用令牌数;

步骤S12、所述控制核将所述令牌桶中的可用令牌数加上所述循环定时器的定时间隔内产生的令牌增量。

现有方案中令牌的生成是由报文来触发的,令牌的增减操作嵌入在报文的转发流程中。一个报文到来时,如果令牌桶中没有令牌则触发令牌的增加操作,如果有足够的令牌则取出相应数目的令牌并转发报文。其中,增加令牌需要计算系统时间增量和CIR(令牌的投放速率)的乘积,系统时间增量可以通过获取当前的系统时间以及上次更新令牌数时的系统时间,计算两次时间的差值得到。

在多核系统中,消耗令牌的计算可以采用原子减操作来防止多核并发,而增加令牌时由于需要计算系统时间增量和CIR的乘积,同时还要考虑令牌桶溢出等问题,单纯的原子计算无法实现,因此对令牌增量的计算需要对令牌桶锁定以防止多核并发操作,但是对令牌桶锁定又会影响系统性能和转发效率。

本申请实施例为了解决上述矛盾,将令牌的生成操作分配给控制核,并且令牌的生成不再由报文触发,而是通过控制核周期性地生成令牌,并且控制核不参与数据报文的转发处理,从而可以避免多个内核需要同时执行令牌的增减操作的情况。

在初始化过程中,可以由控制核创建令牌桶,用于存放定时生成的令牌,并且创建循环定时器,用于周期性地产生令牌增量。可以理解,本申请实施例对于创建令牌桶的具体过程不加以限制。

在循环定时器中断到来时,控制核首先获取令牌桶中的可用令牌数CBS_c;然后获取在循环定时器的定时间隔内产生的令牌增量CBS_e,每个周期产生的令牌增量CBS_e可以通过如下公式计算得到:CBS_e=T×CIR;其中,T表示循环定时器的定时间隔,CIR表示令牌的投放速率;最后,将所述令牌桶中的可用令牌数CBS_c加上所述循环定时器的定时间隔内产生的令牌增量CBS_e,即可得到当前令牌桶中的可用令牌数。

由此,本申请实施例中令牌的生成操作可以由循环定时器触发,且定时间隔可自由调控,使得令牌投放的速率更加均匀,不会受到报文到达的频率和时刻的影响,并且在令牌的生成过程中,不需要频繁获取系统时间,简化了令牌增量的计算过程,可以提高系统性能。

在本申请的另一种实施例中,所述方法还可以包括如下步骤:

步骤S13、在所述控制核将所述令牌桶中的可用令牌数加上所述循环定时器的定时间隔内产生的令牌增量之后,得到令牌总数;

步骤S14、若所述令牌总数小于所述令牌桶的最大深度,则所述控制核将所述令牌桶的可用令牌数更新为所述令牌总数;

步骤S15、若所述令牌总数大于或者等于所述令牌桶的最大深度,则所述控制核将所述令牌桶的可用令牌数更新为所述令牌桶的最大深度。

其中,所述令牌桶的最大深度为令牌桶可以容纳的最大令牌数。由于本申请实施例通过定时器触发生成令牌,因此,如果一段时间内没有报文消耗令牌桶中的令牌,控制核仍会周期性地产生令牌,为了避免可用令牌数无限增加,超出令牌桶的最大深度,控制核在对令牌桶中的可用令牌数执行增加操作的过程中,判断令牌总数是否大于或者等于令牌桶的最大深度,如果大于或者等于,则将可用令牌数更新为令牌桶的最大深度;如果小于,则将可用令牌数更新为令牌总数。

参照图3,示出了本申请的一种控制核周期性生成令牌的流程示意图。假设控制核获取令牌桶中的可用令牌数为CBS_c,获取循环定时器的定时间隔内产生的令牌增量为CBS_e,则可以计算得到令牌总数CBS_2=CBS_c+CBS_e;假设令牌桶的最大深度为CBS,则判断CBS_2是否大于或者等于CBS;如果CBS_2≥CBS,则设置CBS_e=CBS-CBS_c,并且将CBS_e加到令牌桶中得到:CBS_c=CBS_c+CBS_e;如果CBS_2<CBS,则直接将CBS_e加到令牌桶中得到:CBS_c=CBS_c+CBS_e。

在本申请的另一种实施例中,所述方法还可以包括如下步骤:

在所述对令牌桶中的可用令牌数执行增加操作之前,所述控制核获取根据预设周期预先设置的令牌增量。

在本申请实施例中,周期性产生的令牌增量的计算过程中涉及到一次乘法计算,即T×CIR,乘法运算不仅会耗费一定的时间,而且无法使用原子操作实现,则需要对令牌增量的计算进行加锁以防止多核并发操作。

然而,由于循环定时中断的时间间隔T是固定的,且预先设置的令牌的投放速率CIR也是固定的,所以每个周期产生的令牌增量CBS_e=T×CIR也是固定不变的。因此,可以在创建循环定时器时预先计算并设置令牌增量CBS_e,控制核在循环定时器中断处理函数中直接获取令牌增量CBS_e即可。而不用每次在执行令牌生成的操作过程中计算CBS_e,从而可以减少中断处理函数的任务量和复杂度,此外,由于不用执行T×CIR乘法操作,控制核对令牌桶的写操作可以使用原子操作,因此,不需要对令牌桶进行加锁,从而可以减小系统延迟,提高系统性能和报文转发效率。

例如,假设用户配置的CIR为2000kbps,定时器的定时周期为1ms,则一个定时周期内产生的令牌数为2000kbps×1ms=2000bit。这个计算结果并不会随着时间变化和报文转发而改变。这样,控制核只需响应定时中断,将获取的令牌桶中的可用令牌数加上定期产生的令牌增量CBS_e,即可完成令牌的生成操作,不仅简化了令牌生成过程,而且不需要对令牌桶进行加锁,可以减小系统延迟,提高系统性能和报文转发效率。

综上,本申请实施例通过将令牌的生成操作与消耗操作分离,分配给不同的内核处理,具体地,将令牌的生成操作分配给控制核处理,令牌的消耗操作分配给转发核处理,其中,令牌的生成操作为原子加操作,在控制核对令牌桶中的可用令牌数执行增加操作结束后,转发核才可以读取令牌桶以及对可用令牌数执行减少操作,避免多个内核同时对令牌执行增减操作。通过本申请实施例,使得转发核不用参与令牌的生成操作,仅需对令牌桶中的可用令牌数执行读取操作和减少操作,由于读取操作和减少操作都是原子操作,整个转发过程不需要对令牌桶进行加锁,从而可以减小系统延迟,提高系统性能和报文转发效率。

此外,本申请实施例将令牌的生成操作分配给控制核处理,使得令牌的生成不再由报文触发,而是通过控制核周期性地生成令牌,并且控制核不参与数据报文的转发处理,从而可以避免多个内核需要同时执行令牌的增减操作的情况,进而可以避免由于多核并发需要对令牌桶进行加锁的情况,从而可以减小系统延迟,提高系统性能和报文转发效率。

再者,本申请实施例中令牌的生成操作可以由循环定时器触发,且定时间隔可自由调控,使得令牌投放的速率更加均匀,不会受到报文到达的频率和时刻的影响,并且在令牌的生成过程中,不需要频繁获取系统时间,简化了令牌增量的计算过程,可以提高系统性能。

需要说明的是,对于方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本申请实施例并不受所描述的动作顺序的限制,因为依据本申请实施例,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作并不一定是本申请实施例所必须的。

参照图4,示出了本申请其中一个实施例的一种令牌处理装置的结构框图,在本申请实施例中,所述装置具体可以包括:

控制核401,用于周期性地生成令牌,并对令牌桶中的可用令牌数执行增加操作;

转发核402,用于接收数据报文,确定所述令牌桶中的可用令牌数大于或者等于所述数据报文的长度值时,转发所述数据报文,并对所述令牌桶中的可用令牌数执行减少操作。

在本申请的一种可选实施例中,所述转发核402,还用于将所述令牌桶中的可用令牌数减去所述数据报文的长度值。

在本申请的另一种可选实施例中,所述控制核401,还用于在循环定时器中断时,获取所述令牌桶中的可用令牌数;以及将所述令牌桶中的可用令牌数加上所述循环定时器的定时间隔内产生的令牌增量。

在本申请的又一种可选实施例中,所述控制核401,还用于在所述令牌桶中的可用令牌数加上所述循环定时器的定时间隔内产生的令牌增量之后,得到令牌总数;若所述令牌总数小于所述令牌桶的最大深度,则将所述令牌桶的可用令牌数更新为所述令牌总数;若所述令牌总数大于或者等于所述令牌桶的最大深度,则将所述令牌桶的可用令牌数更新为所述令牌桶的最大深度。

在本申请的再一种可选实施例中,所述控制核401,还用于在对令牌桶中的可用令牌数执行增加操作之前,获取根据预设周期预先设置的令牌增量。

本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。

关于上述实施例中的装置,其中各个模块执行操作的具体方式已经在有关该方法的实施例中进行了详细描述,此处将不做详细阐述说明。

以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本申请方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。

本领域技术人员在考虑说明书及实践这里公开的发明后,将容易想到本申请的其它实施方案。本申请旨在涵盖本申请的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本申请的一般性原理并包括本公开未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本申请的真正范围和精神由下面的权利要求指出。

应当理解的是,本申请并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本申请的范围仅由所附的权利要求来限制以上所述仅为本申请的较佳实施例,并不用以限制本申请,凡在本申请的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。

以上对本申请所提供的一种令牌处理方法和装置,进行了详细介绍,本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想;同时,对于本领域的一般技术人员,依据本申请的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本申请的限制。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1