You signed in with another tab or window.Reload to refresh your session.You signed out in another tab or window.Reload to refresh your session.You switched accounts on another tab or window.Reload to refresh your session.Dismiss alert
ParaCrash aims at testing crash vulnerabilities of parallel file systems and I/O libraries. We release ParaCrash for BeeGFS/OrangeFS/GlusterFS, and provide a number of test suites.
1. Environment Variables
# set $PARACRASH_PATH to the root dir of ParaCrashexport PARACRASH_PATH=$HOME/ParaCrash
2. BeeGFS Installation
# install BeeGFS packageswget -q https://www.beegfs.io/release/latest-stable/gpg/DEB-GPG-KEY-beegfs -O-| sudo apt-key add -wget https://www.beegfs.io/release/beegfs_7.2.3/dists/beegfs-deb9.listsudo mv beegfs-deb9.list /etc/apt/sources.list.dsudo apt updatesudo apt install beegfs-mgmtd beegfs-meta beegfs-storage beegfs-client beegfs-utils beegfs-helperd# generate a four-server BeeGFS config file and a ParaCrash config file# beegfs config files is located at /etc/beegfs and the ParaCrash config files is located at $PARACRASH_PATH/configpip3 install configobj configparsersudo chown -R$USER /etc/beegfs/cd~/software/ParaCrash/ParaCrash/scriptspython3 beegfs-config.py [hostname] 2# startup beegfs in multi-modesudo mkdir -p /data/beegfssudo chown -R$USER /data/beegfs/sudo mkdir -p /mount/beegfs./beegfs.sh 2
## load packagesspack load py-numpy## run ParaCrash with the generate config files## check crash-consistency bugs of the ARVR workloadcd~/software/ParaCrash/ParaCrash./pfs_check -f configs/beegfs_4.cfg -d workloads/arvr -m check -r## add -NR for faster exploration, but it may report false positives## ./pfs_check -f configs/beegfs_4.cfg -d workloads/arvr -m check -r -NR## outputRunningin check modeInitializing PFS stateInitiated...Total 25 frontier combinationsTotal 977 crash statesTotal 977 crash statesTotal 180 crash states to explore...Test passed:(append:12,) ([append:12], append:20,'FS') [creat:0, append:1, link:2, creat:3, append:4, rename:5, creat:10, creat:19, append:20]Test failed:(creat:10,) ([creat:10, append:12], append:20,'FS') [creat:0, append:1, link:2, creat:3, append:4, rename:5, creat:19, append:20]...Total 977 crash states, 90 states explored, 2 vulnerabilitiesin ext3-djTotal exploration time: 235.17, deductedtime 0.00## detailed logsls workloads/arvr/result/# *.strace are the PFS traces# exec_graph*.gv* are graphs showing the causality order between I/O calls# errs.log is the err log# errs/ list all the err images
4.2 HDF5 Workloads
## load packagesspack load py-h5py## run ParaCrash with the generate config files## check crash-consistency bugs of the ARVR workloadcd~/software/ParaCrash/ParaCrash./pfs_check -f configs/beegfs_4.cfg -d workloads/hdf5-create -m check -r -h5## detailed logsls workloads/arvr/result/# *.strace are the PFS traces# exec_graph*.gv* are graphs showing the causality order between I/O calls# errs.log is the err log
4.3 Interpreting Results
For example, the ParaCrash bug report of hdf5-create has the following two sections. It shows that the operation pwrite64:8 has to be persisted before pwrite64:12 to avoid consistency bugs. In the 2nd section, we show the mapping from HDF5 objects to each I/O call reported by h5inspect. Specifically, pwrite64:8 modifies b-tree nodes and local heap; and pwrite64:12 modifies symbol table node. By combining these two sections, ParaCrash shows that writing b-tree nodes and local heap should be persisted before the write to symbol table node.
# install GlusterFS packageswget -O - https://download.gluster.org/pub/gluster/glusterfs/5/rsa.pub| sudo apt-key add -sudo apt updatesudo apt install glusterfs-serversudo mkdir -p /data/glusterfs/sudo chown -R$USER /data/glusterfs/sudo mkdir /mount/glusterfs# start gluster daemonsudo systemctl start glusterd# start glusterfs and generate config files# here we provide a config file for a two-server GlusterFScd$PARACRASH_PATH/ParaCrash/scripts/./glusterfs.sh [hostname] 2cp gluster_4.cfg$PARACRASH_PATH/ParaCrash/configs# run workload# do not add -NR for GlusterFS# for GlusterFS, ParaCrash has to run in sudo mode# this is because we have to set some trusted xattr for GlusterFS files during replaycd$PARACRASH_PATH/ParaCrash/sudo env PARACRASH_PATH=$PARACRASH_PATH LD_LIBRARY_PATH=$LD_LIBRARY_PATH ./pfs_check -f configs/gluster_4.cfg -d workloads/cr -m check -r