From: "Juraj Linkeš" <juraj.linkes@pantheon.tech>
To: thomas@monjalon.net, david.marchand@redhat.com,
Honnappa.Nagarahalli@arm.com, ohilyard@iol.unh.edu,
lijuan.tu@intel.com
Cc: dev@dpdk.org, "Juraj Linkeš" <juraj.linkes@pantheon.tech>
Subject: [RFC PATCH v1 23/24] dts: merge DTS doc/dts_gsg/usr_guide/trex.rst to DPDK
Date: Wed, 6 Apr 2022 15:11:05 +0000 [thread overview]
Message-ID: <20220406151106.2915304-24-juraj.linkes@pantheon.tech> (raw)
In-Reply-To: <20220406151106.2915304-1-juraj.linkes@pantheon.tech>
---
dts/doc/dts_gsg/usr_guide/trex.rst | 377 +++++++++++++++++++++++++++++
1 file changed, 377 insertions(+)
create mode 100644 dts/doc/dts_gsg/usr_guide/trex.rst
diff --git a/dts/doc/dts_gsg/usr_guide/trex.rst b/dts/doc/dts_gsg/usr_guide/trex.rst
new file mode 100644
index 0000000000..8dfa66bdbb
--- /dev/null
+++ b/dts/doc/dts_gsg/usr_guide/trex.rst
@@ -0,0 +1,377 @@
+Practice with TRex
+==================
+
+Download TREX
+-------------
+TREX should be installed in Tester, it could be downloaded from http://trex-tgn.cisco.com/trex/release/.
+We recommend to use the latest version v2.88.
+
+.. code-block:: console
+
+ wget http://trex-tgn.cisco.com/trex/release/v2.88.tar.gz
+
+To read more about T-Rex stateless mode, read the
+`T-Rex stateless support guide <https://trex-tgn.cisco.com/trex/doc/trex_stateless.html>`__.
+
+Configure TREX
+--------------
+
+Extract the downloaded TREX tarball
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+Extract the downloaded TREX file to /opt/trex/::
+
+ root@tester:/opt# mkdir trex
+ root@tester:/opt# cd trex
+ root@tester:/opt/trex# tar -zxvf v2.88.tar.gz
+ v2.88/
+ v2.88/_t-rex-64-debug
+ v2.88/t-rex-64-debug
+ ...
+ v2.88/trex_client_v2.88.tar.gz
+
+Generate Configure File
+~~~~~~~~~~~~~~~~~~~~~~~~
+
+Identify the performance test ports in tester
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+execute the command like below to list the ports::
+
+ root@tester:/opt/trex/v2.88# ./dpdk_setup_ports.py -s
+
+ Network devices using DPDK-compatible driver
+ ============================================
+ <none>
+
+ Network devices using kernel driver
+ ===================================
+ 0000:03:00.0 'VMXNET3 Ethernet Controller' if=ens160 drv=vmxnet3 unused=igb_uio,vfio-pci,uio_pci_generic *Active*
+ 0000:0b:00.0 'Device 1592' if=ens192f0 drv=ice unused=igb_uio,vfio-pci,uio_pci_generic
+ 0000:0b:00.1 'Device 1592' if=ens192f1 drv=ice unused=igb_uio,vfio-pci,uio_pci_generic
+ Other network devices
+ =====================
+ <none>
+
+Generate Configure File
+^^^^^^^^^^^^^^^^^^^^^^^
+Assume that we use 0000:0b:00.0, 0000:0b:00.1 to connect to DUT port.
+And the ports topology as below::
+
+ trex.0 (0b:00.0/40:a6:b7:0b:55:78) <-------> DUT port 0 (05:00.0/b4:96:91:9f:63:68)
+ trex.1 (0b:00.1/40:a6:b7:0b:55:79) <-------> DUT port 1 (05:00.1/b4:96:91:9f:63:69)
+
+We need to generate the trex config file as below::
+
+ root@tester:/opt/v2.88# ./dpdk_setup_ports.py -i
+ By default, IP based configuration file will be created. Do you want to use MAC based config? (y/N)y
+ +----+------+---------+-------------------+--------------------------------------------+---------+----------+----------+
+ | ID | NUMA | PCI | MAC | Name | Driver | Linux IF | Active |
+ +====+======+=========+===================+============================================+=========+==========+==========+
+ | 0 | -1 | 03:00.0 | 00:0c:29:29:30:80 | VMXNET3 Ethernet Controller | vmxnet3 | ens160 | *Active* |
+ +----+------+---------+-------------------+--------------------------------------------+---------+----------+----------+
+ | 1 | -1 | 0b:00.0 | 40:a6:b7:0b:55:78 | Device 1592 | ice | ens192f0 | |
+ +----+------+---------+-------------------+--------------------------------------------+---------+----------+----------+
+ | 2 | -1 | 0b:00.1 | 40:a6:b7:0b:55:79 | Device 1592 | ice | ens192f1 | |
+ +----+------+---------+-------------------+--------------------------------------------+---------+----------+----------+
+ Please choose an 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) : 1 2
+ For interface 1, assuming loopback to its dual interface 2.
+ Destination MAC is 40:a6:b7:0b:55:79. Change it to MAC of DUT? (y/N).y
+ Please enter a new destination MAC of interface 1: b4:96:91:9f:63:68
+ For interface 2, assuming loopback to its dual interface 1.
+ Destination MAC is 40:a6:b7:0b:55:78. Change it to MAC of DUT? (y/N).y
+ Please enter a new destination MAC of interface 2: b4:96:91:9f:63:69
+ Print preview of generated config? (Y/n)Y
+ ### Config file generated by dpdk_setup_ports.py ###
+
+ - version: 2
+ interfaces: ['0b:00.0', '0b:00.1']
+ port_info:
+ - dest_mac: b4:96:91:9f:63:68
+ src_mac: 40:a6:b7:0b:55:78
+ - dest_mac: b4:96:91:9f:63:69
+ src_mac: 40:a6:b7:0b:55:79
+
+ platform:
+ master_thread_id: 0
+ latency_thread_id: 1
+ dual_if:
+ - socket: 0
+ threads: [2,3,4,5,6,7]
+
+ Save the config to file? (Y/n)Y
+ Default filename is /etc/trex_cfg.yaml
+ Press ENTER to confirm or enter new file:
+ File /etc/trex_cfg.yaml already exist, overwrite? (y/N)Y
+ Saved to /etc/trex_cfg.yaml.
+ root@tester:/opt/trex/v2.88#
+
+We could not modify the DUT mac during the configuration and modify it in the generated file /etc/trex_cfg.yaml.
+
+Modify Configure File
+^^^^^^^^^^^^^^^^^^^^^
+Make sure the DUT mac of the generated TREX file is correct, and add prefix and limit_memory is better::
+
+ root@tester:/opt/trex/v2.88# cat /etc/trex_cfg.yaml
+ ### Config file generated by dpdk_setup_ports.py ###
+
+ - version: 2
+ interfaces: ['0b:00.0', '0b:00.1']
+ prefix: TREX
+ limit_memory: 4096
+ port_info:
+ - dest_mac: b4:96:91:9f:63:68
+ src_mac: 40:a6:b7:0b:55:78
+ - dest_mac: b4:96:91:9f:63:69
+ src_mac: 40:a6:b7:0b:55:79
+
+ platform:
+ master_thread_id: 0
+ latency_thread_id: 1
+ dual_if:
+ - socket: 0
+ threads: [2,3,4,5,6,7]
+
+ root@tester:/opt/trex/v2.88#
+
+Replace system scapy with TREX scapy
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+As the know trex issue -- trex scapy lib will be conflict with scapy installed in OS, we need the replace the scapy
+in system with trex scapy.
+
+#. backup your scapy::
+
+ cp -rf /usr/local/lib/python3.6/dist-packages/scapy /usr/local/lib/python3.6/dist-packages/scapy_backup
+
+#. unify scapy version with trex::
+
+ cp -rf /opt/trex/v2.88/external_libs/scapy-2.4.3/scapy/ /usr/local/lib/python3.6/dist-packages/scapy
+
+Configure DTS
+--------------
+
+Configure execution.cfg
+~~~~~~~~~~~~~~~~~~~~~~~
+Add the performance test suite and set perf=true::
+
+ root@tester:dts# cat execution.cfg
+ [Execution1]
+ crbs=192.168.1.1
+ drivername=vfio-pci
+ build_type=meson
+ test_suites=
+ tso,
+ targets=
+ x86_64-native-linuxapp-gcc
+ parameters=nic_type=cfg:perf=true
+ root@tester:dts#
+
+Configure $DTS_CFG_FOLDER/crbs.cfg
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+Set the pktgen_group=trex or pktgen_group=TREX, this item is case insensitive::
+
+ root@tester:dts# cat $DTS_CFG_FOLDER/crbs.cfg
+ [192.168.1.1]
+ dut_ip=192.168.1.1
+ dut_user=root
+ dut_passwd=dutpwd
+ os=linux
+ dut_arch=
+ tester_ip=192.168.1.2
+ tester_passwd=testerpwd
+ ixia_group=
+ pktgen_group=trex
+ channels=4
+ bypass_core0=True
+
+Configure $DTS_CFG_FOLDER/ports.cfg
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+This configuration is just same with PF function test, so if you have completed some functional test,
+you have no need to modify the $DTS_CFG_FOLDER/ports.cfg, just like below::
+
+ root@tester:dts# cat $DTS_CFG_FOLDER/ports.cfg
+ [192.168.1.1]
+ ports =
+ pci=0000:05:00.0,peer=0000:0b:00.0;
+ pci=0000:05:00.1,peer=0000:0b:00.1;
+
+In addition, it could be configured as below::
+
+ root@tester:dts# cat $DTS_CFG_FOLDER/ports.cfg
+ [192.168.1.1]
+ ports =
+ pci=0000:05:00.0,peer=TREX:0;
+ pci=0000:05:00.1,peer=TREX:1;
+
+We recommend to use the first format configuration, as it has no need to do modification when we do functional test.
+
+Configure $DTS_CFG_FOLDER/pktgen.cfg
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+Fill in the $DTS_CFG_FOLDER/pktgen.cfg with your TREX setting, for the first time, you should set start_trex=yes.
+Set the IP address of the device which you installed TREX into item ‘server=’, it should be the tester IP.
+The configuration should as below::
+
+ root@tester:dts# cat $DTS_CFG_FOLDER/pktgen.cfg
+ [TREX]
+ trex_root_path=/opt/trex/v2.88
+ trex_lib_path=/opt/trex/v2.88/automation/trex_control_plane/interactive
+ config_file=/etc/trex_cfg.yaml
+ server=192.168.1.1
+ pcap_file=/opt/trex/v2.88/stl/sample.pcap
+ core_num=4
+ #core_mask=0x3
+ ip_src=16.0.0.1
+ ip_dst=10.0.0.1
+ warmup=15
+ duration=-1
+ start_trex=yes
+
+As the trex_lib_path may be different in different versions, you could find the correct path as blow command::
+
+ root@tester:/opt/trex/v2.88# find . -name trex_stl_lib
+ ./automation/trex_control_plane/interactive/trex_stl_lib
+ root@tester:/opt/trex/v2.88#
+
+
+Run DTS performance test with TREX
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Now you can start DTS performance test with TREX::
+
+ root@tester:/home/zhaohy/dts# ./dts
+ dts:
+ DUT 192.168.1.1
+ tester: ssh root@192.168.1.1
+ ...
+ pktgen: ssh root@192.168.1.1
+ pktgen: cd /opt/trex/v2.88;./t-rex-64 -i --cfg /etc/trex_cfg.yaml -c 4
+ pktgen: Starting Scapy server..... Scapy server is started
+ Trying to bind to igb_uio ...
+ /usr/bin/python3 dpdk_nic_bind.py --bind=igb_uio 0000:0b:00.0 0000:0b:00.1
+ ...
+ TestTSO: Test Case test_perf_TSO_2ports Begin
+ dut.10.240.183.72:
+ tester:
+ TestTSO: Executing PMD using 1S/1C/2T
+ dut.10.240.183.72: x86_64-native-linuxapp-gcc/app/dpdk-testpmd -l 1,45 -n 4 -a 0000:05:00.0 -a 0000:05:00.1 --file-prefix=dpdk_31529_20210324143008 -- -i --rxd=512 --txd=512 --burst=32 --rxfreet=64 --mbcache=128 --portmask=0x3 --max-pkt-len=9000 --txpt=36 --txht=0 --txwt=0 --txfreet=32 --txrst=32
+ dut.10.240.183.72: EAL: Detected 88 lcore(s)
+ ...
+ pktgen: Rx Port 0 stats:
+ rx_port: 0, rx_bps: 25354096640.000000, rx_pps: 1239130.250000
+ pktgen: throughput: pps_rx 5463897.750000, bps_rx 50961129472.000000
+ pktgen: traffic completed.
+ ...
+ TestTSO:
+ +------------+---------------+------------+
+ | Frame Size | 1S/1C/2T Mpps | % linerate |
+ +============+===============+============+
+ | 128 | 5.371 | 4 |
+ +------------+---------------+------------+
+ | 2500 | 5.464 | 56 |
+ +------------+---------------+------------+
+ TestTSO: Test Case test_perf_TSO_2ports Result PASSED
+
+FAQ
+---
+
+dpdk hugepage management conflict issue
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+trex use older dpdk version than we release cycle source code. When dpdk change
+the memory management merchanism, trex will meet the following issue.
+
+Trex should run on an independent platform. DUT/Trex should run on two platforms:
+
+* one is used as TESTER and trex server, another one is used as DUT.(dts/pktgen)
+* one is used as trex server, another one is used as DUT/TESTER.(recommended scheme)
+ This scheme can make sure that trex run on its full status capability.
+
+When trex run with dts on the same platform, trex server sometimes boot up
+failed for hugepage error.
+
+.. code-block:: console
+
+ ./t-rex-64 -i --stl -k 4
+
+ Starting Scapy server..... Scapy server is started
+ Trying to bind to igb_uio ...
+ /usr/bin/python3 dpdk_nic_bind.py --bind=igb_uio 0000:85:00.0 0000:8a:00.1
+ The ports are bound/configured.
+ Starting TRex v2.41 please wait ...
+ EAL: Can only reserve 1766 pages from 4096 requested
+ Current CONFIG_RTE_MAX_MEMSEG=256 is not enough
+ Please either increase it or request less amount of memory.
+ EAL: FATAL: Cannot init memory
+
+ EAL: Cannot init memory
+
+ You might need to run ./trex-cfg once
+ EAL: Error - exiting with code: 1
+ Cause: Invalid EAL arguments
+
+trex quit when using Niantic
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+when bind dut NNT port to igb_uio, peer port will get a link down status, then
+trex server using NNT nic will quit.
+
+.. code-block:: console
+
+ WATCHDOG: task 'master' has not responded for more than 2.00044 seconds - timeout is 2 seconds
+
+ *** traceback follows ***
+
+ 1 0x55a7c779561a ./_t-rex-64(+0x12761a) [0x55a7c779561a]
+ 2 0x7f23da4be1b0 /lib64/libpthread.so.0(+0x121b0) [0x7f23da4be1b0]
+ 3 0x55a7c7942d40 rte_delay_us_block + 128
+ 4 0x55a7c798d731 ixgbe_setup_mac_link_multispeed_fiber + 337
+ 5 0x55a7c79a8f14 ./_t-rex-64(+0x33af14) [0x55a7c79a8f14]
+ 6 0x55a7c7954c72 rte_eth_link_get_nowait + 114
+ 7 0x55a7c776a988 DpdkTRexPortAttr::update_link_status_nowait() + 24
+ 8 0x55a7c77856a6 CGlobalTRex::handle_slow_path() + 118
+ 9 0x55a7c7785ad7 CGlobalTRex::run_in_master() + 759
+ 10 0x55a7c7785e3c ./_t-rex-64(+0x117e3c) [0x55a7c7785e3c]
+ 11 0x55a7c793efba rte_eal_mp_remote_launch + 346
+ 12 0x55a7c7789e1e main_test(int, char**) + 1038
+ 13 0x7f23d9417f2a __libc_start_main + 234
+ 14 0x55a7c7719b9d ./_t-rex-64(+0xabb9d) [0x55a7c7719b9d]
+
+
+ *** addr2line information follows ***
+
+ ??:0
+ ??:0
+ ??:0
+ ??:0
+ ??:0
+ ??:0
+ ??:0
+ ??:0
+ ??:0
+ ??:0
+ ??:0
+ ??:0
+ ??:0
+ ??:0
+
+
+ ./t-rex-64: line 80: 25870 Aborted (core dumped) ./_$(
+
+other issues
+~~~~~~~~~~~~
+
+#. linux kernel version should not be too low.
+
+#. Trex only works with even number link peers.
+
+#. Trex only works with nics, which are using the same driver.
+
+#. Before boot up trex, please make sure the peer ports are on up status.
+
+#. If you have ran dpdk on the platform which you want to deploy trex-server,
+ reboot the platform to make sure that trex-server can work fine.
+
+#. If using i40e driver, Trex v2.41 version need i40e nic firmware version newer than 5.02.
+
+#. trex will drop the received packet, which dst mac is the port mac address.
--
2.20.1
next prev parent reply other threads:[~2022-04-06 15:14 UTC|newest]
Thread overview: 25+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-04-06 15:10 [RFC PATCH v1 00/24] merge DTS documentation files " Juraj Linkeš
2022-04-06 15:10 ` [RFC PATCH v1 01/24] dts: merge DTS CONTRIBUTING.TXT " Juraj Linkeš
2022-04-06 15:10 ` [RFC PATCH v1 02/24] dts: merge DTS doc/dts_gsg/Makefile " Juraj Linkeš
2022-04-06 15:10 ` [RFC PATCH v1 03/24] dts: merge DTS doc/dts_gsg/conf.py " Juraj Linkeš
2022-04-06 15:10 ` [RFC PATCH v1 04/24] dts: merge DTS doc/dts_gsg/image/dts_network_arch.png " Juraj Linkeš
2022-04-06 15:10 ` [RFC PATCH v1 05/24] dts: merge DTS doc/dts_gsg/image/dts_result.png " Juraj Linkeš
2022-04-06 15:10 ` [RFC PATCH v1 06/24] dts: merge DTS doc/dts_gsg/image/dts_soft_arch.png " Juraj Linkeš
2022-04-06 15:10 ` [RFC PATCH v1 07/24] dts: merge DTS doc/dts_gsg/image/scene_pf_passthrough.svg " Juraj Linkeš
2022-04-06 15:10 ` [RFC PATCH v1 08/24] dts: merge DTS doc/dts_gsg/image/virt_flow.svg " Juraj Linkeš
2022-04-06 15:10 ` [RFC PATCH v1 09/24] dts: merge DTS doc/dts_gsg/index.rst " Juraj Linkeš
2022-04-06 15:10 ` [RFC PATCH v1 10/24] dts: merge DTS doc/dts_gsg/quick_start.rst " Juraj Linkeš
2022-04-06 15:10 ` [RFC PATCH v1 11/24] dts: merge DTS doc/dts_gsg/rel_notes/index.rst " Juraj Linkeš
2022-04-06 15:10 ` [RFC PATCH v1 12/24] dts: merge DTS doc/dts_gsg/rel_notes/release_21_11.rst " Juraj Linkeš
2022-04-06 15:10 ` [RFC PATCH v1 13/24] dts: merge DTS doc/dts_gsg/usr_guide/asan_test.rst " Juraj Linkeš
2022-04-06 15:10 ` [RFC PATCH v1 14/24] dts: merge DTS doc/dts_gsg/usr_guide/igb_uio.rst " Juraj Linkeš
2022-04-06 15:10 ` [RFC PATCH v1 15/24] dts: merge DTS doc/dts_gsg/usr_guide/image/dts_func_deploy.png " Juraj Linkeš
2022-04-06 15:10 ` [RFC PATCH v1 16/24] dts: merge DTS doc/dts_gsg/usr_guide/image/dts_result.png " Juraj Linkeš
2022-04-06 15:10 ` [RFC PATCH v1 17/24] dts: merge DTS doc/dts_gsg/usr_guide/index.rst " Juraj Linkeš
2022-04-06 15:11 ` [RFC PATCH v1 18/24] dts: merge DTS doc/dts_gsg/usr_guide/intro.rst " Juraj Linkeš
2022-04-06 15:11 ` [RFC PATCH v1 19/24] dts: merge DTS doc/dts_gsg/usr_guide/ixia.rst " Juraj Linkeš
2022-04-06 15:11 ` [RFC PATCH v1 20/24] dts: merge DTS doc/dts_gsg/usr_guide/results.rst " Juraj Linkeš
2022-04-06 15:11 ` [RFC PATCH v1 21/24] dts: merge DTS doc/dts_gsg/usr_guide/setup_dut.rst " Juraj Linkeš
2022-04-06 15:11 ` [RFC PATCH v1 22/24] dts: merge DTS doc/dts_gsg/usr_guide/sys_reqs.rst " Juraj Linkeš
2022-04-06 15:11 ` Juraj Linkeš [this message]
2022-04-06 15:11 ` [RFC PATCH v1 24/24] dts: merge DTS doc/dts_gsg/usr_guide/usage.rst " Juraj Linkeš
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20220406151106.2915304-24-juraj.linkes@pantheon.tech \
--to=juraj.linkes@pantheon.tech \
--cc=Honnappa.Nagarahalli@arm.com \
--cc=david.marchand@redhat.com \
--cc=dev@dpdk.org \
--cc=lijuan.tu@intel.com \
--cc=ohilyard@iol.unh.edu \
--cc=thomas@monjalon.net \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).