Skip to content

gigaflow-vswitch/gigaflow-orchestrator

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

34 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Gigaflow Artifact for ASPLOS '25

In this repository, we share the ansible playbook as well as the source code for the various components of the Gigaflow OVS framework as described in the ASPLOS '25 paper.

Setup

Note: All dependencies and their installation is managed via Ansible which we run through a docker container. The only required dependency for this setup is installing docker. Follow the steps specified at this link and then allow non-root users to use docker by following these steps.

The experiment setup requires 3 servers:

  • Collector (to store rulesets/traces and collect logs)
  • OVS Device-under-Test (to run gvs)
  • Tgen (to send/receive traffic)

We use Ansible to orcherstrate all experiments using these three machines. Therefore, we require root access to each of them. To populate for each machine, update the inventory.ini file as following:

[NODES]
TGEN ansible_host=<tgen-ip> ansible_user=<tgen-username> ansible_password=<tgen-password> ansible_sudo_pass=<tgen-root-password>
GVS ansible_host=<ovs-ip> ansible_user=<ovs-username> ansible_password=<ovs-password> ansible_sudo_pass=<ovs-root-password>

[STORAGE]
COLLECTOR ansible_host=<collector-ip> ansible_user=<collector-username> ansible_password=<collector-password> ansible_sudo_pass=<collector-root-password> ansible_ssh_user=<collector-username> ansible_ssh_pass=<collector-root-password>

Usage

  • Start the Ansible docker by using the following command.
make ansible
  • Test connectivity between all three machines:
make ping

Run all the following commands from within this Ansible docker container.

Run All Experiments (End-to-End and Microbenchmarks)

To setup and run all end-to-end and microbenchmark experiments, run the following sequence of commands:

# retrieve rulesets and traffic from COLLECTOR and place them on OVS and TGEN
# this will also install gvs (gvs with Gigaflow), the traffic generator, and all their dependencies
make setup-gvs-experiment

# run end-to-end (ee) experiments and microbenchmarks (bm)
# and loop over all the available rulesets and microbenchmark configurations
# and for each of them, setup the switch and traffic generators, send/receive the traffic
# and collect OVS/TGEN logs and place them on the COLLECTOR machine
make run-gvs-experiment

# teardown the experiment: this will uninstall gvs and tgen and clear logs from local machines; logs will remain saved on the COLLECTOR machine
make teardown-gvs-experiment

Run End-to-End Experiments

To setup and run only end-to-end experiments:

# retrieve rulesets and traffic from COLLECTOR and place them on OVS and TGEN
# this will also install gvs (gvs with Gigaflow), the traffic generator, and all their dependencies
make setup-gvs-experiment

# run end-to-end (ee) experiments and microbenchmarks (bm)
# and loop over all the available rulesets and for each of them, setup the switch and traffic generators, send/receive the traffic
# and collect OVS/TGEN logs and place them on the COLLECTOR machine
make run-gvs-ee-experiment

# teardown the experiment: this will uninstall gvs and tgen and clear logs from local machines; logs will remain saved on the COLLECTOR machine
make teardown-gvs-experiment

Run Microbenchmarks

To setup and run only microbenchmark experiments:

# retrieve rulesets and traffic from COLLECTOR and place them on OVS and TGEN
# this will also install gvs (gvs with Gigaflow), the traffic generator, and all their dependencies
make setup-gvs-experiment

# run end-to-end (ee) experiments and microbenchmarks (bm)
# and loop over all the available rulesets and for each of them, setup the switch and traffic generators, send/receive the traffic
# and collect OVS/TGEN logs and place them on the COLLECTOR machine
make run-gvs-bm-experiment

# teardown the experiment: this will uninstall gvs and tgen and clear logs from local machines; logs will remain saved on the COLLECTOR machine
make teardown-gvs-experiment

Run Specific Experiment for One vSwitch Pipeline

To setup and run a specific experiment (with a given locality, pipeline, and Gigaflow tables configuration), modify the following variables in vars/main.yml.

# the locality (high/low) to pick the correct traffic
# choose an option from locality_static
locality_dynamic:
  current:
    locality: "high-locality"

# the pipeline to install and send traffic for
# choose an option from pipelines_static
pipelines_dynamic: 
  current: 
    name: "cord-ofdpa"
    sub_path: "cord/ofdpa"

# the Gigaflow tables and entries limit in each of them
# choose an option from gigaflow_static
gigaflow_dynamic:
  experiment: "ee" # this is just the name for the logs directory
  options:
      gigaflow_tables_limit: 4
      gigaflow_max_entries: 8000

Once these variables are setup, run the following sequence of commands.

# sync the pipelines/traffic from COLLECTOR to NODES
make install-dataset 

# install the switch (with dependencies)
make install-gvs 

# install the traffic generators (with dependencies)
make install-tgen

# start the gigaflow-virtual-switch
# and install the pipeline rules in the switch
make start-switch-gvs 
make install-rules

# start the traffic (this will stop automatically)
make start-tgen

# cleanup after the traffic is sent
make stop-tgen

# uninstall the rules from the switch and stop it
make uninstall-rules 
make stop-switch-gvs

# copy logs from gvs and tgen to the collector machine
make collect-logs

# uninstall the tgen, gvs, and delete datasets
make uninstall-tgen 
make uninstall-gvs 
make uninstall-dataset

Reference

Please cite this paper when using Gigaflow:

@inproceedings{zulfiqar2025gigaflow,
title = {{Gigaflow: Pipeline-Aware Sub-Traversal Caching for Modern SmartNICs}},
author = {Zulfiqar, Annus and Imran, Ali and Kunaparaju, Venkat and Pfaff, Ben and Antichi, Gianni and Shahbaz, Muhammad},
booktitle = {Proceedings of the 30th ACM International Conference on Architectural Support for Programming Languages and Operating Systems, Volume 2},
year = {2025}
publisher = {Association for Computing Machinery},
}

Contact Us

About

An Ansible-based orchestrator for Gigaflow virtual switch (GvS) to setup testbed and run experiments

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages