b5f47998a215cce1b9707f006fda373813408a70
[vswitchperf.git] / docs / userguide / testusage.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 vSwitchPerf test suites userguide
6 ---------------------------------
7
8 General
9 ^^^^^^^
10
11 VSPERF requires a traffic generators to run tests, automated traffic gen
12 support in VSPERF includes:
13
14 - IXIA traffic generator (IxNetwork hardware) and a machine that runs the IXIA
15   client software.
16 - Spirent traffic generator (TestCenter hardware chassis or TestCenter virtual
17   in a VM) and a VM to run the Spirent Virtual Deployment Service image,
18   formerly known as "Spirent LabServer".
19
20 If you want to use another traffic generator, please select the Dummy generator
21 option as shown in `Traffic generator instructions
22 <http://artifacts.opnfv.org/vswitchperf/docs/configguide/trafficgen.html>`__
23
24 VSPERF Installation
25 ^^^^^^^^^^^^^^^^^^^
26
27 To see the supported Operating Systems, vSwitches and system requirements,
28 please follow the `installation instructions
29 <http://artifacts.opnfv.org/vswitchperf/docs/configguide/installation.html>`__ to
30 install.
31
32 Traffic Generator Setup
33 ^^^^^^^^^^^^^^^^^^^^^^^
34
35 Follow the `Traffic generator instructions
36 <http://artifacts.opnfv.org/vswitchperf/docs/configguide/trafficgen.html>`__ to
37 install and configure a suitable traffic generator.
38
39 Cloning and building src dependencies
40 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
41
42 In order to run VSPERF, you will need to download DPDK and OVS. You can
43 do this manually and build them in a preferred location, OR you could
44 use vswitchperf/src. The vswitchperf/src directory contains makefiles
45 that will allow you to clone and build the libraries that VSPERF depends
46 on, such as DPDK and OVS. To clone and build simply:
47
48 .. code-block:: console
49
50     $ cd src
51     $ make
52
53 VSPERF can be used with stock OVS (without DPDK support). When build
54 is finished, the libraries are stored in src_vanilla directory.
55
56 The 'make' builds all options in src:
57
58 * Vanilla OVS
59 * OVS with vhost_user as the guest access method (with DPDK support)
60 * OVS with vhost_cuse s the guest access method (with DPDK support)
61
62 The vhost_user build will reside in src/ovs/
63 The vhost_cuse build will reside in vswitchperf/src_cuse
64 The Vanilla OVS build will reside in vswitchperf/src_vanilla
65
66 To delete a src subdirectory and its contents to allow you to re-clone simply
67 use:
68
69 .. code-block:: console
70
71      $ make clobber
72
73 Configure the ``./conf/10_custom.conf`` file
74 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
75
76 The ``10_custom.conf`` file is the configuration file that overrides
77 default configurations in all the other configuration files in ``./conf``
78 The supplied ``10_custom.conf`` file **MUST** be modified, as it contains
79 configuration items for which there are no reasonable default values.
80
81 The configuration items that can be added is not limited to the initial
82 contents. Any configuration item mentioned in any .conf file in
83 ``./conf`` directory can be added and that item will be overridden by
84 the custom configuration value.
85
86 Using a custom settings file
87 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
88
89 If your ``10_custom.conf`` doesn't reside in the ``./conf`` directory
90 of if you want to use an alternative configuration file, the file can
91 be passed to ``vsperf`` via the ``--conf-file`` argument.
92
93 .. code-block:: console
94
95     $ ./vsperf --conf-file <path_to_custom_conf> ...
96
97 Note that configuration passed in via the environment (``--load-env``)
98 or via another command line argument will override both the default and
99 your custom configuration files. This "priority hierarchy" can be
100 described like so (1 = max priority):
101
102 1. Command line arguments
103 2. Environment variables
104 3. Configuration file(s)
105
106 vloop_vnf
107 ^^^^^^^^^
108
109 vsperf uses a VM called vloop_vnf for looping traffic in the PVP and PVVP
110 deployment scenarios. The image can be downloaded from
111 `<http://artifacts.opnfv.org/>`__.
112
113 .. code-block:: console
114
115     $ wget http://artifacts.opnfv.org/vswitchperf/vloop-vnf-ubuntu-14.04_20151216.qcow2
116
117 vloop_vnf forwards traffic through a VM using one of:
118 * DPDK testpmd
119 * Linux Bridge
120 * l2fwd kernel Module.
121
122 Alternatively you can use your own QEMU image.
123
124 l2fwd Kernel Module
125 ^^^^^^^^^^^^^^^^^^^
126
127 A Kernel Module that provides OSI Layer 2 Ipv4 termination or forwarding with
128 support for Destination Network Address Translation (DNAT) for both the MAC and
129 IP addresses. l2fwd can be found in <vswitchperf_dir>/src/l2fwd
130
131 Executing tests
132 ^^^^^^^^^^^^^^^
133
134 Before running any tests make sure you have root permissions by adding
135 the following line to /etc/sudoers:
136
137 .. code-block:: console
138
139     username ALL=(ALL)       NOPASSWD: ALL
140
141 username in the example above should be replaced with a real username.
142
143 To list the available tests:
144
145 .. code-block:: console
146
147     $ ./vsperf --list
148
149 To run a single test:
150
151 .. code-block:: console
152
153     $ ./vsperf $TESTNAME
154
155 Where $TESTNAME is the name of the vsperf test you would like to run.
156
157 To run a group of tests, for example all tests with a name containing
158 'RFC2544':
159
160 .. code-block:: console
161
162     $ ./vsperf --conf-file=<path_to_custom_conf>/10_custom.conf --tests="RFC2544"
163
164 To run all tests:
165
166 .. code-block:: console
167
168     $ ./vsperf --conf-file=<path_to_custom_conf>/10_custom.conf
169
170 Some tests allow for configurable parameters, including test duration
171 (in seconds) as well as packet sizes (in bytes).
172
173 .. code:: bash
174
175     $ ./vsperf --conf-file user_settings.py
176         --tests RFC2544Tput
177         --test-params "duration=10;pkt_sizes=128"
178
179 For all available options, check out the help dialog:
180
181 .. code-block:: console
182
183     $ ./vsperf --help
184
185 Executing Vanilla OVS tests
186 ^^^^^^^^^^^^^^^^^^^^^^^^^^^
187
188 1. If needed, recompile src for all OVS variants
189
190 .. code-block:: console
191
192      $ cd src
193      $ make distclean
194      $ make
195
196 2. Update your ''10_custom.conf'' file to use the appropriate variables
197 for Vanilla OVS:
198
199 .. code-block:: console
200
201    VSWITCH = 'OvsVanilla'
202
203 Where $PORT1 and $PORT2 are the Linux interfaces you'd like to bind
204 to the vswitch.
205
206 3. Run test:
207
208 .. code-block:: console
209
210      $ ./vsperf --conf-file=<path_to_custom_conf>
211
212 Please note if you don't want to configure Vanilla OVS through the
213 configuration file, you can pass it as a CLI argument; BUT you must
214 set the ports.
215
216 .. code-block:: console
217
218     $ ./vsperf --vswitch OvsVanilla
219
220
221 Executing PVP and PVVP tests
222 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
223
224 To run tests using vhost-user as guest access method:
225
226 1. Set VHOST_METHOD and VNF of your settings file to:
227
228 .. code-block:: console
229
230    VHOST_METHOD='user'
231    VNF = 'QemuDpdkVhost'
232
233 2. If needed, recompile src for all OVS variants
234
235 .. code-block:: console
236
237      $ cd src
238      $ make distclean
239      $ make
240
241 3. Run test:
242
243 .. code-block:: console
244
245      $ ./vsperf --conf-file=<path_to_custom_conf>/10_custom.conf
246
247 To run tests using vhost-cuse as guest access method:
248
249 1. Set VHOST_METHOD and VNF of your settings file to:
250
251 .. code-block:: console
252
253      VHOST_METHOD='cuse'
254      VNF = 'QemuDpdkVhostCuse'
255
256 2. If needed, recompile src for all OVS variants
257
258 .. code-block:: console
259
260      $ cd src
261      $ make distclean
262      $ make
263
264 3. Run test:
265
266 .. code-block:: console
267
268      $ ./vsperf --conf-file=<path_to_custom_conf>/10_custom.conf
269
270 Executing PVP tests using Vanilla OVS
271 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
272
273 To run tests using Vanilla OVS:
274
275 1. Set the following variables:
276
277 .. code-block:: console
278
279    VSWITCH = 'OvsVanilla'
280    VNF = 'QemuVirtioNet'
281
282    VANILLA_TGEN_PORT1_IP = n.n.n.n
283    VANILLA_TGEN_PORT1_MAC = nn:nn:nn:nn:nn:nn
284
285    VANILLA_TGEN_PORT2_IP = n.n.n.n
286    VANILLA_TGEN_PORT2_MAC = nn:nn:nn:nn:nn:nn
287
288    VANILLA_BRIDGE_IP = n.n.n.n
289
290    or use --test-param
291
292    $ ./vsperf --conf-file=<path_to_custom_conf>/10_custom.conf
293               --test-params "vanilla_tgen_tx_ip=n.n.n.n;
294                             vanilla_tgen_tx_mac=nn:nn:nn:nn:nn:nn"
295
296
297 2. If needed, recompile src for all OVS variants
298
299 .. code-block:: console
300
301      $ cd src
302      $ make distclean
303      $ make
304
305 3. Run test:
306
307 .. code-block:: console
308
309      $ ./vsperf --conf-file<path_to_custom_conf>/10_custom.conf
310
311 .. _vfio-pci:
312
313 Using vfio_pci with DPDK
314 ^^^^^^^^^^^^^^^^^^^^^^^^^
315
316 To use vfio with DPDK instead of igb_uio edit 'conf/02_vswitch.conf'
317 with the following parameters:
318
319 .. code-block:: console
320
321     DPDK_MODULES = [
322      ('vfio-pci'),
323     ]
324     SYS_MODULES = ['cuse']
325
326 **NOTE:** Please ensure that Intel VT-d is enabled in BIOS.
327
328 **NOTE:** Please ensure your boot/grub parameters include
329 the following:
330
331 .. code-block:: console
332
333     iommu=pt intel_iommu=on
334
335 To check that IOMMU is enabled on your platform:
336
337 .. code-block:: console
338
339     $ dmesg | grep IOMMU
340     [    0.000000] Intel-IOMMU: enabled
341     [    0.139882] dmar: IOMMU 0: reg_base_addr fbffe000 ver 1:0 cap d2078c106f0466 ecap f020de
342     [    0.139888] dmar: IOMMU 1: reg_base_addr ebffc000 ver 1:0 cap d2078c106f0466 ecap f020de
343     [    0.139893] IOAPIC id 2 under DRHD base  0xfbffe000 IOMMU 0
344     [    0.139894] IOAPIC id 0 under DRHD base  0xebffc000 IOMMU 1
345     [    0.139895] IOAPIC id 1 under DRHD base  0xebffc000 IOMMU 1
346     [    3.335744] IOMMU: dmar0 using Queued invalidation
347     [    3.335746] IOMMU: dmar1 using Queued invalidation
348     ....
349
350 .. _SRIOV-support:
351
352 Using SRIOV support
353 ^^^^^^^^^^^^^^^^^^^
354
355 To use virtual functions of NIC with SRIOV support, use extended form
356 of NIC PCI slot definition:
357
358 .. code-block:: python
359
360     WHITELIST_NICS = ['0000:05:00.0|vf0', '0000:05:00.1|vf3']
361
362 Where 'vf' is an indication of virtual function usage and following
363 number defines a VF to be used. In case that VF usage is detected,
364 then vswitchperf will enable SRIOV support for given card and it will
365 detect PCI slot numbers of selected VFs.
366
367 So in example above, one VF will be configured for NIC '0000:05:00.0'
368 and four VFs will be configured for NIC '0000:05:00.1'. Vswitchperf
369 will detect PCI addresses of selected VFs and it will use them during
370 test execution.
371
372 At the end of vswitchperf execution, SRIOV support will be disabled.
373
374 SRIOV support is generic and it can be used in different testing scenarios.
375 For example:
376
377 * vSwitch tests with DPDK or without DPDK support to verify impact
378   of VF usage on vSwitch performance
379 * tests without vSwitch, where traffic is forwared directly
380   between VF interfaces by packet forwarder (e.g. testpmd application)
381 * tests without vSwitch, where VM accesses VF interfaces directly
382   by PCI-passthrough_ to measure raw VM throughput performance.
383
384 .. _PCI-passthrough:
385
386 Using QEMU with PCI passthrough support
387 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
388
389 Raw virtual machine throughput performance can be measured by execution of PVP
390 test with direct access to NICs by PCI passthrough. To execute VM with direct
391 access to PCI devices, enable vfio-pci_. In order to use virtual functions,
392 SRIOV-support_ must be enabled.
393
394 Execution of test with PCI passthrough with vswitch disabled:
395
396 .. code-block:: console
397
398     $ ./vsperf --conf-file=<path_to_custom_conf>/10_custom.conf
399                --vswitch none --vnf QemuPciPassthrough pvp_tput
400
401 Any of supported guest-loopback-application_ can be used inside VM with
402 PCI passthrough support.
403
404 Note: Qemu with PCI passthrough support can be used only with PVP test
405 deployment.
406
407 .. _guest-loopback-application:
408
409 Selection of loopback application for PVP and PVVP tests
410 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
411
412 To select loopback application, which will perform traffic forwarding
413 inside VM, following configuration parameter should be configured:
414
415 .. code-block:: console
416
417      GUEST_LOOPBACK = ['testpmd', 'testpmd']
418
419 or use --test-param
420
421 .. code-block:: console
422
423         $ ./vsperf --conf-file=<path_to_custom_conf>/10_custom.conf
424               --test-params "guest_loopback=testpmd"
425
426 Supported loopback applications are:
427
428 .. code-block:: console
429
430      'testpmd'       - testpmd from dpdk will be built and used
431      'l2fwd'         - l2fwd module provided by Huawei will be built and used
432      'linux_bridge'  - linux bridge will be configured
433      'buildin'       - nothing will be configured by vsperf; VM image must
434                        ensure traffic forwarding between its interfaces
435
436 Guest loopback application must be configured, otherwise traffic
437 will not be forwarded by VM and testcases with PVP and PVVP deployments
438 will fail. Guest loopback application is set to 'testpmd' by default.
439
440 Multi-Queue Configuration
441 ^^^^^^^^^^^^^^^^^^^^^^^^^
442
443 VSPerf currently supports multi-queue with the following limitations:
444
445  1.  Execution of pvp/pvvp tests require testpmd as the loopback if multi-queue
446      is enabled at the guest.
447
448  2.  Requires QemuDpdkVhostUser as the vnf.
449
450  3.  Requires switch to be set to OvsDpdkVhost.
451
452  4.  Requires QEMU 2.5 or greater and any OVS version higher than 2.5. The
453      default upstream package versions installed by VSPerf satisfy this
454      requirement.
455
456 To enable multi-queue modify the ''02_vswitch.conf'' file to enable multi-queue
457 on the switch.
458
459   .. code-block:: console
460
461      VSWITCH_MULTI_QUEUES = 2
462
463 **NOTE:** you should consider using the switch affinity to set a pmd cpu mask
464 that can optimize your performance. Consider the numa of the NIC in use if this
465 applies by checking /sys/class/net/<eth_name>/device/numa_node and setting an
466 appropriate mask to create PMD threads on the same numa node.
467
468 When multi-queue is enabled, each dpdk or dpdkvhostuser port that is created
469 on the switch will set the option for multiple queues.
470
471 To enable multi-queue on the guest modify the ''04_vnf.conf'' file.
472
473   .. code-block:: console
474
475      GUEST_NIC_QUEUES = 2
476
477 Enabling multi-queue at the guest will add multiple queues to each NIC port when
478 qemu launches the guest.
479
480 Testpmd should be configured to take advantage of multi-queue on the guest. This
481 can be done by modifying the ''04_vnf.conf'' file.
482
483   .. code-block:: console
484
485      GUEST_TESTPMD_CPU_MASK = '-l 0,1,2,3,4'
486
487      GUEST_TESTPMD_NB_CORES = 4
488      GUEST_TESTPMD_TXQ = 2
489      GUEST_TESTPMD_RXQ = 2
490
491 **NOTE:** The guest SMP cores must be configured to allow for testpmd to use the
492 optimal number of cores to take advantage of the multiple guest queues.
493
494 **NOTE:** For optimal performance guest SMPs should be on the same numa as the
495 NIC in use if possible/applicable. Testpmd should be assigned at least
496 (nb_cores +1) total cores with the cpu mask.
497
498 Executing Packet Forwarding tests
499 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
500
501 To select application, which will perform packet forwarding,
502 following configuration parameter should be configured:
503
504   .. code-block:: console
505
506      VSWITCH = 'none'
507      PKTFWD = 'TestPMD'
508
509      or use --vswitch and --fwdapp
510
511      $ ./vsperf --conf-file user_settings.py
512               --vswitch none
513               --fwdapp TestPMD
514
515 Supported Packet Forwarding applications are:
516
517   .. code-block:: console
518
519      'testpmd'       - testpmd from dpdk
520
521
522 1. Update your ''10_custom.conf'' file to use the appropriate variables
523 for selected Packet Forwarder:
524
525   .. code-block:: console
526
527    # testpmd configuration
528    TESTPMD_ARGS = []
529    # packet forwarding mode supported by testpmd; Please see DPDK documentation
530    # for comprehensive list of modes supported by your version.
531    # e.g. io|mac|mac_retry|macswap|flowgen|rxonly|txonly|csum|icmpecho|...
532    # Note: Option "mac_retry" has been changed to "mac retry" since DPDK v16.07
533    TESTPMD_FWD_MODE = 'csum'
534    # checksum calculation layer: ip|udp|tcp|sctp|outer-ip
535    TESTPMD_CSUM_LAYER = 'ip'
536    # checksum calculation place: hw (hardware) | sw (software)
537    TESTPMD_CSUM_CALC = 'sw'
538    # recognize tunnel headers: on|off
539    TESTPMD_CSUM_PARSE_TUNNEL = 'off'
540
541 2. Run test:
542
543   .. code-block:: console
544
545      $ ./vsperf --conf-file <path_to_settings_py>
546
547 VSPERF modes of operation
548 ^^^^^^^^^^^^^^^^^^^^^^^^^
549
550 VSPERF can be run in different modes. By default it will configure vSwitch,
551 traffic generator and VNF. However it can be used just for configuration
552 and execution of traffic generator. Another option is execution of all
553 components except traffic generator itself.
554
555 Mode of operation is driven by configuration parameter -m or --mode
556
557 .. code-block:: console
558
559     -m MODE, --mode MODE  vsperf mode of operation;
560         Values:
561             "normal" - execute vSwitch, VNF and traffic generator
562             "trafficgen" - execute only traffic generator
563             "trafficgen-off" - execute vSwitch and VNF
564             "trafficgen-pause" - execute vSwitch and VNF but wait before traffic transmission
565
566 In case, that VSPERF is executed in "trafficgen" mode, then configuration
567 of traffic generator should be configured through --test-params option.
568 Supported CLI options useful for traffic generator configuration are:
569
570 .. code-block:: console
571
572     'traffic_type'  - One of the supported traffic types. E.g. rfc2544,
573                       back2back or continuous
574                       Default value is "rfc2544".
575     'bidirectional' - Specifies if generated traffic will be full-duplex (true)
576                       or half-duplex (false)
577                       Default value is "false".
578     'iload'         - Defines desired percentage of frame rate used during
579                       continuous stream tests.
580                       Default value is 100.
581     'multistream'   - Defines number of flows simulated by traffic generator.
582                       Value 0 disables MultiStream feature
583                       Default value is 0.
584     'stream_type'   - Stream Type is an extension of the "MultiStream" feature.
585                       If MultiStream is disabled, then Stream Type will be
586                       ignored. Stream Type defines ISO OSI network layer used
587                       for simulation of multiple streams.
588                       Default value is "L4".
589
590 Example of execution of VSPERF in "trafficgen" mode:
591
592 .. code-block:: console
593
594     $ ./vsperf -m trafficgen --trafficgen IxNet --conf-file vsperf.conf
595         --test-params "traffic_type=continuous;bidirectional=True;iload=60"
596
597 Code change verification by pylint
598 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
599
600 Every developer participating in VSPERF project should run
601 pylint before his python code is submitted for review. Project
602 specific configuration for pylint is available at 'pylint.rc'.
603
604 Example of manual pylint invocation:
605
606 .. code-block:: console
607
608           $ pylint --rcfile ./pylintrc ./vsperf
609
610 GOTCHAs:
611 ^^^^^^^^
612
613 OVS with DPDK and QEMU
614 ~~~~~~~~~~~~~~~~~~~~~~~
615
616 If you encounter the following error: "before (last 100 chars):
617 '-path=/dev/hugepages,share=on: unable to map backing store for
618 hugepages: Cannot allocate memory\r\n\r\n" with the PVP or PVVP
619 deployment scenario, check the amount of hugepages on your system:
620
621 .. code-block:: console
622
623     $ cat /proc/meminfo | grep HugePages
624
625
626 By default the vswitchd is launched with 1Gb of memory, to  change
627 this, modify --socket-mem parameter in conf/02_vswitch.conf to allocate
628 an appropriate amount of memory:
629
630 .. code-block:: console
631
632     VSWITCHD_DPDK_ARGS = ['-c', '0x4', '-n', '4', '--socket-mem 1024,0']
633     VSWITCHD_DPDK_CONFIG = {
634         'dpdk-init' : 'true',
635         'dpdk-lcore-mask' : '0x4',
636         'dpdk-socket-mem' : '1024,0',
637     }
638
639 Note: Option VSWITCHD_DPDK_ARGS is used for vswitchd, which supports --dpdk
640 parameter. In recent vswitchd versions, option VSWITCHD_DPDK_CONFIG will be
641 used to configure vswitchd via ovs-vsctl calls.
642
643
644 More information
645 ^^^^^^^^^^^^^^^^
646
647 For more information and details refer to the vSwitchPerf user guide at:
648 http://artifacts.opnfv.org/vswitchperf/brahmaputra/userguide/index.html
649