xref: /dpdk/doc/guides/eventdevs/dsw.rst (revision bd99189724b84e8c58a77112e9089d6fc38730cb)
1..  SPDX-License-Identifier: BSD-3-Clause
2    Copyright(c) 2018 Ericsson AB
3
4Distributed Software Eventdev Poll Mode Driver
5==============================================
6
7The distributed software event device is an eventdev driver which
8distributes the task of scheduling events among all the eventdev ports
9and the lcore threads using them.
10
11Features
12--------
13
14Queues
15 * Atomic
16 * Parallel
17 * Single-Link
18
19Ports
20 * Load balanced (for Atomic, Ordered, Parallel queues)
21 * Single Link (for single-link queues)
22
23Configuration and Options
24-------------------------
25
26The distributed software eventdev is a vdev device, and as such can be
27created from the application code, or from the EAL command line:
28
29* Call ``rte_vdev_init("event_dsw0")`` from the application
30
31* Use ``--vdev="event_dsw0"`` in the EAL options, which will call
32  rte_vdev_init() internally
33
34Example:
35
36.. code-block:: console
37
38    ./your_eventdev_application --vdev="event_dsw0"
39
40Limitations
41-----------
42
43Port Maintenance
44~~~~~~~~~~~~~~~~
45
46The distributed software eventdev uses an internal signaling scheme
47between the ports to achieve load balancing. Therefore, it does not
48set the ``RTE_EVENT_DEV_CAP_MAINTENANCE_FREE`` flag.
49
50During periods when the application thread using a particular port is
51neither attempting to enqueue nor to dequeue events, it must
52repeatedly call rte_event_maintain() on that port.
53
54Ports left unmaintained for long periods of time will prevent load
55balancing and cause traffic interruptions on flows which are in the
56process of being migrated.
57
58Output Buffering
59~~~~~~~~~~~~~~~~
60
61For efficiency reasons, the distributed software eventdev might not
62send enqueued events immediately to the destination port, but instead
63store them in an internal buffer in the source port.
64
65In case no more events are enqueued on a port with buffered events,
66these events will be sent after the application has performed a number
67of enqueue and/or dequeue operations.
68
69To immediately flush a port's output buffer, an application may call
70rte_event_maintain() with op set to ``RTE_EVENT_DEV_MAINT_OP_FLUSH``.
71
72Repeated calls to rte_event_maintain() will also flush the output
73buffers.
74
75
76Priorities
77~~~~~~~~~~
78
79The distributed software eventdev does not support event priorities.
80
81Ordered Queues
82~~~~~~~~~~~~~~
83
84The distributed software eventdev does not support the ordered queue type.
85
86
87"All Types" Queues
88~~~~~~~~~~~~~~~~~~
89
90The distributed software eventdev does not support queues of type
91RTE_EVENT_QUEUE_CFG_ALL_TYPES, which allow both atomic, ordered, and
92parallel events on the same queue.
93
94Dynamic Link/Unlink
95~~~~~~~~~~~~~~~~~~~
96
97The distributed software eventdev does not support calls to
98rte_event_port_link() or rte_event_port_unlink() after
99rte_event_dev_start() has been called.
100