TIPSY relies on a high-level main configuration file to perform reliable and reproducible benchmarks. The key to the flexibility of TIPSY is that this configuration allows to define a wide range of different tests, from stability tests to scalability and robustness measurements, using minimal configuration on the side of the user.
A sample configuration for TIPSY is given below.
{
"benchmark": [
{
"id": "test1",
"scale": "outer",
"pipeline": {
"core": 1,
"name": "mgw",
"user": [4,8],
"bst": 1,
"server": 2,
"rate-limit": 10000,
"nhop": 4,
"fakedrop": false,
"fluct-user": 0,
"handover": 0,
"fluct-server": 4
},
"traffic": {
"pkt-size": [64, 128],
"dir": ["uplink", "downlink", "bidir"]
}
}
],
"default": {
"traffic": {
"pkt-num": 10000,
}
}
},
"visualize": []
}
The general rule is that when a configuration parameter is omitted, TIPSY chooses a sane built-in default.
The configuration defines a main benchmark
section that defines a list of
benchmarks to be run. This allows to request multiple TIPSY benchmarks in a
single configuration.
Each benchmark in turn defines the following subsections:
- an unnamed “general” section that gives the overall settings for the benchmark, like name, scaling mode, etc.
pipeline
: pipeline-specific settingstraffic
: traffic generator settingssut
: SUT settingstester
: Tester settings
Pipeline specific settings. The pipeline
section has a mandatory name
parameter that defines the name for the pipeline to be configured for the
benchmark. The core
parameter defines the number of CPU
cores/workers. For other specific settings consult the docs and JSON schema
of the individual pipelines.
Parameters for the traffic trace that will be fed to the pipeline by the Tester. This section might contain the below parameters.
pkt-size
: packet size [byte]pkt-num
: number of packetsdir
:uplink
: evaluate the upstream datapathdownlink
: evaluate the downstream datapathbidir
: run test in both directions
thread
: number of requested processing CPU threads. 0 means all of the available cores.ascii
: dump generated packets in human readable ASCII form
Parameters for the Tester, among others, the traffic generator backend to be used for insert the traffic trace into the SUT and other Tester specific settings.
type
: packet generator for the Tester (moongen
ormoongen-rfc2544
)test-time
: runtime in secondsmoongen-cmd
: absolute path of the MoonGen executableuplink_port
anddownlink_port
: port name (‘eth1’) or pci addr for DPDK (‘0000:0b:00.0’) or DPDK port number (in case of moongen, e.g., ‘0’).core
: number of CPU cores to usesetup_script
: absolute path of your custom Tester setup script. Useful for e.g. automating DPDK interface configuration.teardown_script
: absolute path of your custom Tester teardown script
Settings for the System-Under-Test (SUT).
type
: SUT implementation (bess
,ovs
, etc.)hostname
: hostname that can be used to ssh into SUT without a password as ‘ssh hostname’. Edit ~/.ssh/config for more complicated scenarios. See man page: ssh_config (5)bess-dir
: a directory on SUT in which BESS is installedtipsy-dir
: a directory on SUT in which TIPSY is installederfs-dir
: a directory on SUT in which ERFS is installedt4p4s-dir
: a directory on SUT in which T4P4S is installeduplink_port
anddownlink_port
: port name (‘eth1’) or pci addr for DPDK (‘0000:0b:00.0’) or DPDK port number (in case of moongen, e.g., ‘0’).setup_script
: absolute path of your custom SUT setup script. This script will run on the SUT before starting a measurementteardown_script
: absolute path of your custom SUT teardown script. This script will run on SUT after ending a measurementcoremask
: hexadecimal coremask as string. Supported by bess, ovs, t4p4s, vpp. Required by t4p4as. (note: this defines the availabilty of the cores. The actual number of cores is defined by pipeline.core)portmask
: hexadecimal portmask as string. Supported by t4p4s. Required by t4p4as.uplink-vpp-interface
: uplink VPP Interface name. Required by VPP.downlink-vpp-interface
: downlink VPP Interface name. Required by VPP.
The default section provides an interface to apply benchmark parameters for every benchmark.
The visualize section can be used to configure plots of the captured data.
type
: The type of the plot. (simple
,table
,contour
,USL
)x-axis
: The JSON Path in dot notation to the field in the result.json that is used on the x-axisy-axis
: The JSON Path in dot notation to the field in the result.json that is used on the y-axisz-axis
: The JSON Path in dot notation to the field in the result.json that is used on the z-axisgroup-by
: The JSON Path in dot notation to the field by which the data is groupedfilter
: A mongoquery to filter the results before collecting the data for x-,y- and z-axistitle
: The tite for the plotaxis-type
: One of the axis types defined by matplotlibaggregate
: Mongo aggregation pipeline for more complex data filtering
The example directory contains samples for the visualize section too.