docs: updates and move traffic gens to separate doc
[vswitchperf.git] / docs / requirements / vswitchperf_ltd.rst
1
2 .. 3.1
3
4 ===============
5 Introduction
6 ===============
7
8 The objective of the OPNFV project titled
9 **“Characterize vSwitch Performance for Telco NFV Use Cases”**, is to
10 evaluate a virtual switch to identify its suitability for a Telco
11 Network Function Virtualization (NFV) environment. The intention of this
12 Level Test Design (LTD) document is to specify the set of tests to carry
13 out in order to objectively measure the current characteristics of a
14 virtual switch in the Network Function Virtualization Infrastructure
15 (NFVI) as well as the test pass criteria. The detailed test cases will
16 be defined in `Section 2 <#DetailsOfTheLevelTestDesign>`__, preceded by
17 the `Document identifier <#DocId>`__ and the `Scope <#Scope>`__.
18
19 This document is currently in draft form.
20
21 .. 3.1.1
22
23 Document identifier
24 =========================
25
26 The document id will be used to uniquely
27 identify versions of the LTD. The format for the document id will be:
28 OPNFV\_vswitchperf\_LTD\_ver\_NUM\_MONTH\_YEAR\_STATUS, where by the
29 status is one of: draft, reviewed, corrected or final. The document id
30 for this version of the LTD is:
31 OPNFV\_vswitchperf\_LTD\_ver\_1.6\_Jan\_15\_DRAFT.
32
33 .. 3.1.2
34
35 Scope
36 ==========
37
38 The main purpose of this project is to specify a suite of
39 performance tests in order to objectively measure the current packet
40 transfer characteristics of a virtual switch in the NFVI. The intent of
41 the project is to facilitate testing of any virtual switch. Thus, a
42 generic suite of tests shall be developed, with no hard dependencies to
43 a single implementation. In addition, the test case suite shall be
44 architecture independent.
45
46 The test cases developed in this project shall not form part of a
47 separate test framework, all of these tests may be inserted into the
48 Continuous Integration Test Framework and/or the Platform Functionality
49 Test Framework - if a vSwitch becomes a standard component of an OPNFV
50 release.
51
52 .. 3.1.3
53
54 References
55 ===============
56
57 *  `RFC 1242 Benchmarking Terminology for Network Interconnection
58    Devices <http://www.ietf.org/rfc/rfc1242.txt>`__
59 *  `RFC 2544 Benchmarking Methodology for Network Interconnect
60    Devices <http://www.ietf.org/rfc/rfc2544.txt>`__
61 *  `RFC 2285 Benchmarking Terminology for LAN Switching
62    Devices <http://www.ietf.org/rfc/rfc2285.txt>`__
63 *  `RFC 2889 Benchmarking Methodology for LAN Switching
64    Devices <http://www.ietf.org/rfc/rfc2889.txt>`__
65 *  `RFC 3918 Methodology for IP Multicast
66    Benchmarking <http://www.ietf.org/rfc/rfc3918.txt>`__
67 *  `RFC 4737 Packet Reordering
68    Metrics <http://www.ietf.org/rfc/rfc4737.txt>`__
69 *  `RFC 5481 Packet Delay Variation Applicability
70    Statement <http://www.ietf.org/rfc/rfc5481.txt>`__
71 *  `RFC 6201 Device Reset
72    Characterization <http://tools.ietf.org/html/rfc6201>`__
73
74 .. 3.2
75
76 ===================================
77 Details of the Level Test Design
78 ===================================
79
80 This section describes the features to be tested (
81 :ref:_FeaturesToBeTested), the test approach (:ref:_Approach);
82 it also identifies the sets of test cases or scenarios (
83 :ref:_TestIdentification) along with the pass/fail criteria and
84 the test deliverables.
85
86 .. 3.2.1
87
88 .. _FeaturesToBeTested:
89
90 Features to be tested
91 ==========================
92
93 Characterizing virtual switches (i.e. Device Under Test (DUT) in this document)
94 includes measuring the following performance metrics:
95
96 - **Throughput** as defined by `RFC1242
97   <https://www.rfc-editor.org/rfc/rfc1242.txt>`__: The maximum rate at which
98   **none** of the offered frames are dropped by the DUT. The maximum frame
99   rate and bit rate that can be transmitted by the DUT without any error
100   should be recorded. Note there is an equivalent bit rate and a specific
101   layer at which the payloads contribute to the bits. Errors and
102   improperly formed frames or packets are dropped.
103 - **Packet delay** introduced by the DUT and its cumulative effect on
104   E2E networks. Frame delay can be measured equivalently.
105 - **Packet delay variation**: measured from the perspective of the
106   VNF/application. Packet delay variation is sometimes called "jitter".
107   However, we will avoid the term "jitter" as the term holds different
108   meaning to different groups of people. In this document we will
109   simply use the term packet delay variation. The preferred form for this
110   metric is the PDV form of delay variation defined in `RFC5481
111   <https://www.rfc-editor.org/rfc/rfc5481.txt>`__. The most relevant
112   measurement of PDV considers the delay variation of a single user flow,
113   as this will be relevant to the size of end-system buffers to compensate
114   for delay variation. The measurement system's ability to store the
115   delays of individual packets in the flow of interest is a key factor
116   that determines the specific measurement method. At the outset, it is
117   ideal to view the complete PDV distribution. Systems that can capture
118   and store packets and their delays have the freedom to calculate the
119   reference minimum delay and to determine various quantiles of the PDV
120   distribution accurately (in post-measurement processing routines).
121   Systems without storage must apply algorithms to calculate delay and
122   statistical measurements on the fly. For example, a system may store
123   temporary estimates of the mimimum delay and the set of (100) packets
124   with the longest delays during measurement (to calculate a high quantile,
125   and update these sets with new values periodically.
126   In some cases, a limited number of delay histogram bins will be
127   available, and the bin limits will need to be set using results from
128   repeated experiments. See section 8 of `RFC5481
129   <https://www.rfc-editor.org/rfc/rfc5481.txt>`__.
130 - **Packet loss** (within a configured waiting time at the receiver): All
131   packets sent to the DUT should be accounted for.
132 - **Burst behaviour**: measures the ability of the DUT to buffer packets.
133 - **Packet re-ordering**: measures the ability of the device under test to
134   maintain sending order throughout transfer to the destination.
135 - **Packet correctness**: packets or Frames must be well-formed, in that
136   they include all required fields, conform to length requirements, pass
137   integrity checks, etc.
138 - **Availability and capacity** of the DUT i.e. when the DUT is fully “up”
139   and connected:
140
141   - Includes power consumption of the CPU (in various power states) and
142     system.
143   - Includes CPU utilization.
144   - Includes the number of NIC interfaces supported.
145   - Includes headroom of VM workload processing cores (i.e. available
146     for applications).
147
148 .. 3.2.2
149
150 .. _Approach:
151
152 Approach
153 ==============
154
155 In order to determine the packet transfer characteristics of a virtual
156 switch, the tests will be broken down into the following categories:
157
158 .. 3.2.2.1
159
160 Test Categories
161 ----------------------
162 - **Throughput Tests** to measure the maximum forwarding rate (in
163   frames per second or fps) and bit rate (in Mbps) for a constant load
164   (as defined by `RFC1242 <https://www.rfc-editor.org/rfc/rfc1242.txt>`__)
165   without traffic loss.
166 - **Packet and Frame Delay Tests** to measure average, min and max
167   packet and frame delay for constant loads.
168 - **Stream Performance Tests** (TCP, UDP) to measure bulk data transfer
169   performance, i.e. how fast systems can send and receive data through
170   the virtual switch.
171 - **Request/Response Performance** Tests (TCP, UDP) the measure the
172   transaction rate through the virtual switch.
173 - **Packet Delay Tests** to understand latency distribution for
174   different packet sizes and over an extended test run to uncover
175   outliers.
176 - **Scalability Tests** to understand how the virtual switch performs
177   as the number of flows, active ports, complexity of the forwarding
178   logic's configuration... it has to deal with increases.
179 - **Control Path and Datapath Coupling** Tests, to understand how
180   closely coupled the datapath and the control path are as well as the
181   effect of this coupling on the performance of the DUT.
182 - **CPU and Memory Consumption Tests** to understand the virtual
183   switch’s footprint on the system, this includes:
184
185   * CPU utilization
186   * Cache utilization
187   * Memory footprint
188   * Time To Establish Flows Tests.
189
190 - **Noisy Neighbour Tests**, to understand the effects of resource
191   sharing on the performance of a virtual switch.
192
193 **Note:** some of the tests above can be conducted simultaneously where
194 the combined results would be insightful, for example Packet/Frame Delay
195 and Scalability.
196
197 .. 3.2.2.2
198
199 Deployment Scenarios
200 --------------------------
201 The following represents possible deployments which can help to
202 determine the performance of both the virtual switch and the datapath
203 into the VNF:
204
205 .. 3.2.2.2.1
206
207 Physical port → vSwitch → physical port
208 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
209 .. code-block:: console
210
211                                                             _
212        +--------------------------------------------------+  |
213        |              +--------------------+              |  |
214        |              |                    |              |  |
215        |              |                    v              |  |  Host
216        |   +--------------+            +--------------+   |  |
217        |   |   phy port   |  vSwitch   |   phy port   |   |  |
218        +---+--------------+------------+--------------+---+ _|
219                   ^                           :
220                   |                           |
221                   :                           v
222        +--------------------------------------------------+
223        |                                                  |
224        |                traffic generator                 |
225        |                                                  |
226        +--------------------------------------------------+
227
228 .. 3.2.2.2.2
229
230 Physical port → vSwitch → VNF → vSwitch → physical port
231 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
232 .. code-block:: console
233
234                                                              _
235        +---------------------------------------------------+  |
236        |                                                   |  |
237        |   +-------------------------------------------+   |  |
238        |   |                 Application               |   |  |
239        |   +-------------------------------------------+   |  |
240        |       ^                                  :        |  |
241        |       |                                  |        |  |  Guest
242        |       :                                  v        |  |
243        |   +---------------+           +---------------+   |  |
244        |   | logical port 0|           | logical port 1|   |  |
245        +---+---------------+-----------+---------------+---+ _|
246                ^                                  :
247                |                                  |
248                :                                  v         _
249        +---+---------------+----------+---------------+---+  |
250        |   | logical port 0|          | logical port 1|   |  |
251        |   +---------------+          +---------------+   |  |
252        |       ^                                  :       |  |
253        |       |                                  |       |  |  Host
254        |       :                                  v       |  |
255        |   +--------------+            +--------------+   |  |
256        |   |   phy port   |  vSwitch   |   phy port   |   |  |
257        +---+--------------+------------+--------------+---+ _|
258                   ^                           :
259                   |                           |
260                   :                           v
261        +--------------------------------------------------+
262        |                                                  |
263        |                traffic generator                 |
264        |                                                  |
265        +--------------------------------------------------+
266
267 .. 3.2.2.2.3
268
269 Physical port → vSwitch → VNF → vSwitch → VNF → vSwitch → physical port
270 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
271
272 .. code-block:: console
273
274                                                        _
275     +----------------------+  +----------------------+  |
276     |   Guest 1            |  |   Guest 2            |  |
277     |   +---------------+  |  |   +---------------+  |  |
278     |   |  Application  |  |  |   |  Application  |  |  |
279     |   +---------------+  |  |   +---------------+  |  |
280     |       ^       |      |  |       ^       |      |  |
281     |       |       v      |  |       |       v      |  |  Guests
282     |   +---------------+  |  |   +---------------+  |  |
283     |   | logical ports |  |  |   | logical ports |  |  |
284     |   |   0       1   |  |  |   |   0       1   |  |  |
285     +---+---------------+--+  +---+---------------+--+ _|
286             ^       :                 ^       :
287             |       |                 |       |
288             :       v                 :       v        _
289     +---+---------------+---------+---------------+--+  |
290     |   |   0       1   |         |   3       4   |  |  |
291     |   | logical ports |         | logical ports |  |  |
292     |   +---------------+         +---------------+  |  |
293     |       ^       |                 ^       |      |  |  Host
294     |       |       L-----------------+       v      |  |
295     |   +--------------+          +--------------+   |  |
296     |   |   phy ports  | vSwitch  |   phy ports  |   |  |
297     +---+--------------+----------+--------------+---+ _|
298             ^       ^                 :       :
299             |       |                 |       |
300             :       :                 v       v
301     +--------------------------------------------------+
302     |                                                  |
303     |                traffic generator                 |
304     |                                                  |
305     +--------------------------------------------------+
306
307 .. 3.2.2.2.4
308
309 Physical port → VNF → vSwitch → VNF → physical port
310 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
311
312 .. code-block:: console
313
314                                                         _
315     +----------------------+  +----------------------+   |
316     |   Guest 1            |  |   Guest 2            |   |
317     |+-------------------+ |  | +-------------------+|   |
318     ||     Application   | |  | |     Application   ||   |
319     |+-------------------+ |  | +-------------------+|   |
320     |       ^       |      |  |       ^       |      |   |  Guests
321     |       |       v      |  |       |       v      |   |
322     |+-------------------+ |  | +-------------------+|   |
323     ||   logical ports   | |  | |   logical ports   ||   |
324     ||  0              1 | |  | | 0              1  ||   |
325     ++--------------------++  ++--------------------++  _|
326         ^              :          ^              :
327     (PCI passthrough)  |          |     (PCI passthrough)
328         |              v          :              |      _
329     +--------++------------+-+------------++---------+   |
330     |   |    ||        0   | |    1       ||     |   |   |
331     |   |    ||logical port| |logical port||     |   |   |
332     |   |    |+------------+ +------------+|     |   |   |
333     |   |    |     |                 ^     |     |   |   |
334     |   |    |     L-----------------+     |     |   |   |
335     |   |    |                             |     |   |   |  Host
336     |   |    |           vSwitch           |     |   |   |
337     |   |    +-----------------------------+     |   |   |
338     |   |                                        |   |   |
339     |   |                                        v   |   |
340     | +--------------+              +--------------+ |   |
341     | | phy port/VF  |              | phy port/VF  | |   |
342     +-+--------------+--------------+--------------+-+  _|
343         ^                                        :
344         |                                        |
345         :                                        v
346     +--------------------------------------------------+
347     |                                                  |
348     |                traffic generator                 |
349     |                                                  |
350     +--------------------------------------------------+
351
352 .. 3.2.2.2.5
353
354 Physical port → vSwitch → VNF
355 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
356
357 .. code-block:: console
358
359                                                           _
360     +---------------------------------------------------+  |
361     |                                                   |  |
362     |   +-------------------------------------------+   |  |
363     |   |                 Application               |   |  |
364     |   +-------------------------------------------+   |  |
365     |       ^                                           |  |
366     |       |                                           |  |  Guest
367     |       :                                           |  |
368     |   +---------------+                               |  |
369     |   | logical port 0|                               |  |
370     +---+---------------+-------------------------------+ _|
371             ^
372             |
373             :                                            _
374     +---+---------------+------------------------------+  |
375     |   | logical port 0|                              |  |
376     |   +---------------+                              |  |
377     |       ^                                          |  |
378     |       |                                          |  |  Host
379     |       :                                          |  |
380     |   +--------------+                               |  |
381     |   |   phy port   |  vSwitch                      |  |
382     +---+--------------+------------ -------------- ---+ _|
383                ^
384                |
385                :
386     +--------------------------------------------------+
387     |                                                  |
388     |                traffic generator                 |
389     |                                                  |
390     +--------------------------------------------------+
391
392 .. 3.2.2.2.6
393
394 VNF → vSwitch → physical port
395 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
396
397 .. code-block:: console
398
399                                                           _
400     +---------------------------------------------------+  |
401     |                                                   |  |
402     |   +-------------------------------------------+   |  |
403     |   |                 Application               |   |  |
404     |   +-------------------------------------------+   |  |
405     |                                          :        |  |
406     |                                          |        |  |  Guest
407     |                                          v        |  |
408     |                               +---------------+   |  |
409     |                               | logical port  |   |  |
410     +-------------------------------+---------------+---+ _|
411                                                :
412                                                |
413                                                v         _
414     +------------------------------+---------------+---+  |
415     |                              | logical port  |   |  |
416     |                              +---------------+   |  |
417     |                                          :       |  |
418     |                                          |       |  |  Host
419     |                                          v       |  |
420     |                               +--------------+   |  |
421     |                     vSwitch   |   phy port   |   |  |
422     +-------------------------------+--------------+---+ _|
423                                            :
424                                            |
425                                            v
426     +--------------------------------------------------+
427     |                                                  |
428     |                traffic generator                 |
429     |                                                  |
430     +--------------------------------------------------+
431
432 .. 3.2.2.2.7
433
434 VNF → vSwitch → VNF → vSwitch
435 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
436
437 .. code-block:: console
438
439                                                              _
440     +-------------------------+  +-------------------------+  |
441     |   Guest 1               |  |   Guest 2               |  |
442     |   +-----------------+   |  |   +-----------------+   |  |
443     |   |   Application   |   |  |   |   Application   |   |  |
444     |   +-----------------+   |  |   +-----------------+   |  |
445     |                :        |  |       ^                 |  |
446     |                |        |  |       |                 |  |  Guest
447     |                v        |  |       :                 |  |
448     |     +---------------+   |  |   +---------------+     |  |
449     |     | logical port 0|   |  |   | logical port 0|     |  |
450     +-----+---------------+---+  +---+---------------+-----+ _|
451                     :                    ^
452                     |                    |
453                     v                    :                    _
454     +----+---------------+------------+---------------+-----+  |
455     |    |     port 0    |            |     port 1    |     |  |
456     |    +---------------+            +---------------+     |  |
457     |              :                    ^                   |  |
458     |              |                    |                   |  |  Host
459     |              +--------------------+                   |  |
460     |                                                       |  |
461     |                     vswitch                           |  |
462     +-------------------------------------------------------+ _|
463
464 .. 3.2.2.2.8
465
466 HOST 1(Physical port → virtual switch → VNF → virtual switch → Physical port)
467 → HOST 2(Physical port → virtual switch → VNF → virtual switch → Physical port)
468
469 HOST 1 (PVP) → HOST 2 (PVP)
470 ~~~~~~~~~~~~~~~~~~~~~~~~~~~
471
472 .. code-block:: console
473
474                                                        _
475     +----------------------+  +----------------------+  |
476     |   Guest 1            |  |   Guest 2            |  |
477     |   +---------------+  |  |   +---------------+  |  |
478     |   |  Application  |  |  |   |  Application  |  |  |
479     |   +---------------+  |  |   +---------------+  |  |
480     |       ^       |      |  |       ^       |      |  |
481     |       |       v      |  |       |       v      |  |  Guests
482     |   +---------------+  |  |   +---------------+  |  |
483     |   | logical ports |  |  |   | logical ports |  |  |
484     |   |   0       1   |  |  |   |   0       1   |  |  |
485     +---+---------------+--+  +---+---------------+--+ _|
486             ^       :                 ^       :
487             |       |                 |       |
488             :       v                 :       v        _
489     +---+---------------+--+  +---+---------------+--+  |
490     |   |   0       1   |  |  |   |   3       4   |  |  |
491     |   | logical ports |  |  |   | logical ports |  |  |
492     |   +---------------+  |  |   +---------------+  |  |
493     |       ^       |      |  |       ^       |      |  |  Hosts
494     |       |       v      |  |       |       v      |  |
495     |   +--------------+   |  |   +--------------+   |  |
496     |   |   phy ports  |   |  |   |   phy ports  |   |  |
497     +---+--------------+---+  +---+--------------+---+ _|
498             ^       :                 :       :
499             |       +-----------------+       |
500             :                                 v
501     +--------------------------------------------------+
502     |                                                  |
503     |                traffic generator                 |
504     |                                                  |
505     +--------------------------------------------------+
506
507
508
509 **Note:** For tests where the traffic generator and/or measurement
510 receiver are implemented on VM and connected to the virtual switch
511 through vNIC, the issues of shared resources and interactions between
512 the measurement devices and the device under test must be considered.
513
514 **Note:** Some RFC 2889 tests require a full-mesh sending and receiving
515 pattern involving more than two ports. This possibility is illustrated in the
516 Physical port → vSwitch → VNF → vSwitch → VNF → vSwitch → physical port
517 diagram above (with 2 sending and 2 receiving ports, though all ports
518 could be used bi-directionally).
519
520 **Note:** When Deployment Scenarios are used in RFC 2889 address learning
521 or cache capacity testing, an additional port from the vSwitch must be
522 connected to the test device. This port is used to listen for flooded
523 frames.
524
525 .. 3.2.2.3
526
527 General Methodology:
528 --------------------------
529 To establish the baseline performance of the virtual switch, tests would
530 initially be run with a simple workload in the VNF (the recommended
531 simple workload VNF would be `DPDK <http://www.dpdk.org/>`__'s testpmd
532 application forwarding packets in a VM or vloop\_vnf a simple kernel
533 module that forwards traffic between two network interfaces inside the
534 virtualized environment while bypassing the networking stack).
535 Subsequently, the tests would also be executed with a real Telco
536 workload running in the VNF, which would exercise the virtual switch in
537 the context of higher level Telco NFV use cases, and prove that its
538 underlying characteristics and behaviour can be measured and validated.
539 Suitable real Telco workload VNFs are yet to be identified.
540
541 .. 3.2.2.3.1
542
543 Default Test Parameters
544 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
545
546 The following list identifies the default parameters for suite of
547 tests:
548
549 -  Reference application: Simple forwarding or Open Source VNF.
550 -  Frame size (bytes): 64, 128, 256, 512, 1024, 1280, 1518, 2K, 4k OR
551    Packet size based on use-case (e.g. RTP 64B, 256B) OR Mix of packet sizes as
552    maintained by the Functest project <https://wiki.opnfv.org/traffic_profile_management>.
553 -  Reordering check: Tests should confirm that packets within a flow are
554    not reordered.
555 -  Duplex: Unidirectional / Bidirectional. Default: Full duplex with
556    traffic transmitting in both directions, as network traffic generally
557    does not flow in a single direction. By default the data rate of
558    transmitted traffic should be the same in both directions, please
559    note that asymmetric traffic (e.g. downlink-heavy) tests will be
560    mentioned explicitly for the relevant test cases.
561 -  Number of Flows: Default for non scalability tests is a single flow.
562    For scalability tests the goal is to test with maximum supported
563    flows but where possible will test up to 10 Million flows. Start with
564    a single flow and scale up. By default flows should be added
565    sequentially, tests that add flows simultaneously will explicitly
566    call out their flow addition behaviour. Packets are generated across
567    the flows uniformly with no burstiness. For multi-core tests should
568    consider the number of packet flows based on vSwitch/VNF multi-thread
569    implementation and behavior.
570
571 -  Traffic Types: UDP, SCTP, RTP, GTP and UDP traffic.
572 -  Deployment scenarios are:
573 -  Physical → virtual switch → physical.
574 -  Physical → virtual switch → VNF → virtual switch → physical.
575 -  Physical → virtual switch → VNF → virtual switch → VNF → virtual
576    switch → physical.
577 -  Physical → VNF → virtual switch → VNF → physical.
578 -  Physical → virtual switch → VNF.
579 -  VNF → virtual switch → Physical.
580 -  VNF → virtual switch → VNF.
581
582 Tests MUST have these parameters unless otherwise stated. **Test cases
583 with non default parameters will be stated explicitly**.
584
585 **Note**: For throughput tests unless stated otherwise, test
586 configurations should ensure that traffic traverses the installed flows
587 through the virtual switch, i.e. flows are installed and have an appropriate
588 time out that doesn't expire before packet transmission starts.
589
590 .. 3.2.2.3.2
591
592 Flow Classification
593 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
594
595 Virtual switches classify packets into flows by processing and matching
596 particular header fields in the packet/frame and/or the input port where
597 the packets/frames arrived. The vSwitch then carries out an action on
598 the group of packets that match the classification parameters. Thus a
599 flow is considered to be a sequence of packets that have a shared set of
600 header field values or have arrived on the same port and have the same
601 action applied to them. Performance results can vary based on the
602 parameters the vSwitch uses to match for a flow. The recommended flow
603 classification parameters for L3 vSwitch performance tests are: the
604 input port, the source IP address, the destination IP address and the
605 Ethernet protocol type field. It is essential to increase the flow
606 time-out time on a vSwitch before conducting any performance tests that
607 do not measure the flow set-up time. Normally the first packet of a
608 particular flow will install the flow in the vSwitch which adds an
609 additional latency, subsequent packets of the same flow are not subject
610 to this latency if the flow is already installed on the vSwitch.
611
612 .. 3.2.2.3.3
613
614 Test Priority
615 ~~~~~~~~~~~~~~~~~~~~~
616
617 Tests will be assigned a priority in order to determine which tests
618 should be implemented immediately and which tests implementations
619 can be deferred.
620
621 Priority can be of following types: - Urgent: Must be implemented
622 immediately. - High: Must be implemented in the next release. - Medium:
623 May be implemented after the release. - Low: May or may not be
624 implemented at all.
625
626 .. 3.2.2.3.4
627
628 SUT Setup
629 ~~~~~~~~~~~~~~~~~~
630
631 The SUT should be configured to its "default" state. The
632 SUT's configuration or set-up must not change between tests in any way
633 other than what is required to do the test. All supported protocols must
634 be configured and enabled for each test set up.
635
636 .. 3.2.2.3.5
637
638 Port Configuration
639 ~~~~~~~~~~~~~~~~~~~~~~~~~~
640
641 The DUT should be configured with n ports where
642 n is a multiple of 2. Half of the ports on the DUT should be used as
643 ingress ports and the other half of the ports on the DUT should be used
644 as egress ports. Where a DUT has more than 2 ports, the ingress data
645 streams should be set-up so that they transmit packets to the egress
646 ports in sequence so that there is an even distribution of traffic
647 across ports. For example, if a DUT has 4 ports 0(ingress), 1(ingress),
648 2(egress) and 3(egress), the traffic stream directed at port 0 should
649 output a packet to port 2 followed by a packet to port 3. The traffic
650 stream directed at port 1 should also output a packet to port 2 followed
651 by a packet to port 3.
652
653 .. 3.2.2.3.6
654
655 Frame Formats
656 ~~~~~~~~~~~~~~~~~~~~~
657
658 **Frame formats Layer 2 (data link layer) protocols**
659
660 -  Ethernet II
661
662 .. code-block:: console
663
664      +---------------------------+-----------+
665      | Ethernet Header | Payload | Check Sum |
666      +-----------------+---------+-----------+
667      |_________________|_________|___________|
668            14 Bytes     46 - 1500   4 Bytes
669                           Bytes
670
671
672 **Layer 3 (network layer) protocols**
673
674 -  IPv4
675
676 .. code-block:: console
677
678      +-----------------+-----------+---------+-----------+
679      | Ethernet Header | IP Header | Payload | Checksum  |
680      +-----------------+-----------+---------+-----------+
681      |_________________|___________|_________|___________|
682            14 Bytes       20 bytes  26 - 1480   4 Bytes
683                                       Bytes
684
685 -  IPv6
686
687 .. code-block:: console
688
689      +-----------------+-----------+---------+-----------+
690      | Ethernet Header | IP Header | Payload | Checksum  |
691      +-----------------+-----------+---------+-----------+
692      |_________________|___________|_________|___________|
693            14 Bytes       40 bytes  26 - 1460   4 Bytes
694                                       Bytes
695
696 **Layer 4 (transport layer) protocols**
697
698   - TCP
699   - UDP
700   - SCTP
701
702 .. code-block:: console
703
704      +-----------------+-----------+-----------------+---------+-----------+
705      | Ethernet Header | IP Header | Layer 4 Header  | Payload | Checksum  |
706      +-----------------+-----------+-----------------+---------+-----------+
707      |_________________|___________|_________________|_________|___________|
708            14 Bytes      40 bytes      20 Bytes       6 - 1460   4 Bytes
709                                                        Bytes
710
711
712 **Layer 5 (application layer) protocols**
713
714   - RTP
715   - GTP
716
717 .. code-block:: console
718
719      +-----------------+-----------+-----------------+---------+-----------+
720      | Ethernet Header | IP Header | Layer 4 Header  | Payload | Checksum  |
721      +-----------------+-----------+-----------------+---------+-----------+
722      |_________________|___________|_________________|_________|___________|
723            14 Bytes      20 bytes     20 Bytes        >= 6 Bytes   4 Bytes
724
725 .. 3.2.2.3.7
726
727 Packet Throughput
728 ~~~~~~~~~~~~~~~~~~~~~~~~~
729 There is a difference between an Ethernet frame,
730 an IP packet, and a UDP datagram. In the seven-layer OSI model of
731 computer networking, packet refers to a data unit at layer 3 (network
732 layer). The correct term for a data unit at layer 2 (data link layer) is
733 a frame, and at layer 4 (transport layer) is a segment or datagram.
734
735 Important concepts related to 10GbE performance are frame rate and
736 throughput. The MAC bit rate of 10GbE, defined in the IEEE standard 802
737 .3ae, is 10 billion bits per second. Frame rate is based on the bit rate
738 and frame format definitions. Throughput, defined in IETF RFC 1242, is
739 the highest rate at which the system under test can forward the offered
740 load, without loss.
741
742 The frame rate for 10GbE is determined by a formula that divides the 10
743 billion bits per second by the preamble + frame length + inter-frame
744 gap.
745
746 The maximum frame rate is calculated using the minimum values of the
747 following parameters, as described in the IEEE 802 .3ae standard:
748
749 -  Preamble: 8 bytes \* 8 = 64 bits
750 -  Frame Length: 64 bytes (minimum) \* 8 = 512 bits
751 -  Inter-frame Gap: 12 bytes (minimum) \* 8 = 96 bits
752
753 Therefore, Maximum Frame Rate (64B Frames)
754 = MAC Transmit Bit Rate / (Preamble + Frame Length + Inter-frame Gap)
755 = 10,000,000,000 / (64 + 512 + 96)
756 = 10,000,000,000 / 672
757 = 14,880,952.38 frame per second (fps)
758
759 .. 3.2.2.3.8
760
761 System isolation and validation
762 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
763
764 A key consideration when conducting any sort of benchmark is trying to
765 ensure the consistency and repeatability of test results between runs.
766 When benchmarking the performance of a virtual switch there are many
767 factors that can affect the consistency of results. This section
768 describes these factors and the measures that can be taken to limit
769 their effects. In addition, this section will outline some system tests
770 to validate the platform and the VNF before conducting any vSwitch
771 benchmarking tests.
772
773 **System Isolation:**
774
775 When conducting a benchmarking test on any SUT, it is essential to limit
776 (and if reasonable, eliminate) any noise that may interfere with the
777 accuracy of the metrics collected by the test. This noise may be
778 introduced by other hardware or software (OS, other applications), and
779 can result in significantly varying performance metrics being collected
780 between consecutive runs of the same test. In the case of characterizing
781 the performance of a virtual switch, there are a number of configuration
782 parameters that can help increase the repeatability and stability of
783 test results, including:
784
785 -  OS/GRUB configuration:
786
787    -  maxcpus = n where n >= 0; limits the kernel to using 'n'
788       processors. Only use exactly what you need.
789    -  isolcpus: Isolate CPUs from the general scheduler. Isolate all
790       CPUs bar one which will be used by the OS.
791    -  use taskset to affinitize the forwarding application and the VNFs
792       onto isolated cores. VNFs and the vSwitch should be allocated
793       their own cores, i.e. must not share the same cores. vCPUs for the
794       VNF should be affinitized to individual cores also.
795    -  Limit the amount of background applications that are running and
796       set OS to boot to runlevel 3. Make sure to kill any unnecessary
797       system processes/daemons.
798    -  Only enable hardware that you need to use for your test – to
799       ensure there are no other interrupts on the system.
800    -  Configure NIC interrupts to only use the cores that are not
801       allocated to any other process (VNF/vSwitch).
802
803 -  NUMA configuration: Any unused sockets in a multi-socket system
804    should be disabled.
805 -  CPU pinning: The vSwitch and the VNF should each be affinitized to
806    separate logical cores using a combination of maxcpus, isolcpus and
807    taskset.
808 -  BIOS configuration: BIOS should be configured for performance where
809    an explicit option exists, sleep states should be disabled, any
810    virtualization optimization technologies should be enabled, and
811    hyperthreading should also be enabled.
812
813 **System Validation:**
814
815 System validation is broken down into two sub-categories: Platform
816 validation and VNF validation. The validation test itself involves
817 verifying the forwarding capability and stability for the sub-system
818 under test. The rationale behind system validation is two fold. Firstly
819 to give a tester confidence in the stability of the platform or VNF that
820 is being tested; and secondly to provide base performance comparison
821 points to understand the overhead introduced by the virtual switch.
822
823 * Benchmark platform forwarding capability: This is an OPTIONAL test
824   used to verify the platform and measure the base performance (maximum
825   forwarding rate in fps and latency) that can be achieved by the
826   platform without a vSwitch or a VNF. The following diagram outlines
827   the set-up for benchmarking Platform forwarding capability:
828
829   .. code-block:: console
830
831                                                             __
832        +--------------------------------------------------+   |
833        |   +------------------------------------------+   |   |
834        |   |                                          |   |   |
835        |   |          l2fw or DPDK L2FWD app          |   |  Host
836        |   |                                          |   |   |
837        |   +------------------------------------------+   |   |
838        |   |                 NIC                      |   |   |
839        +---+------------------------------------------+---+ __|
840                   ^                           :
841                   |                           |
842                   :                           v
843        +--------------------------------------------------+
844        |                                                  |
845        |                traffic generator                 |
846        |                                                  |
847        +--------------------------------------------------+
848
849 * Benchmark VNF forwarding capability: This test is used to verify
850   the VNF and measure the base performance (maximum forwarding rate in
851   fps and latency) that can be achieved by the VNF without a vSwitch.
852   The performance metrics collected by this test will serve as a key
853   comparison point for NIC passthrough technologies and vSwitches. VNF
854   in this context refers to the hypervisor and the VM. The following
855   diagram outlines the set-up for benchmarking VNF forwarding
856   capability:
857
858   .. code-block:: console
859
860                                                             __
861        +--------------------------------------------------+   |
862        |   +------------------------------------------+   |   |
863        |   |                                          |   |   |
864        |   |                 VNF                      |   |   |
865        |   |                                          |   |   |
866        |   +------------------------------------------+   |   |
867        |   |          Passthrough/SR-IOV              |   |  Host
868        |   +------------------------------------------+   |   |
869        |   |                 NIC                      |   |   |
870        +---+------------------------------------------+---+ __|
871                   ^                           :
872                   |                           |
873                   :                           v
874        +--------------------------------------------------+
875        |                                                  |
876        |                traffic generator                 |
877        |                                                  |
878        +--------------------------------------------------+
879
880
881 **Methodology to benchmark Platform/VNF forwarding capability**
882
883
884 The recommended methodology for the platform/VNF validation and
885 benchmark is: - Run `RFC2889 <https://www.rfc-editor.org/rfc/rfc2289.txt>`__
886 Maximum Forwarding Rate test, this test will produce maximum
887 forwarding rate and latency results that will serve as the
888 expected values. These expected values can be used in
889 subsequent steps or compared with in subsequent validation tests. -
890 Transmit bidirectional traffic at line rate/max forwarding rate
891 (whichever is higher) for at least 72 hours, measure throughput (fps)
892 and latency. - Note: Traffic should be bidirectional. - Establish a
893 baseline forwarding rate for what the platform can achieve. - Additional
894 validation: After the test has completed for 72 hours run bidirectional
895 traffic at the maximum forwarding rate once more to see if the system is
896 still functional and measure throughput (fps) and latency. Compare the
897 measure the new obtained values with the expected values.
898
899 **NOTE 1**: How the Platform is configured for its forwarding capability
900 test (BIOS settings, GRUB configuration, runlevel...) is how the
901 platform should be configured for every test after this
902
903 **NOTE 2**: How the VNF is configured for its forwarding capability test
904 (# of vCPUs, vNICs, Memory, affinitization…) is how it should be
905 configured for every test that uses a VNF after this.
906
907 .. 3.2.2.4
908
909 RFCs for testing virtual switch performance
910 --------------------------------------------------
911
912 The starting point for defining the suite of tests for benchmarking the
913 performance of a virtual switch is to take existing RFCs and standards
914 that were designed to test their physical counterparts and adapting them
915 for testing virtual switches. The rationale behind this is to establish
916 a fair comparison between the performance of virtual and physical
917 switches. This section outlines the RFCs that are used by this
918 specification.
919
920 .. 3.2.2.4.1
921
922 RFC 1242 Benchmarking Terminology for Network Interconnection
923 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
924 Devices RFC 1242 defines the terminology that is used in describing
925 performance benchmarking tests and their results. Definitions and
926 discussions covered include: Back-to-back, bridge, bridge/router,
927 constant load, data link frame size, frame loss rate, inter frame gap,
928 latency, and many more.
929
930 .. 3.2.2.4.2
931
932 RFC 2544 Benchmarking Methodology for Network Interconnect Devices
933 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
934 RFC 2544 outlines a benchmarking methodology for network Interconnect
935 Devices. The methodology results in performance metrics such as latency,
936 frame loss percentage, and maximum data throughput.
937
938 In this document network “throughput” (measured in millions of frames
939 per second) is based on RFC 2544, unless otherwise noted. Frame size
940 refers to Ethernet frames ranging from smallest frames of 64 bytes to
941 largest frames of 4K bytes.
942
943 Types of tests are:
944
945 1. Throughput test defines the maximum number of frames per second
946    that can be transmitted without any error.
947
948 2. Latency test measures the time required for a frame to travel from
949    the originating device through the network to the destination device.
950    Please note that RFC2544 Latency measurement will be superseded with
951    a measurement of average latency over all successfully transferred
952    packets or frames.
953
954 3. Frame loss test measures the network’s
955    response in overload conditions - a critical indicator of the
956    network’s ability to support real-time applications in which a
957    large amount of frame loss will rapidly degrade service quality.
958
959 4. Burst test assesses the buffering capability of a virtual switch. It
960    measures the maximum number of frames received at full line rate
961    before a frame is lost. In carrier Ethernet networks, this
962    measurement validates the excess information rate (EIR) as defined in
963    many SLAs.
964
965 5. System recovery to characterize speed of recovery from an overload
966    condition.
967
968 6. Reset to characterize speed of recovery from device or software
969    reset. This type of test has been updated by `RFC6201
970    <https://www.rfc-editor.org/rfc/rfc6201.txt>`__ as such,
971    the methodology defined by this specification will be that of RFC 6201.
972
973 Although not included in the defined RFC 2544 standard, another crucial
974 measurement in Ethernet networking is packet delay variation. The
975 definition set out by this specification comes from
976 `RFC5481 <https://www.rfc-editor.org/rfc/rfc5481.txt>`__.
977
978 .. 3.2.2.4.3
979
980 RFC 2285 Benchmarking Terminology for LAN Switching Devices
981 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
982 RFC 2285 defines the terminology that is used to describe the
983 terminology for benchmarking a LAN switching device. It extends RFC
984 1242 and defines: DUTs, SUTs, Traffic orientation and distribution,
985 bursts, loads, forwarding rates, etc.
986
987 .. 3.2.2.4.4
988
989 RFC 2889 Benchmarking Methodology for LAN Switching
990 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
991 RFC 2889 outlines a benchmarking methodology for LAN switching, it
992 extends RFC 2544. The outlined methodology gathers performance
993 metrics for forwarding, congestion control, latency, address handling
994 and finally filtering.
995
996 .. 3.2.2.4.5
997
998 RFC 3918 Methodology for IP Multicast Benchmarking
999 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1000 RFC 3918 outlines a methodology for IP Multicast benchmarking.
1001
1002 .. 3.2.2.4.6
1003
1004 RFC 4737 Packet Reordering Metrics
1005 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1006 RFC 4737 describes metrics for identifying and counting re-ordered
1007 packets within a stream, and metrics to measure the extent each
1008 packet has been re-ordered.
1009
1010 .. 3.2.2.4.7
1011
1012 RFC 5481 Packet Delay Variation Applicability Statement
1013 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1014 RFC 5481 defined two common, but different forms of delay variation
1015 metrics, and compares the metrics over a range of networking
1016 circumstances and tasks. The most suitable form for vSwitch
1017 benchmarking is the "PDV" form.
1018
1019 .. 3.2.2.4.8
1020
1021 RFC 6201 Device Reset Characterization
1022 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1023 RFC 6201 extends the methodology for characterizing the speed of
1024 recovery of the DUT from device or software reset described in RFC
1025 2544.
1026
1027 .. 3.2.2.5
1028
1029 Details of the Test Report
1030 ---------------------------------
1031
1032 There are a number of parameters related to the system, DUT and tests
1033 that can affect the repeatability of a test results and should be
1034 recorded. In order to minimise the variation in the results of a test,
1035 it is recommended that the test report includes the following information:
1036
1037 -  Hardware details including:
1038
1039    -  Platform details.
1040    -  Processor details.
1041    -  Memory information (see below)
1042    -  Number of enabled cores.
1043    -  Number of cores used for the test.
1044    -  Number of physical NICs, as well as their details (manufacturer,
1045       versions, type and the PCI slot they are plugged into).
1046    -  NIC interrupt configuration.
1047    -  BIOS version, release date and any configurations that were
1048       modified.
1049
1050 -  Software details including:
1051
1052    -  OS version (for host and VNF)
1053    -  Kernel version (for host and VNF)
1054    -  GRUB boot parameters (for host and VNF).
1055    -  Hypervisor details (Type and version).
1056    -  Selected vSwitch, version number or commit id used.
1057    -  vSwitch launch command line if it has been parameterised.
1058    -  Memory allocation to the vSwitch – which NUMA node it is using,
1059       and how many memory channels.
1060    -  Where the vswitch is built from source: compiler details including
1061       versions and the flags that were used to compile the vSwitch.
1062    -  DPDK or any other SW dependency version number or commit id used.
1063    -  Memory allocation to a VM - if it's from Hugpages/elsewhere.
1064    -  VM storage type: snapshot/independent persistent/independent
1065       non-persistent.
1066    -  Number of VMs.
1067    -  Number of Virtual NICs (vNICs), versions, type and driver.
1068    -  Number of virtual CPUs and their core affinity on the host.
1069    -  Number vNIC interrupt configuration.
1070    -  Thread affinitization for the applications (including the vSwitch
1071       itself) on the host.
1072    -  Details of Resource isolation, such as CPUs designated for
1073       Host/Kernel (isolcpu) and CPUs designated for specific processes
1074       (taskset).
1075
1076 -  Memory Details
1077
1078    -  Total memory
1079    -  Type of memory
1080    -  Used memory
1081    -  Active memory
1082    -  Inactive memory
1083    -  Free memory
1084    -  Buffer memory
1085    -  Swap cache
1086    -  Total swap
1087    -  Used swap
1088    -  Free swap
1089
1090 -  Test duration.
1091 -  Number of flows.
1092 -  Traffic Information:
1093
1094    -  Traffic type - UDP, TCP, IMIX / Other.
1095    -  Packet Sizes.
1096
1097 -  Deployment Scenario.
1098
1099 **Note**: Tests that require additional parameters to be recorded will
1100 explicitly specify this.
1101
1102 .. _TestIdentification:
1103
1104 .. 3.2.3
1105
1106 Test identification
1107 =========================
1108
1109 .. 3.2.3.1
1110
1111 Throughput tests
1112 ----------------------
1113 The following tests aim to determine the maximum forwarding rate that
1114 can be achieved with a virtual switch. The list is not exhaustive but
1115 should indicate the type of tests that should be required. It is
1116 expected that more will be added.
1117
1118 .. 3.2.3.1.1
1119
1120 Test ID: LTD.Throughput.RFC2544.PacketLossRatio
1121 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1122     **Title**: RFC 2544 X% packet loss ratio Throughput and Latency Test
1123
1124     **Prerequisite Test**: N/A
1125
1126     **Priority**:
1127
1128     **Description**:
1129
1130     This test determines the DUT's maximum forwarding rate with X% traffic
1131     loss for a constant load (fixed length frames at a fixed interval time).
1132     The default loss percentages to be tested are: - X = 0% - X = 10^-7%
1133
1134     Note: Other values can be tested if required by the user.
1135
1136     The selected frame sizes are those previously defined under `Default
1137     Test Parameters <#DefaultParams>`__. The test can also be used to
1138     determine the average latency of the traffic.
1139
1140     Under the `RFC2544 <https://www.rfc-editor.org/rfc/rfc2544.txt>`__
1141     test methodology, the test duration will
1142     include a number of trials; each trial should run for a minimum period
1143     of 60 seconds. A binary search methodology must be applied for each
1144     trial to obtain the final result.
1145
1146     **Expected Result**: At the end of each trial, the presence or absence
1147     of loss determines the modification of offered load for the next trial,
1148     converging on a maximum rate, or
1149     `RFC2544 <https://www.rfc-editor.org/rfc/rfc2544.txt>`__ Throughput with X%
1150     loss.
1151     The Throughput load is re-used in related
1152     `RFC2544 <https://www.rfc-editor.org/rfc/rfc2544.txt>`__ tests and other
1153     tests.
1154
1155     **Metrics Collected**:
1156
1157     The following are the metrics collected for this test:
1158
1159     -  The maximum forwarding rate in Frames Per Second (FPS) and Mbps of
1160        the DUT for each frame size with X% packet loss.
1161     -  The average latency of the traffic flow when passing through the DUT
1162        (if testing for latency, note that this average is different from the
1163        test specified in Section 26.3 of
1164        `RFC2544 <https://www.rfc-editor.org/rfc/rfc2544.txt>`__).
1165     -  CPU and memory utilization may also be collected as part of this
1166        test, to determine the vSwitch's performance footprint on the system.
1167
1168 .. 3.2.3.1.2
1169
1170 Test ID: LTD.Throughput.RFC2544.PacketLossRatioFrameModification
1171 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1172     **Title**: RFC 2544 X% packet loss Throughput and Latency Test with
1173     packet modification
1174
1175     **Prerequisite Test**: N/A
1176
1177     **Priority**:
1178
1179     **Description**:
1180
1181     This test determines the DUT's maximum forwarding rate with X% traffic
1182     loss for a constant load (fixed length frames at a fixed interval time).
1183     The default loss percentages to be tested are: - X = 0% - X = 10^-7%
1184
1185     Note: Other values can be tested if required by the user.
1186
1187     The selected frame sizes are those previously defined under `Default
1188     Test Parameters <#DefaultParams>`__. The test can also be used to
1189     determine the average latency of the traffic.
1190
1191     Under the `RFC2544 <https://www.rfc-editor.org/rfc/rfc2544.txt>`__
1192     test methodology, the test duration will
1193     include a number of trials; each trial should run for a minimum period
1194     of 60 seconds. A binary search methodology must be applied for each
1195     trial to obtain the final result.
1196
1197     During this test, the DUT must perform the following operations on the
1198     traffic flow:
1199
1200     -  Perform packet parsing on the DUT's ingress port.
1201     -  Perform any relevant address look-ups on the DUT's ingress ports.
1202     -  Modify the packet header before forwarding the packet to the DUT's
1203        egress port. Packet modifications include:
1204
1205        -  Modifying the Ethernet source or destination MAC address.
1206        -  Modifying/adding a VLAN tag. (**Recommended**).
1207        -  Modifying/adding a MPLS tag.
1208        -  Modifying the source or destination ip address.
1209        -  Modifying the TOS/DSCP field.
1210        -  Modifying the source or destination ports for UDP/TCP/SCTP.
1211        -  Modifying the TTL.
1212
1213     **Expected Result**: The Packet parsing/modifications require some
1214     additional degree of processing resource, therefore the
1215     `RFC2544 <https://www.rfc-editor.org/rfc/rfc2544.txt>`__
1216     Throughput is expected to be somewhat lower than the Throughput level
1217     measured without additional steps. The reduction is expected to be
1218     greatest on tests with the smallest packet sizes (greatest header
1219     processing rates).
1220
1221     **Metrics Collected**:
1222
1223     The following are the metrics collected for this test:
1224
1225     -  The maximum forwarding rate in Frames Per Second (FPS) and Mbps of
1226        the DUT for each frame size with X% packet loss and packet
1227        modification operations being performed by the DUT.
1228     -  The average latency of the traffic flow when passing through the DUT
1229        (if testing for latency, note that this average is different from the
1230        test specified in Section 26.3 of
1231        `RFC2544 <https://www.rfc-editor.org/rfc/rfc2544.txt>`__).
1232     -  The `RFC5481 <https://www.rfc-editor.org/rfc/rfc5481.txt>`__
1233        PDV form of delay variation on the traffic flow,
1234        using the 99th percentile.
1235     -  CPU and memory utilization may also be collected as part of this
1236        test, to determine the vSwitch's performance footprint on the system.
1237
1238 .. 3.2.3.1.3
1239
1240 Test ID: LTD.Throughput.RFC2544.Profile
1241 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1242     **Title**: RFC 2544 Throughput and Latency Profile
1243
1244     **Prerequisite Test**: N/A
1245
1246     **Priority**:
1247
1248     **Description**:
1249
1250     This test reveals how throughput and latency degrades as the offered
1251     rate varies in the region of the DUT's maximum forwarding rate as
1252     determined by LTD.Throughput.RFC2544.PacketLossRatio (0% Packet Loss).
1253     For example it can be used to determine if the degradation of throughput
1254     and latency as the offered rate increases is slow and graceful or sudden
1255     and severe.
1256
1257     The selected frame sizes are those previously defined under `Default
1258     Test Parameters <#DefaultParams>`__.
1259
1260     The offered traffic rate is described as a percentage delta with respect
1261     to the DUT's RFC 2544 Throughput as determined by
1262     LTD.Throughput.RFC2544.PacketLoss Ratio (0% Packet Loss case). A delta
1263     of 0% is equivalent to an offered traffic rate equal to the RFC 2544
1264     Throughput; A delta of +50% indicates an offered rate half-way
1265     between the Throughput and line-rate, whereas a delta of
1266     -50% indicates an offered rate of half the maximum rate. Therefore the
1267     range of the delta figure is natuarlly bounded at -100% (zero offered
1268     traffic) and +100% (traffic offered at line rate).
1269
1270     The following deltas to the maximum forwarding rate should be applied:
1271
1272     -  -50%, -10%, 0%, +10% & +50%
1273
1274     **Expected Result**: For each packet size a profile should be produced
1275     of how throughput and latency vary with offered rate.
1276
1277     **Metrics Collected**:
1278
1279     The following are the metrics collected for this test:
1280
1281     -  The forwarding rate in Frames Per Second (FPS) and Mbps of the DUT
1282        for each delta to the maximum forwarding rate and for each frame
1283        size.
1284     -  The average latency for each delta to the maximum forwarding rate and
1285        for each frame size.
1286     -  CPU and memory utilization may also be collected as part of this
1287        test, to determine the vSwitch's performance footprint on the system.
1288     -  Any failures experienced (for example if the vSwitch crashes, stops
1289        processing packets, restarts or becomes unresponsive to commands)
1290        when the offered load is above Maximum Throughput MUST be recorded
1291        and reported with the results.
1292
1293 .. 3.2.3.1.4
1294
1295 Test ID: LTD.Throughput.RFC2544.SystemRecoveryTime
1296 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1297     **Title**: RFC 2544 System Recovery Time Test
1298
1299     **Prerequisite Test** LTD.Throughput.RFC2544.PacketLossRatio
1300
1301     **Priority**:
1302
1303     **Description**:
1304
1305     The aim of this test is to determine the length of time it takes the DUT
1306     to recover from an overload condition for a constant load (fixed length
1307     frames at a fixed interval time). The selected frame sizes are those
1308     previously defined under `Default Test Parameters <#DefaultParams>`__,
1309     traffic should be sent to the DUT under normal conditions. During the
1310     duration of the test and while the traffic flows are passing though the
1311     DUT, at least one situation leading to an overload condition for the DUT
1312     should occur. The time from the end of the overload condition to when
1313     the DUT returns to normal operations should be measured to determine
1314     recovery time. Prior to overloading the DUT, one should record the
1315     average latency for 10,000 packets forwarded through the DUT.
1316
1317     The overload condition SHOULD be to transmit traffic at a very high
1318     frame rate to the DUT (150% of the maximum 0% packet loss rate as
1319     determined by LTD.Throughput.RFC2544.PacketLossRatio or line-rate
1320     whichever is lower), for at least 60 seconds, then reduce the frame rate
1321     to 75% of the maximum 0% packet loss rate. A number of time-stamps
1322     should be recorded: - Record the time-stamp at which the frame rate was
1323     reduced and record a second time-stamp at the time of the last frame
1324     lost. The recovery time is the difference between the two timestamps. -
1325     Record the average latency for 10,000 frames after the last frame loss
1326     and continue to record average latency measurements for every 10,000
1327     frames, when latency returns to within 10% of pre-overload levels record
1328     the time-stamp.
1329
1330     **Expected Result**:
1331
1332     **Metrics collected**
1333
1334     The following are the metrics collected for this test:
1335
1336     -  The length of time it takes the DUT to recover from an overload
1337        condition.
1338     -  The length of time it takes the DUT to recover the average latency to
1339        pre-overload conditions.
1340
1341     **Deployment scenario**:
1342
1343     -  Physical → virtual switch → physical.
1344
1345 .. 3.2.3.1.5
1346
1347 Test ID: LTD.Throughput.RFC2544.BackToBackFrames
1348 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1349     **Title**: RFC2544 Back To Back Frames Test
1350
1351     **Prerequisite Test**: N
1352
1353     **Priority**:
1354
1355     **Description**:
1356
1357     The aim of this test is to characterize the ability of the DUT to
1358     process back-to-back frames. For each frame size previously defined
1359     under `Default Test Parameters <#DefaultParams>`__, a burst of traffic
1360     is sent to the DUT with the minimum inter-frame gap between each frame.
1361     If the number of received frames equals the number of frames that were
1362     transmitted, the burst size should be increased and traffic is sent to
1363     the DUT again. The value measured is the back-to-back value, that is the
1364     maximum burst size the DUT can handle without any frame loss. Please note
1365     a trial must run for a minimum of 2 seconds and should be repeated 50
1366     times (at a minimum).
1367
1368     **Expected Result**:
1369
1370     Tests of back-to-back frames with physical devices have produced
1371     unstable results in some cases. All tests should be repeated in multiple
1372     test sessions and results stability should be examined.
1373
1374     **Metrics collected**
1375
1376     The following are the metrics collected for this test:
1377
1378     -  The average back-to-back value across the trials, which is
1379        the number of frames in the longest burst that the DUT will
1380        handle without the loss of any frames.
1381     -  CPU and memory utilization may also be collected as part of this
1382        test, to determine the vSwitch's performance footprint on the system.
1383
1384     **Deployment scenario**:
1385
1386     -  Physical → virtual switch → physical.
1387
1388 .. 3.2.3.1.6
1389
1390 Test ID: LTD.Throughput.RFC2889.MaxForwardingRateSoak
1391 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1392     **Title**: RFC 2889 X% packet loss Max Forwarding Rate Soak Test
1393
1394     **Prerequisite Test** LTD.Throughput.RFC2544.PacketLossRatio
1395
1396     **Priority**:
1397
1398     **Description**:
1399
1400     The aim of this test is to understand the Max Forwarding Rate stability
1401     over an extended test duration in order to uncover any outliers. To allow
1402     for an extended test duration, the test should ideally run for 24 hours
1403     or, if this is not possible, for at least 6 hours. For this test, each frame
1404     size must be sent at the highest Throughput rate with X% packet loss, as
1405     determined in the prerequisite test. The default loss percentages to be
1406     tested are: - X = 0% - X = 10^-7%
1407
1408     Note: Other values can be tested if required by the user.
1409
1410     **Expected Result**:
1411
1412     **Metrics Collected**:
1413
1414     The following are the metrics collected for this test:
1415
1416     -  Max Forwarding Rate stability of the DUT.
1417
1418        -  This means reporting the number of packets lost per time interval
1419           and reporting any time intervals with packet loss. The
1420           `RFC2889 <https://www.rfc-editor.org/rfc/rfc2289.txt>`__
1421           Forwarding Rate shall be measured in each interval.
1422           An interval of 60s is suggested.
1423
1424     -  CPU and memory utilization may also be collected as part of this
1425        test, to determine the vSwitch's performance footprint on the system.
1426     -  The `RFC5481 <https://www.rfc-editor.org/rfc/rfc5481.txt>`__
1427        PDV form of delay variation on the traffic flow,
1428        using the 99th percentile.
1429
1430 .. 3.2.3.1.7
1431
1432 Test ID: LTD.Throughput.RFC2889.MaxForwardingRateSoakFrameModification
1433 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1434     **Title**: RFC 2889 Max Forwarding Rate Soak Test with Frame Modification
1435
1436     **Prerequisite Test**:
1437     LTD.Throughput.RFC2544.PacketLossRatioFrameModification (0% Packet Loss)
1438
1439     **Priority**:
1440
1441     **Description**:
1442
1443     The aim of this test is to understand the Max Forwarding Rate stability over an
1444     extended test duration in order to uncover any outliers. To allow for an
1445     extended test duration, the test should ideally run for 24 hours or, if
1446     this is not possible, for at least 6 hour. For this test, each frame
1447     size must be sent at the highest Throughput rate with 0% packet loss, as
1448     determined in the prerequisite test.
1449
1450     During this test, the DUT must perform the following operations on the
1451     traffic flow:
1452
1453     -  Perform packet parsing on the DUT's ingress port.
1454     -  Perform any relevant address look-ups on the DUT's ingress ports.
1455     -  Modify the packet header before forwarding the packet to the DUT's
1456        egress port. Packet modifications include:
1457
1458        -  Modifying the Ethernet source or destination MAC address.
1459        -  Modifying/adding a VLAN tag (**Recommended**).
1460        -  Modifying/adding a MPLS tag.
1461        -  Modifying the source or destination ip address.
1462        -  Modifying the TOS/DSCP field.
1463        -  Modifying the source or destination ports for UDP/TCP/SCTP.
1464        -  Modifying the TTL.
1465
1466     **Expected Result**:
1467
1468     **Metrics Collected**:
1469
1470     The following are the metrics collected for this test:
1471
1472     -  Max Forwarding Rate stability of the DUT.
1473
1474        -  This means reporting the number of packets lost per time interval
1475           and reporting any time intervals with packet loss. The
1476           `RFC2889 <https://www.rfc-editor.org/rfc/rfc2289.txt>`__
1477           Forwarding Rate shall be measured in each interval.
1478           An interval of 60s is suggested.
1479
1480     -  CPU and memory utilization may also be collected as part of this
1481        test, to determine the vSwitch's performance footprint on the system.
1482     -  The `RFC5481 <https://www.rfc-editor.org/rfc/rfc5481.txt>`__
1483        PDV form of delay variation on the traffic flow, using the 99th
1484        percentile.
1485
1486 .. 3.2.3.1.8
1487
1488 Test ID: LTD.Throughput.RFC6201.ResetTime
1489 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1490     **Title**: RFC 6201 Reset Time Test
1491
1492     **Prerequisite Test**: N/A
1493
1494     **Priority**:
1495
1496     **Description**:
1497
1498     The aim of this test is to determine the length of time it takes the DUT
1499     to recover from a reset.
1500
1501     Two reset methods are defined - planned and unplanned. A planned reset
1502     requires stopping and restarting the virtual switch by the usual
1503     'graceful' method defined by it's documentation. An unplanned reset
1504     requires simulating a fatal internal fault in the virtual switch - for
1505     example by using kill -SIGKILL on a Linux environment.
1506
1507     Both reset methods SHOULD be exercised.
1508
1509     For each frame size previously defined under `Default Test
1510     Parameters <#DefaultParams>`__, traffic should be sent to the DUT under
1511     normal conditions. During the duration of the test and while the traffic
1512     flows are passing through the DUT, the DUT should be reset and the Reset
1513     time measured. The Reset time is the total time that a device is
1514     determined to be out of operation and includes the time to perform the
1515     reset and the time to recover from it (cf. `RFC6201
1516     <https://www.rfc-editor.org/rfc/rfc6201.txt>`__).
1517
1518     `RFC6201 <https://www.rfc-editor.org/rfc/rfc6201.txt>`__ defines two methods
1519     to measure the Reset time:
1520
1521       - Frame-Loss Method: which requires the monitoring of the number of
1522         lost frames and calculates the Reset time based on the number of
1523         frames lost and the offered rate according to the following
1524         formula:
1525
1526         .. code-block:: console
1527
1528                                     Frames_lost (packets)
1529                  Reset_time = -------------------------------------
1530                                 Offered_rate (packets per second)
1531
1532       - Timestamp Method: which measures the time from which the last frame
1533         is forwarded from the DUT to the time the first frame is forwarded
1534         after the reset. This involves time-stamping all transmitted frames
1535         and recording the timestamp of the last frame that was received prior
1536         to the reset and also measuring the timestamp of the first frame that
1537         is received after the reset. The Reset time is the difference between
1538         these two timestamps.
1539
1540     According to `RFC6201 <https://www.rfc-editor.org/rfc/rfc6201.txt>`__ the
1541     choice of method depends on the test tool's capability; the Frame-Loss
1542     method SHOULD be used if the test tool supports:
1543
1544      * Counting the number of lost frames per stream.
1545      * Transmitting test frame despite the physical link status.
1546
1547     whereas the Timestamp method SHOULD be used if the test tool supports:
1548      * Timestamping each frame.
1549      * Monitoring received frame's timestamp.
1550      * Transmitting frames only if the physical link status is up.
1551
1552     **Expected Result**:
1553
1554     **Metrics collected**
1555
1556     The following are the metrics collected for this test:
1557
1558      * Average Reset Time over the number of trials performed.
1559
1560     Results of this test should include the following information:
1561
1562      * The reset method used.
1563      * Throughput in Fps and Mbps.
1564      * Average Frame Loss over the number of trials performed.
1565      * Average Reset Time in milliseconds over the number of trials performed.
1566      * Number of trials performed.
1567      * Protocol: IPv4, IPv6, MPLS, etc.
1568      * Frame Size in Octets
1569      * Port Media: Ethernet, Gigabit Ethernet (GbE), etc.
1570      * Port Speed: 10 Gbps, 40 Gbps etc.
1571      * Interface Encapsulation: Ethernet, Ethernet VLAN, etc.
1572
1573     **Deployment scenario**:
1574
1575     * Physical → virtual switch → physical.
1576
1577 .. 3.2.3.1.9
1578
1579 Test ID: LTD.Throughput.RFC2889.MaxForwardingRate
1580 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1581     **Title**: RFC2889 Forwarding Rate Test
1582
1583     **Prerequisite Test**: LTD.Throughput.RFC2544.PacketLossRatio
1584
1585     **Priority**:
1586
1587     **Description**:
1588
1589     This test measures the DUT's Max Forwarding Rate when the Offered Load
1590     is varied between the throughput and the Maximum Offered Load for fixed
1591     length frames at a fixed time interval. The selected frame sizes are
1592     those previously defined under `Default Test
1593     Parameters <#DefaultParams>`__. The throughput is the maximum offered
1594     load with 0% frame loss (measured by the prerequisite test), and the
1595     Maximum Offered Load (as defined by
1596     `RFC2285 <https://www.rfc-editor.org/rfc/rfc2285.txt>`__) is *"the highest
1597     number of frames per second that an external source can transmit to a
1598     DUT/SUT for forwarding to a specified output interface or interfaces"*.
1599
1600     Traffic should be sent to the DUT at a particular rate (TX rate)
1601     starting with TX rate equal to the throughput rate. The rate of
1602     successfully received frames at the destination counted (in FPS). If the
1603     RX rate is equal to the TX rate, the TX rate should be increased by a
1604     fixed step size and the RX rate measured again until the Max Forwarding
1605     Rate is found.
1606
1607     The trial duration for each iteration should last for the period of time
1608     needed for the system to reach steady state for the frame size being
1609     tested. Under `RFC2889 <https://www.rfc-editor.org/rfc/rfc2289.txt>`__
1610     (Sec. 5.6.3.1) test methodology, the test
1611     duration should run for a minimum period of 30 seconds, regardless
1612     whether the system reaches steady state before the minimum duration
1613     ends.
1614
1615     **Expected Result**: According to
1616     `RFC2889 <https://www.rfc-editor.org/rfc/rfc2289.txt>`__ The Max Forwarding
1617     Rate is the highest forwarding rate of a DUT taken from an iterative set of
1618     forwarding rate measurements. The iterative set of forwarding rate measurements
1619     are made by setting the intended load transmitted from an external source and
1620     measuring the offered load (i.e what the DUT is capable of forwarding). If the
1621     Throughput == the Maximum Offered Load, it follows that Max Forwarding Rate is
1622     equal to the Maximum Offered Load.
1623
1624     **Metrics Collected**:
1625
1626     The following are the metrics collected for this test:
1627
1628     -  The Max Forwarding Rate for the DUT for each packet size.
1629     -  CPU and memory utilization may also be collected as part of this
1630        test, to determine the vSwitch's performance footprint on the system.
1631
1632     **Deployment scenario**:
1633
1634     -  Physical → virtual switch → physical. Note: Full mesh tests with
1635        multiple ingress and egress ports are a key aspect of RFC 2889
1636        benchmarks, and scenarios with both 2 and 4 ports should be tested.
1637        In any case, the number of ports used must be reported.
1638
1639 .. 3.2.3.1.10
1640
1641 Test ID: LTD.Throughput.RFC2889.ForwardPressure
1642 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1643     **Title**: RFC2889 Forward Pressure Test
1644
1645     **Prerequisite Test**: LTD.Throughput.RFC2889.MaxForwardingRate
1646
1647     **Priority**:
1648
1649     **Description**:
1650
1651     The aim of this test is to determine if the DUT transmits frames with an
1652     inter-frame gap that is less than 12 bytes. This test overloads the DUT
1653     and measures the output for forward pressure. Traffic should be
1654     transmitted to the DUT with an inter-frame gap of 11 bytes, this will
1655     overload the DUT by 1 byte per frame. The forwarding rate of the DUT
1656     should be measured.
1657
1658     **Expected Result**: The forwarding rate should not exceed the maximum
1659     forwarding rate of the DUT collected by
1660     LTD.Throughput.RFC2889.MaxForwardingRate.
1661
1662     **Metrics collected**
1663
1664     The following are the metrics collected for this test:
1665
1666     -  Forwarding rate of the DUT in FPS or Mbps.
1667     -  CPU and memory utilization may also be collected as part of this
1668        test, to determine the vSwitch's performance footprint on the system.
1669
1670     **Deployment scenario**:
1671
1672     -  Physical → virtual switch → physical.
1673
1674 .. 3.2.3.1.11
1675
1676 Test ID: LTD.Throughput.RFC2889.ErrorFramesFiltering
1677 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1678     **Title**: RFC2889 Error Frames Filtering Test
1679
1680     **Prerequisite Test**: N/A
1681
1682     **Priority**:
1683
1684     **Description**:
1685
1686     The aim of this test is to determine whether the DUT will propagate any
1687     erroneous frames it receives or whether it is capable of filtering out
1688     the erroneous frames. Traffic should be sent with erroneous frames
1689     included within the flow at random intervals. Illegal frames that must
1690     be tested include: - Oversize Frames. - Undersize Frames. - CRC Errored
1691     Frames. - Dribble Bit Errored Frames - Alignment Errored Frames
1692
1693     The traffic flow exiting the DUT should be recorded and checked to
1694     determine if the erroneous frames where passed through the DUT.
1695
1696     **Expected Result**: Broken frames are not passed!
1697
1698     **Metrics collected**
1699
1700     No Metrics are collected in this test, instead it determines:
1701
1702     -  Whether the DUT will propagate erroneous frames.
1703     -  Or whether the DUT will correctly filter out any erroneous frames
1704        from traffic flow with out removing correct frames.
1705
1706     **Deployment scenario**:
1707
1708     -  Physical → virtual switch → physical.
1709
1710 .. 3.2.3.1.12
1711
1712 Test ID: LTD.Throughput.RFC2889.BroadcastFrameForwarding
1713 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1714     **Title**: RFC2889 Broadcast Frame Forwarding Test
1715
1716     **Prerequisite Test**: N
1717
1718     **Priority**:
1719
1720     **Description**:
1721
1722     The aim of this test is to determine the maximum forwarding rate of the
1723     DUT when forwarding broadcast traffic. For each frame previously defined
1724     under `Default Test Parameters <#DefaultParams>`__, the traffic should
1725     be set up as broadcast traffic. The traffic throughput of the DUT should
1726     be measured.
1727
1728     The test should be conducted with at least 4 physical ports on the DUT.
1729     The number of ports used MUST be recorded.
1730
1731     As broadcast involves forwarding a single incoming packet to several
1732     destinations, the latency of a single packet is defined as the average
1733     of the latencies for each of the broadcast destinations.
1734
1735     The incoming packet is transmitted on each of the other physical ports,
1736     it is not transmitted on the port on which it was received. The test MAY
1737     be conducted using different broadcasting ports to uncover any
1738     performance differences.
1739
1740     **Expected Result**:
1741
1742     **Metrics collected**:
1743
1744     The following are the metrics collected for this test:
1745
1746     -  The forwarding rate of the DUT when forwarding broadcast traffic.
1747     -  The minimum, average & maximum packets latencies observed.
1748
1749     **Deployment scenario**:
1750
1751     -  Physical → virtual switch 3x physical. In the Broadcast rate testing,
1752        four test ports are required. One of the ports is connected to the test
1753        device, so it can send broadcast frames and listen for miss-routed frames.
1754
1755 .. 3.2.3.2
1756
1757 Packet Latency tests
1758 ---------------------------
1759 These tests will measure the store and forward latency as well as the packet
1760 delay variation for various packet types through the virtual switch. The
1761 following list is not exhaustive but should indicate the type of tests
1762 that should be required. It is expected that more will be added.
1763
1764 .. 3.2.3.2.1
1765
1766 Test ID: LTD.PacketLatency.InitialPacketProcessingLatency
1767 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1768     **Title**: Initial Packet Processing Latency
1769
1770     **Prerequisite Test**: N/A
1771
1772     **Priority**:
1773
1774     **Description**:
1775
1776     In some virtual switch architectures, the first packets of a flow will
1777     take the system longer to process than subsequent packets in the flow.
1778     This test determines the latency for these packets. The test will
1779     measure the latency of the packets as they are processed by the
1780     flow-setup-path of the DUT. There are two methods for this test, a
1781     recommended method and a nalternative method that can be used if it is
1782     possible to disable the fastpath of the virtual switch.
1783
1784     Recommended method: This test will send 64,000 packets to the DUT, each
1785     belonging to a different flow. Average packet latency will be determined
1786     over the 64,000 packets.
1787
1788     Alternative method: This test will send a single packet to the DUT after
1789     a fixed interval of time. The time interval will be equivalent to the
1790     amount of time it takes for a flow to time out in the virtual switch
1791     plus 10%. Average packet latency will be determined over 1,000,000
1792     packets.
1793
1794     This test is intended only for non-learning virtual switches; For learning
1795     virtual switches use RFC2889.
1796
1797     For this test, only unidirectional traffic is required.
1798
1799     **Expected Result**: The average latency for the initial packet of all
1800     flows should be greater than the latency of subsequent traffic.
1801
1802     **Metrics Collected**:
1803
1804     The following are the metrics collected for this test:
1805
1806     -  Average latency of the initial packets of all flows that are
1807        processed by the DUT.
1808
1809     **Deployment scenario**:
1810
1811     -  Physical → Virtual Switch → Physical.
1812
1813 .. 3.2.3.2.2
1814
1815 Test ID: LTD.PacketDelayVariation.RFC3393.Soak
1816 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1817     **Title**: Packet Delay Variation Soak Test
1818
1819     **Prerequisite Tests**: LTD.Throughput.RFC2544.PacketLossRatio (0% Packet Loss)
1820
1821     **Priority**:
1822
1823     **Description**:
1824
1825     The aim of this test is to understand the distribution of packet delay
1826     variation for different frame sizes over an extended test duration and
1827     to determine if there are any outliers. To allow for an extended test
1828     duration, the test should ideally run for 24 hours or, if this is not
1829     possible, for at least 6 hour. For this test, each frame size must be
1830     sent at the highest possible throughput with 0% packet loss, as
1831     determined in the prerequisite test.
1832
1833     **Expected Result**:
1834
1835     **Metrics Collected**:
1836
1837     The following are the metrics collected for this test:
1838
1839     -  The packet delay variation value for traffic passing through the DUT.
1840     -  The `RFC5481 <https://www.rfc-editor.org/rfc/rfc5481.txt>`__
1841        PDV form of delay variation on the traffic flow,
1842        using the 99th percentile, for each 60s interval during the test.
1843     -  CPU and memory utilization may also be collected as part of this
1844        test, to determine the vSwitch's performance footprint on the system.
1845
1846 .. 3.2.3.3
1847
1848 Scalability tests
1849 ------------------------
1850 The general aim of these tests is to understand the impact of large flow
1851 table size and flow lookups on throughput. The following list is not
1852 exhaustive but should indicate the type of tests that should be required.
1853 It is expected that more will be added.
1854
1855 .. 3.2.3.3.1
1856
1857 Test ID: LTD.Scalability.RFC2544.0PacketLoss
1858 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1859     **Title**: RFC 2544 0% loss Scalability throughput test
1860
1861     **Prerequisite Test**: LTD.Throughput.RFC2544.PacketLossRatio, IF the
1862     delta Throughput between the single-flow RFC2544 test and this test with
1863     a variable number of flows is desired.
1864
1865     **Priority**:
1866
1867     **Description**:
1868
1869     The aim of this test is to measure how throughput changes as the number
1870     of flows in the DUT increases. The test will measure the throughput
1871     through the fastpath, as such the flows need to be installed on the DUT
1872     before passing traffic.
1873
1874     For each frame size previously defined under `Default Test
1875     Parameters <#DefaultParams>`__ and for each of the following number of
1876     flows:
1877
1878     -  1,000
1879     -  2,000
1880     -  4,000
1881     -  8,000
1882     -  16,000
1883     -  32,000
1884     -  64,000
1885     -  Max supported number of flows.
1886
1887     This test will be conducted under two conditions following the
1888     establishment of all flows as required by RFC 2544, regarding the flow
1889     expiration time-out:
1890
1891     1) The time-out never expires during each trial.
1892
1893     2) The time-out expires for all flows periodically. This would require a
1894     short time-out compared with flow re-appearance for a small number of
1895     flows, and may not be possible for all flow conditions.
1896
1897     The maximum 0% packet loss Throughput should be determined in a manner
1898     identical to LTD.Throughput.RFC2544.PacketLossRatio.
1899
1900     **Expected Result**:
1901
1902     **Metrics Collected**:
1903
1904     The following are the metrics collected for this test:
1905
1906     -  The maximum number of frames per second that can be forwarded at the
1907        specified number of flows and the specified frame size, with zero
1908        packet loss.
1909
1910 .. 3.2.3.3.2
1911
1912 Test ID: LTD.MemoryBandwidth.RFC2544.0PacketLoss.Scalability
1913 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1914     **Title**: RFC 2544 0% loss Memory Bandwidth Scalability test
1915
1916     **Prerequisite Tests**: LTD.Throughput.RFC2544.PacketLossRatio, IF the
1917     delta Throughput between an undisturbed RFC2544 test and this test with
1918     the Throughput affected by cache and memory bandwidth contention is desired.
1919
1920     **Priority**:
1921
1922     **Description**:
1923
1924     The aim of this test is to understand how the DUT's performance is
1925     affected by cache sharing and memory bandwidth between processes.
1926
1927     During the test all cores not used by the vSwitch should be running a
1928     memory intensive application. This application should read and write
1929     random data to random addresses in unused physical memory. The random
1930     nature of the data and addresses is intended to consume cache, exercise
1931     main memory access (as opposed to cache) and exercise all memory buses
1932     equally. Furthermore:
1933
1934     - the ratio of reads to writes should be recorded. A ratio of 1:1
1935       SHOULD be used.
1936     - the reads and writes MUST be of cache-line size and be cache-line aligned.
1937     - in NUMA architectures memory access SHOULD be local to the core's node.
1938       Whether only local memory or a mix of local and remote memory is used
1939       MUST be recorded.
1940     - the memory bandwidth (reads plus writes) used per-core MUST be recorded;
1941       the test MUST be run with a per-core memory bandwidth equal to half the
1942       maximum system memory bandwidth divided by the number of cores. The test
1943       MAY be run with other values for the per-core memory bandwidth.
1944     - the test MAY also be run with the memory intensive application running
1945       on all cores.
1946
1947     Under these conditions the DUT's 0% packet loss throughput is determined
1948     as per LTD.Throughput.RFC2544.PacketLossRatio.
1949
1950     **Expected Result**:
1951
1952     **Metrics Collected**:
1953
1954     The following are the metrics collected for this test:
1955
1956     -  The DUT's 0% packet loss throughput in the presence of cache sharing and
1957        memory bandwidth between processes.
1958
1959 .. 3.2.3.4
1960
1961 Activation tests
1962 -----------------------
1963 The general aim of these tests is to understand the capacity of the
1964 and speed with which the vswitch can accommodate new flows.
1965
1966 .. 3.2.3.4.1
1967
1968 Test ID: LTD.Activation.RFC2889.AddressCachingCapacity
1969 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1970     **Title**: RFC2889 Address Caching Capacity Test
1971
1972     **Prerequisite Test**: N/A
1973
1974     **Priority**:
1975
1976     **Description**:
1977
1978     Please note this test is only applicable to virtual switches that are capable of
1979     MAC learning. The aim of this test is to determine the address caching
1980     capacity of the DUT for a constant load (fixed length frames at a fixed
1981     interval time). The selected frame sizes are those previously defined
1982     under `Default Test Parameters <#DefaultParams>`__.
1983
1984     In order to run this test the aging time, that is the maximum time the
1985     DUT will keep a learned address in its flow table, and a set of initial
1986     addresses, whose value should be >= 1 and <= the max number supported by
1987     the implementation must be known. Please note that if the aging time is
1988     configurable it must be longer than the time necessary to produce frames
1989     from the external source at the specified rate. If the aging time is
1990     fixed the frame rate must be brought down to a value that the external
1991     source can produce in a time that is less than the aging time.
1992
1993     Learning Frames should be sent from an external source to the DUT to
1994     install a number of flows. The Learning Frames must have a fixed
1995     destination address and must vary the source address of the frames. The
1996     DUT should install flows in its flow table based on the varying source
1997     addresses. Frames should then be transmitted from an external source at
1998     a suitable frame rate to see if the DUT has properly learned all of the
1999     addresses. If there is no frame loss and no flooding, the number of
2000     addresses sent to the DUT should be increased and the test is repeated
2001     until the max number of cached addresses supported by the DUT
2002     determined.
2003
2004     **Expected Result**:
2005
2006     **Metrics collected**:
2007
2008     The following are the metrics collected for this test:
2009
2010     -  Number of cached addresses supported by the DUT.
2011     -  CPU and memory utilization may also be collected as part of this
2012        test, to determine the vSwitch's performance footprint on the system.
2013
2014     **Deployment scenario**:
2015
2016     -  Physical → virtual switch → 2 x physical (one receiving, one listening).
2017
2018 .. 3.2.3.4.2
2019
2020 Test ID: LTD.Activation.RFC2889.AddressLearningRate
2021 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2022     **Title**: RFC2889 Address Learning Rate Test
2023
2024     **Prerequisite Test**: LTD.Memory.RFC2889.AddressCachingCapacity
2025
2026     **Priority**:
2027
2028     **Description**:
2029
2030     Please note this test is only applicable to virtual switches that are capable of
2031     MAC learning. The aim of this test is to determine the rate of address
2032     learning of the DUT for a constant load (fixed length frames at a fixed
2033     interval time). The selected frame sizes are those previously defined
2034     under `Default Test Parameters <#DefaultParams>`__, traffic should be
2035     sent with each IPv4/IPv6 address incremented by one. The rate at which
2036     the DUT learns a new address should be measured. The maximum caching
2037     capacity from LTD.Memory.RFC2889.AddressCachingCapacity should be taken
2038     into consideration as the maximum number of addresses for which the
2039     learning rate can be obtained.
2040
2041     **Expected Result**: It may be worthwhile to report the behaviour when
2042     operating beyond address capacity - some DUTs may be more friendly to
2043     new addresses than others.
2044
2045     **Metrics collected**:
2046
2047     The following are the metrics collected for this test:
2048
2049     -  The address learning rate of the DUT.
2050
2051     **Deployment scenario**:
2052
2053     -  Physical → virtual switch → 2 x physical (one receiving, one listening).
2054
2055 .. 3.2.3.5
2056
2057 Coupling between control path and datapath Tests
2058 -------------------------------------------------------
2059 The following tests aim to determine how tightly coupled the datapath
2060 and the control path are within a virtual switch. The following list
2061 is not exhaustive but should indicate the type of tests that should be
2062 required. It is expected that more will be added.
2063
2064 .. 3.2.3.5.1
2065
2066 Test ID: LTD.CPDPCouplingFlowAddition
2067 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2068     **Title**: Control Path and Datapath Coupling
2069
2070     **Prerequisite Test**:
2071
2072     **Priority**:
2073
2074     **Description**:
2075
2076     The aim of this test is to understand how exercising the DUT's control
2077     path affects datapath performance.
2078
2079     Initially a certain number of flow table entries are installed in the
2080     vSwitch. Then over the duration of an RFC2544 throughput test
2081     flow-entries are added and removed at the rates specified below. No
2082     traffic is 'hitting' these flow-entries, they are simply added and
2083     removed.
2084
2085     The test MUST be repeated with the following initial number of
2086     flow-entries installed: - < 10 - 1000 - 100,000 - 10,000,000 (or the
2087     maximum supported number of flow-entries)
2088
2089     The test MUST be repeated with the following rates of flow-entry
2090     addition and deletion per second: - 0 - 1 (i.e. 1 addition plus 1
2091     deletion) - 100 - 10,000
2092
2093     **Expected Result**:
2094
2095     **Metrics Collected**:
2096
2097     The following are the metrics collected for this test:
2098
2099     -  The maximum forwarding rate in Frames Per Second (FPS) and Mbps of
2100        the DUT.
2101     -  The average latency of the traffic flow when passing through the DUT
2102        (if testing for latency, note that this average is different from the
2103        test specified in Section 26.3 of
2104        `RFC2544 <https://www.rfc-editor.org/rfc/rfc2544.txt>`__).
2105     -  CPU and memory utilization may also be collected as part of this
2106        test, to determine the vSwitch's performance footprint on the system.
2107
2108     **Deployment scenario**:
2109
2110     -  Physical → virtual switch → physical.
2111
2112 .. 3.2.3.6
2113
2114 CPU and memory consumption
2115 ---------------------------------
2116 The following tests will profile a virtual switch's CPU and memory
2117 utilization under various loads and circumstances. The following
2118 list is not exhaustive but should indicate the type of tests that
2119 should be required. It is expected that more will be added.
2120
2121 .. 3.2.3.6.1
2122
2123 Test ID: LTD.CPU.RFC2544.0PacketLoss
2124 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2125     **Title**: RFC 2544 0% Loss Compute Test
2126
2127     **Prerequisite Test**:
2128
2129     **Priority**:
2130
2131     **Description**:
2132
2133     The aim of this test is to understand the overall performance of the
2134     system when a CPU intensive application is run on the same DUT as the
2135     Virtual Switch. For each frame size, an
2136     LTD.Throughput.RFC2544.PacketLossRatio (0% Packet Loss) test should be
2137     performed. Throughout the entire test a CPU intensive application should
2138     be run on all cores on the system not in use by the Virtual Switch. For
2139     NUMA system only cores on the same NUMA node are loaded.
2140
2141     It is recommended that stress-ng be used for loading the non-Virtual
2142     Switch cores but any stress tool MAY be used.
2143
2144     **Expected Result**:
2145
2146     **Metrics Collected**:
2147
2148     The following are the metrics collected for this test:
2149
2150     -  CPU utilization of the cores running the Virtual Switch.
2151     -  The number of identity of the cores allocated to the Virtual Switch.
2152     -  The configuration of the stress tool (for example the command line
2153        parameters used to start it.)
2154
2155 .. 3.2.3.7
2156
2157 Summary List of Tests
2158 ----------------------------
2159 1. Throughput tests
2160
2161   - Test ID: LTD.Throughput.RFC2544.PacketLossRatio
2162   - Test ID: LTD.Throughput.RFC2544.PacketLossRatioFrameModification
2163   - Test ID: LTD.Throughput.RFC2544.Profile
2164   - Test ID: LTD.Throughput.RFC2544.SystemRecoveryTime
2165   - Test ID: LTD.Throughput.RFC2544.BackToBackFrames
2166   - Test ID: LTD.Throughput.RFC2889.Soak
2167   - Test ID: LTD.Throughput.RFC2889.SoakFrameModification
2168   - Test ID: LTD.Throughput.RFC6201.ResetTime
2169   - Test ID: LTD.Throughput.RFC2889.MaxForwardingRate
2170   - Test ID: LTD.Throughput.RFC2889.ForwardPressure
2171   - Test ID: LTD.Throughput.RFC2889.ErrorFramesFiltering
2172   - Test ID: LTD.Throughput.RFC2889.BroadcastFrameForwarding
2173
2174 2. Packet Latency tests
2175
2176   - Test ID: LTD.PacketLatency.InitialPacketProcessingLatency
2177   - Test ID: LTD.PacketDelayVariation.RFC3393.Soak
2178
2179 3. Scalability tests
2180
2181   - Test ID: LTD.Scalability.RFC2544.0PacketLoss
2182   - Test ID: LTD.MemoryBandwidth.RFC2544.0PacketLoss.Scalability
2183
2184 4. Acivation tests
2185
2186   - Test ID: LTD.Activation.RFC2889.AddressCachingCapacity
2187   - Test ID: LTD.Activation.RFC2889.AddressLearningRate
2188
2189 5. Coupling between control path and datapath Tests
2190
2191   - Test ID: LTD.CPDPCouplingFlowAddition
2192
2193 6. CPU and memory consumption
2194
2195   - Test ID: LTD.CPU.RFC2544.0PacketLoss