event/sw: use dynamically-sized IQs
authorGage Eads <gage.eads@intel.com>
Thu, 30 Nov 2017 03:08:34 +0000 (21:08 -0600)
committerJerin Jacob <jerin.jacob@caviumnetworks.com>
Fri, 19 Jan 2018 15:09:56 +0000 (16:09 +0100)
commitdca926ca9faa61b0ec7bdc93c605558d37b08fb1
treeb70bbee815517f34739872719b6d3cac746e258f
parente1f2dcdb8f5c01bb1296c5c6c03d39cdf368b91a
event/sw: use dynamically-sized IQs

This commit introduces dynamically-sized IQs, by switching the underlying
data structure from a fixed-size ring to a linked list of queue 'chunks.'
This has a number of benefits:
- Certain corner cases were observed in which all of a pipeline's flows
  could be pinned to one port for extended periods, effectively turning a
  multi-core pipeline into single-core one. This was caused by an event
  producer having a larger new_event_threshold than the IQ depth, and
  injecting large numbers of packets that are ultimately backpressured in a
  worker's rx_ring, causing those packets' flows to be scheduled to that
  port.
  The dynamically sized IQ does not have this problem because each IQ can
  grow large enough to store all the system's events, such that
  backpressure will not reach the worker_ring.
- Slight performance improvement (~1-2%) in high throughput scenarios,
  tested with eventdev_pipeline_sw_pmd.

This implementation has a small increase in the queue storage memory
footprint (~70KB). This commit also removes the iq_size xstat, which no
longer applies to this implementation.

Signed-off-by: Gage Eads <gage.eads@intel.com>
Acked-by: Harry van Haaren <harry.van.haaren@intel.com>
drivers/event/sw/iq_chunk.h [new file with mode: 0644]
drivers/event/sw/iq_ring.h [deleted file]
drivers/event/sw/sw_evdev.c
drivers/event/sw/sw_evdev.h
drivers/event/sw/sw_evdev_scheduler.c
drivers/event/sw/sw_evdev_xstats.c
test/test/test_eventdev_sw.c