当前位置: 首页 > 专利查询>英特尔公司专利>正文

多处理器计算机上的JAVA线程同步的灵活加速方法和装置制造方法及图纸

技术编号:2862501 阅读:207 留言:0更新日期:2012-04-11 18:40
本发明专利技术提供了一种方法和机器可读介质,用于测量线程对锁的请求,以根据对所述锁的争用程度来区分“热”锁和“冷”锁。一种硬件加速器管理对热锁的访问,以提高性能。(*该技术在2022年保护过期,可自由使用*)

【技术实现步骤摘要】
【国外来华专利技术】
本专利技术涉及用于提高Java线程同步的性能的软件和硬件方法。
技术介绍
运行在服务器、甚至高端工作站上的Java软件必须被设计为允许由大量CPU(中央处理单元)来执行。Java通常以线程执行。线程是运行在程序内的单个串行控制流。线程也被称为执行上下文或轻量级进程。可以同时运行多个线程。线程将共享资源,例如全局数据、存储器、代码的临界部分、以及其它资源。所共享的资源具有相关的“锁”。为了访问资源,线程必须获得该资源的锁。制约性能的主要瓶颈就是如何实现多线程对同一共享资源的访问的“锁定”或同步。在Java程序中,广为使用的访问控制是“监控器”结构。软件实现的底层Java虚拟机(JVM)为Java程序提供了运行时间环境,并负责实现所需要的锁定机制。根据JVM所采用的实现方法和平台中对同步原语的硬件支持,运行在多处理器服务器上的企业级电子商务Java软件可能存在着各种各样的性能。在大多数处理器中实施的、用于同步的常用硬件技术是由执行诸如“XCHG”一类的指令而引起的原子性读-修改-写总线周期。在对锁(因此,对这些锁所保护的资源)的争用很激烈的环境中,多个CPU在尝试确保同一个锁或同一组锁的所有权时,可以同时执行锁定的读-修改-写操作。这被称为“惊群(thundering herd)”问题,它导致激烈的系统总线争用。因此,多处理器的可扩展性受到了限制。结果,带来严重的性能损失。在下面的表1中给出了用于解释这个问题的样本代码。1 //available.If it is 1,another process is in the critical section. 2 // 3 spin_lock4mov ar.ccv=0 //cmpxchg looks for avail(0)5mov r2=1 //cmpxchg sets to held(1)6 spin7ld8 41=;;//get lock in shared state8cmp.nep1,p0=Ref.1,r2 //is lock held(ie.Lock==9 1)?10 (p1) br.cond.spnt spin;; //yes,continue spinning1112 cmpxchg8.arqrl=,r2;; //attempt to grab lock13 cmp.ne p1,p0=Ref.1,r2//was lock empty?14 (p1) br.cond.spnt spin;; //bummer,continue spinning15 cs_begin16 //critical section code goes here... 17 cs_end18 st8.rel=r0;; //release the lock表1在第4行,进程cmpxchg指令寻找可用的锁。在第5行,如果找到了可用的锁,则该锁的状态从0变到1。在第9行,有一次夺取锁的尝试。在第10行询问该锁是否为空并在第11行给出了答案,在第11行,获取锁的尝试不成功,并且进程必须继续,直到它发现资源未锁定。希望最小化与锁争用有关的开销。附图说明结合附图,在以下描述中以示例的方式解释了本专利技术。在附图中图1是本专利技术中所使用的软件数据结构元素的图,其用于监控和锁的争用有关的动态性能分析(dynamic profiling)信息;图2和3是图示了在Java虚拟机中关于锁争用的动态性能分析的流程图;以及图4是根据本专利技术用于提供同步加速的硬件的框图。具体实施例方式由于现有技术中的JVM或等同的运行时环境在Java程序和该程序运行于其上的平台之间扮演着“中间人”的角色,所以它们处在一个独特的位置上。所述平台包括操作系统和硬件。许多JVM包括带有自适应编译技术的即时(just-in-time)编译器,其被用来优化程序在其上花去大多数时间的代码。图1是监控器数据结构的图。“监控器”是一种用于控制对共享资源的访问的技术。监控器本质上是一个具有显式队列的共享类。通过例如创建一个其中所有字段都是私有的,并且所有方法都同步的类,就可以在Java中实现共享类的作用。唯一可被一个以上的线程访问的变量是监控器的字段。监控器的方法被同步。因此,监控器中的访问是相互排斥的。因此,监控器将满足提供对线程的互斥访问的要求。本专利技术的一个特点就是提供了收集有关锁的争用的动态性能分析信息的能力。为此,向监控器数据结构10附加了扩展字段14。Java的“监控器”方法支持两种线程同步互斥和合作。在Java虚拟机中通过对象锁来支持的互斥使得多个线程独立于共享数据地工作,而不相互干扰。在Java虚拟机中通过“等待”和“修改”方法来支持的合作使得线程一起工作,以达到共同的目标。本说明书处于互斥的上下文中。一个线程每次可以获取一个监控器。在JVM的软件中,扩展字段14被附加到监控器数据结构10。典型的监控器数据结构大到足以使得增加少量位不会导致存储器使用的大量增加,也不会对JVM的性能产生负面作用。这个扩展字段14向JVM提供以下知识,即哪个Java线程请求获得对给定监控器的所有权。线程获得使用对象的权利,然后在完成时释放锁/监控器。当它再次需要使用对象时,它再次获得锁,然后在完成时再次释放锁,如此等等。JVM使用扩展字段来对不同线程在给定时间段内对监控器的不同访问保持“计数”。如果大量线程在短时间内尝试得到监控器的所有权,则计数值将会是一个很大的数,并将锁标识为“热”锁,即高度争用的锁。如果监控器主要由单个线程进行访问,则所述计数值将是“1”,并且锁是“冷”锁。一旦JVM确定哪些锁是“热的”,则它可以选择将要用于这组锁的最适当的同步技术。JVM设置争用的阈值。这个阈值与实际的计数值做比较。如果计数值超过了指定来标识热锁的阈值,则JVM确定对这些热锁使用硬件加速技术。图2图示了其中对给定的锁争用较低的例子中的过程。在图2中,在框20处,线程请求监控器。在框22处,确定请求线程与以前请求监控器的线程是否不同。如果相同,则不采取任何对特定的监控器增加访问计数的动作,并且这个过程返回到框20。如果与以前的线程不同的线程正在争用锁,则在框24处增加该监控器的访问计数。图3表示将每个访问计数与指示热锁的阈值进行比较的过程。在框30处,监控器计数与阈值进行比较。在框32处,如果该计数没有超过阈值,则不对特定的锁采取任何进一步的动作,并且该过程返回框30。如果在框24达到的计数值的确超过了阈值,那么操作前进到框34,在这里向热锁列表中添加锁。图2和3的过程可以在JVM或硬件中实现。因此,提供了对热锁的标识。返回上述表1中的现有技术的进程中,可以看出,这个进程固有地提供了大量争用。争用是由于缺乏一个中央实体而引起的,所述中央实体可以登记(register)多个处理器对锁的请求,还可以裁决对锁的分配。因此,处理器必须反复地尝试获得锁。如果存在中央实体,就可以大大减少读-修改-写周期的数量,其中,从所需的额外步骤和额外时间、或者开销的角度来看,这种读-修改-写周期是很昂贵的。在图4中图示了提供中央实体的硬件,这是一个4-CPU基于总线的配置的框图。这里提出一种4本文档来自技高网...

【技术保护点】
一种方法,包括:使用监控器来控制竞争线程对共享资源的访问,所述监控器具有用于处理锁请求的数据结构;在所述监控器数据结构中提供扩展,以对给定的时间段内不同的线程访问进行计数;以及登记争用线程对给定的锁的多个不同请求,并 且登记一个计数,其表示在给定的时间段内争用线程的数量。

【技术特征摘要】
【国外来华专利技术】...

【专利技术属性】
技术研发人员:迪普K布什
申请(专利权)人:英特尔公司
类型:发明
国别省市:US[美国]

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

1