This series is a proposal of multiqueue API for ODP.
Modern network adapters (both physical and virtual) support multiple
hardware queues.  Assigning separate CPU core for processing of each
queue allows to scale throughput (in best case - linearly).

This series should be considered a prototype.
This implementation of multiqueue API is not complete (not all the
code has been migrated to multiqueue API).  Existing packet IO API has
been left untouched and reimplemented using mutliqueue API (queue 0 is
always used in such cases).  The existing API is supposed to be
removed in the future, as soon as all the remaining code migrates to
the multiqueue API.
Since single lock for all the queues makes all pktio Rx and Tx calls
sequential, per queue locks have been added.
For the purpose of evaluation, multiqueue support has been added to
netmap pktio.

Patch 1 adds multiqueue prototypes of pktio API functions.
Patches 2-4 contain common implementation of the multiqueue API.
Patch 5 adds multiqueue support in netmap pktio.
Patch 6 moves odp_generator to multiqueue API.

In our tests (odp_generator sends packets, odp_generator receives
packets), the following results have been obtained:
+----------+------------------------+-------+
| # queues | kpps (64-byte packets) | boost |
+----------+------------------------+-------+
|        1 |                    853 | 1.00x |
|        2 |                   1404 | 1.64x |
|        4 |                   2374 | 2.78x |
|        8 |                   4345 | 5.09x |
+----------+------------------------+-------+

Nikita Kalyazin (6):
  api: pktio: add multiqueue API
  linux-generic: pktio: add per queue pktio locks
  linux-generic: pktio: implement multiqueue API (part I)
  linux-generic: pktio: imlement multiqueue API (part II)
  linux-generic: pktio: multiqueue support in netmap
  example: generator: use multiqueue API

 example/generator/odp_generator.c                  |  63 +++-
 include/odp/api/config.h                           |   7 +-
 include/odp/api/packet_io.h                        | 118 ++++++
 .../linux-generic/include/odp_packet_io_internal.h |  19 +-
 platform/linux-generic/include/odp_packet_netmap.h |   6 +-
 .../linux-generic/include/odp_queue_internal.h     |   2 +
 .../linux-generic/include/odp_schedule_internal.h  |   1 +
 platform/linux-generic/odp_packet_io.c             | 405 +++++++++++++++++----
 platform/linux-generic/odp_schedule.c              |  26 +-
 platform/linux-generic/pktio/netmap.c              | 218 +++++++++--
 10 files changed, 725 insertions(+), 140 deletions(-)

-- 
2.5.3

_______________________________________________
lng-odp mailing list
[email protected]
https://lists.linaro.org/mailman/listinfo/lng-odp

Reply via email to