This repository contains the artifacts for the paper MoonEm — High-Precision Path Property Emulation Using DPDK by Stefan Lachnit, Sebastian Gallenmüller, Eric Hauser, Florian Wiedner, Kilian Holzinger, Henning Stubbe, Thomas Senftl, and Georg Carle. MoonEm is available as part of the MoonGen repository on GitHub.
To reproduce the results of the paper, follow the steps in the section Reproducing the Results.
All the following steps should be executed as the root user on a Debian- or Ubuntu-based system. The scripts were tested on Debian Bookworm and Ubuntu 24.04.
- Clone this repository to your evaluation machine (Requirements)
- Install Docker (Additional instructions for Debian and Ubuntu)
- Execute the
build_figures.shscript (for more details, see below) - The resulting PDF figures and build files are stored in the
figuresfolder, organized by subfolder for each reproduced figure.
To run the processing scripts, the following hardware requirements should be met:
- Required disk space: ~256GB
- Required RAM: ~256GB
- >10 CPU cores recommended for best performance
Other requirements:
- Downloaded files: ~50GB
- Processing time: ~1.5 hours (on AMD EPYC 7542 32-Core CPU)
This repository contains the necessary scripts to reproduce the main results of the paper from the raw measurement data.
- containers: Dockerfiles for building containers to run the processing scripts
- data: The scripts will download the raw measurement data into this folder
- figures: Postprocessing scripts and TeX source code to build the figures from the paper as PDFs
- processing: Code of the processing tool used to process the packet captures
- scripts: Processing steps executed on the processing host
- steps: Processing scripts executed in the Docker containers
- build_figures.sh: Runs all the processing steps in sequence
- measurements: Supplemental scripts that were used to perform the measurements on our testbed
The measurement dataset is uploaded to Zenodo.
The scripts in this repository automatically download the raw measurement data from a copy at https://syncandshare.lrz.de/ for faster downloads.
The results for each measurement run were stored as a separate tar.zst archive, containing the packet captures, script metadata, and script outputs for the respective experiment.
Packet captures use a custom binary format (64-bit packet ID followed by a 64-bit little-endian timestamp in nanoseconds).
Processing of the result data is divided into multiple steps performed by the scripts in the steps folder.
These steps are automatically called by the build_figures.sh script.
The scripts start Docker containers that perform processing using matching scripts in the scripts folder.
01_build_container.sh: Build Docker containers used for the following steps from Dockerfiles02_download_artifacts.sh: Download compressed raw measurement data into thedatafolder03_unzip.sh: Decompress the downloaded measurement data04_remove_preprocessed_data.sh: The downloaded data contains preprocessed data. These preprocessed files are deleted in this step05_preprocess_captures.sh: Run preprocessing scripts to analyze raw packet captures for latency measurements06_postprocess_results.sh: Run postprocessing scripts to convert results from preprocessing and measurements to CSVs that can be plotted07_build_figures.sh: Runlatexmkfor all figures to generate PDFs
Raw packet capture data is processed using a C++ program stored in the processing folder.
This program reads all packet IDs and timestamps into a hashmap, calculates statistics (such as latency, IPG, etc.), and saves the results as CSV files.
The code is built and executed inside a Docker container using the processing scripts.
The figures folder contains subfolders for each figure in the paper (sometimes also grouped for similar measurements).
Each folder contains two types of files:
- A
process.pyfile for transforming the results from the preprocessing step and other measurement logs into CSVs that can be plotted - One or more
.texfiles for generating the PDF plots