swx-perf

Prev Next

WHAT TO EXPECT

swx-perf is a tool that creates traffic on the cloudSwXtch overlay network using roles of producers and consumers.


In this article, users will learn how to use the tool.

Overview

As a producer, swx-perf has multiple parameters that can be configured to generate traffic flows with different characteristics. This versatile tool can generate several streams on a single instance (using ranges), can be executed several times to generate multiple instances concurrently on the same VM, and can be run as a producer on several VMs.

The mandatory arguments for a producer are the socket and the interface:

swx-perf producer --sendto <MULTICAST-ADDRESS:PORT> --nic <NETWORK_INTERFACE>

As a consumer, swx-perf will pick up the traffic generated by the producer(s) in the network. It can consume one stream or a range of streams on each instance, and can be executed to generate several instances on the same VM, or on different VMs.

The mandatory arguments for a consumer are:

swx-perf consumer --recvfrom <MULTICAST-ADDRESS:PORT> --nic <NETWORK_INTERFACE>

In both cases, the <MULTICAST-ADDRESS:PORT> is the socket you want to use to send/receive the stream. But it can also use ranges, both in the IP and the port, separately or simultaneously. For example: 239.1.1.1-239.1.1.100;10000-10050

NOTE

Regarding the MULTICAST-ADDRESS, we recommend referring to the IANA IPv4 Multicast Address Space Registry. Currently, the xNIC can’t join a multicast stream on the reserved IP 224.0.0.1.

The <NETWORK_INTERFACE> is the name of the adapter.

For example, if you have an xNIC Type 1, or 3 you can produce traffic to the multicast address 239.1.1.1 using port 10000 with the command:

swx-perf producer --sendto 239.1.1.1:10000 --nic swx0

On another VM, you can consume using an xNIC Type 2 with a data interface eth1 with the command:

swx-perf consumer --recvfrom 239.1.1.1:10000 --nic eth1

It can also:

  • can produce/consume different protocols (UDP, RTP, SRT & RIST)

  • can vary the payload length

  • can vary its contents randomly

  • can use broadcast traffic (same subnet) or generic broadcast (255.255.255.255)

  • can use SSM traffic

  • can produce/consume generic (no swx-perf) traffic (for example, traffic created by another tool like iPerf)

  • can measure latency, both one-way (needs time-sync) or round-trip

  • can be executed for a fixed amount of time or packages

  • can replay a pcap file

swx-perf

For a quick view of the functionality and usage of swx-perf use -h or -help.

$ swx-perf -h
Usage: swx-perf [--help] [--version] [--nic VAR] [--recvfrom VAR] [--sendto VAR] [--payload_length VAR] [--pps VAR] [--broadcast] [--generic-broadcast] [--broadcast-port VAR] [--ssm_include VAR...] [--ssm_exclude VAR...] [--generic] [--total_pkts VAR] [--seconds VAR] [--loopback] [--rtt-latency] [--one-way-latency] [--latency-buckets] [--dbg] [--show-full-packet-bps] [--pcap VAR] [--no-perf-header] [--random-payload] [--json-report] command

Positional arguments:
  command                 [producer|consumer] suported commands

Optional arguments:
  -h, --help              shows help message and exits
  -v, --version           prints version information and exits
  --nic                   name of NIC to use
  --recvfrom              Format: "[<protocol>://][@]<ip>:<port>"
                          Supported Protocols : [udp, rtp, srt, rist]
                          If protocol field is not defined in the argument, the protocol is UDP by default.
  --sendto                Format: "[<protocol>://][@]<ip>:<port>"
                          Supported Protocols : [udp, rtp, srt, rist]
                          If protocol field is not defined in the argument, the protocol is UDP by default.
  --payload_length        (producer command only) number of bytes for the multicast udp payload [nargs=0..1] [default: 100]
  --pps                   (producer command only) packet-rate or packet per seconds [nargs=0..1] [default: 1]
  --broadcast             Enables broadcast traffic flow on the subnet of the indicated NIC.
                          Therefore no other traffic will be handled and --sendto and --recvfrom args are ignored.
  --generic-broadcast     Sends broadcast packets to 255.255.255.255, valid only with --broadcast argument
  --broadcast-port        Port for broadcast traffic, valid only with --broadcast argument
  --ssm_include           (consumer command only) List of SSM addresses to include (i.e. 192.168.2.1 193.168.2.4) [nargs: 1 or more]
  --ssm_exclude           (consumer command only) List of SSM addresses to exclude (i.e. 192.168.2.1 193.168.2.4) [nargs: 1 or more]
  --generic               (consumer command only) to consume generic packets
  --total_pkts            Total packets to send/receive. To run without this limit use 0 [nargs=0..1] [default: 0]
  --seconds               Number of seconds to run the application. To run without this limit use 0 [nargs=0..1] [default: 0]
  --loopback              Receives packets from --recvfrom and sends packets to --sendto
  --rtt-latency           Enables measurement of RTT/2 where RTT = round trip time
  --one-way-latency       Enables measurement of one way latency
  --latency-buckets       Enables histogram of latency.
  --dbg                   Enables more information in the logs
  --show-full-packet-bps  Shows the bps with all headers included
  --pcap                  PCAP arguments. Format is : "pcap_file_name,enable_timestamp,enable_loopback".
                          Pcap file name is the only mandatory parameter, the other parameters are false by default. [nargs=0..1] [default: ""]
  --no-perf-header        Does not include perf-header into packets payload.
  --random-payload        Fill payload with random data. If not set, payload will be 0.
  --json-report           Displays a JSON report with the totals on exit.

Parameters

Argument

Description

Default Value

Valid Range

Mode

h

Shows commands that are available.

v

Shows version.

Both

nic

Specify the name of the network interface that swx-perf will use to produce or consume. This argument is mandatory.

Name of the adaptor as displayed by the OS

Both

recvfrom

Specify the IPv4 socket used to receive. Mandatory for Consumer mode. Can be a range of IPs or ports.

Any valid IP for unicast, any valid multicast IP for multicast. Port should be in the range between 1024 and 65535. Express a range using a hyphen.

Consumer

sendto

Specify the IPv4 socket used to send packets. Mandatory for Producer mode. Can be a range of IPs or ports.

Any valid IP for unicast, any valid multicast IP for multicast. Port should be in the range between 1024 and 65535. Express a range using a hyphen.

Producer

payload_length

Number of bytes per packet (excluding the headers).

100

8 and 65475

Producer

pps

Packets Per Second specifies the rate at which the producer will send packets.

1

Unbounded. Depends on the producer’s hardware ability to generate the traffic

Producer

broadcast

Sets swx-perf to use normal broadcast mode (i.e., will use the broadcast address of the network segment). When sending, it will use the IP of the --nic argument.

false

true/false

Both

generic-broadcast

Sets swx-perf to use generic broadcast mode using the IP 255.255.255.255.

false

true/false

Both

broadcast-port

Sets the port to be used for broadcast, and is only valid with --broadcast and --generic-broadcast arguments, and it is mandatory when using those arguments.

Between 1024 and 65535

Both

ssm_include

List of SSM addresses to include (i.e. 192.168.2.1 193.168.2.4)

1 or more

Consumer

ssm_exclude

List of SSM addresses to exclude (i.e. 192.168.2.1 193.168.2.4)

1 or more

Consumer

generic

Consume generic packets. Useful to consume a stream generated by a different tool.

false

true/false

Consumer

total_pkts

Number of packets to receive or send before exiting swx-perf.

No limit

8 and 3750

Producer

seconds

Number of seconds to run the application; use 0 to run without a limit.

0

No limit

Both

loopback

Receives packets from recvfrom and sends packets to sendto.

false

true/false

Both

rtt-latency

Enables timestamp propagation and measurement of RTT/2 where RTT = round-trip time.

false

true/false

one-way-latency

Enables timestamp propagation and measurement of one-way latency.

false

true/false

Both

latency-buckets

Shows a histogram of latency. Must be used with --latency

false

true/false

dbg

Enables more information in the logs

false

true/false

Both

show-full-packet-bps

Shows the BPS with all headers included.

false

true/false

Both

pcap

Allows the use of a PCAP file.

File name is mandatory.

Both

no-perf-header

Tells swx-perf not to include perf-header in packet payload.

false

true/false

Both

random-payload

Fill payload with random data.

false

true/false

Both

json-report

Displays a JSON report with the totals on exit.

false

true/false

Both

Examples

Multicast

  1. Single multicast stream:
    Run this command on a VM using xNIC Type 1 to produce a multicast group on the address 239.1.1.1 and port 10000:

    swx-perf producer --sendto 239.1.1.1:10000 --nic swx0

    Example with output:

    $ swx-perf producer --sendto 239.1.1.1:10000 --nic swx0
    Config:
            Sending traffic.
            Ip Address: 239.1.1.1 - Port: 10000
            Interface IP Address: 172.30.0.126
            Running without a total packet counter limit
            Running the application without a timing limit
    |------------------------------------------------------------------------------------|
    |                  TX TOTALS                 |             TX THIS PERIOD            |
    |--------------------------------------------|---------------------------------------|
    |      PKTS     |    BYTES   |     MISSING   |     PPS   |    BPS    |    MISSING    |
    |---------------|------------|---------------|-----------|-----------|---------------|
    |             1 |        100 |             0 |         0 |         0 |             0 |
    |             2 |        200 |             0 |         1 |       794 |             0 |
    |             3 |        300 |             0 |         1 |       794 |             0 |
    |             4 |        400 |             0 |         1 |       794 |             0 |
    |             5 |        500 |             0 |         1 |       794 |             0 |
    |             6 |        600 |             0 |         1 |       794 |             0 |
    |             7 |        700 |             0 |         1 |       794 |             0 |
    ^C
    Results Producer:
            Complete in 8004 ms.
            Processed a total of: 7 packets.
            0.9 datagrams per second.
    Group           Port            Packets       Bytes
    ------------------------------------------------------------
    239.1.1.1       10000           7             700
    ------------------------------------------------------------
    Totals:                         7             700
    Percentages over total packets : Processed: 100.00% - Dropped:  0.00%
     Closing swx-perf...
  2. Run this command on one VM to consume the traffic produced in the previous step:

    swx-perf consumer --recvfrom 239.1.1.1:10000 --nic swx0

    Example with output:

    $ swx-perf consumer --recvfrom 239.1.1.1:10000 --nic swx0
    Config:
            Waiting traffic
            Ip Address: 239.1.1.1 - Port: 10000
            Interface IP Address: 172.30.0.204
            Running without a total packet counter limit
            Running the application without a timing limit
    |-------------------------------------------------------------------------------------------------------|
    |                   RX TOTALS                   |                     RX THIS PERIOD                    |
    |-----------------------------------------------|-------------------------------------------------------|
    |      PKTS     |       OOO     |    MISSING    |       OOO     |    MISSING    |    PPS    |    BPS    |
    |---------------|---------------|---------------|---------------|---------------|-----------|-----------|
    |             0 |             0 |             0 |             0 |             0 |         0 |         0 |
    |             0 |             0 |             0 |             0 |             0 |         0 |         0 |
    |             1 |             0 |             0 |             0 |             0 |         1 |       794 |
    |             2 |             0 |             0 |             0 |             0 |         1 |       794 |
    |             3 |             0 |             0 |             0 |             0 |         1 |       794 |
    |             4 |             0 |             0 |             0 |             0 |         1 |       794 |
    |             5 |             0 |             0 |             0 |             0 |         1 |       794 |
    |             6 |             0 |             0 |             0 |             0 |         1 |       794 |
    |             7 |             0 |             0 |             0 |             0 |         1 |       794 |
    |             8 |             0 |             0 |             0 |             0 |         1 |       794 |
    |             9 |             0 |             0 |             0 |             0 |         1 |       794 |
    |            10 |             0 |             0 |             0 |             0 |         1 |       794 |
    |            11 |             0 |             0 |             0 |             0 |         1 |       794 |
    ^C
    Results Consumer:
    Complete in 13732 ms.
            Processed a total of: 12 packets.
            0.9 datagrams per second.
    Group           Port            Packets       Bytes         OutOfOrder    Drops         Last Seq
    ---------------------------------------------------------------------------------------------------
    239.1.1.1       10000           12            1200          0             0             57
    ---------------------------------------------------------------------------------------------------
    Totals:                         12            1200          0             0
    Total packets received:             12
    Percentages over total packets : Processed: 100.00%  - Dropped  0.00% - OutOfOrder  0.00%
     Closing swx-perf...
  3. Multiple multicast streams:
    Run this command on a VM to create 10 streams from 239.1.1.1 to 239.1.1.10 on port 10000, with a rate of 10000 PPS and a payload length of 3000 bytes on an xNIC Type 3:

    swx-perf producer --sendto 239.1.1.1-10:10000 --pps 10000 --payload_length 3000 --nic swx0

    Example with output:

    $ swx-perf producer --sendto 239.1.1.1-10:10000 --pps 10000 --payload_length 3000 --nic swx0
    Config:
            Sending traffic.
            Ip Address: 239.1.1.1 - Port: 10000
            Ip Address: 239.1.1.2 - Port: 10000
            Ip Address: 239.1.1.3 - Port: 10000
            Ip Address: 239.1.1.4 - Port: 10000
            Ip Address: 239.1.1.5 - Port: 10000
            Ip Address: 239.1.1.6 - Port: 10000
            Ip Address: 239.1.1.7 - Port: 10000
            Ip Address: 239.1.1.8 - Port: 10000
            Ip Address: 239.1.1.9 - Port: 10000
            Ip Address: 239.1.1.10 - Port: 10000
            Interface IP Address: 172.30.0.126
            Running without a total packet counter limit
            Running the application without a timing limit
    |------------------------------------------------------------------------------------|
    |                  TX TOTALS                 |             TX THIS PERIOD            |
    |--------------------------------------------|---------------------------------------|
    |      PKTS     |    BYTES   |     MISSING   |     PPS   |    BPS    |    MISSING    |
    |---------------|------------|---------------|-----------|-----------|---------------|
    |           780 |      2.33M |             0 |         0 |         0 |             0 |
    |       116,590 |       349M |             0 |      115K |      2.7G |             0 |
    |       230,090 |       690M |             0 |      112K |      2.7G |             0 |
    |       341,320 |      1.02G |             0 |      110K |      2.6G |             0 |
    |       449,880 |      1.34G |             0 |      107K |      2.5G |             0 |
    |       557,880 |      1.67G |             0 |      107K |      2.5G |             0 |
    |       663,830 |      1.99G |             0 |      105K |      2.5G |             0 |
    |       769,610 |      2.30G |             0 |      105K |      2.5G |             0 |
    |       874,970 |      2.62G |             0 |      104K |      2.5G |             0 |
    |       979,930 |      2.93G |             0 |      104K |      2.5G |             0 |
    |     1,083,840 |      3.25G |             0 |      103K |      2.4G |             0 |
    |     1,187,130 |      3.56G |             0 |      102K |      2.4G |             0 |
    |     1,289,780 |      3.86G |             0 |      102K |      2.4G |             0 |
    |     1,392,120 |      4.17G |             0 |      101K |      2.4G |             0 |
    |     1,493,850 |      4.48G |             0 |      101K |      2.4G |             0 |
    |     1,595,370 |      4.78G |             0 |      100K |      2.4G |             0 |
    |------------------------------------------------------------------------------------|
    |                  TX TOTALS                 |             TX THIS PERIOD            |
    |--------------------------------------------|---------------------------------------|
    |      PKTS     |    BYTES   |     MISSING   |     PPS   |    BPS    |    MISSING    |
    |---------------|------------|---------------|-----------|-----------|---------------|
    |     1,696,916 |      5.09G |             0 |      100K |      2.4G |             0 |
    |     1,798,710 |      5.39G |             0 |      101K |      2.4G |             0 |
    |     1,900,340 |      5.70G |             0 |      100K |      2.4G |             0 |
    |     2,001,950 |      6.00G |             0 |      100K |      2.4G |             0 |
    |     2,103,150 |      6.30G |             0 |      100K |      2.4G |             0 |
    ^C
    Results Producer:
            Complete in 21714 ms.
            Processed a total of: 2154400 packets.
            99217.1 datagrams per second.
    Group           Port            Packets       Bytes
    ------------------------------------------------------------
    239.1.1.1       10000           215440        646320000
    239.1.1.2       10000           215440        646320000
    239.1.1.3       10000           215440        646320000
    239.1.1.4       10000           215440        646320000
    239.1.1.5       10000           215440        646320000
    239.1.1.6       10000           215440        646320000
    239.1.1.7       10000           215440        646320000
    239.1.1.8       10000           215440        646320000
    239.1.1.9       10000           215440        646320000
    239.1.1.10      10000           215440        646320000
    ------------------------------------------------------------
    Totals:                         2154400       6463200000
    Percentages over total packets : Processed: 100.00% - Dropped:  0.00%
     Closing swx-perf...
  4. Single UDP traffic:
    Run this command on an xNIC Type 3 to send UDP traffic on the NIC eth1 with a payload size of 1000 bytes (excluding headers) for 10 seconds:

    swx-perf producer --sendto UDP://239.1.1.1-10:10000-10010 --pps 1000 --nic eth1 --payload_length 1000 --seconds 10
  5. Consume broadcast traffic:
    Run this command on an xNIC Type 2 using data NIC eth1 to consume broadcast traffic:

    swx-perf consumer --broadcast --nic eth1
  6. Latency measurement:
    Run these commands on xNIC Type 1 VMs to measure latency using ping-pong mode:
    Producer

    swx-perf producer --nic swx0 --sendto 230.1.1.1:10000 --rtt-latency --loopback --recvfrom 230.1.1.2:10001 --pps 1000 --seconds 1200

    Consumer

    swx-perf consumer --nic swx0 --recvfrom 230.1.1.1:10000 --loopback --sendto 230.1.1.2:10001