Create a test network using network namespaces and tc-netem
Find a file
2022-09-15 17:34:35 +02:00
analysis Scenario based benchmarks will be ready soon 2022-09-14 18:22:46 +02:00
benchmarks Scenario based benchmarks will be ready soon 2022-09-14 18:22:46 +02:00
scenarios Add flavors 2022-09-15 17:33:42 +02:00
topo Improve README 2022-09-15 17:12:21 +02:00
.gitignore Working s3lat with Garage 2022-09-14 18:01:44 +02:00
.gitmodules Scenario based benchmarks will be ready soon 2022-09-14 18:22:46 +02:00
LICENSE add license 2021-12-12 17:54:54 +01:00
mknet Implement scenario subcommand 2022-09-15 17:00:02 +02:00
net.py run-all wait all processes before returning 2022-09-15 16:53:21 +02:00
README.md update examples 2022-09-15 17:34:35 +02:00
setup.py New way to deploy Garage 2022-09-14 17:25:16 +02:00
shell.nix New way to deploy Garage 2022-09-14 17:25:16 +02:00

mknet

mknet is a tool to simulate various network topologies locally thanks to network namespaces and traffic control (tc).

Prepare your environment

Get the repository and its submodules:

git clone https://git.deuxfleurs.fr/Deuxfleurs/mknet.git
cd mknet
git submodule update --init

Compile benchmark tools:

( cd benchmarks/warp && go build )
( cd benchmarks/s3concurrent && go build )
( cd benchmarks/s3lat && go build )

Switch to root as it is required by our tool, and setup your python environment.

sudo -i
pip3 install --user .
( cd scenarios && pip3 install --user -r requirements.txt )

Sometimes, it is required to add manually your local python lib folder to the environment:

export PYTHONPATH=$PYTHONPATH:$HOME/.local/lib/python3.10/site-packages/

You can check that everything has been installed by running in a python REPL:

import garage_admin_sdk

Topologies

All topologies:

  • ./topo/with-vdsl.yml - A topology mixing datacenters with fast internal connectivity and an isolated VDSL node
  • ./topo/50ms.yml - An artifical topology simulating nodes with high bandwidth but with a fixed 50ms latency, useful to quantify the impact of latency on a distributed software
  • ./topo/multi-dc.yml - Simulate 3 DC interconnected with 50ms latency WAN network and close to zero latency inside the DC
  • ./topo/slow.yml - Simulate 3 nodes interconnected with a low latency, very low bandwidth link. Useful to debug bandwidth bottlenecks

Feel free to write new topologies!

Scenarios

All scenarios:

  • ./scenarios/garage-s3lat [garage-v0.7|garage-v0.8] - Run s3lat on Garage
  • ./scenarios/garage-warp [garage-v0.7|garage-v0.8] [default|fast] - Run warp on Garage. 2 flavors are available: fast and default.

Scenarios take optional flavors as input that modulate their behavioir. Passing them is not mandatory, a default one will be selected for you.

How to run them:

./mknet scenario <topology> <scenario> [flavors...]
./mknet scenario ./topo/50ms.yml ./scenarios/garage-s3lat garage-v0.8

How to write good scenarios:

  • If a scenario can be run with multiple different parameters, write one scenario with multiple flavors
  • If the logic ran is different, write a new scenario
  • A scenario code must remain short and looks like a DSL, abstract the logic in the fragments/ module

Manual usage

./mknet create ./topo/with-vdsl.yml
./mknet run-all ./scenarios/garage-manual
./mknet run dc1:dc1s1 /tmp/mknet-bin/garage* -c /tmp/mknet-store/garage/dc1/dc1s1/garage.toml status
./mknet run-all ./scenarios/clean
./mknet destroy