From: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
To: Peter Hurley <peter@hurleysoftware.com>
Cc: Eric Wong <normalperson@yhbt.net>,
Lai Jiangshan <laijs@cn.fujitsu.com>,
"Paul E. McKenney" <paulmck@linux.vnet.ibm.com>,
Stephen Hemminger <shemminger@vyatta.com>,
Davide Libenzi <davidel@xmailserver.org>,
linux-kernel@vger.kernel.org
Subject: Re: [RFC PATCH] Linux kernel Wait-Free Concurrent Queue Implementation
Date: Thu, 14 Mar 2013 22:08:12 -0400 [thread overview]
Message-ID: <20130315020812.GA25419@Krystal> (raw)
In-Reply-To: <1363308584.3194.124.camel@thor.lan>
* Peter Hurley (peter@hurleysoftware.com) wrote:
> On Mon, 2013-03-11 at 17:36 -0400, Mathieu Desnoyers wrote:
> > +/*
> > + * Do not put head and tail on the same cache-line if concurrent
> > + * enqueue/dequeue are expected from many CPUs. This eliminates
> > + * false-sharing between enqueue and dequeue.
> > + */
> > +struct wfcq_head {
> > + struct wfcq_node node;
> > + struct mutex lock;
> > +};
> > +
> > +struct wfcq_tail {
> > + struct wfcq_node *p;
> > +};
>
>
> If you want to force separate cachelines for SMP, this would be
>
> struct wfcq_head {
> struct wfcq_node node;
> struct mutex lock;
> } ____cacheline_aligned_in_smp;
>
> struct wfcq_tail {
> struct wfcq_node *p;
> } ____cacheline_aligned_in_smp;
Well, the thing is: I don't want to force it. The queue head and tail
can be used in a few ways:
1) tail used by frequent enqueue on one CPU, head used for frequent
dequeues on another CPU. In this case, we want head/tail on different
cache lines.
2) same scenario as 1), but head and tail are placed in per-cpu data
of the two CPUs. We don't need to align each structure explicitly.
3) tail and head used locally, e.g. on the stack, as splice destination
followed by iteration or dequeue from the same CPU. We don't want to
waste precious memory space in this case, so no alignment.
So as you see, only (1) actually requires explicit alignment of head and
tail.
Thanks,
Mathieu
--
Mathieu Desnoyers
EfficiOS Inc.
http://www.efficios.com
next prev parent reply other threads:[~2013-03-15 2:08 UTC|newest]
Thread overview: 25+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-03-11 21:36 [RFC PATCH] Linux kernel Wait-Free Concurrent Queue Implementation Mathieu Desnoyers
2013-03-14 4:22 ` Eric Wong
2013-03-14 13:18 ` Mathieu Desnoyers
2013-03-14 19:07 ` Eric Wong
2013-03-14 19:48 ` Mathieu Desnoyers
2013-03-14 21:32 ` Eric Wong
2013-03-15 2:38 ` Mathieu Desnoyers
2013-03-16 22:02 ` Eric Wong
2013-03-17 2:03 ` Mathieu Desnoyers
2013-03-18 10:37 ` Eric Wong
2013-03-15 0:49 ` Peter Hurley
2013-03-15 2:08 ` Mathieu Desnoyers [this message]
2013-03-21 11:43 ` [PATCH] wfcqueue: functions for local append and enqueue Eric Wong
2013-03-22 2:01 ` Mathieu Desnoyers
2013-03-22 10:31 ` Eric Wong
2013-03-23 19:07 ` [PATCH v2] " Eric Wong
2013-03-23 19:43 ` Mathieu Desnoyers
2013-03-23 20:42 ` [PATCH v3] " Eric Wong
2013-03-23 22:10 ` Mathieu Desnoyers
2013-03-29 8:10 ` [PATCH] wfcqueue: add function for unsynchronized prepend Eric Wong
2013-04-02 13:05 ` Mathieu Desnoyers
2013-04-02 21:15 ` Eric Wong
2013-04-06 21:42 ` [RFC PATCH] wfcqueue: implement __wfcq_enqueue_head() Mathieu Desnoyers
2013-04-11 21:23 ` [RFC PATCH] Linux kernel Wait-Free Concurrent Queue Implementation Eric Wong
2013-04-11 22:44 ` 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=20130315020812.GA25419@Krystal \
--to=mathieu.desnoyers@efficios.com \
--cc=davidel@xmailserver.org \
--cc=laijs@cn.fujitsu.com \
--cc=linux-kernel@vger.kernel.org \
--cc=normalperson@yhbt.net \
--cc=paulmck@linux.vnet.ibm.com \
--cc=peter@hurleysoftware.com \
--cc=shemminger@vyatta.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