Quick start

Let’s get the source code of FabricEval from GitHub:

$ git clone https://github.com/shuoshuc/FabricEval.git

We can run the end-to-end FabricEval pipeline:

$ cd FabricEval
$ bazel run //e2e:run -- $(pwd)

The command takes less than a minute to complete on a 16-core machine. We can also see the output of each step in stdout. After the run returns, we should find a folder named igr in the top level of the repo, with a set of csv files. This contains all the metrics collected.

For example, igr/LU.csv is a file containing the utilization of all links in the network. For each link, an ideal utilization given by the TE solution (if no precision loss) and an actual utilization given by the TE implementation are logged.

In addition, igr/node_ecmp.csv contains the group/ECMP table usage of every switch, and igr/node_demand.csv contains the admitted traffic demand volume of each switch.

Code structure

As mentioned, FabricEval has multiple modules. Below is the structure:

  • common/: common helper functions and flags.
  • e2e/: pipeline implementation of the entire framework.
  • globalTE/: traffic engineering solver component, generates TE solution.
  • localTE/: handles TE solution to TE implementation mapping + group reduction.
  • proto/: protobuf definitions for topology, traffic demands, TE solution and so on.
  • scripts/: log parsing scripts.
  • tests/: unit tests.
    • tests/data/: protobuf format production-like network configs.
  • topology/: the topology component that represents a network in memory.
  • traffic/: the traffic component that represents traffic demands.

We have dedicated sections in the rest of the documentation, describing each of the following components: e2e, topology, traffic, globalTE, localTE.