Skip to content
Permalink
master
Switch branches/tags
Go to file
 
 
Cannot retrieve contributors at this time

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>

Real-world bugs

  • pmdk_rbtree.patch reproduces 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.patch reproduces 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.patch reproduces the bug addressed in this git commit of PMFS-new.
  • pmdk_btree.patch reproduces the bug we found in btree_map.c.
  • pmdk_btree_doubleadd.patch reproduces the double TX_ADD performance issue we found in btree_map.c.

Synthetic bugs

  • 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.