_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 <bill.fischo...@linaro.org> wrote: > Environment is Ubuntu 16.10. > > On Wed, Apr 5, 2017 at 7:03 AM, Bill Fischofer > <bill.fischo...@linaro.org> 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 >> <honnappa.nagaraha...@linaro.org> wrote: >>> On 4 April 2017 at 16:12, Bill Fischofer <bill.fischo...@linaro.org> 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 <brian.bro...@arm.com> 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 >>>>>