Multi-Granularity Shadow Paging (MGSP) is a novel crash consistency mechanism for direct access memory-mapped I/O (DAX-MMIO) on Non-Volatile Memory (NVM). MGSP introduces the concept of shadow log, combining the advantages of shadow paging and logging. The shadow log avoids the double-write problem by switching the roles of data blocks between redo and undo logs when needed. In addition, a multi-granularity strategy is designed to provide high-performance updating and locking for reducing runtime overhead, where strong consistency is preserved with a lock-free metadata log.
MGSP is implemented based on Libnvmmio. This artifact provides the source code of MGSP, the baseline Libnvmmio, and the benchmark FIO, along the scripts to compile the code and set up the underlying file system. We also provide the scripts to run the evaluation.
MGSP
├──evaluation
│ ├── fio
│ │ ├── result
│ | ├── script
│ │ ├── src
│ | └── README.md
│ ├── libnvmmio
│ │ └── src
│ ├── ext4_config.sh
│ └── nova_config.sh
├── src
├── LICENSE
└── README.md
- Inter Optane DC Persistent Memory (PM) and Intel Xeon CPU
Our testbed is equipped with 4 Inter DCPMM 200 Series (512GB) and 2 Intel Xeon Gold 5317 (2.6GHz, 24 cores). If the PM device is not available, you can use the DRAM emulated PM device. Please refer to the here for more details. 32GB DRAM emulated PM is enough for MGSP. But the Libnvmmio may need more for the mul-threads workloads. You can change the workload size or the configuration of Libnvmmio if needed.
- PMDK. We use PMDK to access the PM device. To install PMDK on Ubuntu, you can run the following command.
$ sudo apt install libpmem-dev
- Other dependencies. We use make and gcc to compile the source code. The numactl is used to bind the process to the specific CPU core.
$ sudo apt install gcc make numactl
The OS of our testbed is Ubuntu 18.04 with kernel 5.1.0. We choose this setting for comparsion with NOVA.
$ cd evaluation/fio/src
$ ./configure && make
$ cd ../../libnvmmio/src && make
$ cd ../../../src && make
$ cd evaluation
$ sudo ./ext4_config.sh
or
$ sudo ./nova_config.sh
Before set up the file system, please make sure that the /dev/pmem0
device exists. It can be the real PM device or DRAM emulated PM device. The default monut point is /mnt/pmem
. If you want to change it, please modify the PMEM_PATH
variable in the ext4_config.sh
or nova_config.sh
script and evaluation/script/run.sh
.
Before setting up the NOVA, you need to install the NOVA kernel. Please refer to NOVA for more details.
$ cd evaluation/fio/script
$ sudo ./run_all.sh
These scripts will run the evaluation for MGSP, Ext4-DAX and Libnvmmio. The results will be stored in evaluation/fio/result
. For NOVA, you can run the same scripts with NOVA
attached to the script name after setting up the kernel. For example, sudo ./run_all.sh NOVA
. Example results are provided in evaluation/fio/result/example_result
. See more details about the evaluation and experiment customization in evaluation/fio/README.md
.
If you have any questions, please contact us at hc.du@my.cityu.edu.hk
.
This project is licensed under the Apache License 2.0 - see the LICENSE file for details.