一种临界资源的访问装置和方法

文档序号:6503065阅读:184来源:国知局
一种临界资源的访问装置和方法
【专利摘要】本发明提供一种临界资源的访问装置和方法,应用在多核处理器内部,该装置执行以下处理流程:A、在访问临界资源前从预设的缓存器中读取自旋锁缓存变量的值到特定的寄存器中,并判断所述自旋锁缓存变量值是否为初始值,如果是,则转步骤B;B、更新所述特定寄存器中的自旋锁缓存变量值;C、判断在读取所述自旋锁缓存变量到特定的寄存器之后是否有其他核访问过所述自旋锁缓存变量,如果是,则返回步骤A,如果否,则将更新后的所述寄存器中的值存入到所述预设的缓存器中,并访问所述临界资源。通过本发明的技术方案,有效解决了现有技术中临界资源访问速度慢的问题,提高了用户体验。
【专利说明】一种临界资源的访问装置和方法

【技术领域】
[0001]本发明涉及多核处理器【技术领域】,尤其涉及一种临界资源的访问装置和方法。

【背景技术】
[0002]随着网络安全设备对处理性能要求的日益提高,多核处理器得以广泛应用。一般地,在处理系统中都存在着临界资源,临界资源是指每次仅允许一个进程访问的资源,也就是多个核必须互斥访问的资源。为了防止多个核同时访问某一临界资源,在软件设计中通常是通过自旋锁加以保护。
[0003]现有技术中,通过全局共享的内存变量作为自旋锁资源判断的依据。具体地,请参考图1,现有的商用多核处理器的设计上通常为每个核拥有一个独立的一级缓存,所有核共享二级缓存和内存。所述全局共享的内存变量分别在内存、二级缓存以及每个一级缓存中存在有对应的映像。当核I对自旋锁进行操作时会更新该一级缓存中内存变量的内容,从而导致其他核的一级缓存中之前保持的该变量失效,其他核想要进行自旋锁操作时就需要重新从共享的二级缓存或者内存中读取。由于二级缓存和内存的访问效率远远低于一级缓存的访问效率,所以就会导致自旋锁的操作效率低下,进而影响设备的整体运行速率。


【发明内容】

[0004]有鉴于此,本发明提供一种临界资源的访问装置和方法,以解决现有技术存在的不足。
[0005]具体地,所述装置应用在多核处理器内部,该装置包括:
[0006]获取模块,用于在访问临界资源前从预设的缓存器中读取自旋锁缓存变量的值到特定的寄存器中,并判断所述自旋锁缓存变量值是否为初始值;
[0007]更新模块,用于在所述自旋锁缓存变量值为初始值时,更新所述特定寄存器中的该值;
[0008]判断模块,用于在更新完毕后,判断在读取所述自旋锁缓存变量到特定的寄存器之后是否有其他核访问过所述自旋锁缓存变量,如果是,则返回获取模块重新读取自旋锁缓存变量,如果否,则将更新后的所述寄存器中的值存入到所述预设的缓存器中,并访问所述临界资源。
[0009]所述方法包括以下步骤:
[0010]A、在访问临界资源前从预设的缓存器中读取自旋锁缓存变量的值到特定的寄存器中,并判断所述自旋锁缓存变量值是否为初始值,如果是,则转步骤B ;
[0011]B、更新所述特定寄存器中的自旋锁缓存变量值;
[0012]C、判断在读取所述自旋锁缓存变量到特定的寄存器之后是否有其他核访问过所述自旋锁缓存变量,如果是,则返回步骤A,如果否,则将更新后的所述寄存器中的值存入到所述预设的缓存器中,并访问所述临界资源。
[0013]由以上技术方案可见,本发明通过设置预设的缓存器,供多核处理器中各个核取得临界资源的自旋锁,提高了自旋锁的执行效率,进而提高报文转发处理效率。

【专利附图】

【附图说明】
[0014]图1是现有技术中多核处理器的设计图;
[0015]图2是本发明一种实施方式中多核处理器的设计图;
[0016]图3是本发明一种实施方式中临界资源访问方法的流程图;
[0017]图4是本发明一种实施方式中临界资源访问装置的逻辑图。

【具体实施方式】
[0018]针对现有技术中存在的问题,本发明提供了一种临界资源的访问装置和方法。为了使本发明的目的、技术方案和优点更加清楚,下面结合附图和具体实施例对本发明进行详细描述。
[0019]请参考图3和图4,在本发明一种优选的实施方式中,所述装置包括:获取模块、更新模块、判断模块以及还原模块。该装置执行如下处理流程:
[0020]步骤101,在访问临界资源前从预设的缓存器中读取自旋锁缓存变量的值到特定的寄存器中,并判断所述自旋锁缓存变量值是否为初始值,如果是转步骤102,如果否则重新读取。
[0021]在多核处理系统中,通常采用自旋锁对临界资源加以保护,如果某个核想要访问临界资源,需要先取得对应的自旋锁资源。而自旋锁资源通常采用自旋锁缓存变量作为判断依据,每次对自旋锁的操作都会更新所述缓存变量的值。具体地,首先为该自旋锁缓存变量赋予初始值,比方说可以初始化为0,表示该锁资源没有被占用,如果该锁资源被占用,则可以更新该缓存变量的值为1,以此加以区分。
[0022]本步骤中,请参考图2,与现有技术不同,本发明所述预设的缓存器是专门为自旋锁设计的一块独立的缓存区域,在CPU设计时为其预留独立的物理空间。该区域的访问独立于内存系统,为所有核所共享。在一种优选的实施方式中,该预设的缓存器是高速缓存器,其访问的速度与一级缓存在同一个数量级,一般是三到四个时钟周期。本发明中,所有核都是通过该预设的缓存器获取自旋锁资源,速度是三到四个时钟周期。而现有技术中,如果一级缓存中的内存变量失效,获取自旋锁的时候就需要访问二级缓存或者是内存,而二级缓存的访问的速度一般是50个时钟周期,内存的访问速度更慢,一般是150个时钟周期。所以本发明相对于现有技术,设立独立的高速缓存区域,可以满足对自旋锁资源的高速访问。
[0023]步骤101由获取模块执行,具体地,获取模块是将所述自旋锁缓存变量中的值读取到特定的寄存器中,然后进行判断。如果所述自旋锁缓存变量中的值是初始值,说明此时自旋锁资源没有被占用,可以进行后续步骤;如果所述自旋锁缓存变量中的值不是初始值,则说明自旋锁资源已经被占用,需要等待其他核使用完毕后才能进行操作。此时,获取模块会不断地循环读取所述自旋锁缓存变量并进行判断,直到获取到所述自旋锁资源。
[0024]步骤102,更新所述特定寄存器中的值。
[0025]本步骤由更新模块执行。通常是将特定寄存器中存有的自旋锁缓存变量的值更新为其他值加以区分,比方说可以将其由初始值O更新为I。
[0026]步骤103,判断在读取所述自旋锁缓存变量的值到特定的寄存器之后是否有其他核访问过所述自旋锁缓存变量。如果是,则返回步骤101;如果否,则将更新后的所述寄存器中的值存入到所述预设的缓存器中,并访问所述临界资源。
[0027]本步骤由判断模块执行。理论上,只要步骤101中读取的自旋锁缓存变量的值是初始值就说明可以取得自旋锁并访问临界资源,但是在实际应用中,会出现某个核在读取完成所述自旋锁缓存变量之后,更新之前,又有其他核读取的情况,如果不做处理,那么这两个核都会认为自己已经取得到了自旋锁资源,进而都去访问临界资源,造成访问冲突。所以在一种优选的实施方式中,设定在修改所述特定的缓存器中的自旋锁缓存变量前进行判断,判断此期间是否有其他核访问。具体地,是从CPU总线上获知是否有其他核访问。如果有,则说明此次获取锁资源失败,需要返回到步骤101重新获取,如果没有,说明获取锁资源成功,进一步地,将更新后的寄存器中的值写入预定的缓存器以告知其他核该锁资源被占用,然后访问所述临界资源。
[0028]步骤104,将所述缓存器中的自旋锁缓存变量的值还原为初始值。
[0029]本步骤由还原模块执行。访问完毕所述临界资源后,要释放锁资源以便其他核进行访问。具体地,也是通过寄存器完成。访问完毕后,将特定寄存器中的值设置为初始值,然后再将所述初始值写入到所述预设的缓存器中。
[0030]本发明中对于自旋锁的获取可以通过以下方式来实现:
[0031]
(1)初始化
Spin—Init.(1ckkey)
1ckkey = O; /*将1ckkey初始化为O,表示没有人占用该锁资源*/
(2)Lock
Spin—Lock (1ckkey)
1:
11 to, lockkey /*将 lockkey 的值读入 t0 寄存器*/
bnez t0,化/料0不等于O的话就说明已经有人获取了该锁资源,需要重新栽入1ckkey的值进行判断,直到lockkey的值为O时才能继续后面的操作*/
Ii tO, I/+'*将 tO 设置为 I*/'
ac tO, 1ckkpy /*判断前面执行I〗指令读取1cklcRy之后是否有别的cot'r访问过lockkey,如果没有被访问过则成功将t.0寄存器中的值存入loc.kkey,如果被别的core访问过则无法将tO中的内容写入lockkey, tO中会写入?表示1ckkey写入失败*/
beqz tO, lb/*tO为O的话则表示丨:一步写入失败,未能获取到锁资源,需要返回第一行重新尝试获取锁资源*/sync
(3)Unlock
SpinUnlock(1ckkcy)
sync
SW I lockkey /*将lockkey置为0,表示该锁资源处丁'空闲状态*/
[0032]通过以上描述可以看出,本发明提供的技术方案设立专用于自旋锁的高速缓存器,以供多核处理器中各个核取得临界资源的自旋锁,大大提高了自旋锁自身的执行效率,进而提高报文转发处理的效率。由于多核处理器通常用在对处理性能要求较高的设备上,所以提高临界资源的访问效率,对设备性能的整体提高有着重大的作用。
[0033]以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明保护的范围之内。
【权利要求】
1.一种临界资源的访问装置,应用在多核处理器内部,其特征在于,该装置包括: 获取模块,用于在访问临界资源前从预设的缓存器中读取自旋锁缓存变量的值到特定的寄存器中,并判断所述自旋锁缓存变量值是否为初始值; 更新模块,用于在所述自旋锁缓存变量值为初始值时,更新所述特定寄存器中的该值; 判断模块,用于在更新完毕后,判断在读取所述自旋锁缓存变量到特定的寄存器之后是否有其他核访问过所述自旋锁缓存变量,如果是,则返回获取模块重新读取自旋锁缓存变量,如果否,则将更新后的所述寄存器中的值存入到所述预设的缓存器中,并访问所述临界资源。
2.根据权利要求1所述的装置,其特征在于,所述预设的缓存器为多个核所共享。
3.根据权利要求1所述的装置,其特征在于,所述预设的缓存器的访问速度大于二级缓存的访问速度。
4.根据权利要求1所述的装置,其特征在于,所述预设的缓存器的访问速度小于等于一级缓存的访问速度。
5.根据权利要求1所述的装置,其特征在于,该装置进一步包括: 还原模块,用于访问完毕所述临界资源后,将所述特定寄存器中的值还原为初始值并存入到所述预设的缓冲器中。
6.一种临界资源的访问方法,应用在多核处理器内部,其特征在于,该方法包括: A、在访问临界资源前从预设的缓存器中读取自旋锁缓存变量的值到特定的寄存器中,并判断所述自旋锁缓存变量值是否为初始值,如果是,则转步骤B ; B、更新所述特定寄存器中的自旋锁缓存变量值; C、判断在读取所述自旋锁缓存变量到特定的寄存器之后是否有其他核访问过所述自旋锁缓存变量,如果是,则返回步骤A,如果否,则将更新后的所述寄存器中的值存入到所述预设的缓存器中,并访问所述临界资源。
7.根据权利要求6所述的方法,其特征在于,所述预设的缓存器为多个核所共享。
8.根据权利要求6所述的方法,其特征在于,所述预设的缓存器的访问速度大于二级缓存的访问速度。
9.根据权利要求6所述的方法,其特征在于,所述预设的缓存器的访问速度小于等于一级缓存的访问速度。
10.根据权利要求6所述的方法,其特征在于,该方法还包括: D、访问完毕所述临界资源后,将所述特定寄存器中的值还原为初始值并存入到所述预设的缓冲器中。
【文档编号】G06F9/46GK104166587SQ201310189093
【公开日】2014年11月26日 申请日期:2013年5月17日 优先权日:2013年5月17日
【发明者】龚一斌 申请人:杭州华三通信技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1