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