From: Dave Chinner <david@fromorbit.com>
To: Brian Foster <bfoster@redhat.com>
Cc: xfs@oss.sgi.com
Subject: Re: [PATCH 1/3] xfs: remove bitfield based superblock updates
Date: Sat, 10 Jan 2015 10:36:51 +1100 [thread overview]
Message-ID: <20150109233651.GM31508@dastard> (raw)
In-Reply-To: <20150109203501.GA2233@laptop.bfoster>
On Fri, Jan 09, 2015 at 03:35:01PM -0500, Brian Foster wrote:
> On Thu, Jan 08, 2015 at 08:51:03AM +1100, Dave Chinner wrote:
> > From: Dave Chinner <dchinner@redhat.com>
> >
> > When we log changes to the superblock, we first have to write them
> > to the on-disk buffer, and then log that. Right now we have a
> > complex bitfield based arrangement to only write the modified field
> > to the buffer before we log it.
> >
> > This used to be necessary as a performance optimisation because we
> > logged the superblock buffer in every extent or inode allocation or
> > freeing, and so performance was extremely important. We haven't done
> > this for years, however, ever since the lazy superblock counters
> > pulled the superblock logging out of the transaction commit
> > fast path.
> >
> > Hence we have a bunch of complexity that is not necessary that makes
> > writing the in-core superblock to disk much more complex than it
> > needs to be. We only need to log the superblock now during
> > management operations (e.g. during mount, unmount or quota control
> > operations) so it is not a performance critical path anymore.
> >
> > As such, remove the complex field based logging mechanism and
> > replace it with a simple conversion function similar to what we use
> > for all other on-disk structures.
> >
> > This means we always log the entirity of the superblock, but again
> > because we rarely modify the superblock this is not an issue for log
> > bandwidth or CPU time. Indeed, if we do log the superblock
> > frequently, delayed logging will minimise the impact of this
> > overhead.
> >
> > Signed-off-by: Dave Chinner <dchinner@redhat.com>
> > Reviewed-by: Brian Foster <bfoster@redhat.com>
....
> > /*
> > - * GQUOTINO and PQUOTINO cannot be used together in versions of
> > - * superblock that do not have pquotino. from->sb_flags tells us which
> > - * quota is active and should be copied to disk. If neither are active,
> > - * make sure we write NULLFSINO to the sb_gquotino field as a quota
> > - * inode value of "0" is invalid when the XFS_SB_VERSION_QUOTA feature
> > - * bit is set.
> > + * GQUOTINO and PQUOTINO cannot be used together in versions
> > + * of superblock that do not have pquotino. from->sb_flags
> > + * tells us which quota is active and should be copied to
> > + * disk. If neither are active, we should NULL the inode.
> > *
> > - * Note that we don't need to handle the sb_uquotino or sb_pquotino here
> > - * as they do not require any translation. Hence the main sb field loop
> > - * will write them appropriately from the in-core superblock.
> > + * In all cases, the separate pquotino must remain 0 because it
> > + * it beyond the "end" of the valid non-pquotino superblock.
> > */
> > - if ((*fields & XFS_SB_GQUOTINO) &&
> > - (from->sb_qflags & XFS_GQUOTA_ACCT))
> > + if (from->sb_qflags & XFS_GQUOTA_ACCT)
> > to->sb_gquotino = cpu_to_be64(from->sb_gquotino);
> > - else if ((*fields & XFS_SB_PQUOTINO) &&
> > - (from->sb_qflags & XFS_PQUOTA_ACCT))
> > + else if (from->sb_qflags & XFS_PQUOTA_ACCT)
> > to->sb_gquotino = cpu_to_be64(from->sb_pquotino);
> > - else {
> > - /*
> > - * We can't rely on just the fields being logged to tell us
> > - * that it is safe to write NULLFSINO - we should only do that
> > - * if quotas are not actually enabled. Hence only write
> > - * NULLFSINO if both in-core quota inodes are NULL.
> > - */
> > - if (from->sb_gquotino == NULLFSINO &&
> > - from->sb_pquotino == NULLFSINO)
> > - to->sb_gquotino = cpu_to_be64(NULLFSINO);
> > - }
> > + else
> > + to->sb_gquotino = cpu_to_be64(NULLFSINO);
>
> FYI... it looks like the above hunk causes a regression due to resetting
> sb_gquotaino when one of the in-core inodes is set. I'm seeing
> disconnected quota inode messages on some xfstests (e.g., xfs/108) on v4
> filesystems. I'm about to put a patch on the list to go back to the
> original logic...
Interesting, I'm not seeing that in any of my v4 testing. hmmm - I
wonder if that's a result of using config sections and the test
device is not being remade with the changing format. I'll look into
it.
Cheers,
Dave.
--
Dave Chinner
david@fromorbit.com
_______________________________________________
xfs mailing list
xfs@oss.sgi.com
http://oss.sgi.com/mailman/listinfo/xfs
next prev parent reply other threads:[~2015-01-09 23:37 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-01-07 21:51 [PATCH 0/3 v3] xfs: simplify superblock logging Dave Chinner
2015-01-07 21:51 ` [PATCH 1/3] xfs: remove bitfield based superblock updates Dave Chinner
2015-01-09 20:35 ` Brian Foster
2015-01-09 23:36 ` Dave Chinner [this message]
2015-01-07 21:51 ` [PATCH 2/3] xfs: consolidate superblock logging functions Dave Chinner
2015-01-08 14:36 ` Brian Foster
2015-01-08 23:20 ` Dave Chinner
2015-01-07 21:51 ` [PATCH 3/3] xfs: sanitise sb_bad_features2 handling Dave Chinner
2015-01-08 14:36 ` Brian Foster
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=20150109233651.GM31508@dastard \
--to=david@fromorbit.com \
--cc=bfoster@redhat.com \
--cc=xfs@oss.sgi.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.