Providing Native Support for Byte-Addressable Persistent Memory in Golang

Library Content Type:
Publish Date: 
Tuesday, August 6, 2019
Event Name: 
Focus Areas:

While persistent memory has great value propositions such as low latency and high density, it is hard to use directly from an application. Why? Writing crash-consistent applications using the byte-addressable load/store model for persistent memory is difficult and error prone. 

Golang is a very popular open source programming language, with great support for concurrency and efficient garbage collection. We will describe our modifications to Golang, making it the first language to provide broad support for what is needed to make programming with persistent memory a breeze. We will describe how to use the newly introduced atomic operations to create crash-consistent programs, and manage persistent variables on the heap while the runtime garbage collects them automaticallly. 

To put all this to test, we wrote a full key value store that is fully compatible with Redis (called go-redis) to use byte-addressable persistent memory. We share performance data from various Redis benchmarks, crash and restart the application in seconds, and other general anecdotes from developing go-redis. We will conclude with pointers to all of this open source code that you can download and use immediately.