USENIX ATC2020顶会
go-pmem: Native Support for Programming Persistent Memory in Go
Jerrin Shaji George, Mohit Verma, Rajesh Venkatasubramanian, Pratap Subrahmanyam
摘要
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++)
问问这篇 Paper
智能体会读完全文。
Lune 把这篇 Paper 索引到了最后一个公式,引用它的顶会 Paper 也一样。你提问,回答直接引用原文。
引用它的顶会 Paper4
- Unbounded Hardware Transactional Memory for a Hybrid DRAM/NVM Memory SystemJungi Jeong, Jaewan Hong, Seungryoul Maeng, Changhee Jung 等MICRO 2020 · 被引用 29 次
- Persistent State Machines for Recoverable In-memory Storage Systems with NVRamWen Zhang, Scott Shenker, Irene ZhangOSDI 2020 · 被引用 18 次
- Supporting Legacy Libraries on Non-Volatile Memory: A User-Transparent ApproachChencheng Ye, Yuanchao Xu, Xipeng Shen, Xiaofei Liao 等ISCA 2021 · 被引用 9 次
- Robustness Verification for Checking Crash Consistency of Non-volatile MemoryZhilei Han, Fei HeASPLOS 2025 · 被引用 1 次
相关 Paper
- HybridPersist: A Compiler Support for User-Friendly and Efficient PM ProgrammingYiyu Zhang, Yongzhi Wang, Yanfeng Gao, Xuandong Li 等OOPSLA 2025
- DaxVM: Stressing the Limits of Memory as a File InterfaceChloe Alverti, Vasileios Karakostas, Nikhita Kunati, Georgios I. Goumas 等MICRO 2022 · 被引用 9 次
- Constraint Based Program Repair for Persistent Memory BugsZunchen Huang, Chao WangICSE 2024 · 被引用 3 次
- Corundum: statically-enforced persistent memory safetyMorteza Hoseinzadeh, Steven SwansonASPLOS 2021 · 被引用 18 次
- DRPTM: A Decoupled Read-efficient High-scalable Persistent Transactional MemoryWenkai Liang, Hao Hu, Xiangyu Zou, Wen Xia 等DAC 2023 · 被引用 3 次
