[lttng-dev] Userspace RCU: workqueue with batching, cheap wakeup, and work stealing

Lai Jiangshan laijs at cn.fujitsu.com
Wed Oct 22 06:57:18 EDT 2014


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
> 




More information about the lttng-dev mailing list