From: Eric Wheeler <bcache@lists.ewheeler.net>
To: Jiri Kosina <jikos@kernel.org>
Cc: Kent Overstreet <kent.overstreet@gmail.com>,
linux-bcache@vger.kernel.org, linux-kernel@vger.kernel.org,
Maciej Piechotka <uzytkownik2@gmail.com>
Subject: Re: [PATCH] bcache: bch_writeback_thread() is not freezable
Date: Fri, 22 Apr 2016 01:19:19 +0000 (UTC) [thread overview]
Message-ID: <alpine.LRH.2.11.1604220041230.6087@mail.ewheeler.net> (raw)
In-Reply-To: <alpine.LNX.2.00.1604200021570.27368@cbobk.fhfr.pm>
On Wed, 20 Apr 2016, Jiri Kosina wrote:
> On Tue, 19 Apr 2016, Eric Wheeler wrote:
>
> > > bch_writeback_thread() is calling try_to_freeze(), but that's just an
> > > expensive no-op given the fact that the thread is not marked freezable.
> > >
> > > I/O helper kthreads, exactly such as the bcache writeback thread, actually
> > > shouldn't be freezable, because they are potentially necessary for
> > > finalizing the image write-out.
> >
> > This is good timing, as Maciej Piechotka just reported a hang when
> > suspending his system.
>
> Could you please point me to the actual report? Thanks.
>
> On Tue, 19 Apr 2016, Maciej Piechotka wrote:
> Eric Wheeler <bcache <at> lists.ewheeler.net> writes:
> > Interesting. Can you collect the dmesg output as it suspends/resumes via
> > serial or something other means?
>
> I'll try to capture the output today.
No technical data yet, but this is the thread:
http://comments.gmane.org/gmane.linux.kernel.bcache.devel/3820
> > What is the proper way to safely support suspend? Assuming the
> > try_to_freeze() calls are in the right place, should we simply
> > set_freezable() on these kthreads?
>
> Unfortunately, this is really a tricky question; the issue is that frezing
> semantics is rather undefined for kthreads. For starters, please see
>
> https://lwn.net/Articles/662703/
> http://lkml.org/lkml/2007/4/27/608
Interesting indeed. So suspend should succeed independent of kernel
threads since we want to get rid of freezable kthreads?
Does this also mean that IO kthreads will always break suspend?
> I don't belive in freezable kthreads which serve as I/O helpers. Such
> threads simply have to keep going until the image is written out and
> machine powered down.
>
> So I'd like to start with understanding how bcache is preventning suspend.
> Maciej?
We await backtraces from Maciej, but I can say that bcache uses only two
kthreads, one for garbage collection and another for writeback.
Speculation: The writeback thread can (probably) be made unrunnable at any
time without issue since it is (should be) fully asynchronous. However,
garbage collection might deadlock if the GC thread is unrunnable while
hibernate (suspend?) IO is writing through bcache while bcache waits for
GC to complete under allocation contention. I'm not familiar with the
bcache allocator details, so anyone else please chime here.
Presumably, GC is only unsafe during writes to the cache for blocks that
are not yet cached but would cause a cache allocation. If so, then
perhaps we can hook the pending suspend, set cache_mode to "writearound"
to prevent btree changes, and restore the cache_mode on resume. It will be
interesting to see the backtrace if Maciej can get one out of the system.
--
Eric Wheeler
next prev parent reply other threads:[~2016-04-22 1:19 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-04-19 12:33 [PATCH] bcache: bch_writeback_thread() is not freezable Jiri Kosina
2016-04-19 12:34 ` [PATCH] bcache: bch_allocator_thread() " Jiri Kosina
2016-04-19 12:35 ` [PATCH] bcache: bch_gc_thread() " Jiri Kosina
2016-04-19 20:55 ` [PATCH] bcache: bch_writeback_thread() " Eric Wheeler
2016-04-19 22:25 ` Jiri Kosina
2016-04-22 1:19 ` Eric Wheeler [this message]
2016-04-25 8:19 ` Jiri Kosina
2016-05-02 7:16 ` Jiri Kosina
2016-05-11 1:13 ` Eric Wheeler
2016-05-11 7:55 ` Jiri Kosina
2016-05-18 15:28 ` Jiri Kosina
2016-05-23 23:05 ` Jiri Kosina
2016-05-24 14:18 ` Jens Axboe
2016-05-24 14:20 ` Jiri Kosina
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=alpine.LRH.2.11.1604220041230.6087@mail.ewheeler.net \
--to=bcache@lists.ewheeler.net \
--cc=jikos@kernel.org \
--cc=kent.overstreet@gmail.com \
--cc=linux-bcache@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=uzytkownik2@gmail.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;
as well as URLs for NNTP newsgroup(s).