- Notifications
You must be signed in to change notification settings - Fork0
Efficiently Detecting Concurrency Bugs in Persistent Memory Programs (ASPLOS 2022)
License
yhuacode/pmrace
Folders and files
| Name | Name | Last commit message | Last commit date | |
|---|---|---|---|---|
Repository files navigation
PMRace is a fuzz testing tool to efficiently detect persistent memory (PM) concurrency bugs hidden in thread interleavings. PMRace focuses two new types of crash inconsistencies causing PM concurrency bugs:PM Inter-thread Inconsistency andPM Synchronization Inconsistency. A PM Inter-thread Inconsistency refers to a program execution in which one thread makes durable side effects (e.g., PM writes) based on non-persisted data written by another thread. After restart, the durable side effects are inconsistent with the old dependent data. A PM Synchronization Inconsistency refers to the inconsistency between unreleased synchronization data (e.g., lock variables) and the PM application’s execution context after restart.
PMRace adopts PM-aware and coverage-guided fuzz testing to explore PM program executions. For PM Inter-thread Inconsistency, PMRace performs PM-aware interleaving exploration and thread scheduling via active delay injection to drive the execution towards executions that reveal such inconsistencies, i.e., reading non-persisted data written by other threads. For PM Synchronization Inconsistency, PMRace identifies the inconsistency by checking the modifications on annotated synchronization data. The post-failure validation reduces the false positives that come from custom crash recovery mechanisms.
For more details, please refer to our paper:
Zhangyu Chen, Yu Hua, Yongle Zhang, Luochangqi Ding, "Efficiently Detecting Concurrency Bugs in Persistent Memory Programs", Proceedings of the 27th ACM International Conference on Architectural Support for Programming Languages and Operating Systems (ASPLOS), 2022.
Install the following dependencies on Ubuntu 18.04 (or above).
$ sudo apt-get install build-essential autoconf pkg-config \ git python3 python3-dev \ m4 pandoc libndctl-dev libdaxctl-dev \ libelf-dev elfutils libdw-dev libunwind-dev
Additional notes:
m4,pandoc,libndctl-dev(v63 or later) andlibdaxctl-dev(v63 or later) are required forpmdklibelf-dev,elfutils,libdw-dev,libunwind-devare required for stack traces (i.e.,libdwandlibunwind)
Update submodules (i.e., PMDK)
$ git submodule init&& git submodule update --progressApply the attached patch for PMDK.
$cd ./deps/pmdk $ git apply ../../patches/pmdk.diffThere are some enviroument variables to be set.
$export PMEM_IS_PMEM_FORCE=1 $export LLVM_DIR=/path/to/llvm-11-install-dir $export PATH=$LLVM_DIR/bin:$PATH $export PMRACE_DIR=/path/to/pmrace
- Change directory to "instrument"
$cd$PMRACE_DIR/instrument
- Build the LLVM pass and
hook_ctr_cli
$ make
- Build PMDK using PMRace
$ make pmdk
Here are someexamples for the use of PMRace to debug PM programs. We have constructed and releasedartifacts for public use.
If you have any problems, please report in the issue page or contact me.
- Zhangyu Chen (chenzy@hust.edu.cn)
About
Efficiently Detecting Concurrency Bugs in Persistent Memory Programs (ASPLOS 2022)
Topics
Resources
License
Uh oh!
There was an error while loading.Please reload this page.