This repository contains code for my thesis project where I designed and implemented MessageFirst, which is a user API for message-oriented network workloads. It is a blocking API that supports the notion of a "message", a unit of transmission that is not considered done until a message has been sent and a respective response has been received.
Before running any benchmarks, first build MessageFirst and run the tests to make sure your environment is set up correctly.
Clone the repo as so:
git clone https://github.com/jakemassoth/MessageFirst.git
cd MessageFirstWe use Miniconda to create isolated python environments with the necessary packages and versions needed to run the MessageFirst tests and benchmarks.
Download the Miniconda installer for Linux:
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
chmod +x ./Miniconda3-latest-Linux-x86_64.sh
./Miniconda3-latest-Linux-x86_64.shThe installer will ask where Miniconda should be installed. If you are running the benchmarks locally, feel free to use
the default. If you are running the benchmarks on the DAS-5, make sure to install Miniconda in /var/scratch/<USERNAME>/miniconda3.
Answer "yes" when the installer asks if it should run conda init.
Now that Miniconda is installed, we can create the MessageFirst Python environment.
source ~/.bashrc
conda create --name MessageFirst --file spec-file.txt
echo "conda activate MessageFirst" >> ~/.bashrc
source ~/.bashrc
rm Miniconda3-latest-Linux-x86_64.shYou should now see (MessageFirst) prepended to your terminal prompt.
Requires CMake 3.15.
cmake .
make
make testIf these all run successfully, you're good to go!
TODO
This repository contains two benchmarks:
netperf_stream_rrcompares the throughput achieved by netperf'sTCP_RRtest to a baselineTCP_STREAMtestecho_benchmarkbenchmarks the MessageFirst API implementation.
First, install netperf for your distribution. Netperf is a network benchmarking
tool used in the netperf_stream_rr benchmark. On Ubuntu 18.04:
sudo apt update
sudo apt install netperfOn the DAS-5:
module load netperf
module load cmake/3.15.4
module load gccVerify that netperf is working with a quick test benchmark:
netserver
netperfThis benchmark should complete successfully after about 10 seconds and display some statistics.
Running benchmarks locally is pretty simple:
python benchmarks/run_benchmarks.pyThis will take a few minutes to run. It will generate .csv files containing the data from the benchmarks in the relevant
data folders for each benchmark.
To plot graphs:
python benchmarks/make_plots.pyThis will generate .png plots for each benchmark in its relevant plots folder.
First, reserve two nodes as so:
preserve -np 2 -t 900Use preserve -llist to list the reservations currently active. Note the node numbers you have been assigned.
Then run the benchmark as so:
python benchmarks/run_benchmarks.py node<X> node<Y>Replace <X> and <Y> with the node numbers of your reservation.
After this completes (it should take a few minutes), make the plots:
python benchmarks/make_plots.pyThis will generate .png plots for each benchmark in its relevant plots folder.