[lttng-dev] [rp] [RFC] Readiness for URCU release with RCU lock-free hash table

Mathieu Desnoyers mathieu.desnoyers at efficios.com
Tue May 8 14:48:27 EDT 2012


* Paul E. McKenney (paulmck at linux.vnet.ibm.com) wrote:
> On Mon, May 07, 2012 at 12:10:55PM -0400, Mathieu Desnoyers wrote:
> > 
> > * Paul E. McKenney (paulmck at linux.vnet.ibm.com) wrote:
> > > On Fri, May 04, 2012 at 12:53:12PM -0400, Mathieu Desnoyers wrote:
> > [...]
> > > Just to make sure I understand -- the reason that the "del" functions
> > > say "no memory barrier" instead of "acts like rcu_dereference()" is
> > > that the "del" functions don't return anything.
> > >
> > [...]
> > > > @@ -391,6 +413,7 @@ int cds_lfht_del(struct cds_lfht *ht, struct cds_lfht_node *node);
> > > >   * function.
> > > >   * Call with rcu_read_lock held.
> > > >   * Threads calling this API need to be registered RCU read-side threads.
> > > > + * This function does not issue any memory barrier.
> > > >   */
> > 
> > One more question about the "del" memory ordering semantic. Following
> > commit
> > 
> > commit db00ccc36e7fb04ce8044fb1be7964acd1de6ae0
> > Author: Mathieu Desnoyers <mathieu.desnoyers at efficios.com>
> > Date:   Mon Dec 19 16:45:51 2011 -0500
> > 
> >     rculfhash: Relax atomicity guarantees required by removal operation
> > 
> >     The atomicity guarantees for the removal operation do not need to be as
> >     strict as a cmpxchg. Use a uatomic_set followed by a xchg on a newly
> >     introduced "REMOVAL_OWNER_FLAG" to perform removal.
> > 
> >     Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers at efficios.com>
> > 
> > 
> > The "del" operation is performed in two steps:
> > 
> > 1 - uatomic_or(), which sets the "REMOVED" flag (the actual tombstone)
> >     unconditionally into the node's next pointer.
> > 2 - uatomic_xchg(), which atomically exchanges the old pointer with
> >     its current value (read) or'd with the REMOVAL_OWNER flag. The trick
> >     is that if the xchg returns a pointer with the REMOVAL_OWNER flag
> >     set, it means we are not the first thread to set this flag, so we
> >     should not free the node. However, if xchg returns a node without
> >     the REMOVAL_OWNER flag set, we are indeed the first to set it, so
> >     we should call free.
> > 
> > Now regarding memory ordering semantics, should we consider the atomic
> > action of "del" to apply when the "or" is called, or when the "xchg" is
> > called ? Or should we simply document that the "del" effect on the node
> > happens in two separate steps ?
> > 
> > The way I see it, the actual effect of removal, as seen from RCU read
> > traversal and lookup point of view, is observed as soon as the "REMOVED"
> > tombstone is set, so I would think that the atomic publication of the
> > removal is performed by the "or".
> > 
> > However, we ensure full memory barriers around "xchg", but not usually 
> > around "or". Therefore, the current implementation does not issue a 
> > memory barrier before the "or", so we should either change our planned
> > memory barrier documentation, or the implementation, to match. This
> > would probably require creation of a cmm_smp_mb__before_uatomic_or(), so
> > x86 does not end up issuing a useless memory barrer.
> 
> My kneejerk reaction is that the "or" is really doing the deletion.
> Readers and other updaters care about the deletion, not about which CPU
> is going to do the free.
> 
> Or did I misunderstand how this works?

You got it right, this is how I see it too.

However, in order to provide a full memory barrier before the "or", we'd
need to add a cmm_smp_mb() before the "or" (I don't think we want to
presume that our "or" operation issues full memory barriers on all
architectures).

However, on x86, the "lock; or" does issue a full memory barrier. So I
think we should introduce a macro that can translate into a memory
barrier on architectures that need it, and to nothing on x86.

Thoughts ?

Thanks,

Mathieu

> 
> 							Thanx, Paul
> 
> > Thoughts ?
> > 
> > Thanks,
> > 
> > Mathieu
> > 
> > -- 
> > Mathieu Desnoyers
> > Operating System Efficiency R&D Consultant
> > EfficiOS Inc.
> > http://www.efficios.com
> > 
> > _______________________________________________
> > rp mailing list
> > rp at svcs.cs.pdx.edu
> > http://svcs.cs.pdx.edu/mailman/listinfo/rp
> > 
> 
> 
> _______________________________________________
> lttng-dev mailing list
> lttng-dev at lists.lttng.org
> http://lists.lttng.org/cgi-bin/mailman/listinfo/lttng-dev

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



More information about the lttng-dev mailing list