xref: /dpdk/doc/guides/sample_app_ug/vmdq_dcb_forwarding.rst (revision 9a212dc06c7aaf09b146d9c3dcfd584d741634c1)
15630257fSFerruh Yigit..  SPDX-License-Identifier: BSD-3-Clause
25630257fSFerruh Yigit    Copyright(c) 2010-2014 Intel Corporation.
3d0dff9baSBernard Iremonger
4d0dff9baSBernard IremongerVMDQ and DCB Forwarding Sample Application
5d0dff9baSBernard Iremonger==========================================
6d0dff9baSBernard Iremonger
7e0c7c473SSiobhan ButlerThe VMDQ and DCB Forwarding sample application is a simple example of packet processing using the DPDK.
88cc72f28SJingjing WuThe application performs L2 forwarding using VMDQ and DCB to divide the incoming traffic into queues.
98cc72f28SJingjing WuThe traffic splitting is performed in hardware by the VMDQ and DCB features of the Intel® 82599 and X710/XL710 Ethernet Controllers.
10d0dff9baSBernard Iremonger
11d0dff9baSBernard IremongerOverview
12d0dff9baSBernard Iremonger--------
13d0dff9baSBernard Iremonger
14e0c7c473SSiobhan ButlerThis sample application can be used as a starting point for developing a new application that is based on the DPDK and
15d0dff9baSBernard Iremongeruses VMDQ and DCB for traffic partitioning.
16d0dff9baSBernard Iremonger
178cc72f28SJingjing WuThe VMDQ and DCB filters work on MAC and VLAN traffic to divide the traffic into input queues on the basis of the Destination MAC
188cc72f28SJingjing Wuaddress, VLAN ID and VLAN user priority fields.
198cc72f28SJingjing WuVMDQ filters split the traffic into 16 or 32 groups based on the Destination MAC and VLAN ID.
208cc72f28SJingjing WuThen, DCB places each packet into one of queues within that group, based upon the VLAN user priority field.
21d0dff9baSBernard Iremonger
22d0dff9baSBernard IremongerAll traffic is read from a single incoming port (port 0) and output on port 1, without any processing being performed.
238cc72f28SJingjing WuWith Intel® 82599 NIC, for example, the traffic is split into 128 queues on input, where each thread of the application reads from
248cc72f28SJingjing Wumultiple queues. When run with 8 threads, that is, with the -c FF option, each thread receives and forwards packets from 16 queues.
25d0dff9baSBernard Iremonger
268cc72f28SJingjing WuAs supplied, the sample application configures the VMDQ feature to have 32 pools with 4 queues each as indicated in :numref:`figure_vmdq_dcb_example`.
278cc72f28SJingjing WuThe Intel® 82599 10 Gigabit Ethernet Controller NIC also supports the splitting of traffic into 16 pools of 8 queues. While the
288cc72f28SJingjing WuIntel® X710 or XL710 Ethernet Controller NICs support many configurations of VMDQ pools of 4 or 8 queues each. For simplicity, only 16
29e2a94f9aSCiara Poweror 32 pools is supported in this sample. And queues numbers for each VMDQ pool can be changed by setting RTE_LIBRTE_I40E_QUEUE_NUM_PER_VM
30e2a94f9aSCiara Powerin config/rte_config.h file.
318cc72f28SJingjing WuThe nb-pools, nb-tcs and enable-rss parameters can be passed on the command line, after the EAL parameters:
32d0dff9baSBernard Iremonger
33d0dff9baSBernard Iremonger.. code-block:: console
34d0dff9baSBernard Iremonger
35e2a94f9aSCiara Power    ./<build_dir>/examples/dpdk-vmdq_dcb [EAL options] -- -p PORTMASK --nb-pools NP --nb-tcs TC --enable-rss
36d0dff9baSBernard Iremonger
378cc72f28SJingjing Wuwhere, NP can be 16 or 32, TC can be 4 or 8, rss is disabled by default.
38d0dff9baSBernard Iremonger
394a22e6eeSJohn McNamara.. _figure_vmdq_dcb_example:
40d0dff9baSBernard Iremonger
414a22e6eeSJohn McNamara.. figure:: img/vmdq_dcb_example.*
42d0dff9baSBernard Iremonger
434a22e6eeSJohn McNamara   Packet Flow Through the VMDQ and DCB Sample Application
44d0dff9baSBernard Iremonger
45d0dff9baSBernard Iremonger
46d0dff9baSBernard IremongerIn Linux* user space, the application can display statistics with the number of packets received on each queue.
478cc72f28SJingjing WuTo have the application display the statistics, send a SIGHUP signal to the running application process.
48d0dff9baSBernard Iremonger
49d0dff9baSBernard IremongerThe VMDQ and DCB Forwarding sample application is in many ways simpler than the L2 Forwarding application
50513b0723SMauricio Vasquez B(see :doc:`l2_forward_real_virtual`)
51d0dff9baSBernard Iremongeras it performs unidirectional L2 forwarding of packets from one port to a second port.
52d0dff9baSBernard IremongerNo command-line options are taken by this application apart from the standard EAL command-line options.
53d0dff9baSBernard Iremonger
54d0dff9baSBernard Iremonger.. note::
55d0dff9baSBernard Iremonger
56d0dff9baSBernard Iremonger    Since VMD queues are being used for VMM, this application works correctly
57d0dff9baSBernard Iremonger    when VTd is disabled in the BIOS or Linux* kernel (intel_iommu=off).
58d0dff9baSBernard Iremonger
59d0dff9baSBernard IremongerCompiling the Application
60d0dff9baSBernard Iremonger-------------------------
61d0dff9baSBernard Iremonger
62d0dff9baSBernard Iremonger
63d0dff9baSBernard Iremonger
647cacb056SHerakliusz LipiecTo compile the sample application see :doc:`compiling`.
65d0dff9baSBernard Iremonger
667cacb056SHerakliusz LipiecThe application is located in the ``vmdq_dcb`` sub-directory.
67d0dff9baSBernard Iremonger
68d0dff9baSBernard IremongerRunning the Application
69d0dff9baSBernard Iremonger-----------------------
70d0dff9baSBernard Iremonger
71218c4e68SBruce RichardsonTo run the example in a linux environment:
72d0dff9baSBernard Iremonger
73d0dff9baSBernard Iremonger.. code-block:: console
74d0dff9baSBernard Iremonger
75e2a94f9aSCiara Power    user@target:~$ ./<build_dir>/examples/dpdk-vmdq_dcb -l 0-3 -n 4 -- -p 0x3 --nb-pools 32 --nb-tcs 4
76d0dff9baSBernard Iremonger
77e0c7c473SSiobhan ButlerRefer to the *DPDK Getting Started Guide* for general information on running applications and
78d0dff9baSBernard Iremongerthe Environment Abstraction Layer (EAL) options.
79d0dff9baSBernard Iremonger
80d0dff9baSBernard IremongerExplanation
81d0dff9baSBernard Iremonger-----------
82d0dff9baSBernard Iremonger
83d0dff9baSBernard IremongerThe following sections provide some explanation of the code.
84d0dff9baSBernard Iremonger
85d0dff9baSBernard IremongerInitialization
86d0dff9baSBernard Iremonger~~~~~~~~~~~~~~
87d0dff9baSBernard Iremonger
88d0dff9baSBernard IremongerThe EAL, driver and PCI configuration is performed largely as in the L2 Forwarding sample application,
89d0dff9baSBernard Iremongeras is the creation of the mbuf pool.
90513b0723SMauricio Vasquez BSee :doc:`l2_forward_real_virtual`.
91d0dff9baSBernard IremongerWhere this example application differs is in the configuration of the NIC port for RX.
92d0dff9baSBernard Iremonger
93d0dff9baSBernard IremongerThe VMDQ and DCB hardware feature is configured at port initialization time by setting the appropriate values in the
94d0dff9baSBernard Iremongerrte_eth_conf structure passed to the rte_eth_dev_configure() API.
95d0dff9baSBernard IremongerInitially in the application,
96d0dff9baSBernard Iremongera default structure is provided for VMDQ and DCB configuration to be filled in later by the application.
97d0dff9baSBernard Iremonger
98*9a212dc0SConor Fogarty.. literalinclude:: ../../../examples/vmdq_dcb/main.c
99*9a212dc0SConor Fogarty    :language: c
100*9a212dc0SConor Fogarty    :start-after: Empty vmdq+dcb configuration structure. Filled in programmatically. 8<
101*9a212dc0SConor Fogarty    :end-before: >8 End of empty vmdq+dcb configuration structure.
102d0dff9baSBernard Iremonger
103d0dff9baSBernard IremongerThe get_eth_conf() function fills in an rte_eth_conf structure with the appropriate values,
104d0dff9baSBernard Iremongerbased on the global vlan_tags array,
105d0dff9baSBernard Iremongerand dividing up the possible user priority values equally among the individual queues
1068cc72f28SJingjing Wu(also referred to as traffic classes) within each pool. With Intel® 82599 NIC,
1078cc72f28SJingjing Wuif the number of pools is 32, then the user priority fields are allocated 2 to a queue.
108d0dff9baSBernard IremongerIf 16 pools are used, then each of the 8 user priority fields is allocated to its own queue within the pool.
1098cc72f28SJingjing WuWith Intel® X710/XL710 NICs, if number of tcs is 4, and number of queues in pool is 8,
1108cc72f28SJingjing Wuthen the user priority fields are allocated 2 to one tc, and a tc has 2 queues mapping to it, then
1118cc72f28SJingjing WuRSS will determine the destination queue in 2.
112d0dff9baSBernard IremongerFor the VLAN IDs, each one can be allocated to possibly multiple pools of queues,
113d0dff9baSBernard Iremongerso the pools parameter in the rte_eth_vmdq_dcb_conf structure is specified as a bitmask value.
1148cc72f28SJingjing WuFor destination MAC, each VMDQ pool will be assigned with a MAC address. In this sample, each VMDQ pool
1158cc72f28SJingjing Wuis assigned to the MAC like 52:54:00:12:<port_id>:<pool_id>, that is,
1168cc72f28SJingjing Wuthe MAC of VMDQ pool 2 on port 1 is 52:54:00:12:01:02.
117d0dff9baSBernard Iremonger
118*9a212dc0SConor Fogarty.. literalinclude:: ../../../examples/vmdq_dcb/main.c
119*9a212dc0SConor Fogarty    :language: c
120*9a212dc0SConor Fogarty    :start-after: Dividing up the possible user priority values. 8<
121*9a212dc0SConor Fogarty    :end-before: >8 End of dividing up the possible user priority values.
122d0dff9baSBernard Iremonger
123*9a212dc0SConor Fogarty.. literalinclude:: ../../../examples/vmdq_dcb/main.c
124*9a212dc0SConor Fogarty    :language: c
125*9a212dc0SConor Fogarty    :start-after: Set mac for each pool. 8<
126*9a212dc0SConor Fogarty    :end-before: >8 End of set mac for each pool.
127*9a212dc0SConor Fogarty    :dedent: 1
128d0dff9baSBernard Iremonger
129d0dff9baSBernard IremongerOnce the network port has been initialized using the correct VMDQ and DCB values,
130d0dff9baSBernard Iremongerthe initialization of the port's RX and TX hardware rings is performed similarly to that
131d0dff9baSBernard Iremongerin the L2 Forwarding sample application.
132513b0723SMauricio Vasquez BSee :doc:`l2_forward_real_virtual` for more information.
133d0dff9baSBernard Iremonger
134d0dff9baSBernard IremongerStatistics Display
135d0dff9baSBernard Iremonger~~~~~~~~~~~~~~~~~~
136d0dff9baSBernard Iremonger
137218c4e68SBruce RichardsonWhen run in a linux environment,
138d0dff9baSBernard Iremongerthe VMDQ and DCB Forwarding sample application can display statistics showing the number of packets read from each RX queue.
139d0dff9baSBernard IremongerThis is provided by way of a signal handler for the SIGHUP signal,
140d0dff9baSBernard Iremongerwhich simply prints to standard output the packet counts in grid form.
141d0dff9baSBernard IremongerEach row of the output is a single pool with the columns being the queue number within that pool.
142d0dff9baSBernard Iremonger
143d0dff9baSBernard IremongerTo generate the statistics output, use the following command:
144d0dff9baSBernard Iremonger
145d0dff9baSBernard Iremonger.. code-block:: console
146d0dff9baSBernard Iremonger
147d0dff9baSBernard Iremonger    user@host$ sudo killall -HUP vmdq_dcb_app
148d0dff9baSBernard Iremonger
149d0dff9baSBernard IremongerPlease note that the statistics output will appear on the terminal where the vmdq_dcb_app is running,
150d0dff9baSBernard Iremongerrather than the terminal from which the HUP signal was sent.
151