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