缓存的管理方法及装置与流程

文档序号:17158508发布日期:2019-03-20 00:19阅读:159来源:国知局
缓存的管理方法及装置与流程

本发明涉及数据通信领域,尤其涉及一种缓存的管理方法及装置。



背景技术:

网络设备作为数据通信网络中的重要设备,其数据收发的性能和运行的稳定性直接决定了所在网络数据通信的可靠性。网络设备会对不同类型的报文进行转发,如以太报文、广域网报文等,针对每类报文会在设备初始化时分配专用的缓存池,每类报文只能从对应的缓存池中分配缓冲区来承载报文。网络设备通常会为指定类型的报文分配较大的缓存池,为需要转发的非指定类型的其他报文分配较小的缓存池。

由于在处理如组播或镜像等其他类型的报文转发时,容易出现对应的缓存池中缓冲区消耗较快的情形,若对应的缓存池中没有空闲的缓冲区可供使用,就会造成相关业务功能异常。而此时指定类型报文对应的缓存池中可能还有大量空闲的缓冲区,这将导致各缓存池利用率的不合理现象,造成不必要的浪费。



技术实现要素:

本发明提供一种缓存的管理方法及装置,解决了因缓存池分配不合理或者突发业务导致的内存利用率低、报文丢失或业务中断等问题。

第一方面,本发明提供一种缓存的管理方法,包括以下步骤:

为不同种类的报文分别创建对应的缓存池,将指定类型报文对应的缓存池中的部分缓冲区作为共享缓存池;其中,所述指定类型报文对应的缓存池中缓冲区的个数大于其他报文对应的缓存池中的缓冲区的个数;

在其他报文对应的缓存池中申请不到空闲的缓冲区时,从所述共享缓存池中申请缓冲区。

其中,所述将指定类型报文对应的缓存池中的部分缓冲区作为共享缓存池,包括:预设第一位置索引值;将小于等于所述第一位置索引值的所有缓冲区作为本地缓存池,用于所述指定类型报文的收发处理;将大于所述第一位置索引值的所有缓冲区作为所述共享缓存池。

所述将指定类型报文对应的缓存池中的部分缓冲区作为共享缓存池,还包括:预设第二位置索引值;所述第二位置索引值用于指示所述共享缓存池中共享缓冲区设定的最小位置索引值;其中,所述第二位置索引值大于所述第一位置索引值;初始化水线值为所述第二位置索引值,所述水线值用于指示所述共享缓存池中能够用于共享的缓冲区的最小位置索引值。

所述从所述共享缓存池中申请缓冲区,包括:获取所述共享缓存池的缓存池锁;获取所述共享缓存池中位置索引值大于等于所述水线值的空闲缓冲区,设置所述空闲缓冲区为占用状态;释放所述缓存池锁;其中,所述缓存池锁用于所述共享缓存池的互斥处理。

在初始化所述水线值后,所述方法还包括:缩小和或扩大所述共享缓存池;

所述缩小所述共享缓存池,具体包括:获取所述本地缓存池当前的最大位置索引值,并赋值给第三位置索引值;增大所述本地缓存池当前的最大位置索引值,获得所述本地缓存池最新的最大位置索引值;如果所述本地缓存池最新的最大位置索引值小于所述水线值,将大于所述第三位置索引值到小于等于所述本地缓存池最新的最大位置索引值范围内的所有所述缓冲区设置为本地缓存池;如果所述本地缓存池最新的最大位置索引值大于等于所述水线值,获取所述共享缓存池的缓存池锁;设置所述水线值为所述本地缓存池最新的最大位置索引值加一;将大于所述第三位置索引值到小于等于所述本地缓存池最新的最大位置索引值范围内的所有所述缓冲区设置为本地缓存池;释放所述缓存池锁;其中,所述本地缓存池最新的最大位置索引值需小于所述指定类型报文对应的缓存池的最大位置索引值;

所述扩大所述共享缓存池,具体包括:获取所述本地缓存池当前的最大位置索引值,并赋值给第三位置索引值;缩小所述本地缓存池当前的最大位置索引值,获得所述本地缓存池最新的最大位置索引值;其中,所述本地缓存池最新的最大位置索引值需大于等于所述第一位置索引值;获取所述缓存池锁;将大于所述本地缓存池最新的最大位置索引值到小于等于所述第三位置索引值范围内的所有所述缓冲区设置为共享缓存池;如果所述本地缓存池最新的最大位置索引值小于所述第二位置索引值,设置所述水线值为所述第二位置索引值;否则,设置所述水线值为所述本地缓存池最新的最大位置索引值加一;释放所述缓存池锁;其中,所述缓存池锁用于所述共享缓存池的互斥处理。

第二方面,本发明提供一种缓存的管理装置,具体包括:

缓存池创建模块,用于为不同种类的报文分别创建对应的缓存池;其中,指定类型报文对应的缓存池中缓冲区的个数大于其他报文对应的缓存池中的缓冲区的个数;

缓存池管理模块,用于将所述指定类型报文对应的缓存池中的部分缓冲区作为共享缓存池;

缓冲区申请模块,用于在其他报文对应的缓存池中申请不到空闲的缓冲区时,从所述共享缓存池中申请缓冲区。

其中,所述缓存池管理模块,具体用于预设第一位置索引值;将小于等于所述第一位置索引值的所有缓冲区作为本地缓存池,用于所述指定类型报文的收发处理;将大于所述第一位置索引值的所有缓冲区作为所述共享缓存池。

所述缓存池管理模块,还用于预设第二位置索引值;所述第二位置索引值用于指示所述共享缓存池中共享缓冲区设定的最小位置索引值;其中,所述第二位置索引值大于所述第一位置索引值;初始化水线值为所述第二位置索引值,所述水线值用于指示所述共享缓存池中能够用于共享的缓冲区的最小位置索引值。

所述缓冲区申请模块,具体用于获取所述共享缓存池的缓存池锁;获取所述共享缓存池中位置索引值大于等于所述水线值的空闲缓冲区,设置所述空闲缓冲区为占用状态;释放所述缓存池锁;其中,所述缓存池锁用于所述共享缓存池的互斥处理。

在初始化所述水线值后,所述缓存池管理模块,还具体用于缩小和或扩大所述共享缓存池;

所述缩小所述共享缓存池的方式,包括:获取所述本地缓存池当前的最大位置索引值,并赋值给第三位置索引值;增大所述本地缓存池当前的最大位置索引值,获得所述本地缓存池最新的最大位置索引值;如果所述本地缓存池最新的最大位置索引值小于所述水线值,将大于所述第三位置索引值到小于等于所述本地缓存池最新的最大位置索引值范围内的所有所述缓冲区设置为本地缓存池;如果所述本地缓存池最新的最大位置索引值大于等于所述水线值,获取所述共享缓存池的缓存池锁;设置所述水线值为所述本地缓存池最新的最大位置索引值加一;将大于所述第三位置索引值到小于等于所述本地缓存池最新的最大位置索引值范围内的所有所述缓冲区设置为本地缓存池;释放所述缓存池锁;其中,所述本地缓存池最新的最大位置索引值需小于所述指定类型报文对应的缓存池的最大位置索引值;

所述扩大所述共享缓存池的方式,包括:获取所述本地缓存池当前的最大位置索引值,并赋值给第三位置索引值;缩小所述本地缓存池当前的最大位置索引值,获得所述本地缓存池最新的最大位置索引值;其中,所述本地缓存池最新的最大位置索引值需大于等于所述第一位置索引值;获取所述缓存池锁;将大于所述本地缓存池最新的最大位置索引值到小于等于所述第三位置索引值范围内的所有所述缓冲区设置为共享缓存池;如果所述本地缓存池最新的最大位置索引值小于所述第二位置索引值,设置所述水线值为所述第二位置索引值;否则,设置所述水线值为所述本地缓存池最新的最大位置索引值加一;释放所述缓存池锁;其中,所述缓存池锁用于所述共享缓存池的互斥处理。

综上所述,本发明将指定类型的缓存池划分为本地缓存池和共享缓存池,本地缓存池用于指定类型报文的收发处理,共享缓存池用于其他报文对应的缓存池中申请不到空闲的缓冲区时,向其他报文提供共享的缓冲区,用以保障突发业务的正常处理。本发明方法还可以对所述共享缓存池的大小进行动态调整,从而提高缓存池的利用效率,提升设备运行的可靠性。

附图说明

为了更清楚地说明本发明实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本发明的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。

图1示出了本发明实施例提供的一种缓存的管理方法的流程图;

图2示出了本发明实施例提供的一种指定类型报文对应的缓存池;

图3示出了本发明实施例提供的另一种指定类型报文对应的缓存池;

图4示出了本发明实施例提供的一种缩小共享缓存池的示意图;

图5示出了本发明实施例提供的另一种缩小共享缓存池的示意图;

图6示出了本发明实施例提供的一种扩大共享缓存池的示意图;

图7示出了本发明实施例提供的另一种扩大共享缓存池的示意图;

图8示出了本发明实施例提供的一种缓存的管理装置示意图。

具体实施方式

下面将结合本发明实施例中附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。以下对在附图中提供的本发明的实施例的详细描述并非旨在限制要求保护的本发明的范围,而是仅仅表示本发明的选定实施例。基于本发明的实施例,本领域技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本发明保护的范围。

下面通过具体实施例,分别进行详细的说明。

实施例一

本发明实施例提供了一种缓存的管理方法,其处理流程图如图1所示,包括如下步骤:

步骤s101:为不同种类的报文分别创建对应的缓存池,将指定类型报文对应的缓存池中的部分缓冲区作为共享缓存池。

其中,所述指定类型报文对应的缓存池中缓冲区的个数大于其他报文对应的缓存池中的缓冲区的个数。

在本实施例中,以设定字节数的缓冲区为单位,为不同种类的报文分别创建对应的缓存池,每种类型报文对应的缓存池中缓冲区的个数可以不同。其中,缓冲区的大小即设定的字节数可以为2的幂次方。缓冲区用于保存缓冲区描述符和报文。缓冲区描述符中包括:缓冲区的位置索引值、缓冲区属性和使用状态。其中,位置索引值用于指示对应的缓冲区在缓存池中的索引值。位置索引值是自然数,从缓存池的起始缓冲区开始,各缓冲区的位置索引值从零依次递增。缓冲区属性用于指示缓冲区当前是否可用于共享。当缓冲区属性为本地时,表示缓冲区当前仅用于指定类型报文的处理;当缓冲区属性为共享时,表示缓冲区当前可用于其他报文的处理。使用状态用于指示对应的缓冲区当前是否空闲。当使用状态为空闲时,表示缓冲区当前未被使用;当使用状态为占用时,表示缓冲区当前正在使用。为确保不同种类报文的处理效率,可将不同种类报文对应的缓存池申请为物理地址连续的缓存池。

作为本发明的以一个优选实施例,所述指定类型报文可以是以太类型的报文。通过预设的第一位置索引值将指定类型报文对应的缓存池划分为本地缓存池和共享缓存池。如图2所示,指定类型报文对应的缓存池中有n+1个缓冲区,0、1、2……n表示各缓冲区的位置索引值,n为自然数;其中,预设的第一位置索引值为k;将位置索引值小于等于k的所有缓冲区作为本地缓存池,即将位置索引值从0到k的缓冲区作为本地缓存池,用于指定类型报文的收发处理。将大于k的所有缓冲区作为共享缓存池,即将位置索引值从k+1到n的缓冲区作为共享缓存池。其中,本地缓存池中所有缓冲区属性为本地;共享缓存池中所有缓冲区属性为共享。如果指定类型报文对应的缓存池为物理地址连续的缓存池,本地缓存池可以由硬件fpa(freepoolallocatorunit,空闲池分配单元)进行申请和释放。

通过预设的第一位置索引值将指定类型报文对应的缓存池划分为本地缓存池和共享缓存池后,还可以预设第二位置索引值;第二位置索引值用于指示共享缓存池中共享缓冲区设定的最小位置索引值;其中,第二位置索引值大于第一位置索引值;初始化水线值为第二位置索引值,水线值用于指示共享缓存池中能够用于共享的缓冲区的最小位置索引值;其中,水线值可以大于等于第二位置索引值。如图3所示,预设的第二位置索引值为m,水线值初始化为m,则将位置索引值从m到n的缓冲区作为共享缓存池,用于对其他报文提供共享缓冲区。对于位置索引值大于k小于m范围内的所有缓冲区,可作为本地缓存池和共享缓存池之间的弹性区域,虽然其缓冲区属性为共享,正常情况下不能作为共享缓冲区提供给其他报文使用。

步骤s102:在其他报文对应的缓存池中申请不到空闲的缓冲区时,从所述共享缓存池中申请缓冲区。

在其他报文对应的缓存池中申请不到空闲的缓冲区时,获取共享缓存池的缓存池锁;获取共享缓存池中位置索引值大于等于水线值的空闲缓冲区,设置所述空闲缓冲区为占用状态;释放缓存池锁;其中,缓存池锁用于共享缓存池的互斥处理。如图3所示,从共享缓存池中申请缓冲区时,可以在位置索引值从m到n的缓冲区中查找空闲的缓冲区。另一方面,当申请的缓冲区使用完毕需释放时,只需将该缓冲区的状态设置为空闲状态即可。

作为本发明的一种实施例,根据各类报文的接收情况,本发明实施例的缓存的管理方法,还包括:缩小共享缓存池。通过获取本地缓存池当前的最大位置索引值,并赋值给第三位置索引值。增大本地缓存池当前的最大位置索引值,获得本地缓存池最新的最大位置索引值。如果本地缓存池最新的最大位置索引值小于水线值,如图4,示出了缩小共享缓存池之前和之后的本地缓存池:在缩小共享缓存池之前,第三位置索引值等于本地缓存池当前的最大位置索引值k,调整本地缓存池当前的最大位置索引值为j,且j小于水线值m,则本地缓存池最新的最大位置索引值为j。设置位置索引值大于k到小于等于j范围内的所有缓冲区为本地缓存池。此时,共享缓存池的范围缩小为从位置索引值j+1到n的所有缓冲区。但水线值未发生变化,对其他报文提供共享缓冲区的范围仍然为从m到n的缓冲区。

作为本发明缩小共享缓存池的另一实施例,如果本地缓存池最新的最大位置索引值大于等于水线值,如图5,示出了缩小共享缓存池之前和之后的本地缓存池:第三位置索引值等于本地缓存池当前的最大位置索引值k,调整本地缓存池当前的最大位置索引值为l,且l大于水线值m,则本地缓存池最新的最大位置索引值为l。获取共享缓存池的缓存池锁,设置水线值为l+1,将位置索引值大于k到小于等于l范围内的所有缓冲区设置为本地缓存池,释放缓存池锁。则向其他报文提供共享缓冲区的范围更新为从l+1到n的缓冲区。其中,l小于n。增大本地缓存池当前的最大位置索引值时,可采用预设的缓冲区个数或者共享缓存池当前缓冲区个数的一半作为幅度,增大本地缓存池的最大位置索引值。

作为本发明的一种实施例,根据各类报文的接收情况,本发明实施例的缓存的管理方法,还包括:扩大共享缓存池。通过获取本地缓存池当前的最大位置索引值,并赋值给第三位置索引值。缩小本地缓存池当前的最大位置索引值,获得本地缓存池最新的最大位置索引值。其中,所述本地缓存池最新的最大位置索引值需大于等于所述第一位置索引值。获取所述缓存池锁。将大于本地缓存池最新的最大位置索引值到小于等于第三位置索引值范围内的所有缓冲区设置为共享缓存池。如果本地缓存池最新的最大位置索引值小于第二位置索引值,设置水线值为第二位置索引值。否则,设置水线值为本地缓存池最新的最大位置索引值加一。释放缓存池锁。其中,缓存池锁用于所述共享缓存池的互斥处理。如图6,示出了扩大共享缓存池之前和之后的本地缓存池:扩大共享缓存池之前,第三位置索引值等于本地缓存池当前的最大位置索引值l,调整本地缓存池当前的最大位置索引值到t,且t小于第二位置索引值m,则本地缓存池最新的最大位置索引值为t。获取缓存池锁,将位置索引值大于t到小于等于l的所有缓冲区设置为共享缓存池,设置水线值为m,释放缓存池锁。则向其他报文提供共享缓冲区的范围更新为从m到n的缓冲区。

作为本发明扩大共享缓存池的另一种实施例,如果本地缓存池最新的最大位置索引值大于等于第二位置索引值,如图7,示出了扩大共享缓存池之前和之后的本地缓存池:扩大共享缓存池之前,第三位置索引值等于本地缓存池当前的最大位置索引值l。缩小本地缓存池当前的最大位置索引值到s,且s大于第二位置索引值m,则本地缓存池最新的最大位置索引值为s。获取缓存池锁,将位置索引值大于s到小于等于l的所有缓冲区设置为共享缓存池,设置水线值为s+1,释放缓存池锁。此时,向其他报文提供共享缓冲区的范围更新为从s+1到n的缓冲区。缩小本地缓存池当前的最大位置索引值时,可采用预设的缓冲区个数或者共享缓存池中当前缓冲区的个数作为幅度,缩小本地缓存池的最大位置索引值。本实施例中,k、m、l、j、s、t均为小于n的自然数。

本实施例方法将指定类型报文对应的所述缓存池划分部分缓冲区用作共享缓存池,作为其他报文缓存池没有空闲缓冲区时的补充,在不增加内存消耗的前提下,能够提升其他报文在业务突发情况下的可靠性。此外,通过对共享缓存池的动态调整,能够提高缓存池的利用效率。本实施例方法不局限于具体的网络处理芯片,可适用于基于不同网络处理器的网络设备中,具有很好的实用性。

实施例二

本发明实施例提供了一种缓存的管理装置80,其示意图如图8所示,包括:

缓存池创建模块801,用于为不同种类的报文分别创建对应的缓存池;其中,指定类型报文对应的缓存池中缓冲区的个数大于其他报文对应的缓存池中的缓冲区的个数;

缓存池管理模块802,用于将所述指定类型报文对应的缓存池中的部分缓冲区作为共享缓存池;

缓冲区申请模块803,用于在其他报文对应的缓存池中申请不到空闲的缓冲区时,从所述共享缓存池中申请缓冲区。

其中,所述缓存池创建模块801,具体用于以设定字节数的缓冲区为单位,为不同种类的报文分别创建对应的缓存池,每种类型报文对应的缓存池中缓冲区的个数可以不同。其中,缓冲区的大小即设定的字节数可以为2的幂次方。缓冲区用于保存缓冲区描述符和报文。缓冲区描述符中包括:缓冲区的位置索引值、缓冲区属性和使用状态。其中,位置索引值用于指示对应的缓冲区在缓存池中的索引值。位置索引值是自然数,从缓存池的起始缓冲区开始,各缓冲区的位置索引值从零依次递增。缓冲区属性用于指示缓冲区当前是否可用于共享。当缓冲区属性为本地时,表示缓冲区当前仅用于指定类型报文的处理;当缓冲区属性为共享时,表示缓冲区当前可用于其他报文的处理。使用状态用于指示对应的缓冲区当前是否空闲。当使用状态为空闲时,表示缓冲区当前未被使用;当使用状态为占用时,表示缓冲区当前正在使用。为确保不同种类报文的处理效率,可将不同种类报文对应的缓存池申请为物理地址连续的缓存池。

所述缓存池管理模块802,具体用于预设第一位置索引值;将小于等于所述第一位置索引值的所有缓冲区作为本地缓存池,用于所述指定类型报文的收发处理;将大于所述第一位置索引值的所有缓冲区作为所述共享缓存池。

其中,所述本地缓存池中所有缓冲区属性为本地;所述共享缓存池中所有缓冲区属性为共享。如果所述指定类型报文对应的缓存池为物理地址连续的缓存池,本地缓存池可以由硬件fpa进行申请和释放。

通过预设的第一位置索引值将所述指定类型报文对应的缓存池划分为本地缓存池和共享缓存池后,所述缓存池管理模块802,还用于预设第二位置索引值;所述第二位置索引值用于指示所述共享缓存池中共享缓冲区设定的最小位置索引值;其中,所述第二位置索引值大于所述第一位置索引值;初始化水线值为所述第二位置索引值,所述水线值用于指示所述共享缓存池中能够用于共享的缓冲区的最小位置索引值。其中,水线值可以大于等于第二位置索引值。

所述缓冲区申请模块803,具体用于获取所述共享缓存池的缓存池锁;获取所述共享缓存池中位置索引值大于等于所述水线值的空闲缓冲区,设置所述空闲缓冲区为占用状态;释放所述缓存池锁;其中,所述缓存池锁用于所述共享缓存池的互斥处理。本实施例中,当其他报文申请的缓冲区使用完毕需释放时,所述缓冲区申请模块803还用于将所述缓冲区的状态设置为空闲状态。

作为本发明的一种实施例,在初始化水线值后,所述缓存池管理模块802还可以用于缩小共享缓存池。通过获取所述本地缓存池当前的最大位置索引值,并赋值给第三位置索引值;增大所述本地缓存池当前的最大位置索引值,获得所述本地缓存池最新的最大位置索引值。如果所述本地缓存池最新的最大位置索引值小于所述水线值,将大于所述第三位置索引值到小于等于所述本地缓存池最新的最大位置索引值范围内的所有所述缓冲区设置为本地缓存池。如果所述本地缓存池最新的最大位置索引值大于等于所述水线值,获取所述共享缓存池的缓存池锁。设置所述水线值为所述本地缓存池最新的最大位置索引值加一。将大于所述第三位置索引值到小于等于所述本地缓存池最新的最大位置索引值范围内的所有所述缓冲区设置为本地缓存池;释放所述缓存池锁;其中,所述本地缓存池最新的最大位置索引值需小于所述指定类型报文对应的缓存池的最大位置索引值。增大本地缓存池当前的最大位置索引值时,可采用预设的缓冲区个数或者共享缓存池当前缓冲区个数的一半作为幅度,增大本地缓存池的最大位置索引值。

作为本发明的另一种实施例,在初始化水线值后,所述缓存池管理模块802还可以用于扩大共享缓存池。获取所述本地缓存池当前的最大位置索引值,并赋值给第三位置索引值;缩小所述本地缓存池当前的最大位置索引值,获得所述本地缓存池最新的最大位置索引值。其中,所述本地缓存池最新的最大位置索引值需大于等于所述第一位置索引值。获取所述缓存池锁;将大于所述本地缓存池最新的最大位置索引值到小于等于所述第三位置索引值范围内的所有所述缓冲区设置为共享缓存池;如果所述本地缓存池最新的最大位置索引值小于所述第二位置索引值,设置所述水线值为所述第二位置索引值;否则,设置所述水线值为所述本地缓存池最新的最大位置索引值加一;释放所述缓存池锁。其中,所述缓存池锁用于所述共享缓存池的互斥处理。缩小本地缓存池当前的最大位置索引值时,可采用预设的缓冲区个数或者共享缓存池中当前缓冲区的个数作为幅度,缩小本地缓存池的最大位置索引值。

本实施例方法将指定类型报文对应的所述缓存池划分部分缓冲区用作共享缓存池,作为其他报文缓存池没有空闲缓冲区时的补充,在不增加内存消耗的前提下,能够提升其他报文在业务突发情况下的可靠性。此外,通过对共享缓存池的动态调整,能够提高缓存池的利用效率。本实施例方法不局限于具体的网络处理芯片,可适用于基于不同网络处理器的网络设备中,具有很好的实用性。

以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以权利要求的保护范围为准。

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