专利名称:管理资源锁的制作方法
技术领域:
本发明涉及资源锁的管理。具体地,其涉及提高以两种操作模式之一 进行操作的资源锁的效率。
背景技术:
软件锁是一种机制,其允许一个软件线程执行一个代码块,而不允许 所有其它线程同时执行该同一代码块。被允许执行代码的线程被称为"拥 有"该锁,并且该代码块被称为同步块。锁被用于确保针对在线程之间共 享的同步块的确定性的程序行为、线程安全特性。对于线程安全的此种提 供的连累是锁处理中增加的开销。首先,锁定使得代码的各部分串行化,
这样减少了程序在多处理器(MP)机器上高效运行的可能性。例如,一 个或多个处理器可能在处理锁的线程执行同步块的同时被阻止进入代码块 (并且从而被阻止进行任何工作)。这被称为竟争。第二,关联于锁定的 操作具有很高开销,尤其是当实际竟争不存在的时候。在此情形中,尽管 竟争可能实际上不存在,但由于出现竟争的可能性而仍需要锁定。
两类锁被使用"轻量级锁"以及"重量级锁"。轻量级锁当竟争不 存在时避免了高开销,但当竟争存在时执行效果不佳。轻量级锁通常使用 一个或多个基本机器指令来实现,并与良好的硬件支持紧密关联。重量级 锁当竟争不存在时具有相对较高的开销,但当竟争存在时执行效果非常好。 重量级锁通常用软件实现(诸如通过对线程库、内核或操作系统的调用), 并且更多地通过诸如排队和调度器之类的算法而不是硬件所支持。重量级 锁需要大得多的存储器存储以及多得多的机器操作。
在某些软件中,软件锁具有轻量级模式和重量级模式之间的双才莫态存 在。在论文"A study of Locking Objects with Bimodal Fields" ( TamiyaOnodera和KiyokuniKawachiya, 1999)中详细探究了锁的双模态存在。 首先,锁被存储作为轻量级锁。当竟争发生时,锁被改变为重量级锁。从 轻量级到重量级的这种模式改变被称为锁膨胀(inflation)。当满足某些 条件时,反向转换(从重量级到轻量级模式的收缩(deflation))发生。 这些条件之一是,锁不再被竟争。膨胀和收缩的过程允许两种情形的最好 情况当锁膨胀时,它在竟争存在时4艮好地执行;以及当锁收缩时,它在 竟争不存在时很好地执行。典型地, 一旦锁停止被竟争时,收缩就会发生。这被称为快速收缩, 因为一旦出现缺少其它竟争的情况,收缩就会发生。这样在竟争很少发生 的情况下可以是高效的,但是对于锁而言在被竟争和无竟争周期之间的高 频率改变(间歇性竟争)可以导致相应的锁的高频率膨胀和收缩。间歇性 是一种混乱现象,其中一种状态的周期不时被另一状态的周期所打断。这 种情形可以在小规模上看出,其中锁在被竟争和无竟争周期之间频繁地改 变状态,我们将其称为间歇性竟争,或者这种情形可以在大规模上看出, 其中高度竟争的长周期与无竟争的长周期以及间歇性竟争的周期相混合。 展现出无竟争、高度竟争和间歇性竟争的周期的锁被称为间歇性锁。膨胀 是一种相对昂贵的过程(具有较大开销),并且频繁的膨胀本身就是运行 中的软件应用中的不佳性能的原因。因此,间歇性竟争导致快速收缩成为 低效的算法,因为其导致了频繁的膨胀。出于此原因,软件可以实现对快速收缩策略的修改,其中,对于每个 锁,维持对锁被膨胀的次数的计数。当此计数超过一阈值时,锁永久性地 被阻止进行收缩。这被称为"粘性"膨胀。因此,间歇性锁将最终成为被 膨胀的,并保持被膨胀,但是对于非间歇性锁(即,或者被竟争或者非竟 争但并非二者同时存在的锁),膨胀和收缩的双模态行为确保该锁处于适当的模式。粘性锁解决了由于间歇性竟争导致的高频率膨胀的问题,但是 一旦粘性膨胀已经发生,则间歇性锁没有被完全优化,因为在该锁停止示 出间歇性竟争的情形中没有机会使该锁收缩。间歇性锁可以体验到高度混 乱的行为有时为无竟争;有时为被竟争;并且有时为间歇性。在间歇性周期期间,对于该锁而言,取决于竟争的程度或者被膨胀或者被收缩将是 最佳的。在无竟争周期期间,对于该锁而言被收缩将是最佳的。在被竟争 周期期间,对于该锁而言被膨胀将是最佳的。不过,粘性膨胀策略没有考 虑这些情形。
一种对粘性膨胀的改进可用,其在某个时段之后将膨胀计数重置为零。 在该改进可以在某个时段之后去除粘性膨胀的缺陷的同时,难于得出对适 当时段的定义。例如,计数可以在用于未使用的软件实体(诸如对象)的 处理的无用信息收集程序例程的每次执行之后被重置。不过,在锁的行为 和无用信息收集程序的发生之间不存在形式上的联系。此外,用于决定何 时应该重置锁的膨胀计数的好的标准不存在。具有所迷改进的粘性膨胀还
使得两个参数成为必要用于确定何时膨胀应该为粘性的参数;以及用于 确定何时收缩应该发生的阈值参数。
因此,提供一种用于锁的膨胀和收缩的方案将是有利的,其提供了保 持双模态的间歇性锁,允许它们当竟争时被膨胀以及当无竟争时被收缩, 以及还允许当竟争为间歇性的时候,对于锁而言取决于竟争的程度而保持 或者被膨胀或者被收缩。
发明内容
因而,本发明在第一方面提供了一种操作用于控制由多个资源请求器 对资源的访问的资源锁的方法,所述资源锁以竟争高效(重量级)操作模 式进行操作,并且所述方法响应于来自一个资源请求器的占有资源锁的请 求,所述方法包括以下步骤使竟争高效操作模式中的资源锁占有的总数 的计数递增;响应于关于对资源的访问未被多于一个资源请求器所竟争的 确定,执行以下步骤a)使竟争高效操作模式中的资源锁的无竟争占有的 数量的计数递增;b)将竟争比率计算为所述竟争高效操作模式中的无竟 争占有的数量除以所述竟争高效操作模式中的占有总数;以及c)响应于 关于所述竟争比率满足阈值竟争比率的确定,使得所述资源锁改变到无竟 争高效(轻量级)操作模式。以此方式,资源锁的性能被提高。当资源锁为无竟争时,它保持为无 竟争高效模式。当资源锁被竟争时,它保持为竟争高效模式。当资源锁为 间歇性时(即,资源锁有时被竟争有时无竟争),它仅当竟争比率不满足 阔值竟争比率时将被改变为无竟争高效操作模式。否则,资源锁将保持为 竟争高效操作模式。资源锁处于竟争高效操作模式以达到较高竟争比率, 而没有了持续地进入和离开竟争高效操作模式的不必要的成本。当需要较 低竟争比率时,资源锁被改变为无竟争高效操作模式。当资源锁为间歇性 时,避免了由竟争的突然改变所导致的在操作模式之间进行改变的频繁循 环,并且作为替代,此类循环通过竟争比率的较慢改变特性而被抑制。因 此,提供了用于锁的膨胀和收缩的方案,所述方案允许间歇性锁保持双冲莫 态,从而允许它们当竟争时被膨胀以及当无竟争时被收缩,以及所述方案允许当锁为间歇性时,锁取决于竟争的程度或者^L膨胀或者被收缩。竟争 程度是与阈值竟争比率相比较而言的竟争比率。优选地,关于对所述资源锁的访问未被多于一个资源请求器所竟争的 确定包括关于资源请求器获得对所述资源锁的快速占有的确定。优选地,使得所述资源锁改变到无竟争高效(轻量级)操作模式包括 存储所述竟争高效操作模式中的无竟争占有的数量的计数和所述竟争高效 操作模式中的占有的总数的计数,以用于随后的竟争高效(重量级)操作 模式。因而,本发明在第二方面提供了 一种操作用于控制由多个资源请求器 对资源的访问的资源锁的系统,所述资源锁以竟争高效(重量级)操作模 式进行操作,并且所述系统响应于来自一个资源请求器的占有资源锁的请 求,所述系统包括用于使竟争高效操作模式中的资源锁占有的总数的计 数递增的装置;响应于关于对资源的访问未被多于一个资源请求器所竟争 的确定,用于以下过程的装置a)使竟争高效操作模式中的资源锁的无竟 争占有的数量的计数递增;b)将竟争比率计算为所述竟争高效操作模式 中的无竟争占有的数量除以所述竟争高效操作模式中的占有总数;以及c) 响应于关于所述竟争比率满足阈值竟争比率的确定,使得所述资源锁改变到无竟争高效(轻量级)操作模式。
因而,本发明在第三方面提供了一种装置,包括中央处理单元;存 储器子系统;输入/输出子系统;使所述中央处理单元、所述存储器子系统、 所述输入/输出子系统互连的总线子系统;以及如上所述的系统。
因而,本发明在第四方面提供了一种计算机程序单元,包括计算机程 序代码,用于当被加载到计算机系统并在其上执行时使得计算机执行如上 所述的方法的步骤。
现在将仅通过示例并参考附图描述本发明的优选实施例,在附图中
图l是适用于本发明实施例的操作的计算机系统的框图2是根据本发明优选实施例的、包括锁模式转换器的用于资源的资
源锁的才医图;以及
图3是根据本发明优选实施例的、针对以竟争高效操作模式进行操作
的图2的资源锁的图2的锁模式转换器的方法的流程图。
具体实施例方式
图l是适用于本发明实施例的操作的计算机系统的框图。中央处理单 元(CPU )102经由数据总线108通信连接于存储装置104和输入/输出(I/O ) 接口 106。存储装置104可以是任意读/写存储设备,诸如随机存取存储器 (RAM)或非易失性存储设备。非易失性存储设备的示例包括磁盘或磁带 存储设备。1/0接口 106是用于数据的输入或输出、或用于数据的输入和 输出二者的到设备的接口 。可连接于I/O接口 106的I/O设备的示例包括 键盘、鼠标、显示器(诸如监视器)以及网络连接。
图2是根据本发明优选实施例的、包括锁模式转换器210的用于资源 208的资源锁204的框图。资源锁204是用于控制多个资源请求器202对 资源208的访问的软件或硬件组件。资源208可以是任何共享资源,诸如 包括程序代码的可执行软件例程。每个资源请求器202是请求通过占有资源锁204对资源进行访问的实体。例如,资源请求器202可以是软件线程。 资源锁204向已占有资源锁204的资源请求器202提供对资源208的访问。 当被一个资源请求器202所占有时,其它资源请求器仅可以通过请求以及 随后占有资源锁204来访问资源208。
资源锁204以两种操作模式进行操作竟争高效操作模式,诸如重量 级操作模式;以及无竟争高效操作模式,诸如轻量级操作模式。这些操作 模式的意义在上文详细描述。资源锁204的特定操作模式与锁相关联地被 记录为操作模式206。在使用中,资源锁204能够通过诸如膨胀的过程从 无竟争高效操作模式向竟争高效操作模式进行改变,如本领域中所公知的 那样。类似地,资源锁204能够通过诸如收缩的过程从竟争高效操作模式 向无竟争高效操作模式进行改变,同样如本领域中所公知的那样。锁模式 转换器210可操作用于影响资源锁204的操作模式206的改变。锁模式转 换器210是被示意性示出为与资源锁204进行通信的软件或硬件组件。可 替换地,锁模式转换器210可以被提供作为资源锁204的功能、或者作为 运行时环境或操作系统的功能。锁模式转换器210包括竟争高效操作模式 数据212,其包括当资源锁204以竟争高效操作模式进行操作的时候与资 源锁204相关的信息。竟争高效操作模式数据212包括竟争高效操作模 式中的无竟争占有的数量218;竟争高效操作模式中的占有的总数220;竟 争高效操作模式中的竟争比率214;以及阈值竟争比率216。这些数据在以 下更详细地考虑。
竟争高效操作模式中的无竟争占有的数量218是在竟争高效操作模式 中由任意资源请求器202对资源锁204的占有数量的计数,其中所述占有 未被任意其它资源请求器202所竟争。用于维持无竟争占有的数量218的 值的方法被包括在以下关于图3的描述中,并且包括每当在竟争高效操 作模式中对资源锁204的占有未被任意其它资源请求器202所竟争的时候 使无竟争占有的数量218递增(由锁的所有者对锁的递归输入可以被排除 在计数之外)。
竟争高效操作模式中的占有的总数220是在竟争高效操作模式中由任意资源请求器做出的占有的总数的计数。用于维持占有的总数220的值的 方法被包括在以下关于图3的描述中,并且包括每当在竟争高效操作模 式中资源锁204被占有的时候使占有的总数220递增。竟争比率214是在竟争高效操作模式中对资源锁204的竟争的适当比 率的度量。竟争比率214可以通过用占有的总数220除以无竟争占有的数 量218来计算。阈值竟争比率216是竟争比率的预定义值,其被选择从而当竟争高效 操作模式中的竟争比率214的值满足阈值竟争比率216的值时,资源锁204 的操作模式206被改变为无竟争高效操作模式。以此方式,资源锁204的性能得到提高。当资源锁204为无竟争时(即, 竟争比率214满足阔值竟争比率216),资源锁204保持为无竟争高效模 式。当资源锁204被竟争时(即,竟争比率214不满足阈值竟争比率216 ), 资源锁204保持为竟争高效^t式。当资源锁204为间歇性时(即,资源锁 有时被竟争有时无竟争),资源锁204仅当竟争比率214不满足阈值竟争 比率216时将被改变为无竟争高效操作模式。否则,资源锁204将保持为 竟争高效操作模式。这样做是有效的,因为对于高竟争比率来说,使资源 锁204处于竟争高效操作模式更好(没有了持续地进入和离开竟争高效操 作模式的不必要的成本,即膨胀开销),以及对于低竟争比率来说,为了 在大部分时间里使用无竟争高效(轻量级)操作模式的益处,当偶尔需要 竟争高效操作模式时接受改变为竟争高效操作模式(膨胀)的成本更好。 同样,当资源锁204为间歇性时,避免了由竟争的突然改变所导致的在操 作模式之间进行改变的频繁循环,并且作为替代,此类循环通过竟争比率 214的较慢改变特性而被抑制。本领域技术人员将理解,资源请求器202占有资源锁204的过程可以 使用被称为"自旋锁"的资源锁占有方案来实现。通过使用此方案,当资 源锁204在竟争高效操作模式中被竟争时,尝试占有资源锁204的资源请 求器202在确定资源锁204确实被竟争之前执行两次或更多次重复的尝试 来占有该锁。例如,在资源请求器202是软件线程的情形中,该线程在识别出资源正净皮使用之前第一次尝试占有资源锁204。随后,该线程在尝试 对资源锁204的随后占有之前将等待短时间(被称为"忙碌等待,,)。在 该线程断定资源锁204确实被竟争并且该线程将停止(block)之前该过程 可以重复若干次。如果资源请求器202在断定资源被竟争之前占有资源锁 204,则该占有被称为"快速,,占有。可替换地,如果资源请求器202仅在 停止之后占有资源锁204,则该占有被称为"慢速"占有。出于维护无竟 争占有的数量218的目的,"快速"占有被认为是无竟争的占有。出于维 护无竟争占有的数量218的目的,"慢速"占有被认为是被竟争的占有。图3是根据本发明优选实施例的、针对以竟争高效操作模式进行操作 的图2的资源锁204的图2的锁^^莫式转换器210的方法的流程图。图3的 方法响应于来自资源请求器202的占有资源锁204的请求。在步骤302, 竟争高效操作模式中的锁占有的总数220被递增。在步骤304,所述方法 确定对资源锁204的当前占有是否未被多于一个资源请求器202所竟争。 例如,如果在用于锁占有的自旋锁方案中对资源锁204的当前占有是"快 速"占有,则对资源锁204的当前占有未被竟争。如果对资源锁204的当 前占有被多于一个资源请求器202所竟争(诸如"慢速,,占有),则所述 方法终止。如果步骤304确定当前占有未被多于一个资源请求器202所竟 争(诸如"快速"占有),则所述方法进行到步骤306,其中竟争高效模 式中的无竟争占有的数量218被递增。随后,在步骤308,所述方法将竟 争比率214计算为竟争高效模式中的占有总数220除以竟争高效模式中的 无竟争占有的数量218。在步骤310,所述方法确定竟争比率214是否满足 阈值比率216,诸如通过超过阈值比率216来确定。仅当竟争比率214不 满足阈值比率216时,锁4莫式转换器210将资源锁204的操作模式206改 变为无竟争高效操作模式。可替换地, 一旦锁被退出,则收缩可以发生; 在此时,可以确定锁是否可以被收缩(它是确实被竟争、还是存在处于"等 待"状态的其它资源请求器)。如果锁可以被收缩,则它被收缩。仅当资源锁204处于竟争高效操作模式时才进行对竟争比率214的计 算和对于竟争比率214和阈值竟争比率216的比较。在无竟争高效操作模式中,不进行上述计算和比较,因为在无竟争高效操作^^莫式中进行这些计 算和比较的资源开销太大,并构成了不可接受的性能负担。在本发明的可替换实施例中,当锁模式转换器210将资源锁204的操 作模式206从竟争高效操作模式改变为无竟争高效操作模式时,竟争高效 操作模式中的无竟争占有的数量218和竟争高效操作模式中的占有的总数 220被存储于数据存储库。数据存储库可以组成锁本身的一部分,诸如构 成轻量级锁的"关联词(lockword),,。以此方式,这些值持续用于资源 锁204的操作模式206的改变。
权利要求
1.一种操作用于控制由多个资源请求器对资源的访问的资源锁的方法,所述资源锁以竞争高效操作模式也即重量级操作模式进行操作,并且所述方法响应于来自一个资源请求器的占有资源锁的请求,所述方法包括以下步骤使竞争高效操作模式中的资源锁占有的总数的计数递增;响应于关于对资源的访问未被多于一个资源请求器所竞争的确定,执行以下步骤a)使竞争高效操作模式中的资源锁的无竞争占有的数量的计数递增;b)将竞争比率计算为所述竞争高效操作模式中的无竞争占有的数量除以所述竞争高效操作模式中的占有总数;以及c)响应于关于所述竞争比率满足阈值竞争比率的确定,使得所述资源锁改变到无竞争高效操作模式也即轻量级操作模式。
2. 根据权利要求l所述的方法,其中关于对所述资源锁的访问未被多 于一个资源请求器所竟争的确定包括关于资源请求器获得对所述资源锁 的快速占有的确定。
3. 根据权利要求l所述的方法,其中使得所述资源锁改变到无竟争高 效操作模式也即轻量级操作模式包括存储所述竟争高效操作模式中的无 竟争占有的数量的计数和所述竟争高效操作模式中的占有的总数的计数, 以用于随后的竟争高效操作模式也即重量级操作模式中。
4. 一种操作用于控制由多个资源请求器对资源的访问的资源锁的系 统,所述资源锁以竟争高效操作模式也即重量级操作模式进行操作,并且 所迷系统响应于来自一个资源请求器的占有资源锁的请求,所述系统包括用于使竟争高效操作模式中的资源锁占有的总数的计数递增的装置; 响应于关于对资源的访问未被多于一个资源请求器所竟争的确定,用 于以下过程的装置a)使竟争高效操作模式中的资源锁的无竟争占有的数量的计数递增;b) 将竟争比率计算为所述竟争高效操作模式中的无竟争占有的数量 除以所述竟争高效操作模式中的占有总数;以及c) 响应于关于所述竟争比率满足阈值竟争比率的确定,使得所述资源 锁改变到无竟争高效操作模式也即轻量级操作模式。
5. 根据权利要求4所述的系统,其中关于对所述资源锁的访问未被多 于一个资源请求器所竟争的确定包括关于资源请求器获得对所述资源锁 的快速占有的确定。
6. 根据权利要求4所述的系统,其中用于使得所述资源锁改变到无竟 争高效操作模式也即轻量级操作模式的装置包括用于存储所述竟争高效 操作模式中的无竟争占有的数量的计数和所述竟争高效操作模式中的占有 的总数的计数,以用于随后的竟争高效操作模式也即重量级操作模式中。
7. —种装置,包括中央处理单元;存储器子系统;输入/输出子系 统;使所述中央处理单元、所述存储器子系统、所述输入/输出子系统互连 的总线子系统;以及如权利要求4至6中任一项所述的系统。
8. —种计算机程序单元,包括计算机程序代码,用于当被加载到计算 机系统并在其上执行时使得计算机执行如权利要求1至3中任一项所述的 方法的步骤。
全文摘要
一种操作用于控制由多个资源请求器对资源的访问的资源锁的方法,所述资源锁以竞争高效(重量级)操作模式进行操作,并且所述方法响应于来自一个资源请求器的占有资源锁的请求,所述方法包括以下步骤使竞争高效操作模式中的资源锁占有的总数的计数递增;响应于关于对资源的访问未被多于一个资源请求器所竞争的确定,执行以下步骤a)使竞争高效操作模式中的资源锁的无竞争占有的数量的计数递增;b)将竞争比率计算为竞争高效操作模式中的无竞争占有的数量除以竞争高效操作模式中的占有总数;以及c)响应于关于所述竞争比率满足阈值竞争比率的确定,使得所述资源锁改变到无竞争高效(轻量级)操作模式。
文档编号G06F9/46GK101253483SQ200680031537
公开日2008年8月27日 申请日期2006年9月6日 优先权日2005年9月10日
发明者D·K·西格尔特 申请人:国际商业机器公司