xref: /dpdk/doc/guides/sample_app_ug/qos_scheduler.rst (revision 35b09d76f89e7d5a4f38a2926cf6915028ed1e56)
1d0dff9baSBernard Iremonger..  BSD LICENSE
2d0dff9baSBernard Iremonger    Copyright(c) 2010-2014 Intel Corporation. All rights reserved.
3d0dff9baSBernard Iremonger    All rights reserved.
4d0dff9baSBernard Iremonger
5d0dff9baSBernard Iremonger    Redistribution and use in source and binary forms, with or without
6d0dff9baSBernard Iremonger    modification, are permitted provided that the following conditions
7d0dff9baSBernard Iremonger    are met:
8d0dff9baSBernard Iremonger
9d0dff9baSBernard Iremonger    * Redistributions of source code must retain the above copyright
10d0dff9baSBernard Iremonger    notice, this list of conditions and the following disclaimer.
11d0dff9baSBernard Iremonger    * Redistributions in binary form must reproduce the above copyright
12d0dff9baSBernard Iremonger    notice, this list of conditions and the following disclaimer in
13d0dff9baSBernard Iremonger    the documentation and/or other materials provided with the
14d0dff9baSBernard Iremonger    distribution.
15d0dff9baSBernard Iremonger    * Neither the name of Intel Corporation nor the names of its
16d0dff9baSBernard Iremonger    contributors may be used to endorse or promote products derived
17d0dff9baSBernard Iremonger    from this software without specific prior written permission.
18d0dff9baSBernard Iremonger
19d0dff9baSBernard Iremonger    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
20d0dff9baSBernard Iremonger    "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
21d0dff9baSBernard Iremonger    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
22d0dff9baSBernard Iremonger    A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
23d0dff9baSBernard Iremonger    OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
24d0dff9baSBernard Iremonger    SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
25d0dff9baSBernard Iremonger    LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
26d0dff9baSBernard Iremonger    DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
27d0dff9baSBernard Iremonger    THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
28d0dff9baSBernard Iremonger    (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
29d0dff9baSBernard Iremonger    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30d0dff9baSBernard Iremonger
31d0dff9baSBernard IremongerQoS Scheduler Sample Application
32d0dff9baSBernard Iremonger================================
33d0dff9baSBernard Iremonger
34e0c7c473SSiobhan ButlerThe QoS sample application demonstrates the use of the DPDK to provide QoS scheduling.
35d0dff9baSBernard Iremonger
36d0dff9baSBernard IremongerOverview
37d0dff9baSBernard Iremonger--------
38d0dff9baSBernard Iremonger
39d0dff9baSBernard IremongerThe architecture of the QoS scheduler application is shown in the following figure.
40d0dff9baSBernard Iremonger
414a22e6eeSJohn McNamara.. _figure_qos_sched_app_arch:
42d0dff9baSBernard Iremonger
434a22e6eeSJohn McNamara.. figure:: img/qos_sched_app_arch.*
44d0dff9baSBernard Iremonger
454a22e6eeSJohn McNamara   QoS Scheduler Application Architecture
46d0dff9baSBernard Iremonger
47d0dff9baSBernard Iremonger
48d0dff9baSBernard IremongerThere are two flavors of the runtime execution for this application,
49d0dff9baSBernard Iremongerwith two or three threads per each packet flow configuration being used.
50d0dff9baSBernard IremongerThe RX thread reads packets from the RX port,
51d0dff9baSBernard Iremongerclassifies the packets based on the double VLAN (outer and inner) and
52d0dff9baSBernard Iremongerthe lower two bytes of the IP destination address and puts them into the ring queue.
53d0dff9baSBernard IremongerThe worker thread dequeues the packets from the ring and calls the QoS scheduler enqueue/dequeue functions.
54d0dff9baSBernard IremongerIf a separate TX core is used, these are sent to the TX ring.
55d0dff9baSBernard IremongerOtherwise, they are sent directly to the TX port.
56d0dff9baSBernard IremongerThe TX thread, if present, reads from the TX ring and write the packets to the TX port.
57d0dff9baSBernard Iremonger
58d0dff9baSBernard IremongerCompiling the Application
59d0dff9baSBernard Iremonger-------------------------
60d0dff9baSBernard Iremonger
61d0dff9baSBernard IremongerTo compile the application:
62d0dff9baSBernard Iremonger
63d0dff9baSBernard Iremonger#.  Go to the sample application directory:
64d0dff9baSBernard Iremonger
65d0dff9baSBernard Iremonger    .. code-block:: console
66d0dff9baSBernard Iremonger
67fd4f28b1SJohn McNamara        export RTE_SDK=/path/to/rte_sdk
68fd4f28b1SJohn McNamara        cd ${RTE_SDK}/examples/qos_sched
69d0dff9baSBernard Iremonger
70d0dff9baSBernard Iremonger#.  Set the target (a default target is used if not specified). For example:
71d0dff9baSBernard Iremonger
72d0dff9baSBernard Iremonger    .. note::
73d0dff9baSBernard Iremonger
74d0dff9baSBernard Iremonger        This application is intended as a linuxapp only.
75d0dff9baSBernard Iremonger
76d0dff9baSBernard Iremonger    .. code-block:: console
77d0dff9baSBernard Iremonger
78d0dff9baSBernard Iremonger        export RTE_TARGET=x86_64-native-linuxapp-gcc
79d0dff9baSBernard Iremonger
80d0dff9baSBernard Iremonger#.  Build the application:
81d0dff9baSBernard Iremonger
82d0dff9baSBernard Iremonger    .. code-block:: console
83d0dff9baSBernard Iremonger
84d0dff9baSBernard Iremonger        make
85d0dff9baSBernard Iremonger
86d0dff9baSBernard Iremonger.. note::
87d0dff9baSBernard Iremonger
88d0dff9baSBernard Iremonger    To get statistics on the sample app using the command line interface as described in the next section,
89d0dff9baSBernard Iremonger    DPDK must be compiled defining *CONFIG_RTE_SCHED_COLLECT_STATS*,
90d0dff9baSBernard Iremonger    which can be done by changing the configuration file for the specific target to be compiled.
91d0dff9baSBernard Iremonger
92d0dff9baSBernard IremongerRunning the Application
93d0dff9baSBernard Iremonger-----------------------
94d0dff9baSBernard Iremonger
95d0dff9baSBernard Iremonger.. note::
96d0dff9baSBernard Iremonger
97d0dff9baSBernard Iremonger    In order to run the application, a total of at least 4
98d0dff9baSBernard Iremonger    G of huge pages must be set up for each of the used sockets (depending on the cores in use).
99d0dff9baSBernard Iremonger
100d0dff9baSBernard IremongerThe application has a number of command line options:
101d0dff9baSBernard Iremonger
102d0dff9baSBernard Iremonger.. code-block:: console
103d0dff9baSBernard Iremonger
104d0dff9baSBernard Iremonger    ./qos_sched [EAL options] -- <APP PARAMS>
105d0dff9baSBernard Iremonger
106d0dff9baSBernard IremongerMandatory application parameters include:
107d0dff9baSBernard Iremonger
108d0dff9baSBernard Iremonger*   --pfc "RX PORT, TX PORT, RX LCORE, WT LCORE, TX CORE": Packet flow configuration.
109d0dff9baSBernard Iremonger    Multiple pfc entities can be configured in the command line,
110d0dff9baSBernard Iremonger    having 4 or 5 items (if TX core defined or not).
111d0dff9baSBernard Iremonger
112d0dff9baSBernard IremongerOptional application parameters include:
113d0dff9baSBernard Iremonger
114d0dff9baSBernard Iremonger*   -i: It makes the application to start in the interactive mode.
115d0dff9baSBernard Iremonger    In this mode, the application shows a command line that can be used for obtaining statistics while
116d0dff9baSBernard Iremonger    scheduling is taking place (see interactive mode below for more information).
117d0dff9baSBernard Iremonger
118d0dff9baSBernard Iremonger*   --mst n: Master core index (the default value is 1).
119d0dff9baSBernard Iremonger
120d0dff9baSBernard Iremonger*   --rsz "A, B, C": Ring sizes:
121d0dff9baSBernard Iremonger
122d0dff9baSBernard Iremonger*   A = Size (in number of buffer descriptors) of each of the NIC RX rings read
123d0dff9baSBernard Iremonger    by the I/O RX lcores (the default value is 128).
124d0dff9baSBernard Iremonger
125d0dff9baSBernard Iremonger*   B = Size (in number of elements) of each of the software rings used
126d0dff9baSBernard Iremonger    by the I/O RX lcores to send packets to worker lcores (the default value is 8192).
127d0dff9baSBernard Iremonger
128d0dff9baSBernard Iremonger*   C = Size (in number of buffer descriptors) of each of the NIC TX rings written
129d0dff9baSBernard Iremonger    by worker lcores (the default value is 256)
130d0dff9baSBernard Iremonger
131d0dff9baSBernard Iremonger*   --bsz "A, B, C, D": Burst sizes
132d0dff9baSBernard Iremonger
133d0dff9baSBernard Iremonger*   A = I/O RX lcore read burst size from the NIC RX (the default value is 64)
134d0dff9baSBernard Iremonger
135d0dff9baSBernard Iremonger*   B = I/O RX lcore write burst size to the output software rings,
136d0dff9baSBernard Iremonger    worker lcore read burst size from input software rings,QoS enqueue size (the default value is 64)
137d0dff9baSBernard Iremonger
138d0dff9baSBernard Iremonger*   C = QoS dequeue size (the default value is 32)
139d0dff9baSBernard Iremonger
140d0dff9baSBernard Iremonger*   D = Worker lcore write burst size to the NIC TX (the default value is 64)
141d0dff9baSBernard Iremonger
142d0dff9baSBernard Iremonger*   --msz M: Mempool size (in number of mbufs) for each pfc (default 2097152)
143d0dff9baSBernard Iremonger
144d0dff9baSBernard Iremonger*   --rth "A, B, C": The RX queue threshold parameters
145d0dff9baSBernard Iremonger
146d0dff9baSBernard Iremonger*   A = RX prefetch threshold (the default value is 8)
147d0dff9baSBernard Iremonger
148d0dff9baSBernard Iremonger*   B = RX host threshold (the default value is 8)
149d0dff9baSBernard Iremonger
150d0dff9baSBernard Iremonger*   C = RX write-back threshold (the default value is 4)
151d0dff9baSBernard Iremonger
152d0dff9baSBernard Iremonger*   --tth "A, B, C": TX queue threshold parameters
153d0dff9baSBernard Iremonger
154d0dff9baSBernard Iremonger*   A = TX prefetch threshold (the default value is 36)
155d0dff9baSBernard Iremonger
156d0dff9baSBernard Iremonger*   B = TX host threshold (the default value is 0)
157d0dff9baSBernard Iremonger
158d0dff9baSBernard Iremonger*   C = TX write-back threshold (the default value is 0)
159d0dff9baSBernard Iremonger
160d0dff9baSBernard Iremonger*   --cfg FILE: Profile configuration to load
161d0dff9baSBernard Iremonger
162e0c7c473SSiobhan ButlerRefer to *DPDK Getting Started Guide* for general information on running applications and
163d0dff9baSBernard Iremongerthe Environment Abstraction Layer (EAL) options.
164d0dff9baSBernard Iremonger
165d0dff9baSBernard IremongerThe profile configuration file defines all the port/subport/pipe/traffic class/queue parameters
166d0dff9baSBernard Iremongerneeded for the QoS scheduler configuration.
167d0dff9baSBernard Iremonger
168d0dff9baSBernard IremongerThe profile file has the following format:
169d0dff9baSBernard Iremonger
170d0dff9baSBernard Iremonger::
171d0dff9baSBernard Iremonger
172d0dff9baSBernard Iremonger    ; port configuration [port]
173d0dff9baSBernard Iremonger
174d0dff9baSBernard Iremonger    frame overhead = 24
175d0dff9baSBernard Iremonger    number of subports per port = 1
176d0dff9baSBernard Iremonger    number of pipes per subport = 4096
177d0dff9baSBernard Iremonger    queue sizes = 64 64 64 64
178d0dff9baSBernard Iremonger
179d0dff9baSBernard Iremonger    ; Subport configuration
180d0dff9baSBernard Iremonger
181d0dff9baSBernard Iremonger    [subport 0]
182d0dff9baSBernard Iremonger    tb rate = 1250000000; Bytes per second
183d0dff9baSBernard Iremonger    tb size = 1000000; Bytes
184d0dff9baSBernard Iremonger    tc 0 rate = 1250000000;     Bytes per second
185d0dff9baSBernard Iremonger    tc 1 rate = 1250000000;     Bytes per second
186d0dff9baSBernard Iremonger    tc 2 rate = 1250000000;     Bytes per second
187d0dff9baSBernard Iremonger    tc 3 rate = 1250000000;     Bytes per second
188d0dff9baSBernard Iremonger    tc period = 10;             Milliseconds
189d0dff9baSBernard Iremonger    tc oversubscription period = 10;     Milliseconds
190d0dff9baSBernard Iremonger
191d0dff9baSBernard Iremonger    pipe 0-4095 = 0;        These pipes are configured with pipe profile 0
192d0dff9baSBernard Iremonger
193d0dff9baSBernard Iremonger    ; Pipe configuration
194d0dff9baSBernard Iremonger
195d0dff9baSBernard Iremonger    [pipe profile 0]
196d0dff9baSBernard Iremonger    tb rate = 305175; Bytes per second
197d0dff9baSBernard Iremonger    tb size = 1000000; Bytes
198d0dff9baSBernard Iremonger
199d0dff9baSBernard Iremonger    tc 0 rate = 305175; Bytes per second
200d0dff9baSBernard Iremonger    tc 1 rate = 305175; Bytes per second
201d0dff9baSBernard Iremonger    tc 2 rate = 305175; Bytes per second
202d0dff9baSBernard Iremonger    tc 3 rate = 305175; Bytes per second
203d0dff9baSBernard Iremonger    tc period = 40; Milliseconds
204d0dff9baSBernard Iremonger
205d0dff9baSBernard Iremonger    tc 0 oversubscription weight = 1
206d0dff9baSBernard Iremonger    tc 1 oversubscription weight = 1
207d0dff9baSBernard Iremonger    tc 2 oversubscription weight = 1
208d0dff9baSBernard Iremonger    tc 3 oversubscription weight = 1
209d0dff9baSBernard Iremonger
210d0dff9baSBernard Iremonger    tc 0 wrr weights = 1 1 1 1
211d0dff9baSBernard Iremonger    tc 1 wrr weights = 1 1 1 1
212d0dff9baSBernard Iremonger    tc 2 wrr weights = 1 1 1 1
213d0dff9baSBernard Iremonger    tc 3 wrr weights = 1 1 1 1
214d0dff9baSBernard Iremonger
215d0dff9baSBernard Iremonger    ; RED params per traffic class and color (Green / Yellow / Red)
216d0dff9baSBernard Iremonger
217d0dff9baSBernard Iremonger    [red]
218d0dff9baSBernard Iremonger    tc 0 wred min = 48 40 32
219d0dff9baSBernard Iremonger    tc 0 wred max = 64 64 64
220d0dff9baSBernard Iremonger    tc 0 wred inv prob = 10 10 10
221d0dff9baSBernard Iremonger    tc 0 wred weight = 9 9 9
222d0dff9baSBernard Iremonger
223d0dff9baSBernard Iremonger    tc 1 wred min = 48 40 32
224d0dff9baSBernard Iremonger    tc 1 wred max = 64 64 64
225d0dff9baSBernard Iremonger    tc 1 wred inv prob = 10 10 10
226d0dff9baSBernard Iremonger    tc 1 wred weight = 9 9 9
227d0dff9baSBernard Iremonger
228d0dff9baSBernard Iremonger    tc 2 wred min = 48 40 32
229d0dff9baSBernard Iremonger    tc 2 wred max = 64 64 64
230d0dff9baSBernard Iremonger    tc 2 wred inv prob = 10 10 10
231d0dff9baSBernard Iremonger    tc 2 wred weight = 9 9 9
232d0dff9baSBernard Iremonger
233d0dff9baSBernard Iremonger    tc 3 wred min = 48 40 32
234d0dff9baSBernard Iremonger    tc 3 wred max = 64 64 64
235d0dff9baSBernard Iremonger    tc 3 wred inv prob = 10 10 10
236d0dff9baSBernard Iremonger    tc 3 wred weight = 9 9 9
237d0dff9baSBernard Iremonger
238d0dff9baSBernard IremongerInteractive mode
239d0dff9baSBernard Iremonger~~~~~~~~~~~~~~~~
240d0dff9baSBernard Iremonger
241d0dff9baSBernard IremongerThese are the commands that are currently working under the command line interface:
242d0dff9baSBernard Iremonger
243d0dff9baSBernard Iremonger*   Control Commands
244d0dff9baSBernard Iremonger
245d0dff9baSBernard Iremonger*   --quit: Quits the application.
246d0dff9baSBernard Iremonger
247d0dff9baSBernard Iremonger*   General Statistics
248d0dff9baSBernard Iremonger
249d0dff9baSBernard Iremonger    *   stats app: Shows a table with in-app calculated statistics.
250d0dff9baSBernard Iremonger
251d0dff9baSBernard Iremonger    *   stats port X subport Y: For a specific subport, it shows the number of packets that
252d0dff9baSBernard Iremonger        went through the scheduler properly and the number of packets that were dropped.
253d0dff9baSBernard Iremonger        The same information is shown in bytes.
254d0dff9baSBernard Iremonger        The information is displayed in a table separating it in different traffic classes.
255d0dff9baSBernard Iremonger
256d0dff9baSBernard Iremonger    *   stats port X subport Y pipe Z: For a specific pipe, it shows the number of packets that
257d0dff9baSBernard Iremonger        went through the scheduler properly and the number of packets that were dropped.
258d0dff9baSBernard Iremonger        The same information is shown in bytes.
259d0dff9baSBernard Iremonger        This information is displayed in a table separating it in individual queues.
260d0dff9baSBernard Iremonger
261d0dff9baSBernard Iremonger*   Average queue size
262d0dff9baSBernard Iremonger
263d0dff9baSBernard IremongerAll of these commands work the same way, averaging the number of packets throughout a specific subset of queues.
264d0dff9baSBernard Iremonger
265d0dff9baSBernard IremongerTwo parameters can be configured for this prior to calling any of these commands:
266d0dff9baSBernard Iremonger
267d0dff9baSBernard Iremonger    *   qavg n X: n is the number of times that the calculation will take place.
268d0dff9baSBernard Iremonger        Bigger numbers provide higher accuracy. The default value is 10.
269d0dff9baSBernard Iremonger
270d0dff9baSBernard Iremonger    *   qavg period X: period is the number of microseconds that will be allowed between each calculation.
271d0dff9baSBernard Iremonger        The default value is 100.
272d0dff9baSBernard Iremonger
273d0dff9baSBernard IremongerThe commands that can be used for measuring average queue size are:
274d0dff9baSBernard Iremonger
275d0dff9baSBernard Iremonger*   qavg port X subport Y: Show average queue size per subport.
276d0dff9baSBernard Iremonger
277d0dff9baSBernard Iremonger*   qavg port X subport Y tc Z: Show average queue size per subport for a specific traffic class.
278d0dff9baSBernard Iremonger
279d0dff9baSBernard Iremonger*   qavg port X subport Y pipe Z: Show average queue size per pipe.
280d0dff9baSBernard Iremonger
281d0dff9baSBernard Iremonger*   qavg port X subport Y pipe Z tc A: Show average queue size per pipe for a specific traffic class.
282d0dff9baSBernard Iremonger
283d0dff9baSBernard Iremonger*   qavg port X subport Y pipe Z tc A q B: Show average queue size of a specific queue.
284d0dff9baSBernard Iremonger
285d0dff9baSBernard IremongerExample
286d0dff9baSBernard Iremonger~~~~~~~
287d0dff9baSBernard Iremonger
288d0dff9baSBernard IremongerThe following is an example command with a single packet flow configuration:
289d0dff9baSBernard Iremonger
290d0dff9baSBernard Iremonger.. code-block:: console
291d0dff9baSBernard Iremonger
292*35b09d76SKeith Wiles    ./qos_sched -l 1,5,7 -n 4 -- --pfc "3,2,5,7" --cfg ./profile.cfg
293d0dff9baSBernard Iremonger
294d0dff9baSBernard IremongerThis example uses a single packet flow configuration which creates one RX thread on lcore 5 reading
295d0dff9baSBernard Iremongerfrom port 3 and a worker thread on lcore 7 writing to port 2.
296d0dff9baSBernard Iremonger
297d0dff9baSBernard IremongerAnother example with 2 packet flow configurations using different ports but sharing the same core for QoS scheduler is given below:
298d0dff9baSBernard Iremonger
299d0dff9baSBernard Iremonger.. code-block:: console
300d0dff9baSBernard Iremonger
301*35b09d76SKeith Wiles   ./qos_sched -l 1,2,6,7 -n 4 -- --pfc "3,2,2,6,7" --pfc "1,0,2,6,7" --cfg ./profile.cfg
302d0dff9baSBernard Iremonger
303d0dff9baSBernard IremongerNote that independent cores for the packet flow configurations for each of the RX, WT and TX thread are also supported,
304d0dff9baSBernard Iremongerproviding flexibility to balance the work.
305d0dff9baSBernard Iremonger
306*35b09d76SKeith WilesThe EAL coremask/corelist is constrained to contain the default mastercore 1 and the RX, WT and TX cores only.
307d0dff9baSBernard Iremonger
308d0dff9baSBernard IremongerExplanation
309d0dff9baSBernard Iremonger-----------
310d0dff9baSBernard Iremonger
311d0dff9baSBernard IremongerThe Port/Subport/Pipe/Traffic Class/Queue are the hierarchical entities in a typical QoS application:
312d0dff9baSBernard Iremonger
313d0dff9baSBernard Iremonger*   A subport represents a predefined group of users.
314d0dff9baSBernard Iremonger
315d0dff9baSBernard Iremonger*   A pipe represents an individual user/subscriber.
316d0dff9baSBernard Iremonger
317d0dff9baSBernard Iremonger*   A traffic class is the representation of a different traffic type with a specific loss rate,
318d0dff9baSBernard Iremonger    delay and jitter requirements; such as data voice, video or data transfers.
319d0dff9baSBernard Iremonger
320d0dff9baSBernard Iremonger*   A queue hosts packets from one or multiple connections of the same type belonging to the same user.
321d0dff9baSBernard Iremonger
322d0dff9baSBernard IremongerThe traffic flows that need to be configured are application dependent.
323d0dff9baSBernard IremongerThis application classifies based on the QinQ double VLAN tags and the IP destination address as indicated in the following table.
324d0dff9baSBernard Iremonger
3258c9a3374SJohn McNamara.. _table_qos_scheduler_1:
326d0dff9baSBernard Iremonger
3278c9a3374SJohn McNamara.. table:: Entity Types
328d0dff9baSBernard Iremonger
329d0dff9baSBernard Iremonger   +----------------+-------------------------+--------------------------------------------------+----------------------------------+
330d0dff9baSBernard Iremonger   | **Level Name** | **Siblings per Parent** | **QoS Functional Description**                   | **Selected By**                  |
331d0dff9baSBernard Iremonger   |                |                         |                                                  |                                  |
332d0dff9baSBernard Iremonger   +================+=========================+==================================================+==================================+
333d0dff9baSBernard Iremonger   | Port           | -                       | Ethernet port                                    | Physical port                    |
334d0dff9baSBernard Iremonger   |                |                         |                                                  |                                  |
335d0dff9baSBernard Iremonger   +----------------+-------------------------+--------------------------------------------------+----------------------------------+
336d0dff9baSBernard Iremonger   | Subport        | Config (8)              | Traffic shaped (token bucket)                    | Outer VLAN tag                   |
337d0dff9baSBernard Iremonger   |                |                         |                                                  |                                  |
338d0dff9baSBernard Iremonger   +----------------+-------------------------+--------------------------------------------------+----------------------------------+
339d0dff9baSBernard Iremonger   | Pipe           | Config (4k)             | Traffic shaped (token bucket)                    | Inner VLAN tag                   |
340d0dff9baSBernard Iremonger   |                |                         |                                                  |                                  |
341d0dff9baSBernard Iremonger   +----------------+-------------------------+--------------------------------------------------+----------------------------------+
342d0dff9baSBernard Iremonger   | Traffic Class  | 4                       | TCs of the same pipe services in strict priority | Destination IP address (0.0.X.0) |
343d0dff9baSBernard Iremonger   |                |                         |                                                  |                                  |
344d0dff9baSBernard Iremonger   +----------------+-------------------------+--------------------------------------------------+----------------------------------+
345d0dff9baSBernard Iremonger   | Queue          | 4                       | Queue of the same TC serviced in WRR             | Destination IP address (0.0.0.X) |
346d0dff9baSBernard Iremonger   |                |                         |                                                  |                                  |
347d0dff9baSBernard Iremonger   +----------------+-------------------------+--------------------------------------------------+----------------------------------+
348d0dff9baSBernard Iremonger
349e0c7c473SSiobhan ButlerPlease refer to the "QoS Scheduler" chapter in the *DPDK Programmer's Guide* for more information about these parameters.
350