182. VMDQ Tests

The 1G, 10G 82599 and 40G FVL Network Interface Card (NIC), supports a number of packet filtering functions which can be used to distribute incoming packets into a number of reception (RX) queues. VMDQ is a filtering functions which operate on VLAN-tagged packets to distribute those packets among up to 512 RX queues.

The feature itself works by:

  • splitting the incoming packets up into different “pools” - each with its own set of RX queues - based upon the MAC address and VLAN ID within the VLAN tag of the packet.
  • assigning each packet to a specific queue within the pool, based upon the user priority field within the VLAN tag and MAC address.

The VMDQ features are enabled in the vmdq example application contained in the DPDK, and this application should be used to validate the feature.

182.1. Prerequisites

  • All tests assume a linuxapp setup.
  • The port ids of the two 10G or 40G ports to be used for the testing are specified in the commandline. it use a portmask.
  • The DPDK is compiled for the appropriate target type in each case, and the VMDQ example application is compiled and linked with that DPDK instance
  • Two ports are connected to the test system, one to be used for packet reception, the other for transmission
  • The traffic generator being used is configured to send to the application RX port a stream of packets with VLAN tags, where the VLAN IDs increment from 0 to the pools numbers(e.g: for FVL spirit, it’s 63, inclusive) as well as the MAC address from 52:54:00:12:[port_index]:00 to 52:54:00:12:[port_index]:3e and the VLAN user priority field increments from 0 to 7 (inclusive) for each VLAN ID. In our case port_index = 0 or 1.
-Case config::
If test max queues per port 1024, need to set the “CONFIG_RTE_MAX_QUEUES_PER_PORT=1024” in ./config/common_base, and need to set the “define MAX_QUEUES 1024” in ./examples/vmdq/main.c and re-build DPDK. Note: different NIC, the MAX_QUEUES is different, eg: Fortville is 1024.

182.1.1. Test Case: Measure VMDQ pools queues

  1. Put different number of pools: in the case of 10G 82599 Nic is 64, in the case of FVL spirit is 63,in case of FVL eagle is 34.
  2. Start traffic transmission using approx 10% of line rate.
  3. After a number of seconds, e.g. 15, stop traffic, and ensure no traffic loss (<0.001%) has occurred.
  4. Send a hangup signal (SIGHUP) to the application to have it print out the statistics of how many packets were received per RX queue

Expected Result:

  • No packet loss is expected
  • Every RX queue should have received approximately (+/-15%) the same number of incoming packets

182.1.2. Test Case: Measure VMDQ Performance

  1. Compile VMDQ example application as in first test above.
  2. Run application using a core mask for the appropriate thread and core settings given in the following list:
  • 1S/1C/1T
  • 1S/2C/1T
  • 1S/2C/2T
  • 1S/4C/1T
  1. Measure maximum RFC2544 performance throughput for bi-directional traffic for all standard packet sizes.

Output Format: The output format should be as below, or any similar table-type, with figures given in mpps:

Frame size 1S/1C/1T 1S/2C/1T 1S/2C/2T 1S/4C/1T
64 19.582 42.222 53.204 73.768
128 20.607 42.126 52.964 67.527
256 15.614 33.849 36.232 36.232
512 11.794 18.797 18.797 18.797
1024 9.568 9.579 9.579 9.579
1280 7.692 7.692 7.692 7.692
1518 6.395 6.502 6.502 6.502