多核CPU的缓存管理方法、装置及设备制造方法及图纸

技术编号:7759040 阅读:160 留言:0更新日期:2012-09-14 00:52
本发明专利技术提供一种多核CPU的缓存管理方法、装置及设备。方法包括:当多核CPU中的第一CPU分配缓存时,在第一CPU专属的多个第一缓存队列中的一个队列的头指针指向的缓存指针开始分配缓存;当多核CPU中的第一CPU释放缓存时,确定待释放缓存所属的第二CPU,并在第二CPU专属的多个第二缓存队列中确定所述第一CPU可释放的队列,根据所述确定的第一CPU可释放的队列的尾指针指向的缓存指针释放所述待释放缓存;其中,每个缓存队列中的头指针与尾指针彼此不重合。

【技术实现步骤摘要】

本专利技术涉及缓存技术,尤其涉及一种多核CPU的缓存管理方法、装置及设备
技术介绍
在嵌入式系统中,用来完成数据接收和发送的缓冲区可以称之为buffer (缓存)。buffer的大小一般都是固定的,主要用在各种数据区的处理上。在多任务实时系统里,buffer管理是基本功能,对系统的处理能力有着明显的影响。现有技术中,多核CPU的buffer管理的实现方式一般是使用多核CPU提供的特殊指令来实现自旋锁,用自旋锁来实现对buffer的保护,确保任意时刻只有一个CPU对buffer进行分配或释放。在多核CPU都进行buffer分配和/或释放的时候,这种方式能有效地保护buffer,避免一个buffer被两个以上的CPU获得。但上述多核CPU的buffer管理的方式会使得其他CPU进入忙等状态,无法处理其他事情,造成系统效率的降低。
技术实现思路
为了实现对多核CPU缓存的有效管理,提高系统效率,本专利技术提供一种多核CPU的缓存管理方法,包括当多核CPU中的第一 CPU分配缓存时,在第一 CPU专属的多个第一缓存队列中的一个队列的头指针指向的缓存指针开始分配缓存;当多核CPU中的第一 CPU释放缓存时,确定待释放缓存所属的第二 CPU,并在第二CPU专属的多个第二缓存队列中确定所述第一 CPU可释放的队列,根据所述确定的第一 CPU可释放的队列的尾指针指向的缓存指针释放所述待释放缓存;其中,每个缓存队列中的头指针与尾指针彼此不重合。本专利技术的又一个方面是提供一种多核CPU的缓存管理装置,包括分配模块,用于当多核CPU中的第一 CPU分配缓存时,在第一 CPU专属的多个第一缓存队列中的一个队列的头指针指向的缓存指针开始分配缓存;释放模块,用于当多核CPU中的第一 CPU释放缓存时,确定待释放缓存所属的第二CPU,并在第二 CPU专属的多个第二缓存队列中确定所述第一 CPU可释放的队列,根据所述确定的第一CPU可释放的队列的尾指针指向的缓存指针释放所述待释放缓存;其中,每个缓存队列中的头指针与尾指针彼此不重合。本专利技术的另一个方面是提供一种网络设备,包括如上所述的多核CPU的缓存管理>j-U ρ α装直。本专利技术的技术效果是将多核CPU中各个CPU专属缓存的缓存指针排列成多个专属缓存队列,每个队列具有头指针和尾指针,在第一 CPU分配缓存时,根据第一 CPU专属的多个第一缓存队列中的一个队列的头指针所指向的缓存指针开始分配缓存,在第一 CPU释放缓存时,根据待释放缓存所属CPU,确定在其所属CPU专属的多个缓存队列中该第一 CPU可以释放的队列,并根据确定的队列的尾指针所指向的缓存指针释放待释放缓存。其中,每个缓存队列的头指针和尾指针不重合,从而对于各个CPU专属的缓存队列中的任意位置缓存,同一时刻都只有一个CPU对其进行操作,实现了对缓存的保护,同时不需要使用自旋锁,提闻了系统的效率。附图说明图I为本专利技术实施例一提供的多核CPU的缓存管理方法流程图;图2为本专利技术实施例一提供的第一 CPU的专属第一缓存队列的示意图;图3为本专利技术实施例一中提供的buffer的基本格式;图4为本专利技术实施例二提供的多核CPU的缓存管理装置结构示意图;图5为本专利技术实施例三提供的网络设备结构示意图。 具体实施例方式图I为本专利技术实施例一提供的多核CPU的缓存管理方法流程图,如图I所示,该方法包括步骤101、当多核CPU中的第一 CPU分配缓存时,在第一 CPU专属的多个第一缓存队列中的一个队列的头指针指向的缓存指针开始分配缓存。首先,第一 CPU是一种代指,用于指示多核CPU中的任意一个CPU。多核CPU技术就是用一条内总线将多个CPU连接起来,共享各种存储器和外设。其次,以第一 CPU具有4个专属的第一缓存队列为例,实施例一提供的第一 CPU的专属第一缓存队列的示意图可以如图2所示。每个队列可以以一个指针数组的形式出现,每个队列的长度可以根据用户的需要进行设定。假设第一 CPU的专属缓存一共有1024个,设定每个队列的长度为1024,每个队列中填充的缓存指针个数至少为1,可以彼此均分,也可以不均分,此处不做限定。本实施例以分别在每个队列中填充了 256个缓存指针为例进行说明,每一个缓存指针指向一个特定的缓存。每个队列都有一个头指针(head)和一个尾指针(tail),头、尾指针彼此不重合。head指针用来表示从队列的什么位置开始分配buffer,也就是取出buffer指针并填入0,根据buffer指针确定buffer。tail指针用来标识从队列的什么位置开始释放buffer,也就是把待释放buffer的buffer指针填充到tail所指示的位置中去。每个第一缓存队列都可以为自己所专属的第一 CPU提供分配buffer的支持,但每个第一缓存队列一次能分配的buffer的数量不超过该队列中所有buffer指针的数量再减1,也就是说,如果一个队列中当前有m个buffer指针,那么最多一次能分配m-1个buffer的数量。这样做的好处在于,有效避免了头指针与尾指针的重叠,也即有效避免了对同一个buffer的分配动作与释放动作的重叠,由于分配动作只能是专属CPU来执行,而释放动作可以由任意一个CPU来执行,因此,避免了对同一个buffer的分配动作与释放动作的重叠,意味着有效避免了多个CPU同时对一个buffer的操作。步骤102、当多核CPU中的第一 CPU释放缓存时,确定待释放缓存所属的第二 CPU,并在第二CPU的专属多个第二缓存队列中确定第一CPU可释放的队列,根据确定的第一CPU可释放的队列的尾指针指向的缓存指针释放待释放缓存。这里需要说明的是,第二 CPU同样是一种代指,用于指示多核CPU中的任意一个CPU。也就是说,第一 CPU与第二 CPU可以是同一 CPU,也可以是不同CPU。其中,本专利技术实施例一中提供的buffer的基本格式可以如图3所示,每个buffer至少被分为两部分,一部分是管理字段,一部分是数据段。这两部分在一个连续的内存空间内,也就是说,管理字段之后,紧接着数据段。数据段的长度可以根据用户自己的需要设定,管理字段的长度也可以根据用户自己的需要设定,管理字段中可以携带一个CPU ID字段,用于标识该buffer专属于哪个CPU,管理字段的其他内容可以根据用户自己的需要进行设定,此处不做赘述。换句话讲,在本专利技术实施例中,一个buffer只会专属于一个CPU。但这不用以限定CPU之间将buffer在彼此之间传递使用。也就是说,buffer专属的CPU可以对该buffer执行分配动作,但由于buffer可以用于在CPU之间传递数据,所以在该buffer被释放时,释放该buffer的CPU可能已经不是该buffer专属的CPU 了,这时候就可以根据管理字段中的CPU ID字段来确定该buffer专属于哪个CPU,从而对其进行释放。换句话说,每个缓存都会携带其所属CPU的标识,那么确定待释放缓存所属的第二CPU可以理解为读取该待释放缓存中携带的所属CPU的标识,并根据该标识确定待释放缓存所属的第二 CPU。例如,在第一 CPU释放某一 buffer时,该buffer的管理字段中携带的CPU ID是2,则确定该buffer本文档来自技高网...

【技术保护点】

【技术特征摘要】

【专利技术属性】
技术研发人员:彭琮
申请(专利权)人:福建星网锐捷网络有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1