TRrex in few steps - Using ConnectX-4 or ConnectX-5

Version 3

    TRex is an open source stateful and stateless traffic generator based on DPDK.

    With single ConnectX ethernet card family it can generate 100Gbs bandwidth easily.

    The more cores are used the more Mpps rate will increase significantly allowing more than 100Mpps!

    This article will guide a user for quick and powerful installation.

     

    References

     

    Prerequisite

    1. Install Centos 7.3 operating system.

     

    2. Install MLNX_OFED rel. 4.0-1.x  and use the ofed_info command to verify that the version is 4.0-1.x:

    # ofed_info -s

     

    Installation

    1. Download and extract TRex latest branch.

    # wget http://trex-tgn.cisco.com/trex/release/latest
    # tar -xzvf latest

    2. Run initialization script

    # cd /<latest ver_name>

    #./dpdk_setup_ports.py -i

    By default, IP based configuration file will be created. Do you want to use MAC based config? (y/N) n

    * y will define physical MAC address per port in the configuration file. N will keep default IP per port identifier.

     

    +----+------+---------+-------------------+-----------------------------------------+-----------+----------+----------+

    | ID | NUMA |   PCI   |        MAC        |                  Name                   |  Driver   | Linux IF |  Active  |

    +====+======+=========+===================+=========================================+===========+==========+==========+

    | 0  | 0    | 03:00.0 | a0:d3:c1:01:43:ac | NetXtreme BCM5719 Gigabit Ethernet PCIe | tg3       | eno1     | *Active* |

    +----+------+---------+-------------------+-----------------------------------------+-----------+----------+----------+

    | 1  | 0    | 03:00.1 | a0:d3:c1:01:43:ad | NetXtreme BCM5719 Gigabit Ethernet PCIe | tg3       | eno2     |          |

    +----+------+---------+-------------------+-----------------------------------------+-----------+----------+----------+

    | 2  | 0    | 03:00.2 | a0:d3:c1:01:43:ae | NetXtreme BCM5719 Gigabit Ethernet PCIe | tg3       | eno3     |          |

    +----+------+---------+-------------------+-----------------------------------------+-----------+----------+----------+

    | 3  | 0    | 03:00.3 | a0:d3:c1:01:43:af | NetXtreme BCM5719 Gigabit Ethernet PCIe | tg3       | eno4     |          |

    +----+------+---------+-------------------+-----------------------------------------+-----------+----------+----------+

    | 4  | 0    | 07:00.0 | 7c:fe:90:20:e8:a0 | MT27700 Family [ConnectX-4]             | mlx5_core | ens2f0   |          |

    +----+------+---------+-------------------+-----------------------------------------+-----------+----------+----------+

    | 5  | 0    | 07:00.1 | 7c:fe:90:20:e8:a1 | MT27700 Family [ConnectX-4]             | mlx5_core | ens2f1   |          |

    +----+------+---------+-------------------+-----------------------------------------+-----------+----------+----------+

    Please choose even number of interfaces from the list above, either by ID , PCI or Linux IF

    Stateful will use order of interfaces: Client1 Server1 Client2 Server2 etc. for flows.

    Stateless can be in any order.

    Enter list of interfaces separated by space (for example: 1 3) : 4 5

    * Choosing 4 5 IDs for two ConnectX-4 ports to be used.

     

    For interface 4, assuming loopback to it's dual interface 5.

    Putting IP 1.1.1.1, default gw 2.2.2.2 Change it?(y/N).n

    For interface 5, assuming loopback to it's dual interface 4.

    Putting IP 2.2.2.2, default gw 1.1.1.1 Change it?(y/N).n

    * y will allow you to edit the default IP values.

     

     

    Print preview of generated config? (Y/n)y

    ### Config file generated by dpdk_setup_ports.py ###

     

     

    - port_limit: 2

      version: 2

      interfaces: ['07:00.0', '07:00.1']

      port_info:

          - ip: 1.1.1.1

            default_gw: 2.2.2.2

          - ip: 2.2.2.2

            default_gw: 1.1.1.1

     

     

      platform:

          master_thread_id: 0

          latency_thread_id: 10

          dual_if:

            - socket: 0

              threads: [1,2,3,4,5,6,7,8,9,20,21,22,23,24,25,26,27,28]

     

    Save the config to file? (Y/n)y

    Save the config to file? (Y/n)y

    Default filename is /etc/trex_cfg.yaml

    Press ENTER to confirm or enter new file:

     

    3. Run TRex server.

    Count the number of threads automatically listed in previous step (2) marked in red (this example show 18 threads).

    Enter the number of threads to the following command (-c <number_of_threads>).

    #nohup ./t-rex-64 -i -c 18 &

    In case the command above fails due unmatched CPU architecture you can run using this command.

    #nohup ./t-rex-64-o -i -c 18 &

     

    4. Connecting GUI from windows desktop.

    1. Download & install TRex GUI for windows to your desktop from here: https://github.com/cisco-system-traffic-generator/trex-stateless-gui/releases

    2. Open the GUI and connect to  T-rex server - File->Connect

     

     

    3. Choose a port and press ’Acquire’

     

     

    Now connect your ConnectX ports to your desired networking unit and start generating traffic.

    Note: The GUI have limited functionalities compared to CLI options. For more information on how to use CLI go to TRex documentation link.