This repository contains the source code for the paper "FIGRET: Fine-Grained Robustness-Enhanced Traffic Engineering". This paper has been accepted by ACM SIGCOMM' 24.
Figret is a fine-grained robustness-enhanced traffic engineering (TE) for wide-area networks (WANs) and data center networks (DCNs). By developing customized robustness strategies based on traffic characteristics of different source-destination pairs and implementing them using deep learning methods, this approach achieves good performance in both bursty and non-bursty scenarios while maintaining a fast solution speed.
.
├── Data # test data, each subfolder represents a network, containing topology, paths, and traffic matrices.
├── benchmarks # test code for baselines
│ └── linear # test code for Oblivious, COPE and Pred TE
├── figret.py # test code for figret
├── figret_helper.py # command-line arguments for figret
├── requirements.txt # python packages required by figret
└── src # source code for figret
├── __init__.py # package initialization when imported
├── config.py # directory configurations
├── figret_env.py # traffic engineering environment
├── figret_model.py # model for train, test
├── figret_net.py # neural network structure for figret
├── figret_simulator.py # load traffic demands for figret env
└── utils.py # utility functions for figret
- Set up the Python environment and Python packages.
conda create --name figret python=3.8.0
- Activate the Conda enironment.
conda activate figret
- Install the python packages which are listed in requirements.txt, requirements.txt does not include
torch,torch-scatter, andtorch-sparsebecause these packages need to be installed according to your execution environment. Please refer to the instructions below for downloading these packages..
pip install -r requirements.txt
- Install
torch,torch-scatterandtorch-sparse. When installingtorch,torch-scatter, andtorch-sparse, it is essential to choose versions that are compatible with your execution environment (CPU or GPU with a specific version of CUDA). You can follow the official instructions to download them. - Install Gurobi Solver. You can request a free academic license here.
To evaluate figret:
$ python3 figret.py --topo_name Facebook_pod_a --epochs 3 --batch_size 32 --alpha 0.03
Figret is compared with the following benchmarks:
- Jupiter (
benchmarks/linear/window_algorithm_run.py) This scheme constructs an anticipated matrix composed of the peak values for each sourcedestination pair within a time window. Then it optimizes the TE objective under the constraint that path sensitivity remains below a predetermined threshold. (Requires Gurobi) - Oblivious (
benchmarks/linear/oblivius_algorithm_run.py) This scheme focuses on optimizing the worst-case performance across all possible traffic demands. (Requires Gurobi) - COPE (
benchmarks/linear/oblivius_algorithm_run.py) This scheme enhances demand-oblivious TE by also optimizing over a set of predicted traffic demands. It optimizes MLU across a set of DMs predicted based on previously observed DMs while retaining a worst-case performance guarantee. (Requires Gurobi) - Pred TE (
benchmarks/linear/predict_algorithm_run.py) This method involves predicting the next incoming traffic demand and configuring accordingly, without considering the mispredictions that may arise from the traffic uncertainty. (Requires Gurobi)
To evaluate these benchmarks, navigate to the benchmarks/linear directory and execute the following commands:
cd benchmarks/linear
python3 window_algorithm_run.py --topo_name Facebook_tor_a --TE_solver Jupiter
python3 oblivious_algorithm_run.py --topo_name Facebook_tor_a --TE_solver oblivious
python3 oblivious_algorithm_run.py --topo_name Facebook_tor_a --TE_solver COPE
python3 predict_algorithm_run.py --topo_name Facebook_tor_a
Additionally, there are two open-source benchmarks available, which are:
-
DOTE: From the NSDI '23 paper titled "DOTE: Rethinking (Predictive) WAN Traffic Engineering". The code repository is available at DOTE GitHub repository.
-
Teal: From the Sigcomm '23 paper titled "Teal: Traffic Engineering Accelerated by Learning". The code repository is available at Teal GitHub repository.
If you have your own dataset and wish to test it, please organize your data according to the format outlined below and place it in the Data folder.
-
topo_name.json: This file should include information about the network topology. It needs to specify whether the graph is directed, as well as details about the nodes and edges.
-
tunnels.txt: This file should list the candidate paths for each source-destination pair. It serves as a key input for path selection in the network simulations.
-
train/test folder: These folders should contain the demand matrices information: Each Demand Matrix (DM) should be flattened to a line and stored in a file with a .hist extension. Additionally, each file should include the optimal maximum-link-utilization (MLU) for each DM, which should be stored in a file with a .opt extension.
To add another TE implementation to this repo,
- If the implementation is based on machine learning, add test code to
figret.pyand source code tosrc/ - If the implementation is based on linear programming, add test code to
benchmarks/linear/and source code tobenchmarks/linear/linear_src
If you use our code in your research, please cite our paper:
@inproceedings{figret,
title = {FIGRET: Fine-Grained Robustness-Enhanced Traffic Engineering},
author = {Liu, Ximeng and Zhao, Shizhen and Cui, Yong and Wang, Xinbing},
booktitle = {Proceedings of the ACM SIGCOMM 2024 Conference},
pages = {117–135},
year = {2024}
}