Lune

USENIX ATC2020Top-tier venue

go-pmem: Native Support for Programming Persistent Memory in Go

Jerrin Shaji George, Mohit Verma, Rajesh Venkatasubramanian, Pratap Subrahmanyam

2020Year
25Citations
4Top-tier citations

Abstract

Persistent memory offers persistence and byte-level addressability at DRAM-like speed. Operating system support and some user-level library support for persistent memory programming has emerged. But we think lack of native programming language support is an impediment to a programmer's productivity.

This paper contributes go-pmem, an open-source extension to the Go language compiler and runtime that natively supports programming persistent memory. go-pmem extends Go to introduce a runtime garbage collected persistent heap. Often persistent data needs to be updated in a transactional (i.e., crash consistent) manner. To express transaction boundaries, go-pmem introduces a new txn block which can include most Go statements and function calls. go-pmem compiler uses static type analysis to log persistent updates and avoid logging volatile variable updates whenever possible.

To guide our design and validate our work, we developed a feature-poor Redis server go-redis-pmem using go-pmem. We show that go-redis-pmem offers more than 5x throughput than unmodified Redis using a high-end NVMe SSD on memtier benchmark and can restart up to 20x faster than unmodified Redis after a crash. In addition, using compiler microbenchmarks, we show go-pmem's persistent memory allocator performs up to 40x better and transactions up to 4x faster than commercial libraries like PMDK and previous work like Mnemosyne. Library (language) Model References Transactions Heap Semantics Implementation Fn calls Growth Reloc. go-pmem (Go) Compiler support, Library Direct pointers Explicit -user tagged Undo logs Yes Yes Yes PMDK [18] (C,C++) Library Fat pointers Explicit -user tagged Undo logs Yes No Yes Mnemosyne [45] (C) Compiler support, Library Direct pointers Explicit -user tagged Redo logs No No No Makalu [26] (C) Library Direct pointers N/A N/A N/A No No Atlas [27] (C) Compiler support, Library Direct pointers Implicit -using locks Undo logs No No No Autopersist [43] (Java) Compiler, JVM support Direct references Explicit -user tagged Implicit -durable roots Undo logs Yes No No Espresso [46] (Java) Compiler, JVM support Direct references Explicit -user tagged Persistent objects Yes No No iDO [38] (C,C++) Compiler support Direct pointers Implicit -using locks Atomicity via resumption No No No JUSTDO [36] (C,C++)

Ask about this paper

Your agent reads all of it.

Lune indexed this paper to the last equation, along with the top-tier papers that cite it. Ask a question and the answer quotes them.

Questions to start from

Your agent calls

Luneget_paper_fulltext

Ask in Lune

Free to start. No credit card required.

lune papers fulltext 887e8a5a-8d3a-4c8b-a978-d45b13e233b3

Cited by top-tier papers4

Ask how each one uses it

Related papers

Dusk over the sea between two cliffs drawn in fine vertical lines