/jellyfish

Exploring and expanding upon load balancing research in asymmetric Jellyfish topologies.

Primary LanguagePython

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.

Citations