ABSTRACT
Over the past decade, various systems and software libraries have been developed that provide crash consistency on byte-addressable persistent memory. They often require programmers to adapt their code significantly or to use special compiler plugins. Constant innovation in this evolving field makes it desirable to be able to easily switch to more recent systems without massive code refactoring, and without changing compilers.
In this paper, we show how aspect-oriented programming can be used to automatically apply crash consistency to normal, sparsely annotated C++ code. In two case studies, we find that our approach significantly reduces the amount of code required to apply state-of-the-art crash consistency frameworks such as PMDK libpmemobj++ and Pronto.
Supplemental Material
- Christoph Borchert. 2017. Aspect-Oriented Technology for Dependable Operating Systems. Dissertation. Technische Universität Dortmund. https://doi.org/10.17877/DE290R-17995Google Scholar
- Nachshon Cohen, David T. Aksun, and James R. Larus. 2018. Object-Oriented Recovery for Non-Volatile Memory. Proceedings of the ACM on Programming Languages 2, OOPSLA(Oct. 2018), 153:1--153:22. https: //doi.org/10.1145/3276523Google ScholarDigital Library
- Andreia Correia, Pascal Felber, and Pedro Ramalhete. 2018. Romulus: Efficient Algorithms for Persistent Transactional Memory. In Proceedings of the 30th on Symposium on Parallelism in Algorithms and Architectures (SPAA '18). Association for Computing Machinery, New York, NY, USA, 271--282. https://doi.org/10.1145/3210377.3210392Google ScholarDigital Library
- Tyler Coy, Shuibing He, Bin Ren, and Xuechen Zhang. 2020. Compiler Aided Checkpointing Using Crash-Consistent Data Structures in NVMM Systems. In Proceedings of the 34th ACM International Conference on Supercomputing (ICS '20). Association for Computing Machinery, New York, NY, USA, 1--13. https://doi.org/10.1145/3392717.3392755Google ScholarDigital Library
- Bang Di, Jiawen Liu, Hao Chen, and Dong Li. 2021. Fast, Flexible, and Comprehensive Bug Detection for Persistent Memory Programs. In Proceedings of the 26th ACM International Conference on Architectural Support for Programming Languages and Operating Systems (ASPLOS 2021). Association for Computing Machinery, New York, NY, USA, 503--516. https://doi.org/10/gjrs5tGoogle ScholarDigital Library
- Reem Elkhouly, Mohammad Alshboul, Akihiro Hayashi, Yan Solihin, and Keiji Kimura. 2019. Compiler-Support for Critical Data Persistence in NVM. ACM Transactions on Architecture and Code Optimization (TACO) 16, 4 (Dec. 2019). https://doi.org/10.1145/3371236Google ScholarDigital Library
- Jerrin Shaji George, Mohit Verma, Rajesh Venkatasubramanian, and Pratap Subrahmanyam. 2020. Go-Pmem: Native Support for Programming Persistent Memory in Go. In 2020 USENIX Annual Technical Conference (USENIXATC 20). 859--872. https://www.usenix.org/ conference/atc20/presentation/georgeGoogle Scholar
- Intel. 2019. Persistent Memory Development Kit. https://github.com/ pmem/pmdkGoogle Scholar
- Intel. 2021. Intel Inspector. https://www.intel.com/content/www/us/ en/develop/tools/oneapi/components/inspector.htmlGoogle Scholar
- Gregor Kiczales, John Lamping, Anurag Mendhekar, Chris Maeda, Cristina Lopes, Jean-Marc Loingtier, and John Irwin. 1997. Aspect-Oriented Programming. In ECOOP'97 --- Object-Oriented Programming (Lecture Notes in Computer Science), Mehmet Aksit and Satoshi Matsuoka (Eds.). Springer, Berlin, Heidelberg, 220--242. https://doi.org/ 10.1007/BFb0053381Google Scholar
- Aasheesh Kolli, Vaibhav Gogte, Ali Saidi, Stephan Diestelhorst, Peter M. Chen, Satish Narayanasamy, and Thomas F. Wenisch. 2017. Language-Level Persistency. ACM SIGARCH Computer Architecture News 45, 2 (June 2017), 481--493. https://doi.org/10.1145/3140659.3080229Google ScholarDigital Library
- Marcel Köppen, Jana Traue, Christoph Borchert, Jörg Nolte, and Olaf Spinczyk. 2019. Cache-Line Transactions: Building Blocks for Persistent Kernel Data Structures Enabled by AspectC++. In Proceedings of the 10th Workshop on Programming Languages and Operating Systems (PLOS '19). Association for Computing Machinery, New York, NY, USA, 38--44. https://doi.org/10.1145/3365137.3365396Google ScholarDigital Library
- Charles Lamb, Gordon Landis, Jack Orenstein, and Dan Weinreb. 1991. The ObjectStore Database System. Commun. ACM 34, 10 (Oct. 1991), 50--63. https://doi.org/10.1145/125223.125244Google ScholarDigital Library
- Amirsaman Memaripour, Joseph Izraelevitz, and Steven Swanson. 2020. Pronto: Easy and Fast Persistence for Volatile Data Structures. In Proceedings of the Twenty-Fifth International Conference on Architectural Support for Programming Languages and Operating Systems (ASPLOS '20). Association for Computing Machinery, New York, NY, USA, 789--806. https://doi.org/10.1145/3373376.3378456Google ScholarDigital Library
- Amirsaman Memaripour, Joseph Izraelevitz, and Steven Swanson. 2020. Pronto: Easy and Fast Persistence for Volatile Data Structures (1.1). Lausanne, Switzerland. https://doi.org/10.5281/zenodo.3605351Google ScholarDigital Library
- Jinglei Ren, Jishen Zhao, Samira Khan, Jongmoo Choi, Yongwei Wu, and Onur Mutlu. 2015. ThyNVM: Enabling Software-Transparent Crash Consistency in Persistent Memory Systems. In Proceedings of the 48th International Symposium on Microarchitecture (Waikiki, Hawaii) (MICRO-48). Association for Computing Machinery, New York, NY, USA, 672--685. https://doi.org/10.1145/2830772.2830802Google ScholarDigital Library
- Torvald Riegel, Christof Fetzer, and Pascal Felber. 2006. Snapshot Isolation for Software Transactional Memory. In First ACM SIGPLAN Workshop on Languages, Compilers and Hardware Support for Transactional Computing.Google Scholar
- Olaf Spinczyk and Daniel Lohmann. 2007. The Design and Implementation of AspectC++. Knowledge-Based Systems, Special Issue on Techniques to Produce Intelligent Secure Software 20, 7 (Oct. 2007), 636--651. https://doi.org/10.1016/j.knosys.2007.05.004Google ScholarDigital Library
- Jana Traue. 2018. Fine-Grained Transactions for NVRAM. Ph.D. Dissertation. BTU Cottbus - Senftenberg, Germany. https://opus4.kobv.de/ opus4-btu/frontdoor/index/index/docId/4636Google Scholar
Recommendations
Cross-Failure Bug Detection in Persistent Memory Programs
ASPLOS '20: Proceedings of the Twenty-Fifth International Conference on Architectural Support for Programming Languages and Operating SystemsPersistent memory (PM) technologies, such as Intel's Optane memory, deliver high performance, byte-addressability, and persistence, allowing programs to directly manipulate persistent data in memory without any OS intermediaries. An important ...
AspectC++: an aspect-oriented extension to the C++ programming language
CRPIT '02: Proceedings of the Fortieth International Conference on Tools Pacific: Objects for internet, mobile and embedded applicationsSmall embedded systems are forced to operate under extreme resource constraints. At the same time these systems are very complex and many concerns in the implementation of such systems are of highly crosscutting nature. The concept of aspect orientation ...
Debuggers and Logging Frameworks
Debuggers are cheap and effective tools. Typically we use them in a bottom-up fashion starting from the problem going to its source, but when this strategy fails, we might have to resort to a more tedious top-down breadth-first search. To locate bugs, ...
Comments