From: Chris Mason <clm@fb.com>
To: Kent Overstreet <kmo@daterainc.com>
Cc: <linux-fsdevel@vger.kernel.org>, <linux-aio@kvack.org>,
Peter Zijlstra <peterz@infradead.org>
Subject: Re: [PATCH RFC] fs/aio: fix sleeping while TASK_INTERRUPTIBLE
Date: Mon, 29 Dec 2014 10:08:14 -0500 [thread overview]
Message-ID: <1419865694.13012.17@mail.thefacebook.com> (raw)
In-Reply-To: <20141225025641.GC29607@moria.home.lan>
On Wed, Dec 24, 2014 at 9:56 PM, Kent Overstreet <kmo@daterainc.com>
wrote:
> On Mon, Dec 22, 2014 at 07:16:25PM -0500, Chris Mason wrote:
>> The 3.19 merge window brought in a great new warning to catch
>> someone
>> calling might_sleep with their state != TASK_RUNNING. The idea was
>> to
>> find buggy code locking mutexes after calling prepare_to_wait(),
>> kind
>> of like this:
>
> Ben just told me about this issue.
>
> IMO, the way the code is structured now is correct, I would argue the
> problem is
> with the way wait_event() works - they way they have to mess with the
> global-ish
> task state when adding a wait_queue_t to a wait_queue_head (who came
> up with
> these names?)
Grin, probably related to the guy who made closure_wait() not actually
wait.
The advantage to the waitqueue head _t setup is its a very well
understood mechanism for sleeping on something without missing wakeups.
The locking overhead for the waitqueues can be a problem for lots of
waiters on the same queue, but otherwise the overhead is low.
I think closures are too big a hammer for this problem, unless
benchmarks show we need the lockless lists (I really like that part).
I do hesitate to make big changes here because debugging AIO hangs is
horrible. The code is only tested by a few workloads, and we can go a
long time before problems are noticed. When people do hit bugs, we
only notice the ones where applications pile up in getevents.
Otherwise it's just strange performance changes that we can't explain
because they are hidden in the app's AIO state machine.
When I first looked at the warning, I didn't realize that might_sleep
and friends were setting a preempted flag to make sure the task wasn't
removed from the runqueue. So I thought we'd potentially sleep forever
(thanks Peter for details++). The real risk here is burning CPU in the
running state, potentially a lot of it if the mutex is highly
contended. We've probably been hitting this for a while, but since we
test AIO performance with fast storage, the burning just made us look
faster.
-chris
next prev parent reply other threads:[~2014-12-29 15:08 UTC|newest]
Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-12-23 0:16 [PATCH RFC] fs/aio: fix sleeping while TASK_INTERRUPTIBLE Chris Mason
2014-12-23 18:43 ` Benjamin LaHaise
2014-12-23 18:55 ` Chris Mason
2014-12-23 21:58 ` Benjamin LaHaise
2014-12-25 2:59 ` Kent Overstreet
2014-12-25 3:11 ` Benjamin LaHaise
2014-12-25 3:29 ` Kent Overstreet
2014-12-29 1:24 ` Chris Mason
2014-12-25 2:56 ` Kent Overstreet
2014-12-25 14:27 ` Sedat Dilek
2015-01-04 10:16 ` Sedat Dilek
2014-12-29 15:08 ` Chris Mason [this message]
2014-12-29 22:08 ` Kent Overstreet
2015-01-13 16:06 ` Benjamin LaHaise
2015-01-13 16:20 ` Chris Mason
2015-01-21 10:13 ` Dave Chinner
2015-01-21 21:42 ` Chris Mason
2015-02-03 9:14 ` Sedat Dilek
2015-02-03 9:54 ` Sedat Dilek
2015-02-09 3:08 ` Sedat Dilek
2015-02-09 4:21 ` Sedat Dilek
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=1419865694.13012.17@mail.thefacebook.com \
--to=clm@fb.com \
--cc=kmo@daterainc.com \
--cc=linux-aio@kvack.org \
--cc=linux-fsdevel@vger.kernel.org \
--cc=peterz@infradead.org \
/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;
as well as URLs for NNTP newsgroup(s).