From: mathieu.desnoyers@efficios.com (Mathieu Desnoyers)
Subject: [lttng-dev] [URCU PATCH 1/3] wfcqueue: implement concurrency-efficient queue
Date: Mon, 8 Oct 2012 14:10:39 -0400 [thread overview]
Message-ID: <20121008181039.GA4558@Krystal> (raw)
In-Reply-To: <5073004B.2050400@redhat.com>
* Paolo Bonzini (pbonzini at redhat.com) wrote:
> Il 08/10/2012 18:15, Mathieu Desnoyers ha scritto:
> > Hi Paolo,
> >
> > We actually already have those, they are just not described in this
> > comment. I will fix this right away. By the way, you will notice the
> > wording:
> >
> > + * Queue read operations "first" and "next", which are used by
> > + * "for_each" iterations, need to be protected against concurrent
> > + * "dequeue" and "splice" (for source queue) by the caller.
> >
> > Being the only one iterating on a queue with local head/tail after a
> > splice operation is one way to provide mutual exclusion. Holding a lock
> > is not the only way to achieve mutual exclusion.
>
> Uh, I was confused by the _blocking suffix. But when used together with
> splice you know it is not blocking---only the splice will block.
Well, in this case, the "blocking" can be understood as busy-waiting
(and actual blocking that invokes the OS happens if busy-waiting for long
periods only).
for_each iteration can indeed busy-wait: ___cds_wfcq_first_blocking()
and ___cds_wfcq_next_blocking() can both call
___cds_wfcq_node_sync_next(), which busy-waits if it encounters a NULL
next pointer that is not located in the tail node.
Seen through the use-case of splice to local queue + for_each, here is
what happens:
- splice moves the content of the queue into a "local" queue. However,
it does _not_ issue a ___cds_wfcq_node_sync_next() on each node: no
traversal is performed.
- then, within the for_each iteration, we perform the
___cds_wfcq_node_sync_next() synchronization as we iterate on the
local queue.
This ensures that the synchronization performed for each node is only
performed lazily, only when those nodes are actually traversed. This
approach has the advantage of increasing the locality of reference, and
also to diminish the odds that this synchronization actually needs to be
executed uselessly by postponing it to the point where it is actually
needed.
Does it make more sense ?
Thanks,
Mathieu
--
Mathieu Desnoyers
Operating System Efficiency R&D Consultant
EfficiOS Inc.
http://www.efficios.com
next prev parent reply other threads:[~2012-10-08 18:10 UTC|newest]
Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-10-02 14:13 [lttng-dev] [URCU PATCH 0/3] wait-free concurrent queues (wfcqueue) Mathieu Desnoyers
2012-10-02 14:14 ` [lttng-dev] [URCU PATCH 1/3] wfcqueue: implement concurrency-efficient queue Mathieu Desnoyers
2012-10-08 15:47 ` Paolo Bonzini
2012-10-08 16:15 ` Mathieu Desnoyers
2012-10-08 16:33 ` Paolo Bonzini
2012-10-08 18:10 ` Mathieu Desnoyers [this message]
2012-10-10 2:56 ` Lai Jiangshan
2012-10-10 4:50 ` Mathieu Desnoyers
2012-10-02 14:15 ` [lttng-dev] [URCU PATCH 2/3] wfcqueue test Mathieu Desnoyers
2012-10-02 14:16 ` [lttng-dev] [URCU PATCH 3/3] call_rcu: use wfcqueue, eliminate false-sharing Mathieu Desnoyers
2012-10-08 3:09 ` Lai Jiangshan
2012-10-08 14:49 ` Mathieu Desnoyers
2012-10-08 15:10 ` Paul E. McKenney
2012-10-08 16:03 ` Mathieu Desnoyers
2012-10-03 18:28 ` [lttng-dev] [rp] [URCU PATCH 0/3] wait-free concurrent queues (wfcqueue) Paul E. McKenney
2012-10-03 21:04 ` Mathieu Desnoyers
2012-10-04 18:51 ` Paul E. McKenney
2012-10-08 3:33 ` Lai Jiangshan
2012-10-08 15:07 ` Mathieu Desnoyers
2012-10-10 2:53 ` Lai Jiangshan
2012-10-10 4:59 ` Mathieu Desnoyers
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20121008181039.GA4558@Krystal \
--to=mathieu.desnoyers@efficios.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox