From: Eric Sandeen <sandeen@redhat.com>
To: Andreas Dilger <adilger@sun.com>
Cc: "Theodore Ts'o" <tytso@mit.edu>,
ext4 development <linux-ext4@vger.kernel.org>,
Shuichi Ihara <ihara@sun.com>
Subject: Re: [PATCH] mk2fs lazy_journal_init option
Date: Tue, 16 Feb 2010 17:11:21 -0600 [thread overview]
Message-ID: <4B7B2619.8060106@redhat.com> (raw)
In-Reply-To: <7095A240-FB57-4C33-8EE8-33D88B500319@sun.com>
Andreas Dilger wrote:
> On 2010-02-10, at 04:44, Andreas Dilger wrote:
>> Attached is a patch to skip zeroing of the journal if the
>> "-E lazy_journal_init" option is given to mke2fs (named to
>> complement the "-E lazy_itable_init" option). This can
>> speed up format time significantly for large journal devices.
>> There's only a short-term risk of problems with uninitialized
>> journal, until the journal has been overwritten once.
>>
>> Patch has been lightly tested, showing mke2fs times steady
>> at 14s for a 40GB filesystem, regardless of journal size,
>> while previously it took up to 45s for an internal 2GB journal.
>
> While testing this patch more thoroughly, we uncovered a bug
> in the mke2fs/libext2fs code. It seems that when running:
>
> mke2fs -J size=X -O extents /dev/XXX
>
> for any size > 512 the journal creation time is growing
> exponentially:
>
> no journal-> 12s
> size=128 -> 14s
> size=256 -> 16s
> size=512 -> 21s
> size=768 -> 143s
> size=1024-> 298s
> size=1280-> 663s
>
> We wanted originally to use size=4000, but this took so
> long we thought it was hung, and started investigating.
>
> This happens even without the "-E lazy_itable_init" option.
> Running ltrace on mke2fs shows lots of zero writes (to be
> expected for journal zeroing) followed by a single read
> (completes quickly) and many thousands of memcpy() calls.
> The mke2fs program is completely CPU bound (99.9% user).
>
> Running with the "-E lazy_itable_init" the writes/reads go
> away, and all that is left is an endless stream of memcpy().
>
> It seems to loop in ext2fs_block_iterate2->mkjournal_proc()
> forever:
>
> 426 for (blockcnt = extent.e_lblk, j = 0;
> 427 j < extent.e_len;
> 428 blk++, blockcnt++, j++) {
> 429 new_blk = blk;
> 430 r = (*ctx.func)(fs, &new_blk, blockcnt,
> 431 0, 0, priv_data);
>
Haven't dug all the way through it but I think this is another
in the saga of blk_t vs. blk64_t. This seems to fix (?) it:
--- a/lib/ext2fs/mkjournal.c
+++ b/lib/ext2fs/mkjournal.c
@@ -218,7 +218,7 @@ struct mkjournal_struct {
};
static int mkjournal_proc(ext2_filsys fs,
- blk_t *blocknr,
+ blk64_t *blocknr,
e2_blkcnt_t blockcnt,
blk_t ref_block EXT2FS_ATTR((unused)),
int ref_offset EXT2FS_ATTR((unused)),
though I doubt that is correct/complete.
-Eric
next prev parent reply other threads:[~2010-02-16 23:11 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-02-10 11:44 [PATCH] mk2fs lazy_journal_init option Andreas Dilger
2010-02-16 22:15 ` Andreas Dilger
2010-02-16 23:11 ` Eric Sandeen [this message]
2010-02-16 23:21 ` Eric Sandeen
-- strict thread matches above, loose matches on Subject: below --
2010-02-19 19:53 number9652
2010-02-24 5:30 ` Andreas Dilger
2010-03-02 19:36 ` Nic Case
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=4B7B2619.8060106@redhat.com \
--to=sandeen@redhat.com \
--cc=adilger@sun.com \
--cc=ihara@sun.com \
--cc=linux-ext4@vger.kernel.org \
--cc=tytso@mit.edu \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.