[lttng-dev] [RFC] Feedback on 2 development branches: wfstack and lfstack

Mathieu Desnoyers mathieu.desnoyers at efficios.com
Mon Oct 15 09:28:07 EDT 2012


* Lai Jiangshan (laijs at cn.fujitsu.com) wrote:
> On 10/14/2012 02:12 AM, Mathieu Desnoyers wrote:
> > Hi!
> > 
> > I started modifying the stack APIs to reflect the changes we did for
> > wfcqueue, and also add pop_all() and iterators.
> > 
> > The volatile dev branches are available at:
> > 
> > http://git.dorsal.polymtl.ca/~compudj?p=userspace-rcu;a=shortlog;h=refs/heads/urcu/lfstack
> 
> I don't see the value of introducing struct cds_lfs_head.
> It can force the users to use for_each() for the return value of pop_all().
> Is it its purpose?

No exactly. The purpose of struct cds_lfs_head is to ensure that nobody
will attempt to use the for_each() iterators on struct cds_lfs_node
returned by __cds_lfs_pop(). I'm using typing to enforce usage
restrictions.

> 
> thr_dequeuer() of a8edcc02a25328647f91b4bbe8207e8cdfd317d3 is too complicated.
> ( I don't see the value of @counter)
> 
> do {
> 	...
> 	if (test_pop) {
> 		test_lfs_pop;
> 	}
> 	if (test_pop_all) {
> 		test_lfs_pop_all;
> 	}

I will refactor the duplicated code into functions.

The reason why I use a mask on a counter to select pop or pop all is to
ensure that we do the "loop_sleep(rduration)" delay equally for both pop
and pop_all. Moreover, it will be easier to change the rate of pop vs
pop_all in the future, using a randomization function rather than 50-50
chances.

The update for both lfs and wfs will be pushed shortly,

Thanks!

Mathieu

> 	...
> } while();
> 
> 
> 
> 
> 
> > or 
> > git://git.dorsal.polymtl.ca/~compudj/userspace-rcu
> > branch: urcu/lfstack
> > 
> > http://git.dorsal.polymtl.ca/~compudj?p=userspace-rcu;a=shortlog;h=refs/heads/urcu/wfstack
> > or
> > git://git.dorsal.polymtl.ca/~compudj/userspace-rcu
> > branch: urcu/wfstack
> > 
> > Sorry for not sending patches, I'm a bit time-constrained this weekend.
> > I am sending these links right away for review, because I think it might
> > be good to pull these commits into the master branch before we proceed
> > to other changes. And I want to minimize the amount of duplicated effort
> > between Lai and myself.
> > 
> > One of my next step will be to document the wfstack and lfstack APIs
> > more thoroughly (similarly to what we did for wfcqueue).
> > 
> > Then, my following step will be to see if I can implement a lfcqueue
> > API, derived from wfcqueue, but with lock-free enqueue semantic (a mix
> > of wfcqueue and rculfqueue).
> > 
> > Feedback is welcome!
> > 
> > Thanks,
> > 
> > Mathieu
> > 
> > 
> 

-- 
Mathieu Desnoyers
Operating System Efficiency R&D Consultant
EfficiOS Inc.
http://www.efficios.com



More information about the lttng-dev mailing list