Load Balancing in Jellyfish Networks
Instructions for Peer Validators
Progress Achieved
- Built and tested custom Jellyfish topo and network. Our network is based on the topology described in Jellyfish: Networking Data Centers Randomly, Singla et al.
- Configured network to work with a remote controller.
- Separated graph creation from network creation. Before this, we were generating the graph topology at Mininet startup time. Graph is now pre-generated and saved as an adjaceny list. This allows us to generate routing schemes for the saved graph. network.py processes the adjacency list file to build the network.
- Added logic for ECMP and K-shortest paths and routing file output. Paths are generated based on the saved graph and outputted in pickle format.
- Modified riplpox files for custom routing flag (
--routing=jelly[ROUTING FILE]
) and argument parsing. Added the I/O to process the pkl routing file in JellyfishRouting class in ripl/ripl/routing.py. - Implemented K-diverse short paths algorithm, adapted from A Heuristic Approach to Finding Diverse Short Paths, Voss et al
- Conducted iperf testing and data analysis.
Lingering Issues
- FIXED, pingall now reaches all hosts.
After some research and a lot of headache, I've discovered that Mininet does not work well with cycles in a graph, which is why it's dropping packets.Manually specified 10.0.X.X IP addresses and added stp and failMode params to addSwitch() calls. - FIXED, wrote a script with tests. Call script using
source
command in Mininet CLI.Iperf tests with multiple hosts at a time (via script). Could add logic to Mininet startup in jellyfish_network.py script but this does not work with the remote controller since Mininet startup is handled by ripl. - Launch POX controller directly from within repository directory.