xref: /dpdk/doc/guides/eventdevs/sw.rst (revision 70207f35e21f8391dbb734391e11244b58343b44)
15630257fSFerruh Yigit..  SPDX-License-Identifier: BSD-3-Clause
25630257fSFerruh Yigit    Copyright(c) 2017 Intel Corporation.
30857b942SHarry van Haaren
40857b942SHarry van HaarenSoftware Eventdev Poll Mode Driver
50857b942SHarry van Haaren==================================
60857b942SHarry van Haaren
70857b942SHarry van HaarenThe software eventdev is an implementation of the eventdev API, that provides a
80857b942SHarry van Haarenwide range of the eventdev features. The eventdev relies on a CPU core to
9a599eb31SHarry van Haarenperform event scheduling. This PMD can use the service core library to run the
10a599eb31SHarry van Haarenscheduling function, allowing an application to utilize the power of service
11a599eb31SHarry van Haarencores to multiplex other work on the same core if required.
120857b942SHarry van Haaren
130857b942SHarry van Haaren
140857b942SHarry van HaarenFeatures
150857b942SHarry van Haaren--------
160857b942SHarry van Haaren
170857b942SHarry van HaarenThe software eventdev implements many features in the eventdev API;
180857b942SHarry van Haaren
190857b942SHarry van HaarenQueues
200857b942SHarry van Haaren * Atomic
210857b942SHarry van Haaren * Ordered
220857b942SHarry van Haaren * Parallel
230857b942SHarry van Haaren * Single-Link
240857b942SHarry van Haaren
250857b942SHarry van HaarenPorts
260857b942SHarry van Haaren * Load balanced (for Atomic, Ordered, Parallel queues)
270857b942SHarry van Haaren * Single Link (for single-link queues)
280857b942SHarry van Haaren
290857b942SHarry van HaarenEvent Priorities
300857b942SHarry van Haaren * Each event has a priority, which can be used to provide basic QoS
310857b942SHarry van Haaren
320857b942SHarry van Haaren
330857b942SHarry van HaarenConfiguration and Options
340857b942SHarry van Haaren-------------------------
350857b942SHarry van Haaren
360857b942SHarry van HaarenThe software eventdev is a vdev device, and as such can be created from the
370857b942SHarry van Haarenapplication code, or from the EAL command line:
380857b942SHarry van Haaren
392f6fec53SThomas Monjalon* Call ``rte_vdev_init("event_sw0")`` from the application
400857b942SHarry van Haaren
410857b942SHarry van Haaren* Use ``--vdev="event_sw0"`` in the EAL options, which will call
422f6fec53SThomas Monjalon  rte_vdev_init() internally
430857b942SHarry van Haaren
440857b942SHarry van HaarenExample:
450857b942SHarry van Haaren
460857b942SHarry van Haaren.. code-block:: console
470857b942SHarry van Haaren
480857b942SHarry van Haaren    ./your_eventdev_application --vdev="event_sw0"
490857b942SHarry van Haaren
500857b942SHarry van Haaren
510857b942SHarry van HaarenScheduling Quanta
520857b942SHarry van Haaren~~~~~~~~~~~~~~~~~
530857b942SHarry van Haaren
540857b942SHarry van HaarenThe scheduling quanta sets the number of events that the device attempts to
5512a33b67SPavan Nikhileshschedule in a single schedule call performed by the service core. Note that
5612a33b67SPavan Nikhileshis a *hint* only, and that fewer or more events may be scheduled in a given
5712a33b67SPavan Nikhileshiteration.
580857b942SHarry van Haaren
590857b942SHarry van HaarenThe scheduling quanta can be set using a string argument to the vdev
600857b942SHarry van Haarencreate call:
610857b942SHarry van Haaren
620857b942SHarry van Haaren.. code-block:: console
630857b942SHarry van Haaren
640857b942SHarry van Haaren    --vdev="event_sw0,sched_quanta=64"
650857b942SHarry van Haaren
660857b942SHarry van Haaren
670857b942SHarry van HaarenCredit Quanta
680857b942SHarry van Haaren~~~~~~~~~~~~~
690857b942SHarry van Haaren
700857b942SHarry van HaarenThe credit quanta is the number of credits that a port will fetch at a time from
710857b942SHarry van Haarenthe instance's credit pool. Higher numbers will cause less overhead in the
720857b942SHarry van Haarenatomic credit fetch code, however it also reduces the overall number of credits
73d629b7b5SJohn McNamarain the system faster. A balanced number (e.g. 32) ensures that only small numbers
740857b942SHarry van Haarenof credits are pre-allocated at a time, while also mitigating performance impact
750857b942SHarry van Haarenof the atomics.
760857b942SHarry van Haaren
770857b942SHarry van HaarenExperimentation with higher values may provide minor performance improvements,
780857b942SHarry van Haarenat the cost of the whole system having less credits. On the other hand,
790857b942SHarry van Haarenreducing the quanta may cause measurable performance impact but provide the
800857b942SHarry van Haarensystem with a higher number of credits at all times.
810857b942SHarry van Haaren
820857b942SHarry van HaarenA value of 32 seems a good balance however your specific application may
830857b942SHarry van Haarenbenefit from a higher or reduced quanta size, experimentation is required to
840857b942SHarry van Haarenverify possible gains.
850857b942SHarry van Haaren
860857b942SHarry van Haaren.. code-block:: console
870857b942SHarry van Haaren
880857b942SHarry van Haaren    --vdev="event_sw0,credit_quanta=64"
890857b942SHarry van Haaren
90*70207f35SRadu NicolauScheduler tuning arguments
91*70207f35SRadu Nicolau~~~~~~~~~~~~~~~~~~~~~~~~~~
92*70207f35SRadu Nicolau
93*70207f35SRadu NicolauThe scheduler minimum number of events that are processed can be increased to
94*70207f35SRadu Nicolaureduce per event overhead and increase internal burst sizes, which can
95*70207f35SRadu Nicolauimprove throughput.
96*70207f35SRadu Nicolau
97*70207f35SRadu Nicolau* ``min_burst`` specifies the minimum number of inflight events that can be
98*70207f35SRadu Nicolau  moved to the next stage in the scheduler. Default value is 1.
99*70207f35SRadu Nicolau
100*70207f35SRadu Nicolau* ``refill_once`` is a switch that when set instructs the scheduler to deque
101*70207f35SRadu Nicolau  the events waiting in the ingress rings only once per call. The default
102*70207f35SRadu Nicolau  behavior is to dequeue as needed.
103*70207f35SRadu Nicolau
104*70207f35SRadu Nicolau* ``deq_burst`` is the burst size used to dequeue from the port rings.
105*70207f35SRadu Nicolau  Default value is 32, and it should be increased to 64 or 128 when setting
106*70207f35SRadu Nicolau  ``refill_once=1``.
107*70207f35SRadu Nicolau
108*70207f35SRadu Nicolau.. code-block:: console
109*70207f35SRadu Nicolau
110*70207f35SRadu Nicolau    --vdev="event_sw0,min_burst=8,deq_burst=64,refill_once=1"
111*70207f35SRadu Nicolau
1120857b942SHarry van Haaren
1130857b942SHarry van HaarenLimitations
1140857b942SHarry van Haaren-----------
1150857b942SHarry van Haaren
1160857b942SHarry van HaarenThe software eventdev implementation has a few limitations. The reason for
1170857b942SHarry van Haarenthese limitations is usually that the performance impact of supporting the
1180857b942SHarry van Haarenfeature would be significant.
1190857b942SHarry van Haaren
1200857b942SHarry van Haaren
1210857b942SHarry van Haaren"All Types" Queues
1220857b942SHarry van Haaren~~~~~~~~~~~~~~~~~~
1230857b942SHarry van Haaren
1240857b942SHarry van HaarenThe software eventdev does not support creating queues that handle all types of
125d629b7b5SJohn McNamaratraffic. An eventdev with this capability allows enqueuing Atomic, Ordered and
1260857b942SHarry van HaarenParallel traffic to the same queue, but scheduling each of them appropriately.
1270857b942SHarry van Haaren
1280857b942SHarry van HaarenThe reason to not allow Atomic, Ordered and Parallel event types in the
1290857b942SHarry van Haarensame queue is that it causes excessive branching in the code to enqueue packets
1300857b942SHarry van Haarento the queue, causing a significant performance impact.
1310857b942SHarry van Haaren
1320857b942SHarry van HaarenThe ``RTE_EVENT_DEV_CAP_QUEUE_ALL_TYPES`` flag is not set in the
1330857b942SHarry van Haaren``event_dev_cap`` field of the ``rte_event_dev_info`` struct for the software
1340857b942SHarry van Haareneventdev.
1350857b942SHarry van Haaren
1360857b942SHarry van HaarenDistributed Scheduler
1370857b942SHarry van Haaren~~~~~~~~~~~~~~~~~~~~~
1380857b942SHarry van Haaren
13912a33b67SPavan NikhileshThe software eventdev is a centralized scheduler, requiring a service core to
14012a33b67SPavan Nikhileshperform the required event distribution. This is not really a limitation but
14112a33b67SPavan Nikhileshrather a design decision.
1420857b942SHarry van Haaren
1430857b942SHarry van HaarenThe ``RTE_EVENT_DEV_CAP_DISTRIBUTED_SCHED`` flag is not set in the
1440857b942SHarry van Haaren``event_dev_cap`` field of the ``rte_event_dev_info`` struct for the software
1450857b942SHarry van Haareneventdev.
1460857b942SHarry van Haaren
1470857b942SHarry van HaarenDequeue Timeout
1480857b942SHarry van Haaren~~~~~~~~~~~~~~~
1490857b942SHarry van Haaren
1500857b942SHarry van HaarenThe eventdev API supports a timeout when dequeuing packets using the
1510857b942SHarry van Haaren``rte_event_dequeue_burst`` function.
1520857b942SHarry van HaarenThis allows a core to wait for an event to arrive, or until ``timeout`` number
1530857b942SHarry van Haarenof ticks have passed. Timeout ticks is not supported by the software eventdev
1540857b942SHarry van Haarenfor performance reasons.
155