public inbox for linux-btrfs@vger.kernel.org
 help / color / mirror / Atom feed
From: Boris Burkov <boris@bur.io>
To: Filipe Manana <fdmanana@kernel.org>
Cc: linux-btrfs@vger.kernel.org, kernel-team@fb.com
Subject: Re: [PATCH] btrfs: skip reclaim if block_group is empty
Date: Tue, 11 Oct 2022 11:05:15 -0700	[thread overview]
Message-ID: <Y0WwW21CPYUeidwQ@zen> (raw)
In-Reply-To: <CAL3q7H4L6ST88RpTojMmb-nQ82Y7ZYY-80Z+GSyLkMJ7zzVkDg@mail.gmail.com>

On Tue, Oct 11, 2022 at 10:43:33AM +0100, Filipe Manana wrote:
> On Mon, Oct 10, 2022 at 8:25 PM Boris Burkov <boris@bur.io> wrote:
> >
> > As we delete extents from a block group, at some deletion we cross below
> > the reclaim threshold. It is possible we are still in the middle of
> > deleting more extents and might soon hit 0. If that occurs, we would
> > leave the block group on the reclaim list, not in the care of unused
> > deletion or async discard.
> >
> > It is pointless and wasteful to relocate empty block groups, so if we do
> 
> Hum? Why pointless and wasteful?
> Relocating an empty block group results in deleting it.
> 
> In fact, before we tracked unused block groups and had the cleaner
> kthread remove them, that was the only
> way to delete unused block groups - trigger relocation from user space.
> 
> btrfs_relocate_chunk() explicitly calls btrfs_remove_chunk() at the
> end, and the relocation itself
> will do nothing except:
> 
> 1) commit the current transaction when it starts
> 2) search the extent tree for extents in this block group - here it
> will not find anything, and therefore do nothing.
> 3) commit another transaction
> 
> So I don't quite understand what this patch is trying to accomplish.
> 
> At the very least the changelog needs to be more detailed.
> 
> As it is, it gives the wrong idea that the relocation will leave the
> block group around.
> If your goal is to avoid the 2 transaction commits and the search on
> the extent tree, then please be explicit in
> the changelog.
> 
> Thanks.

Apologies for the exuberant and unclear language. I'm happy to tone it
down and make it more precise. Thanks for the feedback.

We see a lot of these empty reclaims in practice and I thought this
could be a helpful little cleanup, nothing major.

My aim was essentially what you said. In my mind, delete unused is less
complicated and has less overhead than an empty relocation. I agree
that the empty relocation does accomplish the task of getting rid of the
bg, but I figure if we have a more direct way of accomplishing it
already, we should go with that. To be completely clear, I was also 
thinking about creating the relocation inode as un-needed overhead.
For what it's worth, I have not benchmarked btrfs_delete_unused_bgs
against relocating empty bgs.

Thanks,
Boris

> 
> > notice that case (we might not if the reclaim worker runs *before* we
> > finish emptying it), don't bother with relocating the block group.
> >
> > Signed-off-by: Boris Burkov <boris@bur.io>
> > ---
> >  fs/btrfs/block-group.c | 19 +++++++++++++++++++
> >  1 file changed, 19 insertions(+)
> >
> > diff --git a/fs/btrfs/block-group.c b/fs/btrfs/block-group.c
> > index 11fd52657b76..c3ea627d2457 100644
> > --- a/fs/btrfs/block-group.c
> > +++ b/fs/btrfs/block-group.c
> > @@ -1608,6 +1608,25 @@ void btrfs_reclaim_bgs_work(struct work_struct *work)
> >                         up_write(&space_info->groups_sem);
> >                         goto next;
> >                 }
> > +               if (bg->used == 0) {
> > +                       /*
> > +                        * It is possible that we trigger relocation on a block
> > +                        * group as its extents are deleted and it first goes
> > +                        * below the threshold, then shortly goes empty. In that
> > +                        * case, we will do relocation, even though we could
> > +                        * more cheaply just delete the unused block group. Try
> > +                        * to catch that case here, though of course it is
> > +                        * possible there is a delete still coming the future,
> > +                        * so we can't avoid needless relocation of this sort
> > +                        * altogether. We can at least avoid relocating empty
> > +                        * block groups.
> > +                        */
> > +                       if (!btrfs_test_opt(fs_info, DISCARD_ASYNC))
> > +                               btrfs_mark_bg_unused(bg);
> > +                       spin_unlock(&bg->lock);
> > +                       up_write(&space_info->groups_sem);
> > +                       goto next;
> > +               }
> >                 spin_unlock(&bg->lock);
> >
> >                 /* Get out fast, in case we're unmounting the filesystem */
> > --
> > 2.37.2
> >

  reply	other threads:[~2022-10-11 18:05 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-10-10 18:49 [PATCH] btrfs: skip reclaim if block_group is empty Boris Burkov
2022-10-11  9:43 ` Filipe Manana
2022-10-11 18:05   ` Boris Burkov [this message]
2022-10-12  9:51     ` Filipe Manana

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=Y0WwW21CPYUeidwQ@zen \
    --to=boris@bur.io \
    --cc=fdmanana@kernel.org \
    --cc=kernel-team@fb.com \
    --cc=linux-btrfs@vger.kernel.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