Hi I just glance the code quickly...
__urcu_steal_work() and __urcu_wakeup_siblings don't test if they visit the queue->sibling_head. All the tasks may continue stealing works without any progress. Thanks, Lai On 10/19/2014 05:13 AM, Mathieu Desnoyers wrote: > Hi, > > I have written an implementation of a workqueue based > on wfcqueue (fifo workqueue), wfstack (lifo wait queue) > including a work-stealing scheme. I think this could > scale very naturally to large workloads, and it skips > the overhead of sys_futex when wakees are already running. > Since the wakeup scheme is very lightweight when work > is ongoing, we use it extensively. > > It also makes extensive use of wfcqueue "splice" operation > to move work batch in bulk amongst queue and worker > threads. It is a O(1) operation which does not need to > touch the content of the queue. > > RCU is used to lookup the sibling worker threads for > work stealing and to wake the siblings of a thread > busy handling work. > > It's at: > > git://git.urcu.so/urcu.git > branch: urcu/workqueue-wakeup > > or gitweb of the top commit: > http://git.lttng.org/?p=userspace-rcu.git;a=commit;h=2c6a5414ed2ab44be24211d15a5d9f1f40dbfc74 > > Note that this is work in progress, compile-tested only. > I also need to write extensive tests. > > Feedback is welcome, > > Thanks! > > Mathieu > _______________________________________________ lttng-dev mailing list [email protected] http://lists.lttng.org/cgi-bin/mailman/listinfo/lttng-dev
