2021-12-08 14:43:59 +00:00
# mknet
2022-09-14 16:22:46 +00:00
mknet is a tool to simulate various network topologies
locally thanks to network namespaces and traffic control (tc).
2021-12-08 14:43:59 +00:00
2022-09-14 16:22:46 +00:00
## Prepare your environment
2021-12-08 14:43:59 +00:00
2022-09-14 16:22:46 +00:00
Get the repository and its submodules:
2021-12-08 14:43:59 +00:00
```bash
2022-09-14 16:22:46 +00:00
git clone https://git.deuxfleurs.fr/Deuxfleurs/mknet.git
cd mknet
git submodule update --init
2021-12-08 14:43:59 +00:00
```
2022-09-14 16:22:46 +00:00
Compile benchmark tools:
2021-12-08 14:43:59 +00:00
2022-09-14 16:22:46 +00:00
```bash
( cd benchmarks/warp & & go build )
( cd benchmarks/s3concurrent & & go build )
( cd benchmarks/s3lat & & go build )
```
2021-12-08 14:43:59 +00:00
2022-09-14 16:22:46 +00:00
Switch to root as it is required by our tool,
and setup your python environment.
2021-12-08 14:43:59 +00:00
```bash
2022-09-14 16:22:46 +00:00
sudo -i
pip3 install --user .
2022-09-15 14:53:21 +00:00
( cd scenarios & & pip3 install --user -r requirements.txt )
2022-09-14 16:22:46 +00:00
```
2021-12-08 14:43:59 +00:00
2022-09-14 16:35:09 +00:00
Sometimes, it is required to add manually your local python lib folder to the environment:
```bash
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
```
2022-09-15 15:12:21 +00:00
## Topologies
2021-12-08 14:43:59 +00:00
2022-09-15 15:12:21 +00:00
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
2022-09-15 15:33:42 +00:00
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.*
2022-09-15 15:12:21 +00:00
How to run them:
2022-09-14 16:22:46 +00:00
```bash
2022-09-15 15:34:35 +00:00
./mknet scenario < topology > < scenario > [flavors...]
./mknet scenario ./topo/50ms.yml ./scenarios/garage-s3lat garage-v0.8
2021-12-08 14:43:59 +00:00
```
2022-09-15 15:12:21 +00:00
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
2022-09-14 16:22:46 +00:00
## Manual usage
2021-12-08 14:43:59 +00:00
2022-09-14 16:22:46 +00:00
```bash
./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
2021-12-08 14:43:59 +00:00