1.. SPDX-License-Identifier: BSD-3-Clause 2 Copyright(c) 2017 Intel Corporation. 3 4Eventdev Pipeline Sample Application 5==================================== 6 7The eventdev pipeline sample application is a sample app that demonstrates 8the usage of the eventdev API using the software PMD. It shows how an 9application can configure a pipeline and assign a set of worker cores to 10perform the processing required. 11 12The application has a range of command line arguments allowing it to be 13configured for various numbers worker cores, stages,queue depths and cycles per 14stage of work. This is useful for performance testing as well as quickly testing 15a particular pipeline configuration. 16 17 18Compiling the Application 19------------------------- 20 21To compile the sample application see :doc:`compiling`. 22 23The application is located in the ``examples`` sub-directory. 24 25 26 27Running the Application 28----------------------- 29 30The application has a lot of command line options. This allows specification of 31the eventdev PMD to use, and a number of attributes of the processing pipeline 32options. 33 34An example eventdev pipeline running with the software eventdev PMD using 35these settings is shown below: 36 37 * ``-l 0,2,8-15``: lcore to use 38 * ``-r1``: core mask 0x1 for RX 39 * ``-t1``: core mask 0x1 for TX 40 * ``-e4``: core mask 0x4 for the software scheduler 41 * ``-w FF00``: core mask for worker cores, 8 cores from 8th to 16th 42 * ``-s4``: 4 atomic stages 43 * ``-n0``: process infinite packets (run forever) 44 * ``-c32``: worker dequeue depth of 32 45 * ``-W1000``: do 1000 cycles of work per packet in each stage 46 * ``-D``: dump statistics on exit 47 48.. code-block:: console 49 50 ./<build_dir>/examples/dpdk-eventdev_pipeline -l 0,2,8-15 --vdev event_sw0 \ 51 -- -r1 -t1 -e4 -w FF00 -s4 -n0 -c32 -W1000 -D 52 53The application has some sanity checking built-in, so if there is a function 54(e.g.; the RX core) which doesn't have a cpu core mask assigned, the application 55will print an error message: 56 57.. code-block:: console 58 59 Core part of pipeline was not assigned any cores. This will stall the 60 pipeline, please check core masks (use -h for details on setting core masks): 61 rx: 0 62 tx: 1 63 64Configuration of the eventdev is covered in detail in the programmers guide, 65see the Event Device Library section. 66 67 68Observing the Application 69------------------------- 70 71At runtime the eventdev pipeline application prints out a summary of the 72configuration, and some runtime statistics like packets per second. On exit the 73worker statistics are printed, along with a full dump of the PMD statistics if 74required. The following sections show sample output for each of the output 75types. 76 77Configuration 78~~~~~~~~~~~~~ 79 80This provides an overview of the pipeline, 81scheduling type at each stage, and parameters to options such as how many 82flows to use and what eventdev PMD is in use. See the following sample output 83for details: 84 85.. code-block:: console 86 87 Config: 88 ports: 2 89 workers: 8 90 packets: 0 91 priorities: 1 92 Queue-prio: 0 93 qid0 type: atomic 94 Cores available: 44 95 Cores used: 10 96 Eventdev 0: event_sw 97 Stages: 98 Stage 0, Type Atomic Priority = 128 99 Stage 1, Type Atomic Priority = 128 100 Stage 2, Type Atomic Priority = 128 101 Stage 3, Type Atomic Priority = 128 102 103Runtime 104~~~~~~~ 105 106At runtime, the statistics of the consumer are printed, stating the number of 107packets received, runtime in milliseconds, average mpps, and current mpps. 108 109.. code-block:: console 110 111 # consumer RX= xxxxxxx, time yyyy ms, avg z.zzz mpps [current w.www mpps] 112 113Shutdown 114~~~~~~~~ 115 116At shutdown, the application prints the number of packets received and 117transmitted, and an overview of the distribution of work across worker cores. 118 119.. code-block:: console 120 121 Signal 2 received, preparing to exit... 122 worker 12 thread done. RX=4966581 TX=4966581 123 worker 13 thread done. RX=4963329 TX=4963329 124 worker 14 thread done. RX=4953614 TX=4953614 125 worker 0 thread done. RX=0 TX=0 126 worker 11 thread done. RX=4970549 TX=4970549 127 worker 10 thread done. RX=4986391 TX=4986391 128 worker 9 thread done. RX=4970528 TX=4970528 129 worker 15 thread done. RX=4974087 TX=4974087 130 worker 8 thread done. RX=4979908 TX=4979908 131 worker 2 thread done. RX=0 TX=0 132 133 Port Workload distribution: 134 worker 0 : 12.5 % (4979876 pkts) 135 worker 1 : 12.5 % (4970497 pkts) 136 worker 2 : 12.5 % (4986359 pkts) 137 worker 3 : 12.5 % (4970517 pkts) 138 worker 4 : 12.5 % (4966566 pkts) 139 worker 5 : 12.5 % (4963297 pkts) 140 worker 6 : 12.5 % (4953598 pkts) 141 worker 7 : 12.5 % (4974055 pkts) 142 143To get a full dump of the state of the eventdev PMD, pass the ``-D`` flag to 144this application. When the app is terminated using ``Ctrl+C``, the 145``rte_event_dev_dump()`` function is called, resulting in a dump of the 146statistics that the PMD provides. The statistics provided depend on the PMD 147used, see the Event Device Drivers section for a list of eventdev PMDs. 148