Given that my fix to Bug 2622 has been merged into API-NEXT, this will
need to be rebased against those changes as well to put the
buffer_alloc() code back to the way it was.

On Thu, Dec 1, 2016 at 5:37 AM, Matias Elo <matias....@nokia.com> wrote:
> 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
>

Reply via email to