When I compile configure this without --enable-schedule-scalable the
scheduler validation test runs normally, however if I enable the new
scheduler I get this output:
...
CUnit - A unit testing framework for C - Version 2.1-3
http://cunit.sourceforge.net/
_fdserver.c:463:handle_request():FD table full
_fdserver.c:297:_odp_fdserver_register_fd():fd registration failure
_fdserver.c:463:handle_request():FD table full
_fdserver.c:297:_odp_fdserver_register_fd():fd registration failure
_fdserver.c:463:handle_request():FD table full
_fdserver.c:297:_odp_fdserver_register_fd():fd registration failure
_fdserver.c:463:handle_request():FD table full
_fdserver.c:297:_odp_fdserver_register_fd():fd registration failure
_fdserver.c:463:handle_request():FD table full
_fdserver.c:297:_odp_fdserver_register_fd():fd registration failure
_fdserver.c:463:handle_request():FD table full
_fdserver.c:297:_odp_fdserver_register_fd():fd registration failure
_fdserver.c:463:handle_request():FD table full
...lots more lines like this
_fdserver.c:297:_odp_fdserver_register_fd():fd registration failure
Suite: Scheduler
Test: scheduler_test_wait_time
..._fdserver.c:463:handle_request():FD table full
_fdserver.c:297:_odp_fdserver_register_fd():fd registration failure
1..2..3..4..5.._fdserver.c:342:_odp_fdserver_deregister_fd():fd
de-registration failure
passed
Test: scheduler_test_num_prio ...passed
Test: scheduler_test_queue_destroy
..._fdserver.c:463:handle_request():FD table full
_fdserver.c:297:_odp_fdserver_register_fd():fd registration failure
_fdserver.c:463:handle_request():FD table full
_fdserver.c:297:_odp_fdserver_register_fd():fd registration failure
_fdserver.c:463:handle_request():FD table full
_fdserver.c:297:_odp_fdserver_register_fd():fd registration failure
_fdserver.c:342:_odp_fdserver_deregister_fd():fd de-registration failure
_fdserver.c:463:handle_request():FD table full
_fdserver.c:297:_odp_fdserver_register_fd():fd registration failure
_fdserver.c:342:_odp_fdserver_deregister_fd():fd de-registration failure
_fdserver.c:463:handle_request():FD table full
_fdserver.c:297:_odp_fdserver_register_fd():fd registration failure
_fdserver.c:463:handle_request():FD table full
_fdserver.c:297:_odp_fdserver_register_fd():fd registration failure
_fdserver.c:342:_odp_fdserver_deregister_fd():fd de-registration failure
_fdserver.c:342:_odp_fdserver_deregister_fd():fd de-registration failure
_fdserver.c:342:_odp_fdserver_deregister_fd():fd de-registration failure
_fdserver.c:342:_odp_fdserver_deregister_fd():fd de-registration failure
passed
Test: scheduler_test_groups ..._fdserver.c:463:handle_request():FD table full
_fdserver.c:297:_odp_fdserver_register_fd():fd registration failure
_fdserver.c:463:handle_request():FD table full
_fdserver.c:297:_odp_fdserver_register_fd():fd registration failure
_fdserver.c:463:handle_request():FD table full
_fdserver.c:297:_odp_fdserver_register_fd():fd registration failure
_fdserver.c:342:_odp_fdserver_deregister_fd():fd de-registration failure
_fdserver.c:463:handle_request():FD table full
_fdserver.c:297:_odp_fdserver_register_fd():fd registration failure
_fdserver.c:463:handle_request():FD table full
_fdserver.c:297:_odp_fdserver_register_fd():fd registration failure
_fdserver.c:463:handle_request():FD table full
_fdserver.c:297:_odp_fdserver_register_fd():fd registration failure
_fdserver.c:463:handle_request():FD table full
_fdserver.c:297:_odp_fdserver_register_fd():fd registration failure
_fdserver.c:342:_odp_fdserver_deregister_fd():fd de-registration failure
_fdserver.c:342:_odp_fdserver_deregister_fd():fd de-registration failure
These messages repeat throughout the test even though it "passes".
Clearly something isn't right.
On Tue, Apr 4, 2017 at 1:47 PM, Brian Brooks <[email protected]> wrote:
> This work derives from Ola Liljedahl's prototype [1] which introduced a
> scalable scheduler design based on primarily lock-free algorithms and
> data structures designed to decrease contention. A thread searches
> through a data structure containing only queues that are both non-empty
> and allowed to be scheduled to that thread. Strict priority scheduling is
> respected, and (W)RR scheduling may be used within queues of the same
> priority.
> Lastly, pre-scheduling or stashing is not employed since it is optional
> functionality that can be implemented in the application.
>
> In addition to scalable ring buffers, the algorithm also uses unbounded
> concurrent queues. LL/SC and CAS variants exist in cases where absense of
> ABA problem cannot be proved, and also in cases where the compiler's atomic
> built-ins may not be lowered to the desired instruction(s). Finally, a version
> of the algorithm that uses locks is also provided.
>
> See platform/linux-generic/include/odp_config_internal.h for further build
> time configuration.
>
> Use --enable-schedule-scalable to conditionally compile this scheduler
> into the library.
>
> [1] https://lists.linaro.org/pipermail/lng-odp/2016-September/025682.html
>
> v2:
> - Move ARMv8 issues and other fixes into separate patches
> - Abstract away some #ifdefs
> - Fix some checkpatch.pl warnings
>
> Brian Brooks (14):
> Fix native Clang build on ARMv8
> api: queue: Add ring_size
> Add ODP_CONFIG_QUEUE_SIZE
> Fix a locking bug
> test: odp_scheduling: Handle dequeueing from a concurrent queue
> test: scheduler: Fixup calling release operations
> Avoid shm namespace collisions and allow shm block per queue
> Add _odp_packet_to_buf_hdr_ptr()
> Add scalable scheduler build config
> Add LL/SC and signaling primitives
> Add a bitset
> Add atomic ops for 128-bit scalars
> Add llqueue, an unbounded concurrent queue
> Add scalable scheduler
>
> Ola Liljedahl (2):
> linux-generic: ring.c: use required memory orderings
> helper: cuckootable: Specify queue ring_size
>
> configure.ac | 30 +-
> helper/cuckootable.c | 1 +
> include/odp/api/spec/queue.h | 5 +
> platform/linux-generic/Makefile.am | 21 +-
> .../include/odp/api/plat/schedule_types.h | 20 +-
> platform/linux-generic/include/odp_atomic16.h | 214 +++
> platform/linux-generic/include/odp_bitset.h | 155 ++
> .../linux-generic/include/odp_config_internal.h | 91 +-
> platform/linux-generic/include/odp_llqueue.h | 285 +++
> platform/linux-generic/include/odp_llsc.h | 332 ++++
> .../linux-generic/include/odp_packet_internal.h | 3 +
> .../linux-generic/include/odp_queue_internal.h | 122 +-
> platform/linux-generic/include/odp_schedule_if.h | 166 +-
> .../include/odp_schedule_ordered_internal.h | 150 ++
> platform/linux-generic/m4/odp_schedule.m4 | 55 +-
> platform/linux-generic/odp_classification.c | 4 +-
> platform/linux-generic/odp_packet.c | 5 +
> platform/linux-generic/odp_packet_io.c | 88 +-
> platform/linux-generic/odp_queue.c | 2 +-
> platform/linux-generic/odp_queue_scalable.c | 883 +++++++++
> platform/linux-generic/odp_schedule_if.c | 36 +-
> platform/linux-generic/odp_schedule_scalable.c | 1922
> ++++++++++++++++++++
> .../linux-generic/odp_schedule_scalable_ordered.c | 285 +++
> platform/linux-generic/odp_traffic_mngr.c | 7 +-
> platform/linux-generic/pktio/loop.c | 11 +-
> platform/linux-generic/pktio/ring.c | 30 +-
> test/common_plat/performance/odp_sched_latency.c | 68 +-
> test/common_plat/performance/odp_scheduling.c | 12 +-
> .../api/classification/odp_classification_basic.c | 8 +-
> .../classification/odp_classification_test_pmr.c | 42 +-
> .../validation/api/scheduler/scheduler.c | 11 +-
> test/common_plat/validation/api/timer/timer.c | 5 +-
> 32 files changed, 4922 insertions(+), 147 deletions(-)
> create mode 100644 platform/linux-generic/include/odp_atomic16.h
> create mode 100644 platform/linux-generic/include/odp_bitset.h
> create mode 100644 platform/linux-generic/include/odp_llqueue.h
> create mode 100644 platform/linux-generic/include/odp_llsc.h
> create mode 100644
> platform/linux-generic/include/odp_schedule_ordered_internal.h
> create mode 100644 platform/linux-generic/odp_queue_scalable.c
> create mode 100644 platform/linux-generic/odp_schedule_scalable.c
> create mode 100644 platform/linux-generic/odp_schedule_scalable_ordered.c
>
> --
> 2.12.2
>