How to use the patches to reproduce bugs
Use the provided script to apply a given patch to the whisper directory:
./patch.sh <whisper_directory> <patch_to_be_applied>
To remove a corresponding patch:
./patch.sh -R <whisper_directory> <patch_to_be_applied>
pmdk_rbtree.patchreproduces the bug addressed in this git commit of PMDK. Note that we use PM_EQU from whisper to track the variable assignment.
pmfs_doubleflush_1.patchreproduces the bug addressed in this git commit of PMFS-new. Note that double flush is treated as a warning, so PMTest needs to be compiled with preprocessor option -DPMTEST_WARN to raise this warning.
pmfs_doubleflush_2.patchreproduces the bug addressed in this git commit of PMFS-new.
pmdk_btree.patchreproduces the bug we found in
pmdk_btree_doubleadd.patchreproduces the double TX_ADD performance issue we found in
- We modify the persistent operations in different examples and produce multiple bugs.
- The examples we use are listed as follows:
- ctree: C-Tree
- btree: B-Tree
- rbtree: RB-Tree
- hashmap_tx: Hashmap (TX)
- hashmap_atomic: Hashmap (no TX)
- The types of patches we create are listed as follows:
- backup: Missing or misplaced backup of persistent objects.
- incompletetx: Incomplete transactions due to improper termination.
- extratxadd: Add persistent data that will not be modified in a transaction to the log.
- writeback: Missing or misplaced writeback operations.
- ordering: Missing or misplaced ordering enforcement.
- correct: Correct reorder of backup.