All of lore.kernel.org
 help / color / mirror / Atom feed
From: Itaru Kitayama <kitayama@cl.bb4u.ne.jp>
To: miaox@cn.fujitsu.com
Cc: Linux Btrfs <linux-btrfs@vger.kernel.org>
Subject: Re: [GIT PULL] [RFC PATCH 0/4] btrfs: Implement delayed directory name index insertion and deletion
Date: Mon, 10 Jan 2011 12:16:22 +0900	[thread overview]
Message-ID: <20110110121622.d914be35.kitayama@cl.bb4u.ne.jp> (raw)
In-Reply-To: <4D25658D.1090307@cn.fujitsu.com>

Hi Miao,

As you suggested, in btrfs_recover_log_trees(), the items to modify in the transaction are 
not known before entering a tree, we can use the global block reservation for it.

Signed-off-by: Itaru Kitayama <kitayama@cl.bb4u.ne.jp>
---
 fs/btrfs/tree-log.c |    2 ++
 1 files changed, 2 insertions(+), 0 deletions(-)

diff --git a/fs/btrfs/tree-log.c b/fs/btrfs/tree-log.c
index 054744a..7df8c7b 100644
--- a/fs/btrfs/tree-log.c
+++ b/fs/btrfs/tree-log.c
@@ -3081,6 +3081,8 @@ int btrfs_recover_log_trees(struct btrfs_root *log_root_tree)
 
        trans = btrfs_start_transaction(fs_info->tree_root, 0);
 
+       trans->block_rsv = &fs_info->global_block_rsv;
+
        wc.trans = trans;
        wc.pin = 1;
 
-- 
1.7.3.4

On Thu, 06 Jan 2011 14:47:41 +0800
Miao Xie <miaox@cn.fujitsu.com> wrote:

> Hi, Kitayama-san
> 
> Firstly, thanks for your test.
> 
> On Sat, 1 Jan 2011 00:43:41 +0900, Itaru Kitayama wrote:
> > Hi Miao,
> >
> > The HEAD of the perf-improve fails to boot on my virtual machine.
> >
> > The system calls btrfs_delete_delayed_dir_index() with trans block_rsv set to NULL,
> > thus selects, in get_block_rsv(), empty_block_rsv whose reserve is 0 (and size is also 0),
> > which leads to ENOSPC. I wonder below patch is enough reserve metadata to finish
> > btrfs_recover_log_trees() without going to ENOSPC. I appreciate your review.
> >
> > Singed-Off-by: Itaru Kitayama<kitayama@cl.bb4u.ne.jp>
> >
> > diff --git a/fs/btrfs/tree-log.c b/fs/btrfs/tree-log.c
> > index 054744a..f26326b 100644
> > --- a/fs/btrfs/tree-log.c
> > +++ b/fs/btrfs/tree-log.c
> > @@ -3079,7 +3079,7 @@ int btrfs_recover_log_trees(struct btrfs_root *log_root_tree)
> >          path = btrfs_alloc_path();
> >          BUG_ON(!path);
> >
> > -       trans = btrfs_start_transaction(fs_info->tree_root, 0);
> > +       trans = btrfs_start_transaction(fs_info->tree_root, 4);
> 
> I don't think this change is right, because we don't know how many leaves we may change
> when doing log tree replay, so we can't set the secondargument to 4.
> 
> And I think the original code is right, because the space reservation is used to avoid filesystem
> operations being broken by that other users hogging all of the free space. but this function is
> invoked when we mount a filesystem, at this time, no other user can access the filesystem,
> so we can use all of the free space, thus we needn't reserve any free space for log tree replay.
> 
> I don't understand the log tree very well, maybe there is something wrong with what I said.
> If what I said above is right, we should look for another way to fix this problem.
> 
> (I'm making the second version of this patchset now, I'll fix it in it. So if your patch is right,
> I'll want to add it into my patchset.)
> 
> Thanks again for your test.
> Miao
> 
> >
> >          wc.trans = trans;
> >          wc.pin = 1;
> >
> > Here's the log:
> >
> > kernel BUG at fs/btrfs/tree-log.c:678!
> > invalid opcode: 0000 [#1] SMP
> > last sysfs file: /sys/devices/virtual/bdi/btrfs-1/uevent
> > CPU 1
> > Modules linked in: floppy mptspi mptscsih mptbase scsi_transport_spi [last unloaded: scsi_wait_scan]
> >
> > Pid: 308, comm: mount Not tainted 2.6.36-perf-improve+ #1 440BX Desktop Reference Platform/VMware Virtual Platform
> > RIP: 0010:[<ffffffff811eb161>]  [<ffffffff811eb161>] drop_one_dir_item+0xd6/0xfb
> > RSP: 0018:ffff88007a5a5858  EFLAGS: 00010286
> > RAX: 00000000ffffffe4 RBX: ffff88007d2b7800 RCX: ffff880037e8b240
> > RDX: 0000000000000000 RSI: ffffea0000c3ae68 RDI: 0000000000000206
> > RBP: ffff88007a5a58c8 R08: 00000000005e6760 R09: ffff88007a5a55e8
> > R10: ffff88007a5a55e0 R11: ffff88007a5a5648 R12: ffff880037e8b120
> > R13: ffff880037e98cc0 R14: ffff88007b371c90 R15: 0000000000000005
> > FS:  00007f37b63c4800(0000) GS:ffff880002040000(0000) knlGS:0000000000000000
> > CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
> > CR2: 00007f37b55f0190 CR3: 000000007a4d9000 CR4: 00000000000006e0
> > DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
> > DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400
> > Process mount (pid: 308, threadinfo ffff88007a5a4000, task ffff88007a5c9720)
> > Stack:
> >   0000000000000005 0000000000000d75 ffff880037e98550 ffff880037dcf000
> > <0>  000000000016e730 0000000000000001 0000000000000100 00000000005e7b60
> > <0>  ffff88007a46d000 ffff880037e8b120 ffff88007d2b7800 ffff880037e98550
> > Call Trace:
> >   [<ffffffff811ec339>] add_inode_ref+0x32a/0x403
> >   [<ffffffff811ec59a>] replay_one_buffer+0x188/0x209
> >   [<ffffffff811bafef>] ? verify_parent_transid+0x36/0xf9
> >   [<ffffffff811e8eb9>] walk_up_log_tree+0x109/0x1d1
> >   [<ffffffff811ec412>] ? replay_one_buffer+0x0/0x209
> >   [<ffffffff811e930f>] walk_log_tree+0x9b/0x187
> >   [<ffffffff811eaf73>] btrfs_recover_log_trees+0x18a/0x2a2
> >   [<ffffffff811ec412>] ? replay_one_buffer+0x0/0x209
> >   [<ffffffff811bb123>] ? btree_read_extent_buffer_pages+0x71/0xaf
> >   [<ffffffff811becfe>] open_ctree+0xf8f/0x12c6
> >   [<ffffffff811a69b4>] btrfs_get_sb+0x225/0x459
> >   [<ffffffff810fe143>] ? __kmalloc_track_caller+0x13a/0x14c
> >   [<ffffffff8110d458>] vfs_kern_mount+0xbd/0x1a7
> >   [<ffffffff8110d5aa>] do_kern_mount+0x4d/0xed
> >   [<ffffffff8112318e>] do_mount+0x754/0x7cb
> >   [<ffffffff810dae6d>] ? memdup_user+0x60/0x80
> >   [<ffffffff810daecb>] ? strndup_user+0x3e/0x54
> >   [<ffffffff8112328d>] sys_mount+0x88/0xc2
> >   [<ffffffff81009c72>] system_call_fastpath+0x16/0x1b
> > Code: de e8 8f e5 ff ff 85 c0 74 04 0f 0b eb fe 48 8b 55 a0 48 8b 7d a8 45 89 f9 4d 89 f0 4c 89 e9 48 89 de e8 65 bf fd ff 85 c0 74 04<0f>  0b eb fe 4
> > RIP  [<ffffffff811eb161>] drop_one_dir_item+0xd6/0xfb
> >   RSP<ffff88007a5a5858>
> > ---[ end trace 2ec638d9e30d6102 ]---
> >
> >
> > On Wed, 01 Dec 2010 16:09:17 +0800
> > Miao Xie<miaox@cn.fujitsu.com>  wrote:
> >
> >> Compare with Ext3/4, the performance of file creation and deletion on btrfs is
> >> very poor. the reason is that btrfs must do a lot of b+ tree insertions, such as
> >> inode item, directory name item, directory name index and so on.
> >>
> >> If we can do some delayed b+ tree insertion or deletion, we can improve the
> >> performance, so we made this patch which implemented delayed directory name
> >> index insertion and deletion.
> >>
> >> Beside that, we found we must map the page every time we want to set a member
> >> variable of the inode item, it is inefficient. We just do it at first to reduce
> >> the times of mmap(). By this way, we can also improve the performance of file
> >> creation and deletion.
> >>
> >> I did a quick test by the benchmark tool[1] and found we can improve the
> >> performance of file creation by ~11%, and file deletion by ~14%.
> >>
> >> Before applying this patch:
> >> Create files:
> >> 	Total files: 50000
> >> 	Total time: 1.188547
> >> 	Average time: 0.000024
> >> Delete files:
> >> 	Total files: 50000
> >> 	Total time: 1.662012
> >> 	Average time: 0.000033
> >>
> >> After applying this patch:
> >> Create files:
> >> 	Total files: 50000
> >> 	Total time: 1.057432
> >> 	Average time: 0.000021
> >> Delete files:
> >> 	Total files: 50000
> >> 	Total time: 1.422851
> >> 	Average time: 0.000028
> >>
> >> You can also try out the patchset by pulling:
> >> 	git://repo.or.cz/linux-btrfs-devel.git perf-improve
> >>
> >> [1] http://marc.info/?l=linux-btrfs&m=128212635122920&q=p3
> >>
> >> ---
> >>   fs/btrfs/Makefile            |    2 +-
> >>   fs/btrfs/btrfs_inode.h       |    2 +
> >>   fs/btrfs/ctree.c             |   13 +-
> >>   fs/btrfs/ctree.h             |   21 +-
> >>   fs/btrfs/delayed-dir-index.c |  790 ++++++++++++++++++++++++++++++++++++++++++
> >>   fs/btrfs/delayed-dir-index.h |   92 +++++
> >>   fs/btrfs/dir-item.c          |   61 +++-
> >>   fs/btrfs/extent-tree.c       |   21 ++
> >>   fs/btrfs/inode.c             |  189 +++++++---
> >>   fs/btrfs/transaction.c       |    9 +
> >>   fs/btrfs/transaction.h       |    2 +
> >>   11 files changed, 1117 insertions(+), 85 deletions(-)
> >> --
> >> To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in
> >> the body of a message to majordomo@vger.kernel.org
> >> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> >>
> >
> >
> 
> 


-- 
Itaru Kitayama <kitayama@cl.bb4.ne.jp>

      reply	other threads:[~2011-01-10  3:16 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-12-01  8:09 [GIT PULL] [RFC PATCH 0/4] btrfs: Implement delayed directory name index insertion and deletion Miao Xie
2010-12-31 15:43 ` Itaru Kitayama
2011-01-06  6:47   ` Miao Xie
2011-01-10  3:16     ` Itaru Kitayama [this message]

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=20110110121622.d914be35.kitayama@cl.bb4u.ne.jp \
    --to=kitayama@cl.bb4u.ne.jp \
    --cc=linux-btrfs@vger.kernel.org \
    --cc=miaox@cn.fujitsu.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 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.