From: "Chen, Kenneth W" <kenneth.w.chen@intel.com>
To: "'Zach Brown'" <zach.brown@oracle.com>
Cc: "'Andrew Morton'" <akpm@osdl.org>, <linux-aio@kvack.org>,
<linux-kernel@vger.kernel.org>,
"'Benjamin LaHaise'" <bcrl@kvack.org>, <suparna@in.ibm.com>
Subject: RE: [patch] aio: add per task aio wait event condition
Date: Tue, 2 Jan 2007 18:32:25 -0800 [thread overview]
Message-ID: <001101c72edf$6821f8b0$ff0da8c0@amr.corp.intel.com> (raw)
In-Reply-To: <96568BA6-9ECD-4E1D-B5B3-3AA41463A8EE@oracle.com>
Zach Brown wrote on Tuesday, January 02, 2007 6:06 PM
> On Jan 2, 2007, at 5:50 PM, Chen, Kenneth W wrote:
> > Zach Brown wrote on Tuesday, January 02, 2007 5:24 PM
> >>> That is not possible because when multiple tasks waiting for
> >>> events, they
> >>> enter the wait queue in FIFO order, prepare_to_wait_exclusive() does
> >>> __add_wait_queue_tail(). So first io_getevents() with min_nr of 2
> >>> will be woken up when 2 ops completes.
> >>
> >> So switch the order of the two sleepers in the example?
> >
> > Not sure why that would be a problem though: whoever sleep first will
> > be woken up first.
>
> Why would the min_nr = 3 sleeper be woken up in that case? Only 2
> ios were issued.
>
> Maybe the app was relying on the min_nr = 2 completion to issue 3
> more ios for the min_nr = 3 sleeper, who knows.
>
> Does that clear up the confusion?
Not really. I don't think I understand your concern. You gave an example:
issue 2 ops
first io_getevents sleeps with a min_nr of 2
second io_getevents sleeps with min_nr of 3
2 ops complete but only test the second sleeper's min_nr of 3
first sleeper twiddles thumbs
Or:
issue 2 ops
first io_getevents sleeps with a min_nr of 3
second io_getevents sleeps with min_nr of 2
2 ops complete but only test the second sleeper's min_nr of 2
first sleeper twiddles thumbs
First scenario doesn't exist because in the new scheme, we test first
sleeper (as in head of the queue) when 2 ops complete. It wakes up first.
2nd scenario is OK to me because first sleeper waiting for 3 events,
and there are only 2 ops completed, so it waits.
The one scenario that I can think of that breaks down is that one task
sleeps with min_nr of 100. Then 50 ops completed. Comes along 2nd
thread does a io_getevents and it will take all 50 events in the 2nd
thread. Is that what you are talking about? It doesn't involve two
sleepers. That I can fix by testing whether wait queue is active or
not at the beginning of fast path in read_events().
The bigger question is: what is the semantics on event reap order for
thread? Random, FIFO or round robin? It is not specified anywhere.
What would be the most optimal policy?
next prev parent reply other threads:[~2007-01-03 2:32 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2006-12-30 2:31 Chen, Kenneth W
2007-01-03 0:49 ` Zach Brown
2007-01-03 1:16 ` Chen, Kenneth W
2007-01-03 1:23 ` Zach Brown
2007-01-03 1:50 ` Chen, Kenneth W
2007-01-03 2:06 ` Zach Brown
2007-01-03 2:32 ` Chen, Kenneth W [this message]
2007-01-03 6:36 ` Chen, Kenneth W
2007-01-03 18:50 ` Zach Brown
2007-02-01 21:46 ` Jeff Moyer
2007-02-01 22:21 ` Zach Brown
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='001101c72edf$6821f8b0$ff0da8c0@amr.corp.intel.com' \
--to=kenneth.w.chen@intel.com \
--cc=akpm@osdl.org \
--cc=bcrl@kvack.org \
--cc=linux-aio@kvack.org \
--cc=linux-kernel@vger.kernel.org \
--cc=suparna@in.ibm.com \
--cc=zach.brown@oracle.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
all inboxes | Powered by JetHome®