This repository hosts the packet-level simulator used in the evaluation of the NSDI 2021 paper titled Debugging Transient Faults in Data Centers using Synchronized Network-wide Packet Histories. This packet-level simulator is used to evaluate the proposed system, SyNDB, on a large-scale data center network.
The following additional C++ libraries are required:
The simulator has been tested with the above library versions. You can always use higher versions. However, to avoid any possibility of running into API breakage, we recommend you to stick to the above versions. Other than these, the simulator uses the standard libpthread
library.
Download the source code for the above dependencies. Build and install them as per respective instructions:
- Building and installing libfmt (build a shared library)
- Building and installing libspdlog
Step 1: Git clone this repo to your local Linux machine:
git clone https://github.com/rajkiranjoshi/syndb-sim.git
Step 2: Compile the simulator source code:
# Inside the syndb-sim directory
make
This will create the simulator binary syndb-sim
in the same directory.
# Inside the syndb-sim directory
./syndb-sim
This will run the simulation as described in section 7.1.2 of the paper. By default, the simulator binary will simulate a small k=4 fat tree network with 100G links for a total network run time of 10 milliseconds. See Advanced Simulation to run simulation for other (large) configurations.
The simulation will produce a bunch of output files in the "data" subdirectory.
The simulation data is analyzed by a separate binary.
Update the PREFIX_FILE_PATH
and PREFIX_STRING_FOR_DATA_FILES
macros in the data-analysis/dataparser.hpp
to point to the output data and its (time-based) prefix. Now build the data analysis binary:
# Inside the syndb-sim directory
make analysis
This will produce the binary syndb-analysis
in the same directory.
Finally, copy preProcessData.sh
to the data folder and run it to process the simulation data.
# Inside the syndb-sim directory
cp ./preProcessData.sh ./path/to/data/file
cd ./path/to/data/file
./preProcessData.sh
# Inside the syndb-sim directory
./syndb-analysis
This will run analysis on the data generated by the simulation. The analysis will print the following for each valid switch:
- ingress time for the trigger packet
- maximum number of common packets between the trigger switch and current switch
- correlation for the captured p-records
- common time window between the trigger switch but missing in the current switch window
The paper uses this simulator for: (a) validation (section 7, Figure 6), and (b) large-scale evaluation (section 7.1.2). To build the simulation/analysis binary for these experiment configurations, build the simulation binary with the following commands, respectively:
## For validation, inside the syndb-sim directory
make CONFIG=validation
# After simulation and updating macros in dataparser.hpp
make CONFIG=validation analysis
## For evaluation, inside the syndb-sim directory
make CONFIG=evaluation
# After simulation and updating macros in dataparser.hpp
make CONFIG=evaluation analysis
For the evaluation configuration, each simulation run requires ~4 GB of memory and produces 100's of GB of simulation data while requiring ~10 hours (depending on your CPU clock speed) to complete. Therefore, please ensure sufficient system requirements before running the simulator with the evaluation configuration.