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
