Replication-based object persistence by reachability

Replication-based object persistence by reachability
复制标题

DOI:
10.1145/3520263.3534653
复制
发表时间:
2022-06
期刊:
Proceedings of the 2022 ACM SIGPLAN International Symposium on Memory Management
影响因子:
--
通讯作者:
Kotaro Matsumoto;Tomoharu Ugawa;H. Iwasaki
Kotaro Matsumoto;Tomoharu Ugawa;H. Iwasaki
中科院分区:
其他
文献类型:
--
作者:
Kotaro Matsumoto;Tomoharu Ugawa;H. Iwasaki

文献摘要

相似文献

非易失性存储器(NVM)的出现为以小成本使应用程序的存储器中数据持久化提供了机会。编程语言需要足够的抽象才能使用NVM。在这里,可达性持久化是托管语言的一种合适的抽象。在这种抽象中,所有对象在创建时都是易失的,并且根据它们从预定义根的可达性,在以后变为持久的。通过可达性实现持久性的最新技术在DRAM中创建对象,并在它们变得持久时将它们移动到NVM。这种实现方式有两个低效率。一个是读取屏障,以获得对象的当前位置;另一个是从NVM读取持久对象的值,这比DRAM慢。本文提出了一种利用可达性实现持久化的新算法。所提出的算法不移动对象到NVM,使他们持久。相反,它在NVM中创建对象的副本。在复制之后,DRAM中的原始副本与副本保持同步。程序可以通过从DRAM中阅读来获得持久对象的内容,而无需读屏障。我们在OpenJDK的HotSpot虚拟机上初步实现了它,并评估了它的开销。结果表明,使对象持久化的开销平均为2.7%。写入持久对象的开销从0.4%到335.5%不等,具体取决于写入频率。不使任何对象持久化的程序的开销与以前的工作类似。
The emergence of non-volatile memory (NVM) presents opportunities for making in-memory data of application programs persistent at a small cost. An adequate abstraction is required for programming languages to be able to utilize NVM. Here, persistence by reachability is a suitable abstraction for managed languages. In this abstraction, all objects are volatile when they are created and become persistent later depending on their reachability from the predefined roots. The state-of-the-art in the implementations of persistence by reachability creates objects in DRAM and moves them to NVM when they become persistent. This implementation has two inefficiencies. One is the read barriers to get the current location of objects; the other is to read values of persistent objects from NVM, which is slower than DRAM. This paper proposes a new algorithm to realize persistence by reachability. The proposed algorithm does not move objects to NVM to make them persistent. Rather, it creates replicas of the objects in NVM. After replication, the original copy in DRAM is kept synchronized with the replica. The program can obtain the contents of a persistent object by reading from DRAM without read barriers. We preliminarily implemented it in the HotSpot VM of OpenJDK and evaluated its overhead. The results showed that the overhead of making objects persistent was 2.7% on average. The overhead of writing to persistent objects varied from 0.4% to 335.5%, depending on write frequency. The overhead imposed on programs that do not make any object persistent was similar to the previous work.