From: Eric Wong <normalperson@yhbt.net>
To: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Cc: 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: Sat, 16 Mar 2013 22:02:16 +0000 [thread overview]
Message-ID: <20130316220216.GA25099@dcvr.yhbt.net> (raw)
In-Reply-To: <20130314190746.GA16120@dcvr.yhbt.net>
Eric Wong <normalperson@yhbt.net> wrote:
> Mathieu Desnoyers <mathieu.desnoyers@efficios.com> wrote:
> > * Eric Wong (normalperson@yhbt.net) wrote:
> > > Mathieu Desnoyers <mathieu.desnoyers@efficios.com> wrote:
> > > > +/*
> > > > + * Load a data from shared memory.
> > > > + */
> > > > +#define CMM_LOAD_SHARED(p) ACCESS_ONCE(p)
> > >
> > > When iterating through the queue by dequeueing, I needed a way
> > > to get the tail at the start of the iteration and use that as
> > > a sentinel while iterating, so I access the tail like this:
> > >
> > > struct wfcq_node *p = CMM_LOAD_SHARED(ep->rdltail.p);
> > >
> > > I hope this is supported... it seems to work :)
> >
> > Ideally it would be good if users could try using the exposed APIs to do
> > these things, or if it's really needed, maybe it's a sign that we need
> > to extend the API.
>
> Right. If I can use splice, I will not need this. more comments below
> on splice...
Even with splice, I think I need to see the main tail at the start of
iteration to maintain compatibility (for weird apps that might care).
Consider this scenario:
1) main.queue has 20 events
2) epoll_wait(maxevents=16) called by user
3) splice all 20 events into unconsumed.queue, main.queue is empty
4) put_user + dequeue on 16 events from unconsumed.queue
# unconsumed.queue has 4 left at this point
5) main.queue gets several more events enqueued at any point after 3.
6) epoll_wait(maxevents=16) called by user again
7) put_user + dequeue on 4 remaining items in unconsumed.queue
We can safely return 4 events back to the user at this point.
However, this might break compatibility for existing users. I'm
not sure if there's any weird apps which know/expect the event
count they'll get from epoll_wait, but maybe there is one...
8) We could perform a splice off main.queue to fill the remaining
slots the user requested, but we do not know if the things we
splice from main.queue at this point were just dequeued in 7.
If we loaded the main.queue.tail before 7, we could safely splice
into unconsumed.queue and know when to stop when repeating the
put_user + dequeue loop.
next prev parent reply other threads:[~2013-03-16 22:02 UTC|newest]
Thread overview: 25+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-03-11 21:36 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 [this message]
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
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=20130316220216.GA25099@dcvr.yhbt.net \
--to=normalperson@yhbt.net \
--cc=davidel@xmailserver.org \
--cc=laijs@cn.fujitsu.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mathieu.desnoyers@efficios.com \
--cc=paulmck@linux.vnet.ibm.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
Powered by JetHome