cosmoss-jigu / witcher

SOSP'21 Witcher Artifact
9 stars 0 forks source link

SOSP'21 Witcher Artifact

This repository contains the artifact for the SOSP'21 paper:

Xinwei Fu, Wook-Hee Kim, Ajay Paddayuru Shreepathi, Mohannad Ismail, Sunny Wadkar, Dongyoon Lee, and Changwoo Min “Witcher: Systematic Crash Consistency Testing for Non-Volatile Memory Key-Value Stores”, ACM Symposium on Operating Systems Principles (SOSP), Virtual, Oct, 2021

The artifact was tested in a machine with following specifications:

We provided two solutions for running the artifacts:

Use virtual machine

The VM uses 32 cores and 64GB memory. The size of the image is over 70GB, and the VM may use around 100GB disk after running artifacts. So make sure you are using a machine with sufficient cores, memory and disk. SSD in host machine is preferred.

Download the VM image in Google Drive

Google drive link. Since the VM image contains llvm-9 built inside, its size is over 70GB. If we want to download it by using command line, we need to use OAuth token. (ref link)

Start the VM and connect to it

Running the artifacts may cost over 10 hours, so make sure your ssh connection will not lose and the host machine will not sleep or turn off. Consider run tmux first before your connection.

# start the VM in background
qemu-system-x86_64 \
    -hda witcher-sosp21-ae.img \
    -m 64G \
    -smp 32 \
    -machine pc,accel=kvm \
    -enable-kvm \
    -vnc :5 \
    -net nic \
    -net user,hostfwd=tcp::2222-:22 \
    -daemonize

# ssh to the VM
ssh review@localhost -p 2222

# username: review
# password: sosp21

Play

After you log into the VM, you can get bugs reported by the paper without running the artifacts:

In the VM, all dependencies have been set up and the tool have been built, you only need to run the following command:

cd $WITCHER_HOME/script
./run_and_get_res_fig.sh

After the script finishes, you can find following results in the $WITCHER_HOME/script directory:

Note that running all applications requires a lot of time as shown in Table 5 in the paper, this artifact by default only selects a portion of the application. If you are interested in running other applications, please do as following:

cd $WITCHER_HOME/script
# edit the tasks.py file to select the the application you are interested in
vim tasks.py
./run_and_get_res_fig.sh

Setup from scratch

Here we assume we are using Fedora 29, so we use yum for package management.

Environment

Here we assume we are using bash.

Installation of llvm and clang 9.0.1

Dependencies

# boost and ...
sudo yum install gcc gcc-c++ vim make cmake tmux git boost-devel python3-pip \
                 tbb-devel libatomic autoconf libevent-devel automake psmisc
# redis memcached pyplt networkx
sudo pip3 install pymemcache redis matplotlib networkx

Play

git clone git@github.com:cosmoss-vt/witcher.git
cd $WITCHER_HOME/script

# build witcher
./build.sh

# instrument apps
python3 instrument.py

# run witcher
python3 run.py

# get result
python3 get_result.py
python3 get_figure.py

After the script finishes, you can find following results in the $WITCHER_HOME/script directory:

Note that running all applications requires a lot of time as shown in Table 5 in the paper, this artifact by default only selects a portion of the application. If you are interested in running other applications, please do as following:

cd $WITCHER_HOME/script

# edit the tasks.py file to select the the application you are interested in
vim tasks.py

# build witcher
./build.sh

# instrument apps
python3 instrument.py

# run witcher
python3 run.py

# get result
python3 get_result.py
python3 get_figure.py

You can get bugs reported by the paper without running the above commands: