_fdserver.c:
#define FDSERVER_MAX_ENTRIES 256
/* store the file descriptor in table: */
if (fd_table_nb_entries < FDSERVER_MAX_ENTRIES) {
} else {
ODP_ERR("FD table full\n");
Weird that you get this but not we.
It is probably related to the scalable scheduler requesting a smh
object per queue. This is a left-over from the prototype, perhaps it
needs to be fixed, allocate one shm for all queues. Still may need a
shm per ring buffer though...
Perhaps we need to increase/remove this arbitrary limit on 256 FD entries.
On 5 April 2017 at 14:05, Bill Fischofer <[email protected]> wrote:
> Environment is Ubuntu 16.10.
>
> On Wed, Apr 5, 2017 at 7:03 AM, Bill Fischofer
> <[email protected]> wrote:
>> This is running on my desktop x86:
>>
>> ./bootstrap
>> ./configure --enable-schedule-scalable --enable-cunit-support
>> make
>> cd test/common_plat/validation/api/scheduler
>> ./scheduler_main
>>
>> On Tue, Apr 4, 2017 at 10:24 PM, Honnappa Nagarahalli
>> <[email protected]> wrote:
>>> On 4 April 2017 at 16:12, Bill Fischofer <[email protected]> wrote:
>>>> 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.
>>>
>>> We have done considerable amount of testing on x86 as well as ARM with
>>> different schedulers.
>>> Can you provide more details?
>>> What is the config command you used?
>>> What platform (x86 vs ARM)?
>>> I assume you are running 'make check'.
>>>
>>>>
>>>> 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
>>>>>