V3: - Removed old SCHEDULE_ORDERED_LOCKS_PER_QUEUE define (Bill) - Replaced error checks with asserts in ordered lock/unlock (Bill)
V2: - Support for multiple ordered locks (Bill) - New ordered lock implementation Add new implementation for ordered queues. Compared to the old implementation this is much simpler and improves performance ~1-4x depending on the test case. Some performance numbers are provided below. The implementation is based on an atomic ordered context, which only a single thread may possess at a time. Only the thread owning the atomic context may do enqueue(s) from the ordered queue. All other threads put their enqueued events to a thread local enqueue stash (ordered_stash_t). All stashed enqueue operations will be performed in the original order when the thread acquires the ordered context. If the ordered stash becomes full, the enqueue blocks. At the latest a thread blocks when the ev_stash is empty and the thread tries to release the order context. The patch set also resolves the following bug: https://bugs.linaro.org/show_bug.cgi?id=2644 Performance benchmarks: odp_l2fwd (64B packets) Throughput (Gbps) Cores Old New Gain (%) -------------------------------- 1: 3.0 7.0 136 2: 3.2 11.1 244 4: 5.0 17.6 252 6: 5.9 23.0 286 8: 7.0 28.6 307 10: 8.0 33.6 321 12: 8.7 38.2 340 odp_pktio_ordered (64B packets) Throughput (Gbps) Cores Old New Gain (%) -------------------------------- 1: 1.2 1.6 33 2: 1.1 1.8 64 4: 1.4 2.6 78 6: 1.3 2.9 125 8: 1.4 3.3 141 10: 1.3 3.5 175 12: 1.2 3.8 213 Matias Elo (5): linux-gen: sched: add internal APIs for locking/unlocking ordered processing linux-gen: sched: remove old ordered queue implementation linux-gen: sched: add internal API for max number of ordered locks per queue linux-gen: sched: new ordered queue implementation linux-gen: sched: new ordered lock implementation platform/linux-generic/Makefile.am | 3 - .../linux-generic/include/odp_buffer_internal.h | 7 - .../linux-generic/include/odp_config_internal.h | 5 + .../linux-generic/include/odp_packet_io_queue.h | 5 +- .../linux-generic/include/odp_queue_internal.h | 33 +- platform/linux-generic/include/odp_schedule_if.h | 15 +- .../linux-generic/include/odp_schedule_internal.h | 50 -- .../include/odp_schedule_ordered_internal.h | 25 - platform/linux-generic/odp_packet_io.c | 17 +- platform/linux-generic/odp_queue.c | 76 +- platform/linux-generic/odp_schedule.c | 281 ++++++- platform/linux-generic/odp_schedule_ordered.c | 818 --------------------- platform/linux-generic/odp_schedule_sp.c | 25 +- platform/linux-generic/odp_traffic_mngr.c | 28 +- platform/linux-generic/pktio/loop.c | 2 +- 15 files changed, 360 insertions(+), 1030 deletions(-) delete mode 100644 platform/linux-generic/include/odp_schedule_internal.h delete mode 100644 platform/linux-generic/include/odp_schedule_ordered_internal.h delete mode 100644 platform/linux-generic/odp_schedule_ordered.c -- 2.7.4