一种使用缓存区的方法

文档序号:7601131阅读:155来源:国知局
专利名称:一种使用缓存区的方法
技术领域
本发明涉及计算机领域,尤其涉及处理器中缓存区的使用方法。
背景技术
目前,处理器已得到广泛应用,它在各种网络业务和不同性能级别的应用中担任着不同的任务。网络技术及应用的发展,对网络设备的容量及单板的处理能力的要求越来越高。在处理器中通常需要多个协处理器并行工作,一个数据包的处理要经过多个模块,由几个协处理器协同完成。为了缓和不同模块间速度不匹配的矛盾,减少对各模块中CPU的中断频率,以及提高CPU和输入/输出单元之间的并行性,需要引入缓冲,对各模块的收发数据进行缓存。
通常,对处理器的缓冲区的使用方法采用动态链表的方式。为了提高缓冲区的利用率,设计一个缓冲区池,将所有可利用的缓冲区空间放入该缓冲区池,池中的缓冲区可供多个模块共享。
当发送数据时,首先向缓冲区池申请缓存空间,建立与缓存区的连接,从空缓冲队列中为其分配缓存空间,并将该缓存空间链接到输出队列中,当使用完所述缓存区时,将输出队列中对应的缓存空间释放并链接到空闲缓冲队列中。
由于多个模块共享缓冲区池,因此容易造成各条连接之间的相互影响。例如,如果某条连接由于数据流量过大或因流程错误而不能及时释放缓存区时,将导致其他的连接申请不到缓存区而终止工作。
为了解决该问题,现有技术中另一种对处理器的缓冲区的使用方法是将缓冲区池分解为若干个私有子缓存区池,然后为每条连接分配特定的私有子缓存区池。对于每个私有子缓存区池的使用方法仍然按照上文所述动态链接的方法。
当发送数据时,首先向缓冲区池找到相应的私有子缓存区池,然后向所述私有子缓存区池申请缓存空间,建立与私有子缓存区池的连接,然后从空闲缓冲队列中为其分配缓存空间,并将该缓存空间链接到输出队列中,当使用完该缓存区时,将输出队列中对应的缓存空间释放并链接到空缓冲队列中。
但是这种使用缓存区的方法将导致新的问题为每条连接分配缓存区将大大增加对缓存区的需求量,并导致部分流量较小的连接对应的缓存区始终处于空闲状态;或者当缓存数量一定时,将导致为各条连接分配的缓存区数量减少,从而导致某条连接突发流量时因缓存区不足而中止工作,由此看出,这种使用缓存区的方法存在的问题是对缓存区的使用效率较低。

发明内容
本发明要解决的技术问题在于提供一种使用缓存区的方法,能够避免使用缓存区的各条连接之间的相互影响,同时能够提高缓存区的使用效率。
为解决上述技术问题,本发明提供一种使用缓存区的方法,包括步骤(1)将缓存区池划分为预定个数的私有子缓存区池和共享子缓存区池;(2)设置所述私有子缓存区池与承载数据的通道的对应关系;(3)根据所述对应关系向所述私有子缓存区池申请缓存区;(4)当所述数据的流量大于所述私有子缓存区池容量时,向所述共享子缓存区池申请缓存区。
当所述数据为基于连接进行传输的数据时,步骤(2)所述的设置过程具体为设置所述私有子缓存区池与每条连接通道的对应关系。
当所述数据为基于业务进行传输的数据时,步骤(2)所述的设置过程具体为将所述数据按照业务类型分组;设置所述私有子缓存区池与传输每种业务的通道的对应关系。
当所述数据为来自不同物理端口的数据时,步骤(2)所述的设置过程具体为设置所述私有子缓存区池与连接每个物理端口的通道的对应关系。
其中,所述步骤(1)还包括步骤A、设置每个缓冲区对应的缓冲区描述符,所述缓冲区描述符的信息包括偏移量、长度、链表指针;B、根据所述缓冲区描述符的信息分别建立所述缓存区的动态链表。
其中,步骤B所述建立所述缓存区的动态链表的过程具体包括(B1)、根据所述缓冲区描述符中的链表指针建立存放空闲缓冲区描述符的空闲链表,并保存该链表的头尾指针;(B2)、根据所述头尾指针,建立缓冲区描述符与缓冲区的映射关系。
其中,步骤(3)所述的申请的过程具体为(31)根据所述映射关系定位到对应的私有子缓存区池;(32)根据所述私有子缓存区池的链表头指针,定位到对应的缓存区描述符;(33)将所述头指针修改为所述缓存区描述符指向的下一个链表指针;(34)获取所述缓存区描述符对应的缓冲区。
另外,当发生故障时,按照下述步骤定位发生故障的缓存区根据所述对应关系定位到对应的私有子缓存区池;根据所述缓冲区描述符信息定位到发生故障的缓存区。
进一步,使用本发明,当发生故障时,能够根据所述对应关系相应的定位到引起故障的连接通道、引起故障的业务类型或引起故障的物理端口。
与现有技术相比,本发明的有益效果是本发明采用动态和静态相结合的方式使用内存,在本发明中,为欲传输的数据预先分配了一定容量的私有子缓存区池,使得各条传输通道相对独立,从而避免了多条通道共享缓冲区池时,由于某条通道数据流量过大导致的全局缓存资源耗尽问题;同时,由于在本发明中还设定了一定的共享资源,供出现突发流量的通道使用,因此在为每条通道分配私有子缓存区池时仅需考虑正常流量的情况,允许将私有子缓存区池的容量设置的相对较小,从而相对于单纯的静态使用缓存区的方式提高了缓存区的使用率。
另外,本发明对于基于连接传输的数据、基于业务进行传输的数据以及来自不同的物理端口进行传输的数据均可适用。并且,当存在多种业务类型时,可以将数据按照业务类型进行分组,然后预先建立传输每一种业务类型的通道与私有子缓存区池的对应关系,可以达到同样的效果。
进一步,由于本发明提供的使用缓存区的方法中对每个模块设置了固定的缓存区,因此当发生故障时,能够方便的找到引起故障发生的模块,以及发生故障的缓存区,便于进行故障处理。


图1是本发明所述的使用缓存区的方法的示意图;图2是本发明所述的使用缓存区的方法的具体流程图;图3是第一实施例中私有子缓存区池的结构图。
具体实施例方式
本发明将动态使用缓存区的方法和静态使用缓存区的方法相结合,各通道仍然使用自己的私有子缓存区池,但是安排另外一部分缓存区作为各条通道的公共资源,在各条通道缓存区数量不够分配时共享使用。既解决了完全共享缓存区带来的故障无法隔离的问题,也解决了完全独立缓存区带来的缓存不足和缓存区使用效率太低的问题。
具体来说,使用本发明时,首先将缓存区池划分为预定个数的私有子缓存区池和共享子缓存区池;然后设置每个私有子缓存区池与承载数据的通道的对应关系;当需要申请缓存区时,根据所述对应关系向所述私有子缓存区池申请缓存区;当所述数据的流量大于所述私有子缓存区池容量时,向所述共享子缓存区池申请缓存区。
本发明的一个优点是对于基于连接或基于业务或基于不同端口的数据传输的情况均可适用。对于基于业务的情况需要设置私有子缓存区池与每条连接通道的对应关系;而对于基于业务的情况需要根据业务类型设置私有子缓存区池与每条业务通道的对应关系。进一步,对于基于业务进行传输的数据,本发明还适用于多业务类型的情况。如果使用缓存区的不只是一种类型的业务,而是同时存在多种,如IP,AAL2(ATM adapter layer 2,ATM适配层2),AAL5等,则可以将各种业务类型分组,各组分配一定数量的私有子缓存区池,另外共享一定数量的缓存区池,按照同样的原则管理缓存区。对于基于连接和基于业务的数据以及基于不同端口的数据使用本发明的情况将在下文中结合三个实施例进行详细叙述。
本发明的另一个优点是当发生故障时,能够根据对应关系定位引起故障发生的连接通道、业务通道或端口通道。由于本发明为每条连接或者每种业务分配了特定的子资源池供其使用,因此在发生故障时可以根据二者的对应关系查找引起故障的原因以及发生故障的缓存区,从而减小了故障定位的范围。
本发明所述的动态、静态相结合的使用内存的方法是指对整个缓存区池进行静态管理,对每个私有子缓存区池以及共享子缓存区池内部进行动态的管理。对私有子缓存区池以及共享子缓存区池的动态管理过程具体为将每个私有子缓存区池和所述共享子缓存区池分别划分预定个数的缓存区;然后设置每个缓冲区对应的缓冲区描述符,所述缓冲区描述符的信息包括缓冲区指针、链表指针;并根据所述缓冲区描述符的信息分别建立所述缓存区的动态链表。具体的管理方法也将结合以下实施例进行详细说明。
本发明设置所述私有子缓存区池与各通道的对应关系时采用的方法是为每一条通道和私有子缓存区池分别编号,然后根据编号为每条通道分配对应的私有子缓存区池。
图1是本发明所述的使用缓存区的方法的具体流程图。如图所示当需要传输数据时,首先根据编号,找到对应的私有子缓存区池(步骤一);然后检查对应的私有子缓存区池是否有空闲的缓存区(步骤二);如果所述私有子缓存区池存在空闲的缓存区,则申请空闲的缓存区(步骤三);当对应的私有子缓存区池已经被占用完时,则检查共享子缓存区池是否存在空闲的缓存区(步骤四);如果共享子缓存区池存在空闲的缓存区,则将空闲的缓存区分配给缓存区中请者(步骤五);当共享子缓存区池已经被占用完时,则进行缓存区申请失败处理(步骤六);当使用完毕后,将缓存区释放(步骤七)。
目前的通信系统中,对于通信数据的传输一般包括三种方式,一种用基于连接的方式进行传输;另一种用基于业务的方式进行传输,还有一种是基于不同的物理端口进行传输。
第一实施例AAL5是一种面向连接的服务。当需要进行数据传输时,首先建立发送端与接收端的永久虚电路PVC(Permanent Virtual Circuit,永久虚电路),数据通过永久虚电路进行传输。
当将本发明应用于AAL5的数据传输时,首先将缓存区池划分为预定个数的私有子缓存区池和共享子缓存区池;由于基于连接的数据传输方式在通道两端具有相同的网络标识(VPI(Virtual Pass Identifier,虚路径标识符),VCI(Virtual Channel Identifier,虚通路标识符)),因此,可以根据网络标识设置传输数据的通道与私有子缓存区池的对应关系。
对于每个私有子缓存区池的使用方法,与现有技术中动态使用缓存区的方法相同,为了便于对本发明中申请缓存区的过程的理解,首先来回顾现有技术中相关的公知原理。
对于动态使用缓存区的方法,通常采用动态链表的方式,图3是一种动态管理的结构式意图。
如图所示,首先将每个私有子缓存区池划分为N个缓存区,并且每个缓存区用一个缓存区描述符进行标识,每个缓存区描述符中包含的信息数据包括链表指针(下一个缓冲区描述符地址NextBufHandle)、位移量以及长度等信息。系统通过指针实现对每个缓存区描述符的管理。一个缓存区描述符唯一指向一个缓存区地址,系统维持两个指针头指针head,尾指针tail,分别指向链表的头尾。tail指针最初指向的缓存区描述符的NextBufHandle域值为0。
缓冲区的申请当某条连接需要申请缓存区时,首先根据通道的网络标识找到对应的私有子缓存区池,然后检查该子缓存区池是否存在可用的缓存区资源,如果存在则将空闲缓存区分配给该连接。具体的过程为如果head指针和tail指针重合,则表明目前该子缓存区池已经没有可用的缓存区;否则,将链表头指针head指向的缓存区描述符对应的缓存区取出,同时head指针指向该私有子缓存区池的缓存区描述符中NextBufHandle域指向的缓存区描述符;缓冲区的释放当使用完该缓存区需要释放时,先将Tail指针指向的缓存区描述符的NextBufHandle域改为当前缓存区的缓存区描述符地址,然后tail指针指向当前释放的缓存区的缓存区描述符地址,并将该描述符的NextBufHandle改为0。
当head指针与tail指针重合时,则表示整个私有子缓存区池后没有空闲的缓存区,此时,检查共享子缓存区池是否存在空闲缓存区。对于共享子缓存区池的使用方法与上述私有子缓存区池的方法相同,检验是否存在空闲缓存区的方法也与上文所述相同,在此不再赘述。
如果共享子缓存区池存在空闲的缓存区,则将空闲的缓存区分配给缓存区申请缓存区的连接;当共享子缓存区池已经被占用完时,则进行缓存区申请失败处理。
第二实施例SSCOP(Service Specifical Conection Orientated Protocol,特定服务的面向连接协议)IPOA(IP Over ATM)是基于AAL5连接的不同上层业务,协议组分别为SSCOP/AAL5/ATM,IPOA/AAL5/ATM。
为了使不同业务之间互不影响,通常需要针对不同的业务类型分配不同的缓存区。当将本发明应用于这两种业务时,首先将缓存区池划针对两种业务类型分为两个私有子缓存区池和一个共享子缓存区池;然后将私有子缓存区池分别分配给每种业务对应的通道,例如将1池分配给SSCOP,2池分配给IPOA,3池为共享缓冲区。
当需要进行数据传输时,首先根据PVC的业务类型找到对应的私有子缓存区池,然后检查私有子缓存区池是否存在处于空闲状态的缓存区,检查方法与第一实施例中所述相同,在此不再赘述。
当存在空闲缓存区时,则分配给申请缓存区的业务通道;否则,则检查共享子缓存区池是否存在可供使用的缓存区。当存在可供使用的缓存区时,则分配给申请缓存区的业务通道,当共享子缓存区池中未找到可使用的缓存区时,则进行申请失败处理。
第三实施例通信系统中,不同的网络结点之间存在不同的中继线,为了保证来自不同端口的数据之间互不干扰,在传输时需要对来自不同物理端口的数据分配不同的缓存区。应用本发明时,对于来自不同的物理端口的数据分配不同的私有子缓冲区池,另外为分配一个缓存区作为各物理端口的共享缓冲区。目前的端口类型包括中继线映射的端口、电路板间的连接端口、以及光/电接口等,因此,可以根据端口类型设置传输数据的通道与私有子缓存区池的对应关系。缓冲区的具体管理方式与前例一致。
当需要进行数据传输时,首先根据端口类型找到对应的私有子缓存区池,然后检查私有子缓存区池是否存在处于空闲状态的缓存区,检查方法与前述实施例相同,在此不再赘述。
上述三个实施例叙述了对按照三种方式传输的数据分配缓存区的具体过程,当传输的数据同时包含几种方式组合的数据时,同样适用本发明。此时,建立通道与子缓存区池的对应关系时,只需将各种类型的通道按照上述方法分别建立与子缓存区池的对应关系即可,具体的申请方法如上所述,不再赘述。
以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以作出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。
权利要求
1.一种使用缓存区的方法,其特征在于,包括步骤(1)将缓存区池划分为预定个数的私有子缓存区池和共享子缓存区池;(2)设置所述私有子缓存区池与承载数据的通道的对应关系;(3)根据所述对应关系向所述私有子缓存区池申请缓存区;(4)当所述数据的流量大于所述私有子缓存区池容量时,向所述共享子缓存区池申请缓存区。
2.根据权利要求1所述的使用缓存区的方法,其特征在于所述数据为基于连接进行传输的数据,步骤(2)所述的设置过程具体为设置所述私有子缓存区池与每条连接通道的对应关系。
3.根据权利要求1所述的使用缓存区的方法,其特征在于所述数据为基于业务进行传输的数据,步骤(2)所述的设置过程具体为将所述数据按照业务类型分组;设置所述私有子缓存区池与传输每种业务的通道的对应关系。
4.根据权利要求1所述的使用缓存区的方法,其特征在于所述数据为来自不同物理端口的数据,步骤(2)所述的设置过程具体为设置所述私有子缓存区池与连接每个物理端口的通道的对应关系。
5.根据权利要求2或3或4中任意一个所述的使用缓存区的方法,其特征在于,所述步骤(1)还包括步骤A、设置每个缓冲区对应的缓冲区描述符,所述缓冲区描述符的信息包括偏移量、长度、链表指针;B、根据所述缓冲区描述符的信息分别建立所述缓存区的动态链表。
6.根据权利要求5所述的使用缓冲区的方法,其特征在于,步骤B所述建立所述缓存区的动态链表的过程具体包括(B1)、根据所述缓冲区描述符中的链表指针建立存放空闲缓冲区描述符的空闲链表,并保存该链表的头尾指针;(B2)、根据所述头尾指针,建立缓冲区描述符与缓冲区的映射关系。
7.根据权利要求6所述的使用缓存区的方法,其特征在于步骤(3)所述的申请的过程具体为(31)根据所述映射关系定位到对应的私有子缓存区池;(32)根据所述私有子缓存区池的链表头指针,定位到对应的缓存区描述符;(33)将所述头指针修改为所述缓存区描述符指向的下一个链表指针;(34)获取所述缓存区描述符对应的缓冲区。
8.根据权利要求7所述的使用缓存区的方法,其特征在于,当发生故障时,按照下述步骤定位发生故障的缓存区根据所述对应关系定位到对应的私有子缓存区池;根据所述缓冲区描述符信息定位到发生故障的缓存区。
9.根据权利要求7所述的使用缓存区的方法,其特征在于,所述步骤还包括当发生故障时,根据所述对应关系定位引起故障的连接通道。
10.根据权利要求7所述的使用缓存区的方法,其特征在于所述步骤还包括当发生故障时,根据所述对应关系定位引起故障的业务类型。
11.根据权利要求7所述的使用缓存区的方法,其特征在于所述步骤还包括当发生故障时,根据所述对应关系定位引起故障的物理端口。
全文摘要
本发明提供了一种使用缓存区的方法,首先将缓存区池划分为预定个数的私有子缓存区池和共享子缓存区池;接着设置所述私有子缓存区池与承载数据的通道的对应关系;然后根据所述对应关系向所述私有子缓存区池申请缓存区;当所述数据的流量大于所述私有子缓存区池容量时,向所述共享子缓存区池申请缓存区。本发明为欲传输的数据预先分配了一定容量的私有子缓存区池,使得各条传输通道相对独立,从而避免了多条通道共享缓冲区池时,由于某条通道数据流量过大导致的全局缓存资源耗尽问题。
文档编号H04L29/06GK1798094SQ20041010246
公开日2006年7月5日 申请日期2004年12月23日 优先权日2004年12月23日
发明者邱伟民 申请人:华为技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1