300 nanoseconds (2 of 2)

300 nanoseconds (2 of 2)

At the end of the first part of this blog series, I posed three fundamental questions regarding the design of failure atomic data structures for persistent memory. What does it mean to allocate persistent memory? How to do fail-safe atomic updates? Are all data structures suitable for persistent …

Read More
Language bindings for pmemkv

Language bindings for pmemkv

pmemkv is a local/embedded key-value datastore optimized for persistent memory. It is written in C and C++, but to satisfy a wider audience it comes with several bindings for high-level languages. Currently: Java (with JNI), Node.js, Python and Ruby. The picture below illustrates architecture and …

Read More
Introduction to libmemkind

Introduction to libmemkind

Introduction Memkind is the library that simplify usage of persistent memory in a volatile mode. There are NVDIMMs technologies, such as Intel Optane DCPMM, that provides persistency, byte-addressability, and also a high capacity when compared with DRAM modules. They can be used as an expansion of …

Read More
Memkind support for KMEM DAX option

Memkind support for KMEM DAX option

Introduction Linux kernel version 5.1 brings in support for the volatile-use of persistent memory as a hotplugged memory region (KMEM DAX). When this feature is enabled, persistent memory is seen as a separate memory-only NUMA node(s). libmemkind API was extended to include new kinds that allow for …

Read More
300 nanoseconds (1 of 2)

300 nanoseconds (1 of 2)

Educating people has always been a challenge for me. I tend to skip over things I wrongly consider obvious, or do large leaps in reasoning when explaining a solution to a problem. And so, when faced with an attempt to explain a complex topic, I tend to ramble on and on, hoping that the audience …

Read More