iv
Application Startup and Recovery ����������������������������������������������������������������������������������������������� 27
What’s Next? ������������������������������������������������������������������������������������������������������������������������������� 29
Summary������������������������������������������������������������������������������������������������������������������������������������� 29
Chapter 3: Operating System Support for Persistent Memory ������������������������������� 31
Operating System Support for Memory and Storage ������������������������������������������������������������������ 31
Persistent Memory As Block Storage ������������������������������������������������������������������������������������������ 33
Persistent Memory-Aware File Systems ������������������������������������������������������������������������������������� 34
Memory-Mapped Files ���������������������������������������������������������������������������������������������������������������� 35
Persistent Memory Direct Access (DAX) ������������������������������������������������������������������������������������� 43
Summary������������������������������������������������������������������������������������������������������������������������������������� 53
Chapter 4: Fundamental Concepts of Persistent Memory Programming ��������������� 55
What’s Different? ������������������������������������������������������������������������������������������������������������������������ 55
Atomic Updates ��������������������������������������������������������������������������������������������������������������������������� 56
Transactions �������������������������������������������������������������������������������������������������������������������������������� 57
Atomicity ������������������������������������������������������������������������������������������������������������������������������� 57
Consistency ��������������������������������������������������������������������������������������������������������������������������� 58
Isolation ��������������������������������������������������������������������������������������������������������������������������������� 58
Durability ������������������������������������������������������������������������������������������������������������������������������� 58
Flushing Is Not Transactional ������������������������������������������������������������������������������������������������������ 59
Start-Time Responsibilities ��������������������������������������������������������������������������������������������������������� 59
Tuning for Hardware Configurations ������������������������������������������������������������������������������������������� 60
Summary������������������������������������������������������������������������������������������������������������������������������������� 60
Chapter 5: Introducing the Persistent Memory Development Kit ��������������������������� 63
Background ��������������������������������������������������������������������������������������������������������������������������������� 63
Choosing the Right Semantics ���������������������������������������������������������������������������������������������������� 64
Volatile Libraries ������������������������������������������������������������������������������������������������������������������������� 65
libmemkind ���������������������������������������������������������������������������������������������������������������������������� 65
libvmemcache ����������������������������������������������������������������������������������������������������������������������� 66
libvmem ��������������������������������������������������������������������������������������������������������������������������������� 67
Table of ConTenTs
Application Startup and Recovery ����������������������������������������������������������������������������������������������� 27
What’s Next? ������������������������������������������������������������������������������������������������������������������������������� 29
Summary������������������������������������������������������������������������������������������������������������������������������������� 29
Chapter 3: Operating System Support for Persistent Memory ������������������������������� 31
Operating System Support for Memory and Storage ������������������������������������������������������������������ 31
Persistent Memory As Block Storage ������������������������������������������������������������������������������������������ 33
Persistent Memory-Aware File Systems ������������������������������������������������������������������������������������� 34
Memory-Mapped Files ���������������������������������������������������������������������������������������������������������������� 35
Persistent Memory Direct Access (DAX) ������������������������������������������������������������������������������������� 43
Summary������������������������������������������������������������������������������������������������������������������������������������� 53
Chapter 4: Fundamental Concepts of Persistent Memory Programming ��������������� 55
What’s Different? ������������������������������������������������������������������������������������������������������������������������ 55
Atomic Updates ��������������������������������������������������������������������������������������������������������������������������� 56
Transactions �������������������������������������������������������������������������������������������������������������������������������� 57
Atomicity ������������������������������������������������������������������������������������������������������������������������������� 57
Consistency ��������������������������������������������������������������������������������������������������������������������������� 58
Isolation ��������������������������������������������������������������������������������������������������������������������������������� 58
Durability ������������������������������������������������������������������������������������������������������������������������������� 58
Flushing Is Not Transactional ������������������������������������������������������������������������������������������������������ 59
Start-Time Responsibilities ��������������������������������������������������������������������������������������������������������� 59
Tuning for Hardware Configurations ������������������������������������������������������������������������������������������� 60
Summary������������������������������������������������������������������������������������������������������������������������������������� 60
Chapter 5: Introducing the Persistent Memory Development Kit ��������������������������� 63
Background ��������������������������������������������������������������������������������������������������������������������������������� 63
Choosing the Right Semantics ���������������������������������������������������������������������������������������������������� 64
Volatile Libraries ������������������������������������������������������������������������������������������������������������������������� 65
libmemkind ���������������������������������������������������������������������������������������������������������������������������� 65
libvmemcache ����������������������������������������������������������������������������������������������������������������������� 66
libvmem ��������������������������������������������������������������������������������������������������������������������������������� 67
Table of ConTenTs
