Memory Systems · Cluster
Persistent Memory
Durability semantics and crash consistency.
- 01 A Completed Write Is Not Yet Durable: Persistence Domains and Ordering Why write and close return long before bytes reach media, how a persistence domain decides what a crash can lose, and why durability, ordering, and atomicity need separate mechanisms.
- 02 What fsync Actually Waits For, and Why the Directory Counts The difference between fsync, fdatasync, and syncfs, why a durable file can still vanish after a crash, and what rename-based update protocols must flush to be correct.
- 03 Cache Flushes and FUA: The Two Ordering Primitives Below the Filesystem How a flush drains a volatile device cache, how forced unit access bypasses it for a single write, and why both are required to build a write barrier out of a queue that reorders.
- 04 Write-Ahead Logging and the Commit Record How a log turns many scattered writes into one ordered append, what makes a commit record valid, and why replay must be idempotent to survive a crash during recovery.
- 05 Checkpointing and the Cost of a Consistent Snapshot Why capturing a consistent image of a mutating data structure requires either a pause or a write barrier, and how copy-on-write roots, double buffering, and fuzzy checkpoints differ in cost.
- 06 Shadow Paging and Copy-on-Write Trees How writing a modified page to a new location instead of in place makes every update atomic, what the pointer-update protocol must flush, and how the space cost accumulates until a collection pass reclaims it.
- 07 Torn Writes, Sector Atomicity, and the RAID Write Hole Why a 512-byte sector write is atomic but a 4 KiB write may not be, how torn writes corrupt filesystems that assume otherwise, and what parity updates do to crash consistency.
- 08 Ordering Stores to Persistent Memory: CLWB, SFENCE, and Failure Atomicity Which instruction makes a store reach the media, why a flush without a fence still allows reordering, and how a persistent heap builds transactions out of a cacheline flush and an undo log.
- 09 Memory-Mapped Persistence: What msync and DAX Actually Guarantee How a shared mapping becomes durable, why msync is not fsync, what direct access bypasses the page cache, and where the mapping and the filesystem metadata disagree after a crash.
- 10 Verifying Crash Consistency with Fault Injection Why a crash-consistency claim needs an exhaustive state-space argument rather than a test, how to model a device that loses writes and reorders them, and which failures the method cannot find.