具有改进的可扩展性的存储器对象引用计数管理的制作方法

文档序号:9438892阅读:266来源:国知局
具有改进的可扩展性的存储器对象引用计数管理的制作方法
【技术领域】
[0001]本公开涉及存储器对象引用计数管理,以及更特别地,涉及采用事务性引用计数省略(elis1n)的具有改进的可扩展性的存储器对象引用计数管理。
【背景技术】
[0002]存储器管理系统典型地在存储器对象被创建后保持追踪这些存储器对象以及当这些存储器对象不再被需要时删除这些存储器对象,使得存储器可以被释放以便重新使用。有时也被称为垃圾收集器的这些系统经常通过维护与每个存储器对象相关联的引用计数(例如当该对象在存储器中被创建或被分配时)来起作用。当线程(或进程或其他实体)访问或以其他方式引用该存储器对象时,引用计数被递增。当线程删除或去引用(de-reference)该存储器对象时,引用计数递减。当引用计数达到零时,存储器对象被假定为不再处于使用中,并且存储器管理器可以释放该存储器以便重新使用(尽管并没有被要求),并因此降低了存储器用尽的可能性。
[0003]此外,计算系统经常具有多个处理核,在所述多个处理核上可以分配给定的工作量以增强计算吞吐量。每个核可以具有相关联的存储器高速缓存,所述存储器高速缓存以比主存储器更高的速度进行操作。当多个线程正在不同的处理器核上执行并且访问或共享公共存储器对象时,针对该对象的引用计数将典型地需要从一个高速缓存转移到另一个,这可能导致增加的延迟和降低的处理效率。随着计算系统在大小方面上升扩展为更多数量的核和并行执行的线程,与从高速缓存到高速缓存进行交换的引用计数相关联的存储器管理问题可能导致阻碍可扩展性的降低的性能。
【附图说明】
[0004]随着下文【具体实施方式】的进行以及根据对附图的参考,所要求保护的主题的实施例的特征和优点将变得显而易见,其中同样的数字描述同样的部分,以及其中:
图1图示了与本公开一致的一个示范性实施例的顶级系统图;
图2图示了与本公开一致的一个示范性实施例的框图;
图3图示了与本公开一致的另一个示范性实施例的框图;
图4图示了与本公开一致的一个示范性实施例的操作的流程图;
图5图示了与本公开一致的一个示范性实施例的时序图;以及图6图示了与本公开一致的另一个示范性实施例的操作的流程图;
尽管下文的【具体实施方式】将以参考说明性实施例来继续,说明性实施例的很多替代、修改和变化对本领域技术人员来说将是显而易见的。
【具体实施方式】
[0005]—般地,本公开提供了用于基于事务性引用计数省略的具有改进的可扩展性的存储器对象引用计数管理的系统、装置、方法和计算机可读介质。引用计数省略(例如用于存储器管理目的而消除或减少对存储器对象引用计数的修改)可以利用硬件事务监控来完成,如将在下文解释的那样。引用计数省略避免了可能由这些引用计数在处理器核高速缓存存储器之间的转移所引发的延迟,所述延迟否则将由于引用计数修改而产生。通过消除核之间的对引用计数的非必要高速缓存转移,在增加数量的处理器核的情况下,事务性引用计数省略因而改进了性能和可扩展性。
[0006]在一些实施例中,处理器可以通过指令集架构延伸来支持硬件事务监控,所述指令集架构延伸提供指令来开始(或进入)代码的事务区域,退出(或提交)事务区域以及处理事务区域的中止。事务监控器可以缓冲由事务区域内的代码执行的存储器访问的副作用,直到该事务退出或提交。然而,如果事务在提交前中止,例如由于存储器与另一个代码实体或线程冲突,则缓冲的副作用被丢弃(例如事务被回滚)以及替代的代码可以被执行以处理该中止状况。
[0007]由事务区域内正执行的线程对引用计数的读取访问将事务区域存储器监控延伸到下述引用计数,该引用计数允许它保持在共享高速缓存状态中,因为该引用计数仅被读取而不是被写入。这使得对引用计数以及相关联的存储器对象的保护能够实现,如将在下文更详细地解释的。尽管包含引用计数的高速缓存线(或存储器块)仍然可能已被转移,但它保持在共享状态中(例如在高速缓存管理状态机内)的事实允许其他处理器核避免不得不放弃可能将并行执行挂起的高速缓存线。
[0008]图1图示了与本公开一致的一个示范性实施例的顶级系统图100。具有改进的存储器对象引用计数管理的系统102被示为配置成与存储器104交互。存储器104可以在多个处理器或多个处理器核之间被共享以及可以储存存储器对象106和相关联的引用计数108。在一些实施例中,存储器对象106可以被包括在数据结构(诸如,例如,哈希表、树、数组和/或列表)中。引用计数108可以出于存储器管理目的而被用于指示在任何时候正使用或涉及存储器对象的线程或其他代码实体的数量,以防止存储器对象直达它们不再处于使用中之前被删除(以及相关联的存储器被释放)。系统102可以被配置用于事务性引用计数省略以减少引用计数在处理器核高速缓存存储器之间的转移和相关联的转移延迟。
[0009]图2图示了与本公开一致的一个示范性实施例的框图200。具有改进的存储器对象引用计数管理的系统102被示为包括事务性监控模块202、存储器管理模块208和配置成执行线程或其他代码实体的多个处理核(例如核A 204和核B 206)ο每个核可以进一步被配置有高速缓存存储器210、212。存储器104也被示为包括存储器对象106和相关联的引用计数108。
[0010]存储器管理器208可以被配置成在存储器对象被创建后追踪该存储器对象,以及当不再需要那些对象时删除它们,使得存储器可以被释放以便重新使用。这可以通过维护针对每个存储器对象的引用计数(例如当该对象在存储器中被创建或分配时)来完成。当线程(代码模块、进程或其他实体)访问或以其他方式引用该存储器对象时,引用计数被递增。当线程去引用该存储器对象时,引用计数被递减。当引用计数达到零或者某个阈值时,存储器对象可以被假定为不再处于使用中,以及存储器管理器(例如垃圾收集器)可以删除该对象并释放与该对象相关联的存储器。
[0011]事务性监控模块202可以被配置成提供以下指令,该指令使代码区域能够开始(或进入)事务,退出(或提交)事务以及处理事务的中止。事务监控器202维护由事务区域内执行的代码所访问的存储器对象的读取集(read-set)。在读取集中的这些存储器对象被监控以及事务监控器202可以缓冲由事务区域内的代码所执行的对这些对象的存储器访问(例如修改)的副作用,直到事务退出或提交,在此时它们对其他线程变得有效和可见。然而,如果事务在提交前中止,例如由于存储器与另一个代码实体或线程冲突,则缓冲的副作用被丢弃(例如事务被回滚)并且替代的代码可以被执行以处理中止状况。
[0012]在多个核204、206上执行的线程或代码模块可以被配置成当与存储器对象106 —起起作用时进入事务区域。当在事务区域中时,线程可以执行与存储器对象106相关联的引用计数108的读访问。事务性监控模块202可以被配置成检测这个读访问并且随后将该引用计数加入到将被监控或保护的对象的读取集。因为引用计数现在处于读取集中,所以避免了递增(以及随后递减)该引用计数的需要,并且在这些情况下实现了引用计数省略,从而因为高速缓存可以保持在共享状态中,减少了高速缓存存储器转移和相关联延迟的发生。如果存储器管理器208曾试图删除存储器对象和/或释放存储器,事务监控器202将检测到它并且中止在事务区域中执行的线程。然后该中止将使该线程调用事务中止处理机,所述事务中止处理机可以被配置成执行递增和递减引用计数的低效率后退方法。然而,与典型操作相比,这将以降低的频率发生。在一些实施例中,中止代码可以被配置成在恢复为后退方法之前重试该事务一定次数。
[0013]图3图示了与公开一致的另一个示范性实施例的框图300
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1