Reposting this since it doesn't seem to have made it to the mailing list. For this series:
Reviewed-and-tested-by: Bill Fischofer <[email protected]> On Tue, Nov 15, 2016 at 8:41 AM, Bill Fischofer <[email protected]> wrote: > For this series: > > Reviewed-and-tested-by: Bill Fischofer <[email protected]> > > On Thu, Nov 10, 2016 at 5:07 AM, Petri Savolainen < > [email protected]> wrote: > >> Pool performance is optimized by using a ring as the global buffer >> storage. >> IPC build is disabled, since it needs large modifications due to >> dependency to >> pool internals. Old pool implementation was based on locks and linked >> list of >> buffer headers. New implementation maintain a ring of buffer handles, >> which >> enable fast, burst based allocs and frees. Also ring scales better with >> number >> of cpus than a list (enq and deq operations update opposite ends of the >> pool). >> >> L2fwd link rate (%), 2 x 40GE, 64 byte packets >> >> direct- parallel- atomic- >> cpus orig direct diff orig parall diff orig atomic >> diff >> 1 7 % 8 % 1 % 6 % 6 % 2 % 5.4 % 5.6 % 4 >> % >> 2 14 % 15 % 7 % 9 % 9 % 5 % 8 % 9 % 8 >> % >> 4 28 % 30 % 6 % 13 % 14 % 13 % 12 % 15 % >> 19 % >> 6 42 % 44 % 6 % 16 % 19 % 19 % 8 % 20 % >> 150 % >> 8 46 % 59 % 28 % 19 % 23 % 26 % 18 % 24 % >> 34 % >> 10 55 % 57 % 3 % 20 % 27 % 37 % 8 % 28 % >> 264 % >> 12 56 % 56 % -1 % 22 % 31 % 43 % 7 % 32 % >> 357 % >> >> Max packet rate of NICs are reached with 10-12 cpu on direct mode. >> Otherwise, >> all cases were improved. Especially, scheduler driven cases suffered on >> bad >> pool scalability. >> >> changed in v3: >> * rebased >> * ipc disabled with #ifdef >> * added support for multi-segment packets >> * API: added explicit limits for packet length in alloc calls >> * Corrected validation test and example application bugs found during >> segmentation implementation >> >> changed in v2: >> * rebased to api-next branch >> * added a comment that ring size must be larger than number of items in it >> * fixed clang build issue >> * added parens in align macro >> >> v1 reviews: >> Reviewed-by: Brian Brooks <[email protected]> >> >> >> >> Petri Savolainen (19): >> linux-gen: ipc: disable build of ipc pktio >> linux-gen: pktio: do not free zero packets >> linux-gen: ring: created common ring implementation >> linux-gen: align: added round up power of two >> linux-gen: pool: reimplement pool with ring >> linux-gen: ring: added multi enq and deq >> linux-gen: pool: use ring multi enq and deq operations >> linux-gen: pool: optimize buffer alloc >> linux-gen: pool: clean up pool inlines functions >> linux-gen: pool: ptr instead of hdl in buffer_alloc_multi >> test: validation: buf: test alignment >> test: performance: crypto: use capability to select max packet >> test: correctly initialize pool parameters >> test: validation: packet: fix bugs in tailroom and concat tests >> linux-gen: packet: added support for segmented packets >> test: validation: packet: improved multi-segment alloc test >> api: packet: added limits for packet len on alloc >> linux-gen: packet: remove zero len support from alloc >> linux-gen: packet: enable multi-segment packets >> >> example/generator/odp_generator.c | 2 +- >> include/odp/api/spec/packet.h | 9 +- >> include/odp/api/spec/pool.h | 6 + >> platform/linux-generic/Makefile.am | 1 + >> .../include/odp/api/plat/packet_types.h | 6 +- >> .../include/odp/api/plat/pool_types.h | 6 - >> .../linux-generic/include/odp_align_internal.h | 34 +- >> .../linux-generic/include/odp_buffer_inlines.h | 167 +-- >> .../linux-generic/include/odp_buffer_internal.h | 120 +- >> .../include/odp_classification_datamodel.h | 2 +- >> .../linux-generic/include/odp_config_internal.h | 55 +- >> .../linux-generic/include/odp_packet_internal.h | 87 +- >> platform/linux-generic/include/odp_pool_internal.h | 289 +--- >> platform/linux-generic/include/odp_ring_internal.h | 176 +++ >> .../linux-generic/include/odp_timer_internal.h | 4 - >> platform/linux-generic/odp_buffer.c | 22 +- >> platform/linux-generic/odp_classification.c | 25 +- >> platform/linux-generic/odp_crypto.c | 12 +- >> platform/linux-generic/odp_packet.c | 717 ++++++++-- >> platform/linux-generic/odp_packet_io.c | 2 +- >> platform/linux-generic/odp_pool.c | 1440 >> ++++++++------------ >> platform/linux-generic/odp_queue.c | 4 +- >> platform/linux-generic/odp_schedule.c | 102 +- >> platform/linux-generic/odp_schedule_ordered.c | 4 +- >> platform/linux-generic/odp_timer.c | 3 +- >> platform/linux-generic/pktio/dpdk.c | 10 +- >> platform/linux-generic/pktio/ipc.c | 3 +- >> platform/linux-generic/pktio/loop.c | 2 +- >> platform/linux-generic/pktio/netmap.c | 14 +- >> platform/linux-generic/pktio/socket.c | 17 +- >> platform/linux-generic/pktio/socket_mmap.c | 10 +- >> test/common_plat/performance/odp_crypto.c | 47 +- >> test/common_plat/performance/odp_pktio_perf.c | 2 +- >> test/common_plat/performance/odp_scheduling.c | 8 +- >> test/common_plat/validation/api/buffer/buffer.c | 113 +- >> test/common_plat/validation/api/crypto/crypto.c | 2 +- >> test/common_plat/validation/api/packet/packet.c | 96 +- >> test/common_plat/validation/api/pktio/pktio.c | 21 +- >> 38 files changed, 1745 insertions(+), 1895 deletions(-) >> create mode 100644 platform/linux-generic/include/odp_ring_internal.h >> >> -- >> 2.8.1 >> >> >
