event/dsw: reduce latency in low-load situations
authorMattias Rönnblom <mattias.ronnblom@ericsson.com>
Mon, 9 Mar 2020 06:50:59 +0000 (07:50 +0100)
committerJerin Jacob <jerinj@marvell.com>
Sat, 4 Apr 2020 13:10:17 +0000 (15:10 +0200)
In DSW, in case a port can't produce any events for the application to
consume, the port is considered idle.

To slightly reduce wall-time latency, flush the port's output buffer
in case of such an empty dequeue.

Signed-off-by: Mattias Rönnblom <mattias.ronnblom@ericsson.com>
drivers/event/dsw/dsw_event.c

index d68b71b..05abfb2 100644 (file)
@@ -1242,11 +1242,11 @@ dsw_event_dequeue_burst(void *port, struct rte_event *events, uint16_t num,
                 * seem to improve performance.
                 */
                dsw_port_record_seen_events(port, events, dequeued);
-       }
-       /* XXX: Assuming the port can't produce any more work,
-        *      consider flushing the output buffer, on dequeued ==
-        *      0.
-        */
+       } else /* Zero-size dequeue means a likely idle port, and thus
+               * we can afford trading some efficiency for a slightly
+               * reduced event wall-time latency.
+               */
+               dsw_port_flush_out_buffers(dsw, port);
 
 #ifdef DSW_SORT_DEQUEUED
        dsw_stable_sort(events, dequeued, sizeof(events[0]), dsw_cmp_event);