trex: Add support Trex traffic generator
[vswitchperf.git] / docs / testing / user / configguide / trafficgen.rst
1 .. This work is licensed under a Creative Commons Attribution 4.0 International License.
2 .. http://creativecommons.org/licenses/by/4.0
3 .. (c) OPNFV, Intel Corporation, AT&T and others.
4
5 .. _trafficgen-installation:
6
7 ===========================
8 'vsperf' Traffic Gen Guide
9 ===========================
10
11 Overview
12 --------
13
14 VSPERF supports the following traffic generators:
15
16   * Dummy_ (DEFAULT)
17   * Ixia_
18   * `Spirent TestCenter`_
19   * `Xena Networks`_
20   * MoonGen_
21   * Trex_
22
23 To see the list of traffic gens from the cli:
24
25 .. code-block:: console
26
27     $ ./vsperf --list-trafficgens
28
29 This guide provides the details of how to install
30 and configure the various traffic generators.
31
32 Background Information
33 ----------------------
34 The traffic default configuration can be found in **conf/03_traffic.conf**,
35 and is configured as follows:
36
37 .. code-block:: console
38
39     TRAFFIC = {
40         'traffic_type' : 'rfc2544_throughput',
41         'frame_rate' : 100,
42         'bidir' : 'True',  # will be passed as string in title format to tgen
43         'multistream' : 0,
44         'stream_type' : 'L4',
45         'pre_installed_flows' : 'No',           # used by vswitch implementation
46         'flow_type' : 'port',                   # used by vswitch implementation
47
48         'l2': {
49             'framesize': 64,
50             'srcmac': '00:00:00:00:00:00',
51             'dstmac': '00:00:00:00:00:00',
52         },
53         'l3': {
54             'enabled': True,
55             'proto': 'udp',
56             'srcip': '1.1.1.1',
57             'dstip': '90.90.90.90',
58         },
59         'l4': {
60             'enabled': True,
61             'srcport': 3000,
62             'dstport': 3001,
63         },
64         'vlan': {
65             'enabled': False,
66             'id': 0,
67             'priority': 0,
68             'cfi': 0,
69         },
70     }
71
72 The framesize parameter can be overridden from the configuration
73 files by adding the following to your custom configuration file
74 ``10_custom.conf``:
75
76 .. code-block:: console
77
78     TRAFFICGEN_PKT_SIZES = (64, 128,)
79
80 OR from the commandline:
81
82 .. code-block:: console
83
84     $ ./vsperf --test-params "TRAFFICGEN_PKT_SIZES=(x,y)" $TESTNAME
85
86 You can also modify the traffic transmission duration and the number
87 of tests run by the traffic generator by extending the example
88 commandline above to:
89
90 .. code-block:: console
91
92     $ ./vsperf --test-params "TRAFFICGEN_PKT_SIZES=(x,y);TRAFFICGEN_DURATION=10;" \
93                              "TRAFFICGEN_RFC2544_TESTS=1" $TESTNAME
94
95 .. _trafficgen-dummy:
96
97 Dummy
98 -----
99
100 The Dummy traffic generator can be used to test VSPERF installation or
101 to demonstrate VSPERF functionality at DUT without connection
102 to a real traffic generator.
103
104 You could also use the Dummy generator in case, that your external
105 traffic generator is not supported by VSPERF. In such case you could
106 use VSPERF to setup your test scenario and then transmit the traffic.
107 After the transmission is completed you could specify values for all
108 collected metrics and VSPERF will use them to generate final reports.
109
110 Setup
111 ~~~~~
112
113 To select the Dummy generator please add the following to your
114 custom configuration file ``10_custom.conf``.
115
116 .. code-block:: console
117
118      TRAFFICGEN = 'Dummy'
119
120 OR run ``vsperf`` with the ``--trafficgen`` argument
121
122 .. code-block:: console
123
124     $ ./vsperf --trafficgen Dummy $TESTNAME
125
126 Where $TESTNAME is the name of the vsperf test you would like to run.
127 This will setup the vSwitch and the VNF (if one is part of your test)
128 print the traffic configuration and prompt you to transmit traffic
129 when the setup is complete.
130
131 .. code-block:: console
132
133     Please send 'continuous' traffic with the following stream config:
134     30mS, 90mpps, multistream False
135     and the following flow config:
136     {
137         "flow_type": "port",
138         "l3": {
139             "enabled": True,
140             "srcip": "1.1.1.1",
141             "proto": "udp",
142             "dstip": "90.90.90.90"
143         },
144         "traffic_type": "rfc2544_continuous",
145         "multistream": 0,
146         "bidir": "True",
147         "vlan": {
148             "cfi": 0,
149             "priority": 0,
150             "id": 0,
151             "enabled": False
152         },
153         "l4": {
154             "enabled": True,
155             "srcport": 3000,
156             "dstport": 3001,
157         },
158         "frame_rate": 90,
159         "l2": {
160             "dstmac": "00:00:00:00:00:00",
161             "srcmac": "00:00:00:00:00:00",
162             "framesize": 64
163         }
164     }
165     What was the result for 'frames tx'?
166
167 When your traffic generator has completed traffic transmission and provided
168 the results please input these at the VSPERF prompt. VSPERF will try
169 to verify the input:
170
171 .. code-block:: console
172
173     Is '$input_value' correct?
174
175 Please answer with y OR n.
176
177 VSPERF will ask you to provide a value for every of collected metrics. The list
178 of metrics can be found at traffic-type-metrics_.
179 Finally vsperf will print out the results for your test and generate the
180 appropriate logs and report files.
181
182 .. _traffic-type-metrics:
183
184 Metrics collected for supported traffic types
185 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
186
187 Below you could find a list of metrics collected by VSPERF for each of supported
188 traffic types.
189
190 RFC2544 Throughput and Continuous:
191
192   * frames tx
193   * frames rx
194   * min latency
195   * max latency
196   * avg latency
197   * frameloss
198
199 RFC2544 Back2back:
200
201   * b2b frames
202   * b2b frame loss %
203
204 Dummy result pre-configuration
205 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
206
207 In case of a Dummy traffic generator it is possible to pre-configure the test
208 results. This is useful for creation of demo testcases, which do not require
209 a real traffic generator. Such testcase can be run by any user and it will still
210 generate all reports and result files.
211
212 Result values can be specified within ``TRAFFICGEN_DUMMY_RESULTS`` dictionary,
213 where every of collected metrics must be properly defined. Please check the list
214 of traffic-type-metrics_.
215
216 Dictionary with dummy results can be passed by CLI argument ``--test-params``
217 or specified in ``Parameters`` section of testcase definition.
218
219 Example of testcase execution with dummy results defined by CLI argument:
220
221 .. code-block:: console
222
223     $ ./vsperf back2back --trafficgen Dummy --test-params \
224       "TRAFFICGEN_DUMMY_RESULTS={'b2b frames':'3000','b2b frame loss %':'0.0'}"
225
226 Example of testcase definition with pre-configured dummy results:
227
228 .. code-block:: python
229
230     {
231         "Name": "back2back",
232         "Traffic Type": "rfc2544_back2back",
233         "Deployment": "p2p",
234         "biDirectional": "True",
235         "Description": "LTD.Throughput.RFC2544.BackToBackFrames",
236         "Parameters" : {
237             'TRAFFICGEN_DUMMY_RESULTS' : {'b2b frames':'3000','b2b frame loss %':'0.0'}
238         },
239     },
240
241 **NOTE:** Pre-configured results for the Dummy traffic generator will be used only
242 in case, that the Dummy traffic generator is used. Otherwise the option
243 ``TRAFFICGEN_DUMMY_RESULTS`` will be ignored.
244
245 .. _Ixia:
246
247 Ixia
248 ----
249
250 VSPERF can use both IxNetwork and IxExplorer TCL servers to control Ixia chassis.
251 However usage of IxNetwork TCL server is a preferred option. Following sections
252 will describe installation and configuration of IxNetwork components used by VSPERF.
253
254 Installation
255 ~~~~~~~~~~~~
256
257 On the system under the test you need to install IxNetworkTclClient$(VER\_NUM)Linux.bin.tgz.
258
259 On the IXIA client software system you need to install IxNetwork TCL server. After its
260 installation you should configure it as follows:
261
262     1. Find the IxNetwork TCL server app (start -> All Programs -> IXIA ->
263        IxNetwork -> IxNetwork\_$(VER\_NUM) -> IxNetwork TCL Server)
264     2. Right click on IxNetwork TCL Server, select properties - Under shortcut tab in
265        the Target dialogue box make sure there is the argument "-tclport xxxx"
266        where xxxx is your port number (take note of this port number as you will
267        need it for the 10\_custom.conf file).
268
269        .. image:: TCLServerProperties.png
270
271     3. Hit Ok and start the TCL server application
272
273 VSPERF configuration
274 ~~~~~~~~~~~~~~~~~~~~
275
276 There are several configuration options specific to the IxNetwork traffic generator
277 from IXIA. It is essential to set them correctly, before the VSPERF is executed
278 for the first time.
279
280 Detailed description of options follows:
281
282  * ``TRAFFICGEN_IXNET_MACHINE`` - IP address of server, where IxNetwork TCL Server is running
283  * ``TRAFFICGEN_IXNET_PORT`` - PORT, where IxNetwork TCL Server is accepting connections from
284    TCL clients
285  * ``TRAFFICGEN_IXNET_USER`` - username, which will be used during communication with IxNetwork
286    TCL Server and IXIA chassis
287  * ``TRAFFICGEN_IXIA_HOST`` - IP address of IXIA traffic generator chassis
288  * ``TRAFFICGEN_IXIA_CARD`` - identification of card with dedicated ports at IXIA chassis
289  * ``TRAFFICGEN_IXIA_PORT1`` - identification of the first dedicated port at ``TRAFFICGEN_IXIA_CARD``
290    at IXIA chassis; VSPERF uses two separated ports for traffic generation. In case of
291    unidirectional traffic, it is essential to correctly connect 1st IXIA port to the 1st NIC
292    at DUT, i.e. to the first PCI handle from ``WHITELIST_NICS`` list. Otherwise traffic may not
293    be able to pass through the vSwitch.
294    **NOTE**: In case that ``TRAFFICGEN_IXIA_PORT1`` and ``TRAFFICGEN_IXIA_PORT2`` are set to the
295    same value, then VSPERF will assume, that there is only one port connection between IXIA
296    and DUT. In this case it must be ensured, that chosen IXIA port is physically connected to the
297    first NIC from ``WHITELIST_NICS`` list.
298  * ``TRAFFICGEN_IXIA_PORT2`` - identification of the second dedicated port at ``TRAFFICGEN_IXIA_CARD``
299    at IXIA chassis; VSPERF uses two separated ports for traffic generation. In case of
300    unidirectional traffic, it is essential to correctly connect 2nd IXIA port to the 2nd NIC
301    at DUT, i.e. to the second PCI handle from ``WHITELIST_NICS`` list. Otherwise traffic may not
302    be able to pass through the vSwitch.
303    **NOTE**: In case that ``TRAFFICGEN_IXIA_PORT1`` and ``TRAFFICGEN_IXIA_PORT2`` are set to the
304    same value, then VSPERF will assume, that there is only one port connection between IXIA
305    and DUT. In this case it must be ensured, that chosen IXIA port is physically connected to the
306    first NIC from ``WHITELIST_NICS`` list.
307  * ``TRAFFICGEN_IXNET_LIB_PATH`` - path to the DUT specific installation of IxNetwork TCL API
308  * ``TRAFFICGEN_IXNET_TCL_SCRIPT`` - name of the TCL script, which VSPERF will use for
309    communication with IXIA TCL server
310  * ``TRAFFICGEN_IXNET_TESTER_RESULT_DIR`` - folder accessible from IxNetwork TCL server,
311    where test results are stored, e.g. ``c:/ixia_results``; see test-results-share_
312  * ``TRAFFICGEN_IXNET_DUT_RESULT_DIR`` - directory accessible from the DUT, where test
313    results from IxNetwork TCL server are stored, e.g. ``/mnt/ixia_results``; see
314    test-results-share_
315
316 .. _test-results-share:
317
318 Test results share
319 ~~~~~~~~~~~~~~~~~~
320
321 VSPERF is not able to retrieve test results via TCL API directly. Instead, all test
322 results are stored at IxNetwork TCL server. Results are stored at folder defined by
323 ``TRAFFICGEN_IXNET_TESTER_RESULT_DIR`` configuration parameter. Content of this
324 folder must be shared (e.g. via samba protocol) between TCL Server and DUT, where
325 VSPERF is executed. VSPERF expects, that test results will be available at directory
326 configured by ``TRAFFICGEN_IXNET_DUT_RESULT_DIR`` configuration parameter.
327
328 Example of sharing configuration:
329
330  * Create a new folder at IxNetwork TCL server machine, e.g. ``c:\ixia_results``
331  * Modify sharing options of ``ixia_results`` folder to share it with everybody
332  * Create a new directory at DUT, where shared directory with results
333    will be mounted, e.g. ``/mnt/ixia_results``
334  * Update your custom VSPERF configuration file as follows:
335
336    .. code-block:: python
337
338        TRAFFICGEN_IXNET_TESTER_RESULT_DIR = 'c:/ixia_results'
339        TRAFFICGEN_IXNET_DUT_RESULT_DIR = '/mnt/ixia_results'
340
341    **NOTE:** It is essential to use slashes '/' also in path
342    configured by ``TRAFFICGEN_IXNET_TESTER_RESULT_DIR`` parameter.
343  * Install cifs-utils package.
344
345    e.g. at rpm based Linux distribution:
346
347    .. code-block:: console
348
349        yum install cifs-utils
350
351  * Mount shared directory, so VSPERF can access test results.
352
353    e.g. by adding new record into ``/etc/fstab``
354
355    .. code-block:: console
356
357        mount -t cifs //_TCL_SERVER_IP_OR_FQDN_/ixia_results /mnt/ixia_results
358              -o file_mode=0777,dir_mode=0777,nounix
359
360 It is recommended to verify, that any new file inserted into ``c:/ixia_results`` folder
361 is visible at DUT inside ``/mnt/ixia_results`` directory.
362
363 .. _`Spirent TestCenter`:
364
365 Spirent Setup
366 -------------
367
368 Spirent installation files and instructions are available on the
369 Spirent support website at:
370
371 http://support.spirent.com
372
373 Select a version of Spirent TestCenter software to utilize. This example
374 will use Spirent TestCenter v4.57 as an example. Substitute the appropriate
375 version in place of 'v4.57' in the examples, below.
376
377 On the CentOS 7 System
378 ~~~~~~~~~~~~~~~~~~~~~~
379
380 Download and install the following:
381
382 Spirent TestCenter Application, v4.57 for 64-bit Linux Client
383
384 Spirent Virtual Deployment Service (VDS)
385 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
386
387 Spirent VDS is required for both TestCenter hardware and virtual
388 chassis in the vsperf environment. For installation, select the version
389 that matches the Spirent TestCenter Application version. For v4.57,
390 the matching VDS version is 1.0.55. Download either the ova (VMware)
391 or qcow2 (QEMU) image and create a VM with it. Initialize the VM
392 according to Spirent installation instructions.
393
394 Using Spirent TestCenter Virtual (STCv)
395 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
396
397 STCv is available in both ova (VMware) and qcow2 (QEMU) formats. For
398 VMware, download:
399
400 Spirent TestCenter Virtual Machine for VMware, v4.57 for Hypervisor - VMware ESX.ESXi
401
402 Virtual test port performance is affected by the hypervisor configuration. For
403 best practice results in deploying STCv, the following is suggested:
404
405 - Create a single VM with two test ports rather than two VMs with one port each
406 - Set STCv in DPDK mode
407 - Give STCv 2*n + 1 cores, where n = the number of ports. For vsperf, cores = 5.
408 - Turning off hyperthreading and pinning these cores will improve performance
409 - Give STCv 2 GB of RAM
410
411 To get the highest performance and accuracy, Spirent TestCenter hardware is
412 recommended. vsperf can run with either stype test ports.
413
414 Using STC REST Client
415 ~~~~~~~~~~~~~~~~~~~~~
416 The stcrestclient package provides the stchttp.py ReST API wrapper module.
417 This allows simple function calls, nearly identical to those provided by
418 StcPython.py, to be used to access TestCenter server sessions via the
419 STC ReST API. Basic ReST functionality is provided by the resthttp module,
420 and may be used for writing ReST clients independent of STC.
421
422 - Project page: <https://github.com/Spirent/py-stcrestclient>
423 - Package download: <http://pypi.python.org/pypi/stcrestclient>
424
425 To use REST interface, follow the instructions in the Project page to
426 install the package. Once installed, the scripts named with 'rest' keyword
427 can be used. For example: testcenter-rfc2544-rest.py can be used to run
428 RFC 2544 tests using the REST interface.
429
430 Configuration:
431 ~~~~~~~~~~~~~~
432
433 1. The Labserver and license server addresses. These parameters applies to
434    all the tests, and are mandatory for all tests.
435
436 .. code-block:: console
437
438     TRAFFICGEN_STC_LAB_SERVER_ADDR = " "
439     TRAFFICGEN_STC_LICENSE_SERVER_ADDR = " "
440     TRAFFICGEN_STC_PYTHON2_PATH = " "
441     TRAFFICGEN_STC_TESTCENTER_PATH = " "
442     TRAFFICGEN_STC_TEST_SESSION_NAME = " "
443     TRAFFICGEN_STC_CSV_RESULTS_FILE_PREFIX = " "
444
445 2. For RFC2544 tests, the following parameters are mandatory
446
447 .. code-block:: console
448
449     TRAFFICGEN_STC_EAST_CHASSIS_ADDR = " "
450     TRAFFICGEN_STC_EAST_SLOT_NUM = " "
451     TRAFFICGEN_STC_EAST_PORT_NUM = " "
452     TRAFFICGEN_STC_EAST_INTF_ADDR = " "
453     TRAFFICGEN_STC_EAST_INTF_GATEWAY_ADDR = " "
454     TRAFFICGEN_STC_WEST_CHASSIS_ADDR = ""
455     TRAFFICGEN_STC_WEST_SLOT_NUM = " "
456     TRAFFICGEN_STC_WEST_PORT_NUM = " "
457     TRAFFICGEN_STC_WEST_INTF_ADDR = " "
458     TRAFFICGEN_STC_WEST_INTF_GATEWAY_ADDR = " "
459     TRAFFICGEN_STC_RFC2544_TPUT_TEST_FILE_NAME
460
461 3. RFC2889 tests: Currently, the forwarding, address-caching, and
462    address-learning-rate tests of RFC2889 are supported.
463    The testcenter-rfc2889-rest.py script implements the rfc2889 tests.
464    The configuration for RFC2889 involves test-case definition, and parameter
465    definition, as described below. New results-constants, as shown below, are
466    added to support these tests.
467
468 Example of testcase definition for RFC2889 tests:
469
470 .. code-block:: python
471
472     {
473         "Name": "phy2phy_forwarding",
474         "Deployment": "p2p",
475         "Description": "LTD.Forwarding.RFC2889.MaxForwardingRate",
476         "Parameters" : {
477             "TRAFFIC" : {
478                 "traffic_type" : "rfc2889_forwarding",
479             },
480         },
481     }
482
483 For RFC2889 tests, specifying the locations for the monitoring ports is mandatory.
484 Necessary parameters are:
485
486 .. code-block:: console
487
488     TRAFFICGEN_STC_RFC2889_TEST_FILE_NAME
489     TRAFFICGEN_STC_EAST_CHASSIS_ADDR = " "
490     TRAFFICGEN_STC_EAST_SLOT_NUM = " "
491     TRAFFICGEN_STC_EAST_PORT_NUM = " "
492     TRAFFICGEN_STC_EAST_INTF_ADDR = " "
493     TRAFFICGEN_STC_EAST_INTF_GATEWAY_ADDR = " "
494     TRAFFICGEN_STC_WEST_CHASSIS_ADDR = ""
495     TRAFFICGEN_STC_WEST_SLOT_NUM = " "
496     TRAFFICGEN_STC_WEST_PORT_NUM = " "
497     TRAFFICGEN_STC_WEST_INTF_ADDR = " "
498     TRAFFICGEN_STC_WEST_INTF_GATEWAY_ADDR = " "
499     TRAFFICGEN_STC_VERBOSE = "True"
500     TRAFFICGEN_STC_RFC2889_LOCATIONS="//10.1.1.1/1/1,//10.1.1.1/2/2"
501
502 Other Configurations are :
503
504 .. code-block:: console
505
506     TRAFFICGEN_STC_RFC2889_MIN_LR = 1488
507     TRAFFICGEN_STC_RFC2889_MAX_LR = 14880
508     TRAFFICGEN_STC_RFC2889_MIN_ADDRS = 1000
509     TRAFFICGEN_STC_RFC2889_MAX_ADDRS = 65536
510     TRAFFICGEN_STC_RFC2889_AC_LR = 1000
511
512 The first 2 values are for address-learning test where as other 3 values are
513 for the Address caching capacity test. LR: Learning Rate. AC: Address Caching.
514 Maximum value for address is 16777216. Whereas, maximum for LR is 4294967295.
515
516 Results for RFC2889 Tests: Forwarding tests outputs following values:
517
518 .. code-block:: console
519
520     TX_RATE_FPS : "Transmission Rate in Frames/sec"
521     THROUGHPUT_RX_FPS: "Received Throughput Frames/sec"
522     TX_RATE_MBPS : " Transmission rate in MBPS"
523     THROUGHPUT_RX_MBPS: "Received Throughput in MBPS"
524     TX_RATE_PERCENT: "Transmission Rate in Percentage"
525     FRAME_LOSS_PERCENT: "Frame loss in Percentage"
526     FORWARDING_RATE_FPS: " Maximum Forwarding Rate in FPS"
527
528
529 Whereas, the address caching test outputs following values,
530
531 .. code-block:: console
532
533     CACHING_CAPACITY_ADDRS = 'Number of address it can cache'
534     ADDR_LEARNED_PERCENT = 'Percentage of address successfully learned'
535
536 and address learning test outputs just a single value:
537
538 .. code-block:: console
539
540     OPTIMAL_LEARNING_RATE_FPS = 'Optimal learning rate in fps'
541
542 Note that 'FORWARDING_RATE_FPS', 'CACHING_CAPACITY_ADDRS',
543 'ADDR_LEARNED_PERCENT' and 'OPTIMAL_LEARNING_RATE_FPS' are the new
544 result-constants added to support RFC2889 tests.
545
546 .. _`Xena Networks`:
547
548 Xena Networks
549 -------------
550
551 Installation
552 ~~~~~~~~~~~~
553
554 Xena Networks traffic generator requires specific files and packages to be
555 installed. It is assumed the user has access to the Xena2544.exe file which
556 must be placed in VSPerf installation location under the tools/pkt_gen/xena
557 folder. Contact Xena Networks for the latest version of this file. The user
558 can also visit www.xenanetworks/downloads to obtain the file with a valid
559 support contract.
560
561 **Note** VSPerf has been fully tested with version v2.43 of Xena2544.exe
562
563 To execute the Xena2544.exe file under Linux distributions the mono-complete
564 package must be installed. To install this package follow the instructions
565 below. Further information can be obtained from
566 http://www.mono-project.com/docs/getting-started/install/linux/
567
568 .. code-block:: console
569
570     rpm --import "http://keyserver.ubuntu.com/pks/lookup?op=get&search=0x3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF"
571     yum-config-manager --add-repo http://download.mono-project.com/repo/centos/
572     yum -y install mono-complete
573
574 To prevent gpg errors on future yum installation of packages the mono-project
575 repo should be disabled once installed.
576
577 .. code-block:: console
578
579     yum-config-manager --disable download.mono-project.com_repo_centos_
580
581 Configuration
582 ~~~~~~~~~~~~~
583
584 Connection information for your Xena Chassis must be supplied inside the
585 ``10_custom.conf`` or ``03_custom.conf`` file. The following parameters must be
586 set to allow for proper connections to the chassis.
587
588 .. code-block:: console
589
590     TRAFFICGEN_XENA_IP = ''
591     TRAFFICGEN_XENA_PORT1 = ''
592     TRAFFICGEN_XENA_PORT2 = ''
593     TRAFFICGEN_XENA_USER = ''
594     TRAFFICGEN_XENA_PASSWORD = ''
595     TRAFFICGEN_XENA_MODULE1 = ''
596     TRAFFICGEN_XENA_MODULE2 = ''
597
598 RFC2544 Throughput Testing
599 ~~~~~~~~~~~~~~~~~~~~~~~~~~
600
601 Xena traffic generator testing for rfc2544 throughput can be modified for
602 different behaviors if needed. The default options for the following are
603 optimized for best results.
604
605 .. code-block:: console
606
607     TRAFFICGEN_XENA_2544_TPUT_INIT_VALUE = '10.0'
608     TRAFFICGEN_XENA_2544_TPUT_MIN_VALUE = '0.1'
609     TRAFFICGEN_XENA_2544_TPUT_MAX_VALUE = '100.0'
610     TRAFFICGEN_XENA_2544_TPUT_VALUE_RESOLUTION = '0.5'
611     TRAFFICGEN_XENA_2544_TPUT_USEPASS_THRESHHOLD = 'false'
612     TRAFFICGEN_XENA_2544_TPUT_PASS_THRESHHOLD = '0.0'
613
614 Each value modifies the behavior of rfc 2544 throughput testing. Refer to your
615 Xena documentation to understand the behavior changes in modifying these
616 values.
617
618 Xena RFC2544 testing inside VSPerf also includes a final verification option.
619 This option allows for a faster binary search with a longer final verification
620 of the binary search result. This feature can be enabled in the configuration
621 files as well as the length of the final verification in seconds.
622
623 ..code-block:: python
624
625     TRAFFICGEN_XENA_RFC2544_VERIFY = False
626     TRAFFICGEN_XENA_RFC2544_VERIFY_DURATION = 120
627
628 If the final verification does not pass the test with the lossrate specified
629 it will continue the binary search from its previous point. If the smart search
630 option is enabled the search will continue by taking the current pass rate minus
631 the minimum and divided by 2. The maximum is set to the last pass rate minus the
632 threshold value set.
633
634 For example if the settings are as follows
635
636 ..code-block:: python
637
638     TRAFFICGEN_XENA_RFC2544_BINARY_RESTART_SMART_SEARCH = True
639     TRAFFICGEN_XENA_2544_TPUT_MIN_VALUE = '0.5'
640     TRAFFICGEN_XENA_2544_TPUT_VALUE_RESOLUTION = '0.5'
641
642 and the verification attempt was 64.5, smart search would take 64.5 - 0.5 / 2.
643 This would continue the search at 32 but still have a maximum possible value of
644 64.
645
646 If smart is not enabled it will just resume at the last pass rate minus the
647 threshold value.
648
649 Continuous Traffic Testing
650 ~~~~~~~~~~~~~~~~~~~~~~~~~~
651
652 Xena continuous traffic by default does a 3 second learning preemption to allow
653 the DUT to receive learning packets before a continuous test is performed. If
654 a custom test case requires this learning be disabled, you can disable the option
655 or modify the length of the learning by modifying the following settings.
656
657 .. code-block:: console
658
659     TRAFFICGEN_XENA_CONT_PORT_LEARNING_ENABLED = False
660     TRAFFICGEN_XENA_CONT_PORT_LEARNING_DURATION = 3
661
662 MoonGen
663 -------
664
665 Installation
666 ~~~~~~~~~~~~
667
668 MoonGen architecture overview and general installation instructions
669 can be found here:
670
671 https://github.com/emmericp/MoonGen
672
673 * Note:  Today, MoonGen with VSPERF only supports 10Gbps line speeds.
674
675 For VSPERF use, MoonGen should be cloned from here (as opposed to the
676 previously mentioned GitHub):
677
678 git clone https://github.com/atheurer/lua-trafficgen
679
680 and use the master branch:
681
682 git checkout master
683
684 VSPERF uses a particular Lua script with the MoonGen project:
685
686 trafficgen.lua
687
688 Follow MoonGen set up and execution instructions here:
689
690 https://github.com/atheurer/lua-trafficgen/blob/master/README.md
691
692 Note one will need to set up ssh login to not use passwords between the server
693 running MoonGen and the device under test (running the VSPERF test
694 infrastructure).  This is because VSPERF on one server uses 'ssh' to
695 configure and run MoonGen upon the other server.
696
697 One can set up this ssh access by doing the following on both servers:
698
699 .. code-block:: console
700
701     ssh-keygen -b 2048 -t rsa
702     ssh-copy-id <other server>
703
704 Configuration
705 ~~~~~~~~~~~~~
706
707 Connection information for MoonGen must be supplied inside the
708 ``10_custom.conf`` or ``03_custom.conf`` file. The following parameters must be
709 set to allow for proper connections to the host with MoonGen.
710
711 .. code-block:: console
712
713     TRAFFICGEN_MOONGEN_HOST_IP_ADDR = ""
714     TRAFFICGEN_MOONGEN_USER = ""
715     TRAFFICGEN_MOONGEN_BASE_DIR = ""
716     TRAFFICGEN_MOONGEN_PORTS = ""
717     TRAFFICGEN_MOONGEN_LINE_SPEED_GBPS = ""
718
719 Trex
720 ----
721
722 Installation
723 ~~~~~~~~~~~~
724
725 Trex architecture overview and general installation instructions
726 can be found here:
727
728 https://trex-tgn.cisco.com/trex/doc/trex_stateless.html
729
730 You can directly download from GitHub:
731
732 .. code-block:: console
733
734     git clone https://github.com/cisco-system-traffic-generator/trex-core
735
736 and use the master branch:
737
738 .. code-block:: console
739
740     git checkout master
741
742 or Trex latest release you can download from here:
743
744 .. code-block:: console
745
746     wget --no-cache http://trex-tgn.cisco.com/trex/release/latest
747
748 After download, Trex repo has to be built:
749
750 .. code-block:: console
751
752    cd trex-core/linux_dpdk
753    ./b configure   (run only once)
754    ./b build
755
756 Next step is to create a minimum configuration file. It can be created by script ``dpdk_setup_ports.py``.
757 The script with parameter ``-i`` will run in interactive mode and it will create file ``/etc/trex_cfg.yaml``.
758
759 .. code-block:: console
760
761    cd trex-core/scripts
762    sudo ./dpdk_setup_ports.py -i
763
764 Or example of configuration file can be found at location below, but it must be updated manually:
765
766 .. code-block:: console
767
768    cp trex-core/scripts/cfg/simple_cfg /etc/trex_cfg.yaml
769
770 For additional information about configuration file see official documentation (chapter 3.1.2):
771
772 https://trex-tgn.cisco.com/trex/doc/trex_manual.html#_creating_minimum_configuration_file
773
774 After compilation and configuration it is possible to run trex server in stateless mode.
775 It is neccesary for proper connection between Trex server and VSPERF.
776
777 .. code-block:: console
778
779    cd trex-core/scripts/
780    ./t-rex-64 -i
781
782 For additional information about Trex stateless mode see Trex stateless documentation:
783
784 https://trex-tgn.cisco.com/trex/doc/trex_stateless.html
785
786 **NOTE:** One will need to set up ssh login to not use passwords between the server
787 running Trex and the device under test (running the VSPERF test
788 infrastructure). This is because VSPERF on one server uses 'ssh' to
789 configure and run Trex upon the other server.
790
791 One can set up this ssh access by doing the following on both servers:
792
793 .. code-block:: console
794
795     ssh-keygen -b 2048 -t rsa
796     ssh-copy-id <other server>
797
798 Configuration
799 ~~~~~~~~~~~~~
800
801 Connection information for Trex must be supplied inside the custom configuration
802 file. The following parameters must be set to allow for proper connections to the host with Trex.
803 Example of this configuration is in conf/03_traffic.conf or conf/10_custom.conf.
804
805 .. code-block:: console
806
807     TRAFFICGEN_TREX_HOST_IP_ADDR = ''
808     TRAFFICGEN_TREX_USER = ''
809     TRAFFICGEN_TREX_BASE_DIR = ''
810
811 TRAFFICGEN_TREX_USER has to have sudo permission and passwordless access.
812 TRAFFICGEN_TREX_BASE_DIR is the place, where is stored 't-rex-64' file.