The artifacts of this work are available at:
👉 CloudLargeScale-UCLouvain/PANDAS
The repository includes:
- The source code of PANDAS
- The scripts to run the experiments
- The plotting script to plot experiments results
Both the simulator and the prototype implementations were run on Linux-based operating systems.
We run the simulator and a local version of the prototype on a server with 18-core Intel Xeon Gold 5220 CPU and 96 GB of RAM.
PANDAS/
├── simulator/ # Source code for large-scale simulator experiments
│ ├── configs/ # Configuration files for network simulations
│ │ ├── configPaper/ # Configuration files used in the paper for perf: Figure 12 13 and 14
│ │ ├── configAdversary/ # Configuration files for resilience against dead nodes: Figure 15
│ │ ├── configPaper1K/ # Configuration files for test of redundancy of samples: Figure 9 10 11 12
│ │ ├── configReel/ # Configuration files for validation with the prototype and validation of strategy
│ │ └── configPaper/ # Configuration files for validation with the prototype and validation of strategy
│ ├── src/ # Code of the simulator
│ │ └── kademlia/das # Folder containing PANDAS code used in the sumlator
│ └── python/ # Plotting scripts
└── prototype/ # Source code for real-world prototype experiments
│ ├── Latency/ # Latency used for the prototype
│ ├── Launching_scripts/ # Script used to install and launch experiment on grid5000
│ ├── results/ # Prototype experiment results
│ └── python/ # Log processing and plotting
The simulator is implemented in Java 17 using Maven as a build tool.
It is built on top of Peersim and based on the Kademlia implementation by Daniele Furlan and Maurizio Bonani:
👉 http://peersim.sourceforge.net/code/kademlia.zip
To install all requirements and build the simulator:
cd simulator/
sudo chmod +x install.sh && ./install.shThis script will:
- Install Java 17 and Maven
- Fetch all dependencies
- Build the simulator
After this, the simulator is ready to run experiments.
The simulator uses configuration files located in simulator/configs/.
Each configuration file corresponds to a specific network size (e.g., 1k.cfg simulates a network of 1,000 nodes).
To run an experiment:
cd simulator/
./run.sh <config_file>🗂 Results will be stored in:
simulator/Results/→ Experiment resultssimulator/logs/→ Detailed logs
To plot the experiment results:
cd simulator/python
python3 plot_results.pyThe generated plots will be saved in simulator/python/plots/
The prototype is implemented in Go and built on top of libp2p.
For the paper, we run the prototype on Grid5000, a French distributed cluster for experiment-driven research in computer science.
It can also be executed locally at a smaller scale.
To install requirements and build the prototype:
cd prototype/
sudo chmod +x setup.sh && ./setup.shThis script installs:
- The latest version of Go
- All required dependencies
- The prototype binaries
After setup, the prototype is ready to run experiments.
First, generate a nodes.csv file defining the network topology (list of nodes and their unique peer IDs):
./create_topo.sh <number_of_nodes>Run the network using the topology file:
./run_local.sh <topology_file>🗂 Results will be stored in:
prototype/results/→ Experiment resultsprototype/logs/→ Detailed logs
To process logs and plot results:
cd prototype/python
python3 process_logs.py <results_folder>This generates visual analyses and metrics from the prototype experiments.