实现自适应锁的方法和装置以及多核处理器系统的制作方法

文档序号:6439957阅读:156来源:国知局
专利名称:实现自适应锁的方法和装置以及多核处理器系统的制作方法
技术领域
本发明实施例涉及计算机领域,并且更具体地,涉及实现自适应锁的方法和装置以及多核处理器系统。
背景技术
随着芯片技术的不断发展,多处理器核系统已经越来越普及。为了最大限度地发挥多处理器核的潜力,应用程序通常采用多线程的方式进行并行运行。现在的大部分架构的计算机系统,例如SMP (SymmetricalMulti-Processing Architecture,对称多处理架构)、NUMA (Non UniformMemory Access Architecture,非一致内存访问架构),提供了统一的物理内存地址空间。因此,多个应用程序或线程可以通过共享变量来访问(读操作或写操作)同一个内存地址。但是,对同一个内存地址的并行访问,必然存在竞争。例如,两个线程同时访问一个内存地址,有可能会引起资源冲突。为了避免这样的冲突,处理器核提供了多种同步机制来保护共享的存储设备和/或共享的硬件高速缓存中的共享资源,例如自旋锁、互斥锁等。并行多线程访问共享资源时,必然会竞争保护该共享资源的锁。随着核数的增多, 并行线程的增多,锁竞争度也变得越来越激烈,以至于会对应用程序的性能产生较大的影响。因此,需要采取有效的措施降低锁竞争、避免锁抖动,进而提高系统性能。

发明内容
本发明实施例提供了一种实现自适应锁的方法以及装置以及多核处理器系统,针对系统中处理器核的锁机制,能够一定程度上解决多线程竞争同一个锁时产生的锁抖动。一方面,提供了一种实现自适应锁的方法,包括当新的第一线程尝试获得自适应锁时,如果所述自适应锁空闲,则使所述第一线程获得所述自适应锁,否则使所述第一线程根据竞争所述自适应锁的激烈程度进入自旋状态或者节能状态;当所述第一线程处于节能状态,使所述第一线程等待被唤醒进入自旋状态,或者当所述第一线程处于自旋状态,使所述第一线程竞争所述自适应锁,直到所述第一线程竞争到所述自适应锁并对所述自适应锁保护的共享资源操作完毕,释放所述自适应锁;当所述自适应锁被释放时,如果有处于节能状态的线程,则唤醒另一个处于节能状态的线程以使其进入自旋状态,以便与其他处于自旋状态的线程一同竞争所述自适应锁。另一方面,提供了一种实现自适应锁的装置,包括确定单元,用于当新的第一线程尝试获得自适应锁时,如果所述自适应锁空闲,则使所述第一线程获得所述自适应锁,否则使所述第一线程根据竞争所述自适应锁的激烈程度进入自旋状态或者节能状态;竞争单元,用于当所述第一线程处于节能状态,使所述第一线程等待被唤醒进入自旋状态,或者当所述第一线程处于自旋状态,使所述第一线程竞争所述自适应锁,直到所述第一线程竞争到所述自适应锁并对所述自适应锁保护的共享资源操作完毕,释放所述自适应锁;唤醒单元,用于当所述自适应锁被释放时,如果有处于节能状态的线程,则唤醒另一个处于节能状态的线程以使其进入自旋状态,以便与其他处于自旋状态的线程一同竞争所述自适应锁。再一方面,提供了一种多核处理器系统,包括两个或更多个处理器核,以及共享的硬件资源;所述两个或更多个处理器核访问由自适应锁保护的所述共享的硬件资源;其中每个所述处理器核用于当新的第一线程尝试获得自适应锁时,如果所述自适应锁空闲, 则使所述第一线程获得所述自适应锁,否则使所述第一线程根据竞争所述自适应锁的激烈程度进入自旋状态或者节能状态;当所述第一线程处于节能状态,使所述第一线程等待被唤醒进入自旋状态,或者当所述第一线程处于自旋状态,使所述第一线程竞争所述自适应锁,直到所述第一线程竞争到所述自适应锁并对所述自适应锁保护的共享资源操作完毕, 释放所述自适应锁;当所述自适应锁被释放时,如果有处于节能状态的线程,则唤醒另一个处于节能状态的线程以使其进入自旋状态,以便与其他处于自旋状态的线程一同竞争所述自适应锁。可见,本发明实施例的可扩展的自适应锁的实现技术,由于能够根据自适应锁的竞争程度(即竞争自适应锁的线程的数目多少)选择合适的锁模式,当竞争自适应锁的线程的数目超过一定数量,使超出的部分线程进入节能状态,而保证不超过一定数量的处于自旋状态的线程在竞争自适应锁,只有当一个处于自旋状态的线程在访问自适应锁保护的共享资源后才相应地使一个处于节能状态的线程进入自旋状态,从而避免了多线程在竞争同一个锁时产生的锁抖动,进而降低了系统的开销,提高了系统的性能。


为了更清楚地说明本发明实施例的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。图1是根据本发明实施例的自适应锁的数据结构的示意图。图2是根据本发明实施例的实现自适应锁的方法的概要流程图。图3是根据本发明实施例的实现自适应锁的方法的详细流程图。图4是根据本发明实施例的实现自适应锁的方法中线程进入节能状态的流程图。图5是根据本发明实施例的实现自适应锁的方法中自适应锁被释放后的操作流程。图6是根据本发明实施例的实现自适应锁的方法中运用硬件指令monitor以及 mwait使线程退出节能状态的流程图。图7是根据本发明实施例的实现自适应锁的装置的结构示意图。图8是根据本发明实施例的多核处理器系统的结构示意图。图9是根据本发明实施例的多核处理器系统的实际部署的示意图。
具体实施例方式下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。图1中示出了根据本发明实施例的自适应锁的数据结构,其中包括锁状态标识、 请求者计数器,节能状态请求者集合以及节能状态请求者集合的保护锁等信息。通常,请求者计数器是自适应锁数据结构中的一个成员变量,用于表示竞争该自适应锁的线程数目。 一般而言,集合可以是链表、队列或数组等形式。在根据本发明实施例的自适应锁中,集合的元素个数与系统中处理器核的个数相同。例如,本发明实施例的自适应锁的数据结构可以缓存至硬件高速缓存,其中,每个成员变量占据一个缓存行,例如,锁状态标识占据第一缓存行,请求者计数器占据第二缓存行,从而避免错误共享。以下将结合图2至图6,具体描述如何根据本发明实施例实现自适应锁。如图2所示,根据本发明实施例的实现自适应锁的方法,包括21,当新的第一线程尝试获得自适应锁时,如果自适应锁空闲,则使该第一线程获得自适应锁,否则使该第一线程根据竞争该自适应锁的激烈程度进入自旋状态或者节能状态。其中,进入自旋状态的线程将竞争自适应锁;进入节能状态的线程将不会竞争自适应锁,直到该进入节能状态的线程被唤醒而进入自旋状态,才与其他已处于自旋状态的线程一同竞争自适应锁。根据竞争自适应锁的激烈程度使线程进入自旋状态或者节能状态是为了保证竞争自适应锁的处于自旋状态的线程不超过预设阈值,而超过阈值数量的线程将处于节能状态,由此降低自适应锁的竞争程度,防止锁抖动。具体而言,当运行在第一处理器核上的一个新的第一线程尝试获得自适应锁时, 该自适应锁的请求者计数器中记录的竞争该自适应锁的线程数目将递增。当该自适应锁的请求者计数器中记录的竞争该自适应锁的线程数目小于或等于阈值时,该第一线程将进入自旋状态;而当该自适应锁的请求者计数器中记录的竞争该自适应锁的线程数目大于阈值,该第一线程将进入节能状态。此外,该新的第一线程在进入节能状态之前,需要经过以下步骤。首先,该线程获取该自适应锁的节能状态请求者集合的保护锁。然后,该线程顺序地加入到该自适应锁的节能状态请求者集合中,该节能状态请求者集合对应于其上运行该第一线程的处理器核。 接着,该线程被设置节能状态标识。最后,在该节能状态请求者集合的保护锁被解除后,该线程进入节能状态。以上描述了线程如何根据自适应锁的竞争程度(即竞争自适应锁的线程的数目多少)选择合适的状态,例如自旋状态或节能状态。由于只有处于自旋状态的线程竞争自适应锁,而处于自旋状态的线程的数量不会超过阈值,因此竞争自适应锁的激烈程度被限制。22,当所述第一线程处于节能状态,使所述第一线程等待被唤醒进入自旋状态,或者当所述第一线程处于自旋状态,使所述第一线程竞争所述自适应锁,直到所述第一线程竞争到所述自适应锁并对所述自适应锁保护的共享资源操作完毕,释放所述自适应锁。也就是说,在多核处理器系统中,始终由处于自旋状态的全部线程竞争该自适应锁,直到有一个处于自旋状态的线程(例如,第一线程)获得该自适应锁,此时递减该自适应锁的请求者计数器中记录的竞争该自适应锁的线程数目,并在上述处于自旋状态的线程(例如,第一线程)对该自适应锁保护的共享资源操作完毕后,该自适应锁将被释放。也就是说,一旦第一线程处于节能状态,第一处理器核使所述第一线程等待被唤醒进入自旋状态,或者第一线程处于自旋状态或者从节能状态唤醒进入自旋状态,第一处理器核使第一线程竞争所述自适应锁,直到第一线程竞争到所述自适应锁并对所述自适应锁保护的共享资源操作完毕,释放所述自适应锁。具体地,每当持有自适应锁的线程对该自适应锁保护的共享资源操作完毕后,该自适应锁都被释放。如果此时不存在处于节能状态的线程,则继续由剩下的处于自旋状态的线程竞争自适应锁,直到所有处于自旋状态的线程都依次获得自适应锁。然而,23,当该自适应锁被释放时,如果有处于节能状态的线程,则唤醒另一个处于节能状态的线程以使其进入自旋状态,以便与其他处于自旋状态的线程一同竞争该自适应锁。例如,在第一线程对自适应锁保护的共享资源操作完毕后,该自适应锁被释放,第一处理器核首先判断是否存在非空的节能状态请求者集合,如果存在,则说明有处于节能状态的线程。然后,依据竞争该自适应锁的线程的有序竞争状态或者无序竞争状态选择一个合适的非空的节能状态请求者集合。例如,当竞争该自适应锁的线程是无序地竞争该自适应锁时,则首先从与第一处理器核对应的节能状态请求者集合中选择首个线程,其中该第一处理器核上运行有释放该自适应锁的第一线程。而当对应于第一处理器核的节能状态请求者集合为空时,再根据其他处理器核与所述第一处理器核之间的距离,由近及远地依次选择一个对应于所述其他处理器核的节能状态请求者集合,其中所述第一处理器核上运行有释放所述自适应锁的第一线程。或者,当竞争该自适应锁的线程是有序地竞争该自适应锁时,则通过遍历所有非空的节能状态请求者集合,寻找票序号最小的线程所在的节能状态请求者集合,该票序号是用于标记获取该自适应锁的顺序的标识变量。最后,唤醒该合适的非空的节能状态请求者集合的首个线程,使其进入自旋状态。例如,通过硬件指令监测该合适的非空的节能状态请求者集合的首个线程的节能状态标识是否被清零,如果该节能状态标识被清零,则使该合适的非空的节能状态请求者集合的首个线程进入自旋状态。综上所述,当某线程尝试获取自适应锁时,如果该自适应锁空闲,则处理器核使线程获取自适应锁。否则,递增自适应锁的请求者计数器,判断自适应锁的竞争是否激烈。如果请求者计数器未超过预设的阈值,处理器核使线程进入自旋状态;否则,使线程进入节能状态。在多核处理器系统中,始终由处于自旋状态的线程竞争自适应锁。而在自适应锁被释放时,才唤醒另一个处于节能状态的线程,使其进入自旋状态,以便竞争自适应锁。其中预设的阈值用于判断该自适应锁被竞争的激烈程度。根据本发明实施例的实现自适应锁的方法能够根据自适应锁的竞争程度选择合适的锁模式,限制竞争自适应锁的线程的数目, 从而避免了多线程在竞争同一个锁时产生的锁抖动,进而降低了系统的开销,提高了系统的性能。图3至图6具体地示出了根据本发明实施例的自适应锁的实现过程。下面以某线程(假设为线程A)尝试获取自适应锁为例,详细描述如何利用自适应锁对线程竞争进行控制。具体地,301,当线程A尝试获取自适应锁时,首先在302中判断自适应锁是否空闲。如果自适应锁空闲,则在303中线程A获取该自适应锁,并访问该自适应锁保护的资源;否则转至304。在304中,递增自适应锁的请求者计数器。305,判断请求者计数器中记录的竞争该自适应锁的线程数目是否大于阈值。一般而言,该阈值与系统的业务及其扩展性有关。如果竞争该自适应锁的线程数目小于等于阈值时,表明系统中的锁竞争不激烈, 不会造成锁抖动。那么,306,线程A进入自旋状态,即一直尝试获取自适应锁。否则,当竞争该自适应锁的线程数目大于阈值,则表明系统中的自适应锁的竞争很激烈,容易造成锁抖动。那么,需要在307中使线程A进入节能状态。当自适应锁被释放时,则在308中唤醒处于节能状态的一个线程,使其进入自旋状态,以便竞争自适应锁。唤醒线程的步骤将在下面详细描述。参照图4说明根据本发明实施例的自适应锁中线程如何进入节能状态,即线程在进入节能状态前的处理过程。401,线程A获取其上运行该线程A的处理器核对应的节能状态请求者集合保护锁。其中涉及的节能状态请求者集合是自适应锁数据结构中的一个成员变量,自适应锁数据结构中包含一个节能状态请求者集合,该节能状态请求者集合中的元素个数与系统中处理器核core的数目相同,以保证一个处理器核对应一个节能状态请求者集合。由于线程运行在处理器核上,当线程需要对自适应锁保护的资源进行操作时,会尝试获取自适应锁。如果自适应锁被其他线程所持有,则线程根据图3中的判断条件将处于自旋状态或者加入到与其上运行该线程的处理器核对应的节能状态请求者集合中。在一种实现方式下,该节能状态请求者集合为节能状态请求者队列数组,其中,节能状态请求者队列数组的元素是队列,数组中元素即队列的个数与系统中处理器核的数目相同。402,线程A顺序地加入到对应的节能状态请求者集合中,即将线程A的数据结构指针作为一个元素添加到集合中,在唤醒处于节能状态的线程的过程中也可以通过该元素 (即线程A的数据结构指针)寻找到线程A。通常,在此时设置内存屏障(memory barrier),防止系统自动对内存中的代码进行编译优化,避免了指令重新排序,从而确保线程的执行顺序。403,为线程A设置节能状态标识,这里的节能状态标识是线程描述符中一个成员变量,用于表示线程是否处于节能状态。404,解锁,即解除当前处理器核对应的节能状态请求者保护锁的保护。此时,线程A进入节能状态。下面将结合图5描述当自适应锁释放后处于节能状态的线程如何进入自旋状态以竞争获得自适应锁的过程。当自适应锁被释放时,501,首先判断是否存在非空的节能状态请求者集合,如果不存在这样的集合,则转至504,判断是否有处于自旋状态的线程竞争自适应锁。否则,转至 502。通常,此时也设置内存屏障,以防止系统自动对代码进行编译优化,避免了指令重新排序。502,选择合适的非空的节能状态请求者集合。例如,依据竞争自适应锁的线程的有序或者无序状态选择合适的非空的节能状态请求者集合。具体而言,如果竞争该自适应锁的线程是无序地竞争该自适应锁,则按照如下方式选择合适的非空的节能状态请求者集合当持有自适应锁的第一线程释放该自适应锁时,首先从与释放自适应锁的其上运行第一线程的处理器核对应的节能状态请求者集合中选择首个线程,例如第二线程;如果与其上运行该第一线程的处理器核对应的节能状态请求者集合为空,则从与其上运行该第一线程的处理器核邻近的处理器核对应的节能状态请求者集合中唤醒首个线程,例如第三线程。即按照与当前线程运行的处理器核的远近距离选择对应队列,例如从近及远。如果竞争该自适应锁的线程是有序地竞争该自适应锁,则按照如下方式选择合适的非空的节能状态请求者集合当持有自适应锁的第一线程释放该自适应锁时,遍历各非空的节能状态请求者集合,寻找票序号最小的线程所在的节能状态请求者集合,其中票序号是用于标记获取该自适应锁的顺序的标识变量。例如,当线程尝试获取自适应锁时,会递增自适应锁的锁竞争者数变量,并将该变量的值作为该线程的对应该自适应锁的票序号, 其中每当发生新增线程竞争该自适应锁,那么采用对应的锁竞争者数变量。503,于是,将该非空的节能状态请求者集合中的首个线程的节能状态标识清零, 即唤醒该首个线程,使得该首个线程从节能状态退出,进入自旋状态。504,判断是否有处于自旋状态的线程在竞争该自适应锁,如果没有,则该线程获得自适应锁的过程结束。如果存在竞争自适应锁的处于自旋状态的线程,则在505中递减自适应锁的请求者计数器,于是在506中由竞争到自适应锁的处于自旋状态的线程获取该自适应锁,并访问自适应锁保护的资源。最后,该线程获得自适应锁的过程结束。在处于节能状态的线程组成的某个集合而言,可以通过硬件指令实现从节能状态到自旋状态的唤醒过程。例如,可以利用事件监测设置指令设置硬件要监测的线性地址,然后将处理器核置为监测事件等待状态;并结合等待指令监测硬件的状态,以达到节能的目的。在本发明实施例的实现自适应锁的方法中,使用了常用的硬件指令monitor与 mwait的特性。例如,monitor指令的作用是设置硬件要监视的线性地址范围,并激活监视器,当监视事件处于挂起状态时,硬件检测指定地址范围的存储操作,并使得处理器拖出监控事件挂起状态;mwait指令是使用监视器硬件的状态,以达到节能的目的。应理解,本发明实施例并不局限于monitor和mwait的硬件指令,也包括其他硬件架构上具有相同作用的硬件指令。例如,在图6中给出了硬件指令monitor作为事件监测设置指令以及mwait作为等待指令的例子。通过运用硬件指令monitor与mwait,可以实时监测线程的节能状态标识,如果该标识被清零,则该线程就推出节能状态而进入自旋状态,从而竞争自适应锁;否则,该线程一直保持在节能状态。具体过程参见图6。601,判断线程的节能状态标识是否清零,如果没有,则转至步骤602 ;如果清零, 则转至步骤605。602,设置硬件指令monitor用于监测线程的节能状态标识,转至步骤603。603,判断线程的节能状态标识是否清零,如果没有,转至步骤604;否则转至步骤 605。
604,利用硬件指令mwait使线程保持在节能状态,从而降低处理器核的频率,降低处理器核的能耗。605,线程退出节能状态,进入自旋状态。由此可见,根据本发明实施例的实现自适应锁的方法能够根据自适应锁的竞争程度选择合适的锁模式,限制竞争自适应锁的线程的数目,从而避免了多线程在竞争同一个锁时产生的锁抖动,进而降低了系统的开销,提高了系统的性能。下面将结合图7具体描述根据本发明实施例的实现自适应锁的装置的结构。在图 7中,实现自适应锁的装置70包括确定单元71、竞争单元72和唤醒单元73。其中,确定单元 71用于当新的第一线程尝试获得自适应锁时,如果所述自适应锁空闲,则使所述第一线程获得所述自适应锁,否则使所述第一线程根据竞争所述自适应锁的激烈程度进入自旋状态或者节能状态。竞争单元72用于当所述第一线程处于节能状态,使所述第一线程等待被唤醒进入自旋状态,或者当所述第一线程处于自旋状态,使所述第一线程竞争所述自适应锁, 直到所述第一线程竞争到所述自适应锁并对所述自适应锁保护的共享资源操作完毕,释放所述自适应锁。唤醒单元73用于当所述自适应锁被释放时,如果有处于节能状态的线程, 则唤醒另一个处于节能状态的线程以使其进入自旋状态,以便与其他处于自旋状态的线程一同竞争所述自适应锁。本领域技术人员可以理解,本发明实施例的实现自适应锁的装置,在一种实现方式下,其物理形态可以是处理器核,处理器核可以是中央处理器(CPU,Central Processing Unit),或者微处理器(MPU,Micro Processor Unit)、或者数字信号处理器(DSP, Digital Signal !Processing)、或者图形处理器(GPU,图形处理器)。进一步地,确定单元71具体用于当新的第一线程尝试获得自适应锁时,如果所述自适应锁空闲,则使所述第一线程获得所述自适应锁,否则递增该自适应锁的请求者计数器中记录的竞争该自适应锁的线程数目;当该自适应锁的请求者计数器中记录的竞争该自适应锁的线程数目小于或等于阈值,使该第一线程进入自旋状态;当该自适应锁的请求者计数器中记录的竞争该自适应锁的线程数目大于阈值,使该第一线程进入节能状态。可选地,确定单元71具体用于当新的第一线程尝试获得自适应锁时,如果所述自适应锁空闲,则使所述第一线程获得所述自适应锁,否则递增所述自适应锁的请求者计数器中记录的竞争该自适应锁的线程数目;当所述自适应锁的请求者计数器中记录的竞争该自适应锁的线程数目小于或等于阈值,使所述第一线程进入自旋状态;当所述自适应锁的请求者计数器中记录的竞争该自适应锁的线程数目大于阈值,使该第一线程获取该自适应锁的节能状态请求者集合的保护锁;使该第一线程顺序地加入到该自适应锁的节能状态请求者集合中,其中该节能状态请求者集合对应于其上运行该第一线程的处理器核;使该线程被设置节能状态标识;在该节能状态请求者集合的保护锁被解除后,使该线程进入节能状态。或者,竞争单元72具体用于当所述第一线程处于节能状态,使所述第一线程等待被唤醒进入自旋状态,或者当所述第一线程处于自旋状态,使处于自旋状态的第一线程竞争该自适应锁,直到该第一线程获得该自适应锁,递减该自适应锁的请求者计数器中记录的竞争该自适应锁的线程数目,在该第一线程对该自适应锁保护的存储资源操作完毕后, 释放该自适应锁。
或者,唤醒单元73具体用于当该自适应锁被释放时,判断是否存在非空的节能状态请求者集合,如果存在,则依据竞争该自适应锁的线程的有序竞争状态或者无序竞争状态选择一个非空的节能状态请求者集合;唤醒该非空的节能状态请求者集合的首个线程, 使其进入自旋状态,以便与其他处于自旋状态的线程一同竞争所述自适应锁。进一步地,唤醒单元73具体用于当自适应锁被释放时,判断是否存在非空的节能状态请求者集合,如果存在,且当竞争该自适应锁的线程是无序地竞争该自适应锁时,则选择对应于第一处理器核(这里的“第一”没有限制之意,仅是为了方便描述而已)的节能状态请求者集合,而当对应于第一处理器核的节能状态请求者集合为空时,再根据其他处理器核与该第一处理器核之间的距离,由近及远地依次选择对应于第二处理器核的节能状态请求者集合,其中该第一处理器核上运行有释放该自适应锁的第一线程,第二处理器核为其他处理器核中与该第一处理器核的距离最近的处理器核;或者,且当竞争该自适应锁的线程是有序地竞争该自适应锁时,则通过遍历所有非空的节能状态请求者集合,寻找票序号最小的线程所在的节能状态请求者集合,该票序号是用于标记获取该自适应锁的顺序的标识变量。进一步地,唤醒单元73还用于通过硬件指令监测该非空的节能状态请求者集合的首个线程的节能状态标识是否被清零,如果该节能状态标识被清零,使该首个线程进入自旋状态,以便与其他处于自旋状态的线程一同竞争所述自适应锁。由此可见,根据本发明实施例的实现自适应锁的装置能够根据自适应锁的竞争程度选择合适的锁模式,限制竞争自适应锁的线程的数目,从而避免了多线程在竞争同一个锁时产生的锁抖动,进而降低了系统的开销,提高了系统的性能。综上所述,在多核平台上,锁竞争严重影响了系统的扩展性,使得随着核数的增加,使得系统的性能降低,产生锁震荡。针对这种情况,本发明实施例基于硬件指令的节能状态和自旋状态的动态选择技术,提出一种可扩展的自适应锁的实现技术。该技术能够根据自适应锁竞争程度,即竞争自适应锁的线程的数目多少,选择合适等锁模式,避免了线程上下文切换,降低了缓存失效次数,降低锁竞争,避免锁抖动,从而降低系统开销,提高系统性能。图8是根据本发明实施例的多核处理器系统的结构示意图。本发明实施例的多核处理器系统可以包括两个或更多个处理器核,以及共享的硬件资源。在图8中仅示意性地示出了 2个处理器核,即第一处理器核801和第二处理器核802,以及共享的硬件资源803。 其中第一处理器核801和第二处理器核802访问由自适应锁保护的所述共享的硬件资源 803。应理解,在本发明实施例的多核处理器系统中可以包括更多个处理器核。其中,各个处理器核具有平等地位,从而每个处理器核都实现根据本发明实施例的实现自适应锁的方法。具体而言,每个处理器核用于当新的第一线程尝试获得自适应锁时,如果该自适应锁空闲,则使该第一线程获得自适应锁,否则使第一线程根据竞争自适应锁的激烈程度进入自旋状态或者节能状态;当第一线程处于节能状态,使第一线程等待被唤醒进入自旋状态, 或者当第一线程处于自旋状态,使第一线程竞争自适应锁,直到第一线程竞争到自适应锁并对自适应锁保护的共享资源操作完毕,释放自适应锁;当自适应锁被释放时,如果系统中有处于节能状态的线程,则唤醒另一个处于节能状态的线程以使其进入自旋状态,以便与其他处于自旋状态的线程一同竞争所述自适应锁。
通常,当第一线程对自适应锁保护的共享资源操作完毕而自适应锁被释放时,如果系统中还有处于节能状态的线程,则第一处理器核唤醒一个处于节能状态的线程以使其进入自旋状态。具体而言,当自适应锁被释放时,第一处理器核判断是否存在非空的节能状态请求者集合,如果存在,则第一处理器核依据竞争所述自适应锁的线程的有序竞争状态或者无序竞争状态选择一个非空的节能状态请求者集合。例如,当竞争自适应锁的线程是无序地竞争所述自适应锁时,则第一处理器核选择对应于第一处理器核的节能状态请求者集合,否则根据其他处理器核与所述处理器核之间的距离,由近及远地依次选择一个对应于所述其他处理器核(例如,第二处理器核)的节能状态请求者集合,其中第一处理器核上运行有释放所述自适应锁的第一线程。当竞争所述自适应锁的线程是有序地竞争自适应锁时,则第一处理器核通过遍历所有非空的节能状态请求者集合,寻找票序号最小的线程所在的节能状态请求者集合,所述票序号是用于标记获取所述自适应锁的顺序的标识变量。 最后,第一处理器核唤醒所述非空的节能状态请求者集合的首个线程,使其进入自旋状态。在本发明实施例中,共享的硬件资源803包括共享的存储设备和/或共享的硬件高速缓存。需要说明的是,在本发明实施例中,以上多核处理器系统包括第一处理器核和第二处理器核来便于说明。应当理解的是,本发明实施例的多核处理器系统是以第一处理器核和第二处理器核作为代表来说明,本发明实施例的多核处理器系统可以包括多个处理器核,这里的多个处理器核,可以是属于同一个处理器,也可以是分别属于不同的处理器。如图9所示的本发明实施例的多核处理器系统的实际物理部署示意图。可以理解为,多核处理器系统包括一个处理器,且该处理器中包括第一处理器核和第二处理器核,或者,以多核处理器系统包括两个处理器,其中一个处理器包括第一处理器核,另一个处理器包括第二处理器核。需要说明的是,在本发明实施例中,当第一处理器核和第二处理器核分别属于不同的处理器时,该第一处理器核和第二处理器核可以访问由自适应锁保护的共享的存储设备;当第一处理器核和第二处理器核属于同一个处理器时,该第一处理器核和第二处理器可以访问由自适应锁保护的共享的存储设备和/或由自适应锁保护的共享的高速缓冲存储器。如图9所示,在一种实现方法下,处理器中的共享的高速缓冲存储器可以由一个自适应锁(为了方便描述,这里可以称为第一自适应锁)保护,以便该处理器中的多个处理器核访问由第一自适应锁保护的共享的高速缓冲存储器,以及,互联网络上的共享存储设备也可以由另一个自适应性锁保护(为了方便描述,这里可以称为第二自适应锁),以便多核处理器系统中的多个处理器核能访问由第二自适应锁保护的所述共享存储设备。在实际应用中,多核处理器系统可以包括一个或多个处理器,如果包括仅一个处理器,则该处理器中包括多个处理器核。其中,每个处理器包括一个或多个处理器核。可选的,所述每个处理器可以进一步包括共享的硬件高速缓存,所述处理器通过互联网络访问存储设备,这里的存储设备可以是共享给多个处理器核的,这里的存储设备可以是一个或多个。需要说明的是,在本发明实施例中,处理器之间通过互联网络访问共享的存储设备, 该互联网络可以是总线或者是互联芯片,且该共享的存储设备可以是内存,如memory,或者是外存,如磁盘。在本发明实施例中,多核处理器系统中包含的共享的硬件资源可以是共享的存储设备,或者共享的硬件高速缓存,或者是共享的存储设备和共享的硬件高速缓存,其中,共享的存储设备在处理器外部,通过总线与处理器核连接,共享的硬件高速缓存在处理器内部。应当理解的是,在一种实现方式下,本发明实施例的处理器核可以包括实现自适应锁的逻辑单元,这里的实现自适应锁的逻辑单元可以是软件实现的,也可以是硬件实现的,也可以是软硬结合实现的。如果实现自适应锁的逻辑单元是软件实现的话,可以理解成,当通用的处理器核通过互联网络访问内存,在加载并执行该内存中存储的一段调度程序代码后,则具有本发明实施例的处理器核的功能。应当理解的是,本发明实施例的处理器核上运行有操作系统,该操作系统具体可以是Linux系统,或者Unix系统,也可以是 Windows等具有机器硬件和软件资源管理控制系统。需要说明的是,在本发明实施例中,图7所示的实现自适应锁的装置,在一种实现方式下,其物理形态可以是处理器核,可以通过在处理器核中包含实现自适应锁的逻辑单元(图9中用方框示意)实现,且所述实现自适应锁的逻辑单元可以是软件实现的,也可以是硬件实现的,也可以是软硬结合实现的。或者,在另一种实现方式下,图7所示的实现自适应锁的装置对应于处理器核中的实现自适应锁的逻辑单元(图9中用方框示意)。本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统、 装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。在本申请所提供的几个实施例中,应该理解到,所揭露的系统、装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。 而前述的存储介质包括U盘、移动硬盘、只读存储器(ROM,Read-only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述,仅为本发明的具体实施方式
,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应所述以权利要求的保护范围为准。
权利要求
1.一种实现自适应锁的方法,其特征在于,包括当新的第一线程尝试获得自适应锁时,如果所述自适应锁空闲,则使所述第一线程获得所述自适应锁,否则使所述第一线程根据竞争所述自适应锁的激烈程度进入自旋状态或者节能状态;当所述第一线程处于节能状态,使所述第一线程等待被唤醒进入自旋状态,或者当所述第一线程处于自旋状态,使所述第一线程竞争所述自适应锁,直到所述第一线程竞争到所述自适应锁并对所述自适应锁保护的共享资源操作完毕,释放所述自适应锁;当所述自适应锁被释放时,如果有处于节能状态的线程,则唤醒另一个处于节能状态的线程以使其进入自旋状态,以便与其他处于自旋状态的线程一同竞争所述自适应锁。
2.根据权利要求1所述的方法,其特征在于,所述使所述第一线程根据竞争所述自适应锁的激烈程度进入自旋状态或者节能状态包括递增所述自适应锁的请求者计数器中记录的竞争该自适应锁的线程数目;当所述自适应锁的请求者计数器中记录的竞争该自适应锁的线程数目小于或等于阈值,使所述第一线程进入自旋状态;当所述自适应锁的请求者计数器中记录的竞争该自适应锁的线程数目大于阈值,使所述第一线程进入节能状态。
3.根据权利要求1或2所述的方法,其特征在于,所述使所述第一线程进入节能状态包括使所述第一线程获取所述自适应锁的节能状态请求者集合的保护锁;使所述第一线程顺序地加入到所述自适应锁的节能状态请求者集合中,其中所述节能状态请求者集合对应于其上运行所述第一线程的处理器核;使所述线程被设置节能状态标识;在所述节能状态请求者集合的保护锁被解除后,使所述线程进入节能状态。
4.根据权利要求1至3中任一项所述的方法,其特征在于,所述使所述第一线程竞争所述自适应锁,直到所述第一线程竞争到所述自适应锁并对所述自适应锁保护的共享资源操作完毕,释放所述自适应锁包括使处于自旋状态的所述第一线程竞争所述自适应锁,直到所述第一线程获得所述自适应锁,递减所述自适应锁的请求者计数器中记录的竞争所述自适应锁的线程数目,在所述第一线程对所述自适应锁保护的共享资源操作完毕后,释放所述自适应锁。
5.根据权利要求1至4中任一项所述的方法,其特征在于,所述当所述自适应锁被释放时,如果有处于节能状态的线程,则唤醒另一个处于节能状态的线程以使其进入自旋状态包括当所述自适应锁被释放时,判断是否存在非空的节能状态请求者集合,如果存在,则依据竞争所述自适应锁的线程的有序竞争状态或者无序竞争状态选择一个非空的节能状态请求者集合;唤醒所述非空的节能状态请求者集合的首个线程,使其进入自旋状态。
6.根据权利要求5所述的方法,其特征在于,所述依据竞争所述自适应锁的线程的有序竞争状态或者无序竞争状态选择非空的节能状态请求者集合包括当竞争所述自适应锁的线程是无序地竞争所述自适应锁时,则选择对应于第一处理器核的节能状态请求者集合,而当对应于第一处理器核的节能状态请求者集合为空时,再根据其他处理器核与所述第一处理器核之间的距离,由近及远地依次选择对应于第二处理器核的节能状态请求者集合,其中所述第一处理器核上运行有释放所述自适应锁的第一线程,第二处理器核为所述其他处理器核中与所述第一处理器核的距离最近的处理器核;当竞争所述自适应锁的线程是有序地竞争所述自适应锁时,则通过遍历所有非空的节能状态请求者集合,寻找票序号最小的线程所在的节能状态请求者集合,所述票序号是用于标记获取所述自适应锁的顺序的标识变量。
7.根据权利要求5或6所述的方法,其特征在于,所述唤醒所述非空的节能状态请求者集合的首个线程,使其进入自旋状态包括通过硬件指令监测所述非空的节能状态请求者集合的首个线程的节能状态标识是否被清零,如果所述节能状态标识被清零,使所述首个线程进入自旋状态。
8.一种实现自适应锁的装置,其特征在于,包括确定单元,用于当新的第一线程尝试获得自适应锁时,如果所述自适应锁空闲,则使所述第一线程获得所述自适应锁,否则使所述第一线程根据竞争所述自适应锁的激烈程度进入自旋状态或者节能状态;竞争单元,用于当所述第一线程处于节能状态,使所述第一线程等待被唤醒进入自旋状态,或者当所述第一线程处于自旋状态,使所述第一线程竞争所述自适应锁,直到所述第一线程竞争到所述自适应锁并对所述自适应锁保护的共享资源操作完毕,释放所述自适应锁;唤醒单元,用于当所述自适应锁被释放时,如果有处于节能状态的线程,则唤醒另一个处于节能状态的线程以使其进入自旋状态,以便与其他处于自旋状态的线程一同竞争所述自适应锁。
9.根据权利要求8所述的装置,其特征在于,所述确定单元具体用于当新的第一线程尝试获得自适应锁时,如果所述自适应锁空闲,则使所述第一线程获得所述自适应锁,否则递增所述自适应锁的请求者计数器中记录的竞争该自适应锁的线程数目;当所述自适应锁的请求者计数器中记录的竞争该自适应锁的线程数目小于或等于阈值,使所述第一线程进入自旋状态;当所述自适应锁的请求者计数器中记录的竞争该自适应锁的线程数目大于阈值,使所述第一线程进入节能状态。
10.根据权利要求8或9所述的装置,其特征在于,所述确定单元具体用于当新的第一线程尝试获得自适应锁时,如果所述自适应锁空闲,则使所述第一线程获得所述自适应锁,否则递增所述自适应锁的请求者计数器中记录的竞争该自适应锁的线程数目;当所述自适应锁的请求者计数器中记录的竞争该自适应锁的线程数目小于或等于阈值,使所述第一线程进入自旋状态;当所述自适应锁的请求者计数器中记录的竞争该自适应锁的线程数目大于阈值,使所述第一线程获取所述自适应锁的节能状态请求者集合的保护锁;使所述第一线程顺序地加入到所述自适应锁的节能状态请求者集合中,其中所述节能状态请求者集合对应于其上运行所述第一线程的处理器核;使所述线程被设置节能状态标识;在所述节能状态请求者集合的保护锁被解除后,使所述线程进入节能状态。
11.根据权利要求8至10中任一项所述的装置,其特征在于,所述竞争单元具体用于当所述第一线程处于节能状态,使所述第一线程等待被唤醒进入自旋状态,或者当所述第一线程处于自旋状态,使处于自旋状态的所述第一线程竞争所述自适应锁,直到所述第一线程获得所述自适应锁,递减所述自适应锁的请求者计数器中记录的竞争所述自适应锁的线程数目,在所述第一线程对所述自适应锁保护的共享资源操作完毕后,释放所述自适应锁。
12.根据权利要求8至11中任一项所述的装置,其特征在于,所述唤醒单元具体用于 当所述自适应锁被释放时,判断是否存在非空的节能状态请求者集合,如果存在,则依据竞争所述自适应锁的线程的有序竞争状态或者无序竞争状态选择一个非空的节能状态请求者集合;唤醒所述非空的节能状态请求者集合的首个线程,使其进入自旋状态,以便与其他处于自旋状态的线程一同竞争所述自适应锁。
13.根据权利要求12所述的装置,其特征在于,所述唤醒单元具体用于当所述自适应锁被释放时,判断是否存在非空的节能状态请求者集合,如果存在,且竞争所述自适应锁的线程是无序地竞争所述自适应锁时,则选择对应于第一处理器核的节能状态请求者集合,而当对应于第一处理器核的节能状态请求者集合为空时,再根据其他处理器核与所述第一处理器核之间的距离,由近及远地依次选择对应于第二处理器核的节能状态请求者集合,其中所述第一处理器核上运行有释放所述自适应锁的第一线程,第二处理器核为所述其他处理器核中与所述第一处理器核的距离最近的处理器核;或者,且当竞争所述自适应锁的线程是有序地竞争所述自适应锁时,则通过遍历所有非空的节能状态请求者集合,寻找票序号最小的线程所在的节能状态请求者集合,所述票序号是用于标记获取所述自适应锁的顺序的标识变量;通过硬件指令监测所述非空的节能状态请求者集合的首个线程的节能状态标识是否被清零,如果所述节能状态标识被清零,使所述首个线程进入自旋状态以便与其他处于自旋状态的线程一同竞争所述自适应锁。
14.一种多核处理器系统,其特征在于,包括两个或更多个处理器核,以及共享的硬件资源;所述两个或更多个处理器核访问由自适应锁保护的所述共享的硬件资源;其中每个所述处理器核用于当新的第一线程尝试获得自适应锁时,如果所述自适应锁空闲,则使所述第一线程获得所述自适应锁,否则使所述第一线程根据竞争所述自适应锁的激烈程度进入自旋状态或者节能状态;当所述第一线程处于节能状态,使所述第一线程等待被唤醒进入自旋状态,或者当所述第一线程处于自旋状态,使所述第一线程竞争所述自适应锁,直到所述第一线程竞争到所述自适应锁并对所述自适应锁保护的共享的硬件资源操作完毕,释放所述自适应锁;当所述自适应锁被释放时,如果有处于节能状态的线程,则唤醒另一个处于节能状态的线程以使其进入自旋状态,以便与其他处于自旋状态的线程一同竞争所述自适应锁。
15.根据权利要求14所述的系统,其特征在于,所述共享的硬件资源包括共享的存储设备和/或共享的硬件高速缓存;当所述两个或更多个处理器核分别属于不同的处理器时,所述两个或更多个处理器核访问由所述自适应锁保护的所述共享的存储设备; 或者,当所述两个或更多个处理器核属于同一个处理器时,所述两个或更多个处理器核访问由所述自适应锁保护的所述共享的存储设备和/或由所述自适应锁保护的共享的硬件高速缓存。
全文摘要
本发明提供了一种实现自适应锁的方法和装置以及多核处理器系统。其中,实现自适应锁的方法,包括当新的第一线程尝试获得自适应锁时,如果自适应锁空闲,则使第一线程获得自适应锁,否则使第一线程根据竞争自适应锁的激烈程度进入自旋状态或者节能状态;当第一线程处于节能状态,使第一线程等待被唤醒进入自旋状态,或者当第一线程处于自旋状态,使第一线程竞争自适应锁,直到第一线程竞争到自适应锁并对自适应锁保护的共享资源操作完毕,释放自适应锁;当自适应锁被释放时,如果有处于节能状态的线程,则唤醒另一个处于节能状态的线程以使其进入自旋状态,以便与其他处于自旋状态的线程一同竞争自适应锁。
文档编号G06F9/38GK102566979SQ201110394780
公开日2012年7月11日 申请日期2011年12月2日 优先权日2011年12月2日
发明者吴瑾, 崔岩, 秦岭, 陈渝 申请人:华为技术有限公司, 清华大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1