From: Dave Chinner <david@fromorbit.com>
To: Arjan van de Ven <arjan@linux.intel.com>
Cc: Dave Kleikamp <shaggy@linux.vnet.ibm.com>,
Linus Torvalds <torvalds@linux-foundation.org>,
Grissiom <chaos.proton@gmail.com>,
linux-kernel@vger.kernel.org,
linux-fsdevel <linux-fsdevel@vger.kernel.org>
Subject: Re: [PATCH] async: Don't call async_synchronize_full_special() while holding sb_lock
Date: Fri, 9 Jan 2009 19:22:50 +1100 [thread overview]
Message-ID: <20090109082250.GQ9448@disturbed> (raw)
In-Reply-To: <4966D652.4070105@linux.intel.com>
On Thu, Jan 08, 2009 at 08:45:06PM -0800, Arjan van de Ven wrote:
> Dave Chinner wrote:
>
>>
>> So, given the potential impact of this change, what testing have
>> you done in terms of:
>>
>> - performance impact
>
> I tested this on my machines and it gave a real performance
> improvement (11 to 8 seconds for a full kernel tree unlink, and
> cutting out latency for normal applications)
Not really waht I'd call a significant performance test. What
happens under serious sustained I/O load? On multiple different
filesystems?
FWIW, my current kernel tree is:
$ find . -print | wc -l
30082
Which is just under the async operation limit you set so this
probably didn't even stress the mixing of sync and async deletes at
the same time...
>> - sync() safety
> that was exactly the synchronization point that's discussed here.
Right - how many fs developers did you discuss the impact of this
with? Did you crash test any filesystems? Did you run any fs QA
suites to check for regressions? How many different filesystems
did you even test?
We already know that sync is busted and doesn't provide the
guarantees it is supposed so on some filesystems. I'm extremely
concerned that changing unlink behaviour in this manner subtly
breaks sync even more than it already is....
>> - removing a million files and queuing all of the
>> deletes in the async queues....
>
> the async code throttles at 32k outstanding.
> Yes 32K is arbitrary, but if you delete a million files fast, all
> but the first few thousand are synchronous.
No, after the first 32k you get a mix of synchronous and async as
the async queue gets processed in parallel. This means you are
screwing up the temporal locality of the unlink of inodes. i.e. some
unlinks are being done immediately, others are being delayed until
another 32k inodes have been processed of the unlink list.
If we've been careful about allocation locality during untar so
that inodes that are allocated sequentially by untar will be
deleted sequential by rm -rf, then this new pattern will break those
optimisations because the unlink locality is being broken by
the some sync/some async behaviour that this queuing mechanism
creates.
Hmmmm - I suspect that rm -rf will also trigger lots of kernel
threads to be created. We do not want 256 kernel threads to
be spawned to bang on the serialised regions of filesystem
journals (generating lock contention) when one thread would
be sufficient....
Cheers,
Dave.
--
Dave Chinner
david@fromorbit.com
next prev parent reply other threads:[~2009-01-09 8:22 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <a0adeea50901080007q5a3ed5c8y5a744ce37e677325@mail.gmail.com>
2009-01-08 14:37 ` "BUG: scheduling while atomic: pdflush/30/0x00000002" in latest git Dave Kleikamp
2009-01-08 15:21 ` Arjan van de Ven
2009-01-08 15:46 ` [PATCH] async: Don't call async_synchronize_full_special() while holding sb_lock Dave Kleikamp
2009-01-08 22:50 ` Dave Chinner
2009-01-08 22:51 ` Arjan van de Ven
2009-01-09 0:32 ` Alan Cox
2009-01-09 0:38 ` Arjan van de Ven
2009-01-09 1:40 ` Dave Chinner
2009-01-09 4:45 ` Arjan van de Ven
2009-01-09 8:22 ` Dave Chinner [this message]
2009-01-09 15:09 ` Chris Mason
2009-01-12 2:31 ` Jamie Lokier
2009-01-12 3:54 ` Arjan van de Ven
2009-01-12 7:55 ` Dave Chinner
2009-01-12 7:48 ` Dave Chinner
2009-01-09 12:31 ` Evgeniy Polyakov
2009-01-09 5:18 ` "BUG: scheduling while atomic: pdflush/30/0x00000002" in latest git Grissiom
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=20090109082250.GQ9448@disturbed \
--to=david@fromorbit.com \
--cc=arjan@linux.intel.com \
--cc=chaos.proton@gmail.com \
--cc=linux-fsdevel@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=shaggy@linux.vnet.ibm.com \
--cc=torvalds@linux-foundation.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).