Giter Club home page Giter Club logo

libnvmmio's Introduction

Libnvmmio

Libnvmmio rebuilds performance-critical software IO path to reduce software overhead in non-volatile main memory (NVMM) systems. Libnvmmio is a simple and practical solution, which provides low-latency and scalable file IO while guaranteeing data atomicity. It leverages the memory-mapped IO for fast data access and makes applications free from the crash-consistency concerns by providing failure-atomicity.

Libnvmmio runs in the address space of a target application as a library and interacts with underlying file systems. Libnvmmio intercepts IO requests and turns them into internal operations. For each IO request, Libnvmmio distinguishes data and metadata operations. For all data requests, Libnvmmio services them in the user-level library, bypassing the slow kernel code. Meanwhile, for complex metadata and directory operations, Libnvmmio passes them to the kernel. This design is based on the observation that data updates are frequently-executed, performance-critical operations. On the other hand, the metadata and directory operations are infrequently executed and envolve complex implementation to support POSIX semantics. Handling them differently, the architecture of Libnvmmio follows the design principle of making the common case fast with a simple, fast user-level implementation.

We presented Libnvmmio at the USENIX ATC '20 conference. If you need more details, please refer to our paper.

System Requirements

  • NVMM File Systems. Libnvmmio runs on any NVMM file systems that provide DAX-mmap. We tested Libnvmmio on various underlying file systems (e.g., Ext4-DAX, PMFS, NOVA, SplitFS).

  • Persistent Memory Development Kit (PMDK). Libnvmmio uses the PMDK library to write data to NVM. When writing data through non-temporal stores, it uses pmem_memcpy_nodrain and pmem_drain. It also uses pmem_flush to make metadata updates permanent. PMDK provides optimizations for data-level parallelism with SIMD instructions. It also plans to support ARM processors as well as Intel/AMD processors.

Contents

  • src/ contains source code for Libnvmmio.
  • scripts/ contains shell scripts to mount kernel filesystems.
  • evaluation/ contains applications and descriptions that evaluate Libnvmmio.

Current Limitations

  • Limited file IO APIs. The current implementation of Libnvmmio handles the following system calls.

    • open, close, read, write, fsync, lseek
    • We pass the rest of the calls to the underlying kernel filesystem. We will continue to add more file IO APIs to Libnvmmio.
  • Journal wrap. Libnvmmio keeps updated data in its logs and atomically writes to the original file when fsync called. If a journal wrap occurs, however, failure-atomicity cannot be guaranteed. When the log size reaches the threshold, Libnvmmio forces committing and checkpointing the logged data. Since journal wrap may occur in all journaling systems, journal space should be large enough to handle IO requests. In Libnvmmio, the threshold is configurable at compile time.

  • File sharing between multiple processes. Currently, Libnvmmio doesn’t allow file sharing. So, we need a coordination technique between concurrent accesses from multiple processes. A lease mechanism, as in Strata, can be adopted in Libnvmmio.

Acknowledgments

This work was supported in part by Samsung Electronics and the National Research Foundation in Korea under PF Class Heterogeneous High-Performance Computer Development (NRF-2016M3C4A7952587).

Contact

Please contact us at [email protected] with any questions.

libnvmmio's People

Contributors

chjs avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.